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_csvakan 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_tablesebagai 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.766667
Kenapa 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 3
Statistik yang ditampilkan pun adalah yang relevan dengan operasi operasi pada tipe data string seperti count, unique, top, dan frequencyMenampilkan 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_valuesjuga 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.Productataupundata['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