Pandas (python data analysis liblary)
Pandas adalah salah satu liblary paling populer untuk data science, pandas memudahkan kita untuk mengolah data data berbentuk tabular yang tersimpan dalam baris dan kolom.
Pandas bersifat open source, menyediakan kinerja tinggi, struktur data yang kuat digunakan sebagai alat analisis data untuk bahasa pemrograman Python.
Dengan panda kita dapat dengan mudah merubah data (CSV, excel, JSON atau SQL) menjadi sebuah object data yang terdiri dari baris dan kolom yang disebut dengan DataFrame.
Fitur :
- DataFrame Object untuk manipulasi data dengan pengindeksan terintegrasi.
- Alat untuk membaca dan menulis data antara struktur data dalam memori dan berbagai format file.
- Penyelarasan data dan penanganan terpadu pada kehilangan data.
- Membentuk kembali dan memutar set data.
- Seleksi berbasis label, pengindeksan fantastis, dan melakukan subset kumpulan data besar.
- Penyisipan dan penghapusan kolom struktur data.
- Memungkinkan operasi split-apply-combine pada Data set.
- Menghubugkan dan menggabungkan Data set.
- Pengindeksan hierarki untuk bekerja dengan data dimensi tinggi dalam struktur data dimensi rendah.
- Fungsionalitas seri waktu: Pembuatan rentang tanggal dan konversi frekuensi.
- Menyediakan penyaringan data (sorting dan filtering).
Nama pandas berasal dari istilah "panel data" yang merujuk pada istilah ekonometrik untuk set data multidimensi terstruktur. bukan diambil dari nama hewan asal negeri tirai bambu panda, apalagi dari merk minuman liang teh cap panda.
Requirement :
- Anaconda Python Distribution www.anaconda.com
Saya sarankan menggunakan Anaconda Navigator, paket all-in-one dengan sistem antarmuka grafis (GUI) desktop yang mencakup tautan ke semua aplikasi termasuk dalam distribusi ini adalah Python, RStudio, iPython, Jupyter Notebook, JupyterLab, Spyder, Lem, dan Orange. Didalamnya sudah terdapat lebih dari 1400 liblary, termasuk Pandas, Numpy dan Matplotlib.
- Python IDE Spyder : https://www.spyder-ide.org/
Python memiliki IDE bawaan pada paket installasinya yaitu IDLE, akan tetapi untuk lebih memudahkan kita dalam Manipulasi dan analisis data dengan Pandas, saya rekomendasikan anda menggunakan IDE Spyder. IDE yang dirancang khusus untuk seorang engineers dan scientist untuk keperluan analisis.
Spyder disertakan secara default termasuk dalam distribusi Anaconda Python, yang dilengkapi dengan semua yang kita butuhkan untuk memulai menuju Python Data Science.
Oke cukup.. Langsung saja, sebelum kita melakukan analis dan manipulasi data menggunakan pandas, pertama kita perlajari dasar dasar operasi dan fungsi pada pandas.
Enjoy!
Oke cukup.. Langsung saja, sebelum kita melakukan analis dan manipulasi data menggunakan pandas, pertama kita perlajari dasar dasar operasi dan fungsi pada pandas.
Enjoy!
1. Membuat Series
Series adalah array satu dimensi yang mampu menampung data jenis apa pun (integer, string, float, objek python, dll.). Label axis/label baris secara kolektif disebut indeks.
Membuat series dari sebuah Listimport pandas as pd import numpy as np nilai = pd.Series([10,20,30,40,np.nan,50]) print(nilai)Outputnya :
0 10.0 1 20.0 2 30.0 3 40.0 4 NaN 5 50.0 dtype: float64Secara default, pandas secara otomatis memberi index pada setiap baris dari series
2. Membuat DataFrame
Struktur data tabel dua dimensi (baris dan kolom) yang dapat dirubah dan bersifat heterogen dan memiliki label pada setiap kolom dan baris.
Disini saya contohkan pembuatan DataFrame sederhana :- Membuat DataFrame dari data Dictionary
import pandas as pd import numpy as np dict = {"Negara": ["Indonesia", "Jepang", "India", "China", "Amerika Serikat"], "Ibu Kota": ["Jakarta", "Tokyo", "New Dehli", "Beijing", "Washington, D.C."], "Luas": [1905, 377972, 3287, 9597, 9834], "Populasi": [264, 143, 1252, 1357, 5298] } brics = pd.DataFrame(dict) print(brics)Output :
Negara Ibu Kota Luas Populasi 0 Indonesia Jakarta 1905 264 1 Jepang Tokyo 377972 143 2 India New Dehli 3287 1252 3 China Beijing 9597 1357 4 Amerika Serikat Washington, D.C. 9834 5298
- Membuat DataFrame berukuran 5 x 4 (5 baris x 4 kolom) yang diisi oleh nilai random.
import pandas as pd dates = pd.date_range(start='2019-01-01', periods=5) df = pd.DataFrame(np.random.randn(5,4), index=dates, columns=list('ABCD')) print(df)
dates = pd.date_range(start='2019-01-01', periods=5)
, membuat list yang berisi range tanggal selama 5 periode.df = pd.DataFrame(np.random.randn(5,4), index=dates, columns=list('ABCD'))
, membuat dataframe isinya adalah array 5x4 yang diisi nilai random. index diambil dari listdates
, dan kolom header dari list'ABCD'
Outputnya :
A B C D 2019-01-01 0.138086 0.195403 -0.677908 -1.272343 2019-01-02 0.550584 0.165581 -0.112642 -1.107808 2019-01-03 0.218109 -0.743656 -1.370180 0.658061 2019-01-04 -0.816710 0.763614 -0.390805 -0.607026 2019-01-05 -2.406811 0.090444 -0.358237 1.216213
3. Membuat DataFrame dengan membaca CSV
Untuk membaca data set dari file CSV dan menjadikannya DataFrame kita menggunakan bantuan fungsi
read_csv
dari pandas.import pandas as pd
data = pd.read_csv('http://samplecsvs.s3.amazonaws.com/SalesJan2009.csv')
print(data)
pd.read_csv
akan membaca file dengan format CSV dan mengkonversi nya menjadi pandas DataFrame. secara default fungsi ini membaca file CSV comma delimited, jika CSV berformat selain comma delimited kita perlu menambahkan parametersep=';'
atausep='|'
, sesuai dengan separator pada file.- File CSV berasal dari file lokal ataupun file online melalui tautan.
- Selain menggunakan
read_csv
, bisa juga menggunakanread_table
sebagai alternatif.
Output :
Transaction_date Product ... Latitude Longitude 0 1/2/09 6:17 Product1 ... 51.500000 -1.116667 1 1/2/09 4:53 Product1 ... 39.195000 -94.681940 2 1/2/09 13:08 Product1 ... 46.188060 -123.830000 3 1/3/09 14:44 Product1 ... -36.133333 144.750000 4 1/4/09 12:56 Product2 ... 33.520560 -86.802500 5 1/4/09 13:19 Product1 ... 39.790000 -75.238060 6 1/4/09 20:11 Product1 ... 40.693610 -89.588890 7 1/2/09 20:09 Product1 ... 36.343330 -88.850280 8 1/4/09 13:17 Product1 ... 32.066667 34.766667 9 1/4/09 14:11 Product1 ... 48.883333 2.150000 10 1/5/09 2:42 Product1 ... 40.714170 -74.006390 11 1/5/09 5:39 Product1 ... 51.450000 5.466667 12 1/2/09 9:16 Product1 ... 29.423890 -98.493330 13 1/5/09 10:08 Product1 ... 43.695560 -116.353060 14 1/2/09 14:18 Product1 ... 40.032220 -74.957780 15 1/4/09 1:05 Product1 ... 53.677222 -6.319167 16 1/5/09 11:37 Product1 ... 45.416667 -75.700000 17 1/6/09 5:02 Product1 ... 17.383333 78.466667 18 1/6/09 7:45 Product2 ... 51.527210 0.145590 19 1/2/09 7:35 Product1 ... 40.760830 -111.890280 20 1/6/09 12:56 Product1 ... 53.500000 -2.216667 .. ... ... ... ... ... 980 1/19/09 4:55 Product1 ... 50.833333 -0.150000 981 1/28/09 22:02 Product1 ... -39.591667 174.283333 982 1/4/09 18:57 Product1 ... -28.050000 153.350000 983 1/12/09 20:31 Product1 ... 14.650000 -90.483333 984 1/24/09 12:00 Product1 ... 40.583333 -4.116667 985 1/28/09 11:19 Product1 ... 39.653610 -105.190560 986 1/7/09 17:48 Product1 ... 33.517220 -82.075830 987 1/23/09 12:42 Product2 ... -33.633333 151.333333 988 1/7/09 19:48 Product2 ... -33.883333 151.216667 989 1/26/09 11:19 Product1 ... 60.966667 25.666667 990 1/5/09 13:23 Product1 ... 48.216667 16.366667 991 1/26/09 13:41 Product1 ... 47.466667 8.300000 992 1/20/09 10:42 Product2 ... 53.650000 -1.783333 993 1/22/09 14:25 Product1 ... 54.583333 -5.933333 994 1/28/09 5:36 Product2 ... -20.360278 57.366111 995 1/1/09 4:24 Product3 ... 42.946940 -76.429440 996 1/8/09 11:55 Product1 ... 52.083333 0.433333 997 1/12/09 21:30 Product1 ... 43.073060 -89.401110 [998 rows x 12 columns]
Selain
read_csv
, pandas juga menyediakan tools IO (input output) lainnya yang digunakan untuk membaca data, diantaranya :# | Format | Deskripsi Data | Reader |
---|---|---|---|
1 | Text | CSV | read_csv, read_table |
2 | Text | JSON | read_json |
3 | Text | HTML | read_html |
4 | Text | Clipboard | read_clipboard |
5 | Binary | MS Excel | read_excel |
6 | Binary | HDF5 Format | read_hdf |
7 | Binary | Feather Format | read_feather |
8 | Binary | Parquet Format | read_parquet |
9 | Binary | Msgpack | read_msgpack |
10 | SQL | SQL | read_sql, read sql_query,read_sql_table |
4. Menampilkan DataFrame
Menampilkan tipe data dari setiap series pada DataFrame
In [64]: data.dtypes Out[64]: Transaction_date object Product object Price object Payment_Type object Name object City object State object Country object Account_Created object Last_Login object Latitude float64 Longitude float64 dtype: object
Menampilkan data paling atas dan paling bawah.
Untuk menampilkan data DataFrame paling atas berdasarkan index-nya menggunakan fungsi
head()
In [48]: data.head() Out[48]: Transaction_date Product ... Latitude Longitude 0 1/2/09 6:17 Product1 ... 51.500000 -1.116667 1 1/2/09 4:53 Product1 ... 39.195000 -94.681940 2 1/2/09 13:08 Product1 ... 46.188060 -123.830000 3 1/3/09 14:44 Product1 ... -36.133333 144.750000 4 1/4/09 12:56 Product2 ... 33.520560 -86.802500Sedangkan untuk data paling bawah menggunakan fungsi
tail()
In [49]: data.tail() Out[49]: Transaction_date Product ... Latitude Longitude 993 1/22/09 14:25 Product1 ... 54.583333 -5.933333 994 1/28/09 5:36 Product2 ... -20.360278 57.366111 995 1/1/09 4:24 Product3 ... 42.946940 -76.429440 996 1/8/09 11:55 Product1 ... 52.083333 0.433333 997 1/12/09 21:30 Product1 ... 43.073060 -89.401110 [5 rows x 12 columns]
Menampilkan index DataFrame
In [50]: data.index Out[50]: RangeIndex(start=0, stop=998, step=1)
Menampilkan Column names DataFrame
In [52]: data.columns Out[52]: Index(['Transaction_date', 'Product', 'Price', 'Payment_Type', 'Name', 'City', 'State', 'Country', 'Account_Created', 'Last_Login', 'Latitude', 'Longitude'], dtype='object')
Menampilkan nilai DataFrame
In [53]: data.values Out[53]: array([['1/2/09 6:17', 'Product1', '1200', ..., '1/2/09 6:08', 51.5, -1.1166667], ['1/2/09 4:53', 'Product1', '1200', ..., '1/2/09 7:49', 39.195, -94.68194], ['1/2/09 13:08', 'Product1', '1200', ..., '1/3/09 12:32', 46.18806, -123.83], ..., ['1/1/09 4:24', 'Product3', '7500', ..., '3/1/09 7:21', 42.946940000000005, -76.42944], ['1/8/09 11:55', 'Product1', '1200', ..., '3/1/09 7:28', 52.0833333, 0.4333333], ['1/12/09 21:30', 'Product1', '1200', ..., '3/1/09 10:14', 43.07306, -89.40111]], dtype=object)
Menampilkan statistik data
In [54]: data.describe() Out[54]: Latitude Longitude count 998.000000 998.000000 mean 39.015705 -41.337820 std 19.508572 67.389479 min -41.465000 -159.485280 25% 35.816944 -87.991670 50% 42.320695 -73.730695 75% 51.050000 4.916667 max 64.837780 174.766667Kenapa hanya statistik dari kolom latitude dan longitude saja yang ada statistik nya?! guess what?
Menampilkan statistik data termasuk object
Secara default fungsi
descibe()
hanya mengembalikan output data statistik hanya untuk series yang bertipe int dan float. untuk menampilkan series/data dengan tipe object digunakan parameter include['object']
In [55]: data.describe(include=['object']) Out[55]: Transaction_date Product ... Account_Created Last_Login count 998 998 ... 998 998 unique 987 4 ... 976 977 top 1/5/09 5:33 Product1 ... 1/18/09 0:00 2/26/09 7:32 freq 2 847 ... 3 3Statistik yang ditampilkan pun adalah yang relevan dengan operasi operasi pada tipe data string seperti count, unique, top, dan frequency
Menampilkan data secara transponse
In [57]: data.T Out[57]: 0 ... 997 Transaction_date 1/2/09 6:17 ... 1/12/09 21:30 Product Product1 ... Product1 Price 1200 ... 1200 Payment_Type Mastercard ... Visa Name carolina ... Julia City Basildon ... Madison State England ... WI Country United Kingdom ... United States Account_Created 1/2/09 6:00 ... 11/17/08 22:24 Last_Login 1/2/09 6:08 ... 3/1/09 10:14 Latitude 51.5 ... 43.0731 Longitude -1.11667 ... -89.4011 [12 rows x 998 columns]
Mengurutkan DataFrame (sorting data)
Mengurutkan DataFrame berdasarkan kolom Latitude
In [59]: data.sort_values(by='Latitude') Out[59]: Transaction_date Product ... Latitude Longitude 703 1/3/09 14:17 Product2 ... -41.465000 148.257222 981 1/28/09 22:02 Product1 ... -39.591667 174.283333 402 1/8/09 0:04 Product1 ... -39.066667 174.083333 662 1/1/09 21:40 Product1 ... -38.416667 144.166667 389 1/1/09 8:09 Product1 ... -37.833333 144.966667
- Fungsi
sort_values
juga dapat ditulis dengan atau tanpa keyword'by='
- Secara default dataframe diurutkan dalam posisi Ascending (besar ke kecil), jika ingin data diurutkan secara Descending kita perlu menambahkan parameter
ascending=False
, menjadidata.sort_values('Latitude', ascending=False)
. - Untuk melakukan sorting DataFrame beberapa kolom sekaligus kita dapat menempatkan python list sebagai parameter pada fungsi
sort_values,
contoh :data.sort_values(['Latitude','Longitude'])
.
5. Seleksi Data
Melakukan seleksi series/kolom dari sebuah DataFrame
Untuk melakukan seleksi sebuah kolom / series bisa mengguakanDataFrame
.
Series
ataupun DataFrame['Series']
.In [24]: data.Product Out[24]: 0 Product1 1 Product1 2 Product1 3 Product1 4 Product2 5 Product1 Name: Product, Length: 998, dtype: object
In [25]: data['Product'] Out[25]: 0 Product1 1 Product1 2 Product1 3 Product1 4 Product2 5 Product1 Name: Product, Length: 998, dtype: object
data.Product
ataupundata['Product']
akan menampilkan data yang sama.- Tapi untuk melakukan seleksi dua atau lebih Series / kolom dengan format sintaks
DataFrame['Series']
menjadi lebih mudah karena kita hanya perlu menempatkan list sebagai parameter pada fungsi ini.
Contoh seleksi dua series sekaligus
In [27]: data[['Product','Price']] Out[27]: Product Price 0 Product1 1200 1 Product1 1200 2 Product1 1200 3 Product1 1200 4 Product2 3600 5 Product1 1200 6 Product1 1200 7 Product1 1200 8 Product1 1200 9 Product1 1200 10 Product1 1200 11 Product1 1200 12 Product1 1200 13 Product1 1200 14 Product1 1200 15 Product1 1200 16 Product1 1200 17 Product1 1200 18 Product2 3600 19 Product1 1200 20 Product1 1200 .. ... ... 980 Product1 1200 981 Product1 1200 982 Product1 1200 983 Product1 1200 984 Product1 1200 985 Product1 1200 986 Product1 1200 987 Product2 3600 988 Product2 3600 989 Product1 1200 990 Product1 1200 991 Product1 1200 992 Product2 3600 993 Product1 1200 994 Product2 3600 995 Product3 7500 996 Product1 1200 997 Product1 1200 [998 rows x 2 columns]
Melakukan seleksi baris berdasarkan label baris
In [28]: data[0:10] Out[28]: Transaction_date Product ... Latitude Longitude 0 1/2/09 6:17 Product1 ... 51.500000 -1.116667 1 1/2/09 4:53 Product1 ... 39.195000 -94.681940 2 1/2/09 13:08 Product1 ... 46.188060 -123.830000 3 1/3/09 14:44 Product1 ... -36.133333 144.750000 4 1/4/09 12:56 Product2 ... 33.520560 -86.802500 5 1/4/09 13:19 Product1 ... 39.790000 -75.238060 6 1/4/09 20:11 Product1 ... 40.693610 -89.588890 7 1/2/09 20:09 Product1 ... 36.343330 -88.850280 8 1/4/09 13:17 Product1 ... 32.066667 34.766667 9 1/4/09 14:11 Product1 ... 48.883333 2.150000
Seleksi baris dan kolom tertentu
Contoh : Seleksi baris 0 sampai 10 dan kolom Transaction_date, Product, PriceIn [29]: data.loc[0:10,['Transaction_date','Product','Price']] Out[29]: Transaction_date Product Price 0 1/2/09 6:17 Product1 1200 1 1/2/09 4:53 Product1 1200 2 1/2/09 13:08 Product1 1200 3 1/3/09 14:44 Product1 1200 4 1/4/09 12:56 Product2 3600 5 1/4/09 13:19 Product1 1200 6 1/4/09 20:11 Product1 1200 7 1/2/09 20:09 Product1 1200 8 1/4/09 13:17 Product1 1200 9 1/4/09 14:11 Product1 1200 10 1/5/09 2:42 Product1 1200
In [30]: data.loc[0,['Transaction_date','Product','Price']] Out[30]: Transaction_date 1/2/09 6:17 Product Product1 Price 1200 Name: 0, dtype: object
Bersambung...
mas minta contoh data nya dong biar bisa dipelajari terima kasih :)
ReplyDeleteterima kasih kak, sangat membantu
ReplyDelete