Anda di halaman 1dari 12

Exploratory Data Analysis with Python for Beginner

April 1, 2023

Penulis : Riki Dian Pratama S.Si


Source : DQLab Academy
Modul : Exploratory Data Analysis with Python for Beginner

0.0.1 Exploratory Data Analysis with Python for Beginner


Apa sih itu Expploratory Data Analysis (EDA)? EDA adalah suatu proses kritis dalam melakukan
investigasi pada data. Tujuannya adalah untuk menemukan pola, anomali, menguji hipotesis dan
memeriksa asumsi dengan bantuan statistik. Jadi EDA merupakan suatu batu fondasi, sebuah
langkah yang sangat penting sebelum kita memulai melakuka analisis data.
Langkah-langkah dalam melakukan Exploratory Data Analysis (EDA) 1. Problem/Business Ques-
tions 2. Data Collection & storage 3. Data Preparation 4. Data processing 3. Data Analysis 4.
Data Visualization & Storytelling 5. Business Decision/ Decision Analysis

0.0.2 Library Numpy


Numpy berasal dari kata ‘Numerical Python’, sesuai namanya NumPy berfungsi sebagai library
untuk melakukan proses komputasi numerik terutama dalam bentuk array multidimensional (1-
Dimensi ataupun 2-Dimensi). Array merupakan kumpulan dari variabel yang memiliki tipe data
yang sama. NumPy menyimpan data dalam bentuk arrays.

0.0.3 Library Pandas


Pandas merupakan library yang memudahkan dalam melakukan manipulasi, cleansing maupun
analisis struktur data. Dengan menggunakan Pandas, dapat memanfaatkan lima fitur utama dalam
pemrosesan dan analisis data, yaitu load, prepare, manipulate, modelling, dan analysis data.
Pandas menggunakan konsep array dari NumPy namun memberikan index kepada array terse-
but, sehingga disebut series ataupun data frame. Sehingga bisa dikatakan Pandas menyimpan
data dalam dictionary-based NumPy arrays. 1-Dimensi labelled array dinamakan sebagai Series.
Sedangkan 2-Dimensi dinamakan sebagai Data Frame.

0.0.4 Library Scipy


Scipy dibangun untuk bekerja dengan array NumPy dan menyediakan banyak komputasi numerik
yang ramah pengguna dan efisien seperti rutinitas untuk integrasi, diferensiasi dan optimasi nu-
merik.

1
Baik NumPy maupun SciPy berjalan pada semua operating system, cepat untuk diinstall dan
gratis. NumPy dan SciPy mudah digunakan, tetapi cukup kuat untuk diandalkan oleh beberapa
data scientist dan researcher terkemuka dunia.

0.0.5 Library Matplotlib


Matplotlib merupakan library dari Python yang umum digunakan untuk visualisasi data. Mat-
plotlib memiliki kapabilitas untuk membuat visualisasi data 2-dimensional. Contoh visualisasi
yang dapat dibuat dengan menggunakan matplotlib diantaranya adalah 1. Line chart 2. Bar chart
3. Pie chart 4. Box plot chart 5. Violin Chart 6. Errorbar chart 7. Scatter plot chart

[ ]: # Import Library yang akan digunakan


import pandas as pd
# Membaca file csv sebagai Data Frame (df)
order_df = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/order.csv')
# Menampilkan Struktur kolom dan baris dari df
print(order_df.shape)
# Menampilkan 10 data teratas df
print(order_df.head(10))

(49999, 12)
order_id quantity \
0 2e7a8482f6fb09756ca50c10d7bfc047 2
1 2e7a8482f6fb09756ca50c10d7bfc047 1
2 e5fa5a7210941f7d56d0208e4e071d35 1
3 3b697a20d9e427646d92567910af6d57 1
4 71303d7e93b399f5bcd537d124c0bcfa 1
5 be5bc2f0da14d8071e2d45451ad119d9 1
6 0a0837a5eee9e7a9ce2b1fa831944d27 1
7 1ff217aa612f6cd7c4255c9bfe931c8b 1
8 22613579f7d11cc59c4347526fc3c79e 1
9 356b492aba2d1a7da886e54e0b6212b7 1

product_id price \
0 f293394c72c9b5fafd7023301fc21fc2 1489000
1 c1488892604e4ba5cff5b4eb4d595400 1756000
2 f3c2d01a84c947b078e32bbef0718962 1707000
3 3ae08df6bcbfe23586dd431c40bddbb7 3071000
4 d2998d7ced12f83f9b832f33cf6507b6 3833000
5 fd7fd78fd3cbc1b0a6370a7909c0a629 1480000
6 583916a5dae918f5e89baec139141c54 4489000
7 33430c5c1027d812b5c62f778e5ee7f7 822000
8 3ff81cd0e0861e991bb0106c03c113ca 3967000
9 eba7488e1c67729f045ab43fac426f2e 4165000

seller_id freight_value \
0 1554a68530182680ad5c8b042c3ab563 28000
1 1554a68530182680ad5c8b042c3ab563 45000

2
2 a425f92c199eb576938df686728acd20 174000
3 522620dcb18a6b31cd7bdf73665113a9 154000
4 25e6ffe976bd75618accfe16cefcbd0d 147000
5 f09b760d23495ac9a7e00d29b769007c 152000
6 3481aa57cd91f9f9d3fa1fa12d9a3bf7 16000
7 4b1eaadf791bdbbad8c4a35b65236d52 58000
8 86bb7c4b535e49a541baf3266b1c95b1 95000
9 620c87c171fb2a6dd6e8bb4dec959fc6 98000

customer_id order_status purchase_date \


0 08c5351a6aca1c1589a38f244edeee9d shipped 2016-09-05
1 08c5351a6aca1c1589a38f244edeee9d shipped 2016-09-05
2 683c54fc24d40ee9f8a6fc179fd9856c canceled 2016-09-05
3 355077684019f7f60a031656bd7262b8 delivered 2016-10-03
4 b106b360fe2ef8849fbbd056f777b4d5 canceled 2016-10-03
5 7ec40b22510fdbea1b08921dd39e63d8 delivered 2016-10-03
6 4f3f778022aefa22b9f9e52d2c47edf3 delivered 2016-10-04
7 b3a9bf200375f53cc5c6991919c356fd delivered 2016-10-04
8 53cc5d344077104b59d4f6836a90eb0b delivered 2016-10-04
9 68c74d748a55f9d29e6698f4b01a0df7 delivered 2016-10-04

payment_type product_category_name product_weight_gram


0 virtual account fashion 1800.0
1 virtual account automotive 1400.0
2 e-wallet toys 700.0
3 e-wallet utilities 300.0
4 e-wallet fashion 500.0
5 e-wallet electronics 400.0
6 debit card toys 3100.0
7 credit card automotive 200.0
8 debit card beauty 600.0
9 credit card automotive 610.0

0.0.6 Statistics Deskriptif dari Data Frame


Statistik deskriptif atau summary dalam Python - Pandas, dapat diperoleh dengan menggunakan
fungsi describe()

[ ]: #print([nama_dataframe].describe())

Function describe dapat memberikan informasi mengenai nilai rataan, standar deviasi dan IQR
(interquartile range).
Ketentuan umum:
1. Secara umum function describe() akan secara otomatis mengabaikan kolom category dan
hanya memberikan summary statistik untuk kolom berjenis numerik.
2. Kita perlu menambahkan argument bernama include = “all” untuk mendapatkan summary
statistik atau statistik deskriptif dari kolom numerik dan karakter.

3
[ ]: print(order_df.describe(include='all'))

order_id quantity \
count 49999 49999.000000
unique 42694 NaN
top 8272b63d03f5f79c56e9e4120aec44ef NaN
freq 21 NaN
mean NaN 1.197484
std NaN 0.722262
min NaN 1.000000
25% NaN 1.000000
50% NaN 1.000000
75% NaN 1.000000
max NaN 21.000000

product_id price \
count 49999 4.999900e+04
unique 16866 NaN
top 99a4788cb24856965c36a24e339b6058 NaN
freq 366 NaN
mean NaN 2.607784e+06
std NaN 1.388312e+06
min NaN 2.000000e+05
25% NaN 1.410500e+06
50% NaN 2.610000e+06
75% NaN 3.810000e+06
max NaN 5.000000e+06

seller_id freight_value \
count 49999 49999.000000
unique 1777 NaN
top 4a3ca9315b744ce9f8e9374361493884 NaN
freq 1236 NaN
mean NaN 104521.390428
std NaN 55179.844962
min NaN 9000.000000
25% NaN 57000.000000
50% NaN 104000.000000
75% NaN 152000.000000
max NaN 200000.000000

customer_id order_status purchase_date \


count 49999 49999 49999
unique 42694 7 356
top fc3d1daec319d62d49bfb5e1f83123e9 delivered 2017-11-24
freq 21 48664 1015
mean NaN NaN NaN
std NaN NaN NaN

4
min NaN NaN NaN
25% NaN NaN NaN
50% NaN NaN NaN
75% NaN NaN NaN
max NaN NaN NaN

payment_type product_category_name product_weight_gram


count 49999 49999 49980.000000
unique 4 8 NaN
top virtual account toys NaN
freq 12581 6375 NaN
mean NaN NaN 2201.830892
std NaN NaN 3929.896875
min NaN NaN 50.000000
25% NaN NaN 300.000000
50% NaN NaN 800.000000
75% NaN NaN 1850.000000
max NaN NaN 40425.000000
Jika ingin mendapatkan summary statistik dari kolom yang tidak bernilai angka, maka kita dapat
menambahkan command include=[“object”] pada syntax describe().

[ ]: print(order_df.describe(include='object'))

order_id product_id \
count 49999 49999
unique 42694 16866
top 8272b63d03f5f79c56e9e4120aec44ef 99a4788cb24856965c36a24e339b6058
freq 21 366

seller_id customer_id \
count 49999 49999
unique 1777 42694
top 4a3ca9315b744ce9f8e9374361493884 fc3d1daec319d62d49bfb5e1f83123e9
freq 1236 21

order_status purchase_date payment_type product_category_name


count 49999 49999 49999 49999
unique 7 356 4 8
top delivered 2017-11-24 virtual account toys
freq 48664 1015 12581 6375
untuk mencari rataan dari suatu data dari dataframe. Aku dapat menggunakan syntax mean,
median, dan mode dari Pandas.
contoh:

[ ]: #print([nama_dataframe].loc[:, 'nama_kolom'].mean())
#print([nama_dataframe].loc[:, 'nama_kolom'].median())

5
#print([nama_dataframe].loc[:, 'nama_kolom'].mode())

0.0.7 Tugas Praktek


Menggali informasi terkait quick summary dari data yang ada dan juga mencari nilai mediannya

[ ]: import pandas as pd
order_df = pd.read_csv("https://storage.googleapis.com/dqlab-dataset/order.csv")
# Quick summary dari segi kuantitas, harga, freight value, dan weight
print(order_df.describe())
# Median dari total pembelian konsumen per transaksi kolom price
print(order_df.loc[:, 'price'].median())

quantity price freight_value product_weight_gram


count 49999.000000 4.999900e+04 49999.000000 49980.000000
mean 1.197484 2.607784e+06 104521.390428 2201.830892
std 0.722262 1.388312e+06 55179.844962 3929.896875
min 1.000000 2.000000e+05 9000.000000 50.000000
25% 1.000000 1.410500e+06 57000.000000 300.000000
50% 1.000000 2.610000e+06 104000.000000 800.000000
75% 1.000000 3.810000e+06 152000.000000 1850.000000
max 21.000000 5.000000e+06 200000.000000 40425.000000
2610000.0

0.0.8 Mengenal dan Membuat Distribusi Data dengan Histogram


Histogram merupakan salah satu cara untuk mengidentifikasi sebaran distribusi dari data. His-
togram adalah grafik yang berisi ringkasan dari sebaran (dispersi atau variasi) suatu data. Pada
histogram, tidak ada jarak antar batang/bar dari grafik. Hal ini dikarenakan bahwa titik data
kelas bisa muncul dimana saja di daerah cakupan grafik. Sedangkan ketinggian bar sesuai dengan
frekuensi atau frekuensi relatif jumlah data di kelas. Semakin tinggi bar, semakin tinggi frekuensi
data. Semakin rendah bar, semakin rendah frekuensi data.
Beberapa atribut penting dalam histogram pandas:
1. bins = jumlah_bins dalam histogram yang akan digunakan. Jika tidak didefinisikan jum-
lah_bins, maka function akan secara default menentukan jumlah_bins sebanyak 10.
2. by = nama kolom di DataFrame untuk di group by. (valuenya berupa nama column di
dataframe tersebut).
3. alpha = nilai_alpha untuk menentukan opacity dari plot di histogram. (value berupa range
0.0 - 1.0, dimana semakin kecil akan semakin kecil opacity nya)
4. figsize = tuple_ukuran_gambar yang digunakan untuk menentukan ukuran dari plot his-
togram. Contoh: figsize=(10,12)

[ ]: # Contoh Syntax membuat histogram


# nama_dataframe[['nama kolom']].hist(figsize= , ), bins=jml_bins, xlabelsize=␣
↪, ylabelsize= )

6
[ ]: import matplotlib.pyplot as plt
order_df[['price']].hist(figsize=(4, 5), bins=10, xlabelsize=8, ylabelsize=8)
plt.show() # Untuk menampilkan histogram plot

0.0.9 Standar Deviasi dan Varians pada Pandas


Varians dan standar deviasi juga merupakan suatu ukuran dispersi atau variasi. Standar deviasi
merupakan ukuran dispersi yang paling banyak dipakai. Hal ini mungkin karena standar deviasi
mempunyai satuan ukuran yang sama dengan satuan ukuran data asalnya. Sedangkan varians
memiliki satuan kuadrat dari data asalnya (misalnya cm^2).

[ ]: # Standar variasi kolom product_weight_gram


print(order_df.loc[:, 'product_weight_gram'].std())
# Varians kolom product_weight_gram
print(order_df.loc[:, 'product_weight_gram'].var())

3929.8968753726213
15444089.451063491

7
0.0.10 Menemukan Outliers Menggunakan Pandas
Outliers merupakan data observasi yang muncul dengan nilai-nilai ekstrim. Yang dimaksud dengan
nilai-nilai ekstrim dalam observasi adalah nilai yang jauh atau beda sama sekali dengan sebagian
besar nilai lain dalam kelompoknya.
Pada umumnya, outliers dapat ditentukan dengan metric IQR (interquartile range).
Rumus dasar dari IQR: Q3 - Q1. Dan data suatu observasi dapat dikatakan outliers jika memenuhi
kedua syarat dibawah ini:
1. data < Q1 - 1.5 * IQR
2. data > Q3 + 1.5 * IQR

[ ]: Q1 = order_df[['product_weight_gram']].quantile(0.25)
# Hitung quartile 3
Q3 = order_df[['product_weight_gram']].quantile(0.75)
# Hitung inter quartile range dan cetak ke console
IQR = Q3-Q1
print(IQR)

product_weight_gram 1550.0
dtype: float64

0.0.11 Rename Kolom Data Frame


Pada bagian ini, aku belajar cara mengganti nama kolom dataframe menggunakan Pandas. Meng-
ganti nama kolom pada Pandas dapat dilakukan dengan 2 cara:
1. Menggunakan nama kolom.
2. Menggunakan indeks kolom.

[ ]: # Rename menggunakan nama kolom


# nama_df.rename(columns = {'colname before':'colname after'}, inplace = True)
# Rename menggunakan indeks kolom
# nama_df.columns.values[0] = 'umur'

# Merubah nama kolom freight_value menjadi shipping-cost


order_df.rename(columns={'freight_value': 'shipping_cost'}, inplace=True)
print(order_df)

order_id quantity \
0 2e7a8482f6fb09756ca50c10d7bfc047 2
1 2e7a8482f6fb09756ca50c10d7bfc047 1
2 e5fa5a7210941f7d56d0208e4e071d35 1
3 3b697a20d9e427646d92567910af6d57 1
4 71303d7e93b399f5bcd537d124c0bcfa 1
… … …
49994 ec88157ad03aa203c3fdfe7bace5ab6b 1
49995 ed60085e92e2aa3debf49159deb34da7 1
49996 ed98c37d860890f940e2acd83629fdd1 2

8
49997 ed98c37d860890f940e2acd83629fdd1 1
49998 ede4ebbb6e36cbd377eabcc7f5229575 1

product_id price \
0 f293394c72c9b5fafd7023301fc21fc2 1489000
1 c1488892604e4ba5cff5b4eb4d595400 1756000
2 f3c2d01a84c947b078e32bbef0718962 1707000
3 3ae08df6bcbfe23586dd431c40bddbb7 3071000
4 d2998d7ced12f83f9b832f33cf6507b6 3833000
… … …
49994 165f86fe8b799a708a20ee4ba125c289 3077000
49995 6e835aea84ae8eb68b8c14878dd43b30 1277000
49996 aca2eb7d00ea1a7b8ebd4e68314663af 486000
49997 aca2eb7d00ea1a7b8ebd4e68314663af 830000
49998 2b0ee2d07306f7c9ac55a43166e9bb4b 215000

seller_id shipping_cost \
0 1554a68530182680ad5c8b042c3ab563 28000
1 1554a68530182680ad5c8b042c3ab563 45000
2 a425f92c199eb576938df686728acd20 174000
3 522620dcb18a6b31cd7bdf73665113a9 154000
4 25e6ffe976bd75618accfe16cefcbd0d 147000
… … …
49994 7ddcbb64b5bc1ef36ca8c151f6ec77df 172000
49995 4d6d651bd7684af3fffabd5f08d12e5a 130000
49996 955fee9216a65b617aa5c0531780ce60 14000
49997 955fee9216a65b617aa5c0531780ce60 108000
49998 1900267e848ceeba8fa32d80c1a5f5a8 189000

customer_id order_status purchase_date \


0 08c5351a6aca1c1589a38f244edeee9d shipped 2016-09-05
1 08c5351a6aca1c1589a38f244edeee9d shipped 2016-09-05
2 683c54fc24d40ee9f8a6fc179fd9856c canceled 2016-09-05
3 355077684019f7f60a031656bd7262b8 delivered 2016-10-03
4 b106b360fe2ef8849fbbd056f777b4d5 canceled 2016-10-03
… … … …
49994 1642b8087a8ca0c8592becff7e183c98 delivered 2017-12-15
49995 431bbb57d52f3141ab2f33a6a4cf00a6 delivered 2017-12-15
49996 71f8cd490677ee95362201588c0eaff4 delivered 2017-12-15
49997 71f8cd490677ee95362201588c0eaff4 delivered 2017-12-15
49998 60d2d93a97ec1ad751f2ddce9249ba2a delivered 2017-12-15

payment_type product_category_name product_weight_gram


0 virtual account fashion 1800.0
1 virtual account automotive 1400.0
2 e-wallet toys 700.0
3 e-wallet utilities 300.0
4 e-wallet fashion 500.0

9
… … … …
49994 e-wallet automotive 2425.0
49995 debit card beauty 2350.0
49996 debit card gadget 2600.0
49997 e-wallet gadget 2600.0
49998 credit card beauty 1450.0

[49999 rows x 12 columns]

0.0.12 .groupby menggunakan Pandas


Kegunaan .groupby adalah mencari summary dari data frame dengan menggunakan aggregate dari
kolom tertentu.

[ ]: # mencari rata rata dari price per payment_type


rata_rata = order_df["price"].groupby(order_df["payment_type"]).mean()
print(rata_rata)

payment_type
credit card 2.600706e+06
debit card 2.611974e+06
e-wallet 2.598562e+06
virtual account 2.619786e+06
Name: price, dtype: float64

0.0.13 Sorting Menggunakan Pandas


Sorting adalah sebuah metode mengurutkan data berdasarkan syarat kolom tertentu dan biasanya
digunakan untuk melihat nilai maksimum dan minimum dari dataset. Library Pandas sendiri
menyediakan fungsi sorting sebagai fundamental dari exploratory data analysis.
1. ASCENDING = Mengurutkan data dari yang terkecil ke terbesar
2. DESCENDING = Mengurutkan data dari yang terbesar ke yang terkecil

[ ]: # berapa harga maksimum pembelian customer


sort_harga = order_df.sort_values(by="price", ascending=False)
print(sort_harga)

order_id quantity \
37085 d7b2d3b902441cf3dd12cd125533217d 1
41958 2711089c7fec59d4dc8483e3c6a12fa3 1
3976 f343624eab419250ad81f1ce6be22c93 1
21072 c8947a583ab9791a5a9d02384cb84302 1
47074 f6134169ca6f0cdfbe6458ebb5731613 1
… … …
33786 0d9e86e02c1a823b20c03ea29d616607 1
42166 54220fcc516cabe9ec84b210c0765ef2 1
31745 59a19c83ff825948739dd1601cc107b6 1
42452 9960ee97c2f8d801a200a01893b3942f 1

10
11939 64619901c45fba79638d666058bf6be6 1

product_id price \
37085 35afc973633aaeb6b877ff57b2793310 5000000
41958 7c1bd920dbdf22470b68bde975dd3ccf 5000000
3976 777d2e438a1b645f3aec9bd57e92672c 5000000
21072 f8cfb63e323be2e1c4172f255d61843d 5000000
47074 2ea92fab7565c4fe9f91a5e4e1756258 5000000
… … …
33786 f93213a23c50edc16c27b96333f734dc 200000
42166 1166bc797ddf5fb009c376d133f61204 200000
31745 eb38a7604070a2b8465101ed53cba72b 200000
42452 db5efde3ad0cc579b130d71c4b2db522 200000
11939 06c6e01186af8b98ee1fc9e01f9471e9 200000

seller_id shipping_cost \
37085 4a3ca9315b744ce9f8e9374361493884 118000
41958 cc419e0650a3c5ba77189a1882b7556a 31000
3976 4a3ca9315b744ce9f8e9374361493884 101000
21072 4a3ca9315b744ce9f8e9374361493884 184000
47074 3d871de0142ce09b7081e2b9d1733cb1 196000
… … …
33786 46dc3b2cc0980fb8ec44634e21d2718e 141000
42166 5cbbd5a299cab112b7bf23862255e43e 175000
31745 e6a69c4a27dfdd98ffe5aa757ad744bc 112000
42452 4869f7a5dfa277a7dca6462dcf3b52b2 26000
11939 fc906263ca5083d09dce42fe02247800 98000

customer_id order_status purchase_date \


37085 217344c7c334e16c8e76551b4b240c1d delivered 2017-10-31
41958 0ef59d9bb071def3dbf7e7b055965e95 delivered 2017-11-24
3976 3fc0d940852ab274e532e80b1c1d5c2f delivered 2017-03-07
21072 57c047e791e69bef0af220b0a165a22d delivered 2017-07-27
47074 cbfdcc896d6ebc83c21fdcf4f4762efc delivered 2017-12-04
… … … …
33786 edaad9e07395713e9f5a2124f6c846a1 delivered 2017-10-13
42166 24e7dc2ff8c07126358af519732b8558 delivered 2017-11-24
31745 2bf857ee40b763708fe19cf877cac511 delivered 2017-10-01
42452 54af40597a8931fea3fbb2b37656fc8d delivered 2017-11-24
11939 3a1dda1ede23d7e71753e80d7f22c2c4 delivered 2017-05-21

payment_type product_category_name product_weight_gram


37085 debit card beauty 1825.0
41958 e-wallet fashion 200.0
3976 debit card gadget 950.0
21072 credit card beauty 550.0
47074 virtual account gadget 10600.0
… … … …

11
33786 debit card automotive 7550.0
42166 e-wallet gadget 1100.0
31745 e-wallet beauty 550.0
42452 credit card automotive 6663.0
11939 virtual account automotive 200.0

[49999 rows x 12 columns]

12

Anda mungkin juga menyukai