Pandas merupakan salah satu library yang disediakan oleh Python. Dimana, andas berguna untuk melakukan analisis dan pengolahan data dari menengah sampai besar.
Pada pembahasan kali ini, kita akan lebih banyak menggunakan Pandas khususnya untuk data manipulation! Yuk kita simak lebih dalam!
Memanggil Library PandasPandas adalah library python open source yang biasanya digunakan untuk kebutuhan data analisis. Pandas membuat Python supaya dapat bekerja dengan data yang berbentuk tabular seperti spreadsheet dengan cara pemuatan data yang cepat, manipulasi data, menggabungkan data, serta ada berbagai fungsi yang lain.
Pertama-tama, kita harus import dulu Pandas library di Python script yang telah tersedia.
biasanya ketika menggunakan library Pandas, library Numpy juga diimport, sehingga menjadi
DataFrame & Series
Di Pandas terdapat 2 kelas data baru yang digunakan sebagai struktur dari spreadsheet:
- Series: satu kolom bagian dari tabel dataframe yang merupakan 1 dimensional numpy array sebagai basis data nya, terdiri dari 1 tipe data [integer, string, float, dll].
Contoh Series:
2. DataFrame: gabungan dari Series, berbentuk rectangular data yang merupakan tabel spreadsheet itu sendiri [karena dibentuk dari banyak Series, tiap Series biasanya punya 1 tipe data, yang artinya 1 dataframe bisa memiliki banyak tipe data].
Atribut DataFrame & Series
Dataframe dan Series memiliki sangat banyak atribut yang digunakan untuk transformasi data, tetapi ada beberapa attribute yang sering dipakai. Di sini series number_list dan data frame matrix_list pada subbab sebelumnya digunakan kembali.
1. Attribute .info[]
Attribute .info[] digunakan untuk mengecek kolom apa yang membentuk dataframe itu, data types, berapa yang non null, dll. Attribute ini tidak dapat digunakan pada series, hanya pada data frame saja.
2. Attribute .shape[]
Attribute .shape digunakan untuk mengetahui berapa baris dan kolom, hasilnya dalam format tuple [baris, kolom].
3. Attribute .dtypes
Attribute .dtypes digunakan untuk mengetahui tipe data di tiap kolom. Tipe data object: kombinasi untuk berbagai tipe data [number & text, etc].
4. Attribute .astype[nama_tipe_data]
Attribute .astype[nama_tipe_data] untuk convert tipe data berdasarkan tipe data seperti: float, int, str, numpy.float, numpy.int ataupun numpy.datetime.
5. Attribute .copy[]
Attribute .copy[] digunakan melakukan duplikat, untuk disimpan di variable yang berbeda mungkin supaya tidak loading data lagi.
6. Attribute .to_list[]
Attribute .to_list[] digunakan untuk mengubah series menjadi list dan tidak dapat digunakan untuk dataframe.
7. Attribute .unique[]
Attribute .unique[] digunakan menghasilkan nilai unik dari suatu kolom, hasilnya dalam bentuk numpy array. Attribute ini hanya digunakan pada series saja.
8. Attribute .index
Attribute .index digunakan untuk mencari index/key dari Series atau Dataframe.
9. Attribute .columns
Attribute .columns digunakan untuk mengetahui apa saja kolom yang tersedia di dataframe tersebut [hanya digunakan untuk dataframe saja].
10. Attribute .loc
Attribute .loc digunakan slice dataframe atau series berdasarkan nama kolom dan/atau nama index.
11. Attribute .iloc
Attribute .iloc digunakan untuk slice dataframe atau series berdasarkan index kolom dan/atau index.
Creating Series & Dataframe from List
Untuk membuat Series atau Dataframe bisa dari berbagai macam tipe data container/mapping di python, seperti list dan dictionary, maupun dari numpy array.
Pada sub bagian ini, kamu akan membuat Series dan Dataframe yang bersumber dari list. Sekedar meninjau bahwa, list merupakan sebuah kumpulan data berbagai macam tipe data, yang mutable [dapat diganti].
SeriesContoh membuat series dari list:
DataFrame
Contoh membuat dataframe dari list of list:
Creating Series & Dataframe from Dictionary
Untuk membuat Series atau Dataframe bisa dari berbagai macam tipe data container/mapping di python, seperti list dan dictionary, maupun dari numpy array.
Pada sub bagian ini, akan membuat Series dan Dataframe yang bersumber dari dictionary. Sekedar meninjau bahwa, dictionary merupakan kumpulan data yang strukturnya terdiri dari key dan value.
SeriesContoh membuat series dari dictionary:
DataFrame
Contoh membuat dataframe dari dict dengan setiap pasangan key dan value-nya berisi list yang sama panjangnya:
Creating Series & Dataframe from Numpy Array
Untuk membuat Series atau Dataframe bisa dari berbagai macam tipe data container/mapping di python, seperti list dan dictionary, maupun dari numpy array.
Pada sub bagian ini, akan membuat Series dan Dataframe yang bersumber dari numpy array. Sekedar meninjau bahwa, numpy array kumpulan data yang terdiri atas berbagai macam tipe data, mutable, tapi dibungkus dalam array oleh library Numpy.
SeriesContoh membuat series dari numpy array 1D:
DataFrame
Contoh membuat dataframe dari numpy array 2D:
Dataset I/O
Pandas menyediakan berbagai method untuk membaca file tersebut hanya dengan dipanggil method itu, code yang lebih simple dan loading yang lebih, tentu saja output nya dapat berupa Series atau Dataframe.
Terdapat sangat banyak file yang dapat dibaca/dapat disimpan oleh Pandas, tapi ada beberapa file yang paling umum dan sering digunakan oleh praktisi data seperti berikut ini:
- CSV [Comma Separated Values], antar data dalam satu baris dipisahkan oleh comma, “,”.
- TSV [Tab Separated Values], antar data dalam satu baris dipisahkan oleh “Tab”.
- Excel
- Google BigQuery
- SQL Query
- JSON [Java Script Object Notation]
CSV dan TSV pada hakikatnya adalah tipe data text dengan perbedaan terletak pada pemisah antar data dalam satu baris. Pada file CSV, antar data dalam satu baris dipisahkan oleh comma, “,”. Namun, pada file TSV antar data dalam satu baris dipisahkan oleh “Tab”.
Fungsi .read_csv[] digunakan untuk membaca file yang value nya dipisahkan oleh comma [default], terkadang pemisah value nya bisa di set ‘\t’ untuk file tsv [tab separated values].
Notes :
Dataset csv : //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/sample_csv.csv
Dataset tsv : //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/sample_tsv.tsv
Membaca file CSVJika dijalankan akan menghasilkan output di console:
Membaca file TSV
Jika dijalankan akan menghasilkan output di console:
Read Dataset — Excel
File Excel dengan ekstensi *.xls atau *.xlsx cukup banyak digunakan dalam menyimpan data. Pandas juga memiliki fitur untuk membaca file excel.
Notes :
Dataset : //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/sample_excel.xlsx
Fungsi .read_excel[] digunakan untuk membaca file excel menjadi dataframe pandas.
Jika dijalankan code di atas akan menghasilkan output di console seperti berikut
Read Dataset — JSON
Method .read_json[] digunakan untuk membaca URL API yang formatnya JSON dan merubahnya menjadi dataframe pandas. Method ini dapat digunakan seperti yang dicontohkan berikut ini:
Dataset JSON: //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/covid2019-api-herokuapp-v2.json
Setelah di-run, barulah akan menampilkan 10 data teratas dari dataset yang telah disediakan
Read Dataset — SQL
Fungsi .read_sql[] atau .read_sql_query[] digunakan untuk membaca query dari database dan translate menjadi pandas dataframe, contoh case ini database sqlite.
Jika menggunakan .read_sql_query
Output:
Jika menggunakan .read_sql
Output:
Jika dilihat dari kedua hasil output, maka terlihat keduanya menghasilkan output yang sama
Read Dataset — Google BigQueryUntuk data yang besar [big data], umumnya digunakan Google BigQuery. Layanan ini dapat digunakan jika telah memiliki Google BigQuery account.
Fungsi .read_gbq[] digunakan untuk membaca Google BigQuery table menjadi dataframe pandas.
project_id=”XXXXXXXX” adalah ID dari Google BigQuery account.
Outputnya:
Write Dataset
Dalam bekerja sebagai data scientist/analis setelah dilakukan data cleaning dataset yang sudah rapi tentunya disimpan terlebih dahulu ke dalam media penyimpanan.
Pandas menyediakan fitur demikian secara ringkas melalui penerapan method pada dataframe/series yang ditabelkan berikut ini.
Method .to_csv[]Method .to_csv ini digunakan untuk export dataframe kembali ke csv atau tsv
CSV
df.to_csv["csv1.csv", index=False]
TSV
df.to_csv["tsv1.tsv", index=False, sep='\t']
Method to_clipboard[]Method to_clipboard[] digunakan untuk export dataframe menjadi bahan copy jadi nanti bisa tinggal klik paste di excel atau google sheets
df.to_clipboard[]
Method .to_excel[]Method .to_excel[] digunakan untuk export dataframe menjadi file excel
df_excel.to_excel["xlsx1.xlsx", index=False]
Method .to_gbq[]Method .to_gbq digunakan untuk export dataframe menjadi table di Google BigQuery
df.to_gbq["temp.test", project_id="XXXXXX", if_exists="fail"]
temp: nama dataset,
test: nama table
if_exists: ketika tabel dengan dataset.table_name yang sama sudah ada, apa action yang ingin dilakukan
["fail": tidak melakukan apa-apa,
"replace': membuang tabel yang sudah ada dan mengganti yang baru,
"append": menambah baris di tabel tersebut dengan data yang baru
Head & TailSeperti yang telah dipelajari sebelumnya bahwa ada method .head yang diterapkan pada suatu variabel bertipe pandas dataframe/series.
Method .head ditujukan untuk membatasi tampilan jumlah baris teratas dari dataset. Sementara itu, method .tail ditujukan untuk membatasi jumlah baris terbawah dari dataset.
Secara umum kedua method ini memiliki bentuk
[nama_dataframe].head[n]
dan
[nama_dataframe].tail[n]
dengan n merupakan jumlah baris yang akan ditampilkan, jika tidak disebutkan n = 5 [sebagai nilai default dari n].
Notes :
Dataset : //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/sample_csv.csv
Berdasarkan file sample_csv.csv cetaklah 3 data teratas dan 3 data terbawah.
Dari syntax berikut menghasilkan output sebagai berikut:
3 data teratas:
3 data terbawah:
Indexing, Slicing dan Transforming
Sekarang kita masuk ke bagian indexing, slicing dan transforming. Apa itu? Mari kita pelajari bersama! Kita mulai dari Indexing
Indexing — Part 1Index merupakan key identifier dari tiap row/column untuk Series atau Dataframe [sifatnya tidak mutable untuk masing-masing value tapi bisa diganti untuk semua value sekaligus].
Jika tidak disediakan, pandas akan membuat kolom index default secara otomatis sebagai bilangan bulat [integer] dari 0 sampai range jumlah baris data tersebut.
Kolom index dapat terdiri dari
- satu kolom [single index], atau
- multiple kolom [disebut dengan hierarchical indexing].
Index dengan multiple kolom ini terjadi karena unique identifier tidak dapat dicapai hanya dengan set index di 1 kolom saja sehingga membutuhkan beberapa kolom yang menjadikan tiap row menjadi unique.
Secara default setelah suatu data frame dibaca dari file dengan format tertentu, index-nya merupakan single index.
Indexing — Part 2.Pada sub bab ini akan mencetak index dan kolom yang dimiliki oleh file “sample_csv.csv”. Untuk menentukan index dan kolom yang dimiliki oleh dataset yang telah dinyatakan sebagai sebuah dataframe pandas dapat dilakukan dengan menggunakan attribut .index dan .columns.
Berikut adalah contohnya:
Dari syntax berikut dapat disimpulkan bahwa
Indexing — Part 3
Di sub bab sebelumnya telah dibahas terkait single index, tentunya pada sub bab ini akan bahas multi index atau disebut juga dengan hierarchical indexing.
Untuk membuat multi index [hierarchical indexing] dengan pandas diperlukan kolom-kolom mana saja yang perlu disusun agar index dari data frame menjadi sebuah hirarki yang kemudian dapat dikenali.
Pada sub bab sebelumnya telah diberikan nama-nama kolom dari dataframe yang telah dibaca, yaitu
Selanjutnya akan membuat multi index dengan menggunakan kolom ‘order_id’, ‘customer_id’, ‘product_id’, dan ‘order_date’ dengan menggunakan method .set_index[].
berikut hasil tampilan dataframe df_x-nya
Untuk melihat multi index yang telah diset dapat dilakukan dengan
yang memberikan output
Perlu diketahui bahwa kumpulan index dari multi index adalah list dari banyak tuples, tuples nya merupakan kombinasi yang ada dari gabungan index-index tersebut. Dari multi index tersebut juga terdapat atribut levels yang menunjukkan urutan index, dalam case ini ‘order_id’ > ‘customer_id’ > ‘product_id’ > ‘order_date’.
yang menghasilkan output berupa
Indexing — Part 4
Terdapat beberapa cara untuk membuat index, salah satunya adalah seperti yang telah dilakukan pada sub bab sebelumnya dengan menggunakan method .set_index[].
Di sub bab ini akan menggunakan assignment untuk menset index dari suatu data frame. Untuk itu file “sample_excel.xlsx” yang digunakan
Perhatikan syntax berikut:
Berikut adalah hasil outputnya:
Note:
- Cara yang ditunjukkan oleh baris ketujuh [ke 7] pada code editor di atas hanya berlaku jika index yang diassign tersebut memiliki panjang yang sama dengan jumlah baris dari dataframe.
- Jika ingin kembalikan dataframe ke index defaultnya yaitu dari 0 s/d jumlah baris data — 1, maka dapat menggunakan method .reset_index[drop=True], argument drop=True bertujuan untuk menghapus index lama.
Jika file yang akan dibaca melalu penggunaan library pandas dapat dipreview terlebih dahulu struktur datanya maka melalui fungsi yang ditujukan untuk membaca file dapat diset mana kolom yang akan dijadikan index.
Fitur ini telah dimiliki oleh setiap fungsi yang digunakan dalam membaca data dengan pandas, yaitu penggunaan argumen index_col pada fungsi yang dimaksud. Untuk jelasnya dapat diperhatikan pada kode berikut ini.
Dari dataset sample_csv.csv, sample_tsv.tsv, atau sample_excel.xlsx sudah tahu bahwa kolom dataset adalah ‘order_id’; ‘order_date’; ‘customer_id’; ‘city’; ‘province’; ‘product_id’; ‘brand’; ‘quantity’; and ‘item_price’. Sehingga kode di atas digunakan langsung kolom ‘order_date’ pada saat membaca filenya.
Terlihat bahwa kolom order_date sudah jadi index, dan tentunya jumlah kolom dataframe berkurang satu, yaitu menjadi delapan kolom.
Slicing — Part 1Seperti artinya slicing adalah cara untuk melakukan filter ke dataframe/series berdasarkan kriteria tertentu dari nilai kolomnya ataupun kriteria index-nya.
Terdapat 2 cara paling terkenal untuk slicing dataframe, yaitu dengan menggunakan method .loc dan .iloc pada variabel bertipe pandas DataFrame/Series. Method .iloc ditujukan untuk proses slicing berdasarkan index berupa nilai integer tertentu. Akan tetapi akan lebih sering menggunakan dengan method .loc karena lebih fleksibel.
Dataset belum dilakukan indexing, jadi slicing berdasarkan nilai kolomnya. Untuk itu “sample_csv.csv” dibaca kembali dan dipraktikkan metode .loc[] dengan mengambil tanggal 1 Januari 2019 dari kolom order_date dan product_id nya adalah P2154 dan P2556.
Berikut adalah hasil output
Slicing — Part 2
Dalam sub bab sebelumnya telah mempelajari bagaimana menslicing/filtering dataset dengan menggunakan method .loc pada kolom dataset.
Sekarang, menerapkan berdasarkan index. Tentu syaratnya adalah dataset sudah dilakukan indexing terlebih dahulu melalui penerapan method .set_index
Kita gunakan dengan dua cara:
Cara 1: Gunakan method .loc seperti yang dicontohkan berikut
Output cara 1:
Cara 2: Gunakan pd.IndexSlice sebagai varaibel untuk melakukan slicing index
Output cara 2:
Transforming — Part 1
Transform adalah ketika mengubah dataset yang ada menjadi entitas baru, dapat dilakukan dengan
- konversi dari satu data type ke data type yang lain,
- transpose dataframe
- atau yang lainnya.
Hal yang biasa dilakukan pertama kali setelah data dibaca adalah mengecek tipe data di setiap kolomnya apakah sesuai dengan representasinya. Untuk itu dapat menggunakan attribut .dtypes pada dataframe yang telah kita baca tadi,
[nama_dataframe].dtypes
Untuk konversi tipe data, secara default system akan mendeteksi data yang tidak bisa di render as date type or numeric type sebagai object yang basically string. Tidak bisa di render oleh system ini karena berbagai hal, mungkin karena formatnya asing dan tidak dikenali oleh python secara umum [misal: date type data → ‘2019Jan01’].
Data contoh tersebut tidak bisa di render karena bulannya Jan tidak bisa di translate menjadi in form of number [00–12] dan tidak ada ‘-’ di antara tahun, bulan dan harinya. Jika seluruh data pada kolom di order_date sudah tertulis dalam bentuk ‘YYYY-MM-DD’ maka ketika dibaca, kolom order_date sudah langsung dinyatakan bertipe data datetime.
Untuk merubah kolom date_order yang sebelumnya bertipe object menjadi kolom bertipe datetime, cara pertama yang dapat dilakukan adalah menggunakan
pd.to_datetime[argumen]
dengan argumen adalah isi kolom dari dataframe yang akan dirubah tipe datanya, misal dalam format umum
nama_dataframe["nama_kolom"]
Sehingga lengkapnya dapat ditulis sebagai
df.to_csv["tsv1.tsv", index=False, sep='\t']
0Selanjutnya, tipe data di kolom order_date yang semula bertipe objek menjadi bertipe datetime
Dataset : //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/sample_csv.csv
Dengan syntax berikut, maka keluar hasil output sebagai berikut:
Berdasarkan hasil output, tipe data order_date yang semula dari tipe object menjadi tipe data datetime.
Transforming — Part 2Pada sub bab ini akan mengubah tipe data pada kolom dataframe yang telah dibaca menjadi tipe data float [kolom quantity] dan tipe categori [kolom city].
Secara umum, untuk merubah ke numerik dapat menggunakan pd.to_numeric[], yaitu:
df.to_csv["tsv1.tsv", index=False, sep='\t']
1Sedangkan untuk menjadi suatu kolom yang dapat dinyatakan sebagai kategory dapat menggunakan method .astype[] pada dataframe, yaitu
df.to_csv["tsv1.tsv", index=False, sep='\t']
2Sekarang, kita akan mulai melakukan perubahan tipe data pada kolom:
- quantity yang semula bertipe int64 menjadi bertipe float32, dan
- city yang semula bertipe object menjadi bertipe category
Notes :
Dataset : //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/sample_csv.csv
Berikut adalah syntaxnya:
Dengan melakukan data manipulation terhadap tipe data yang dilakukan, muncul hasil output sebagai berikut:
Dari hasil transformasi berikut, diketahui bahwa quantity yang semula bertipe int64 menjadi bertipe float32, dan city yang semula bertipe object menjadi bertipe category.
Transforming — Part 3Sekarang akan mempelajari teknik/cara berikutnya dalam proses transformasi suatu dataframe. Di sub bab ini akan memakai method .apply[] dan .map[] pada suatu dataframe.
Method .apply[] digunakan untuk menerapkan suatu fungsi python [yang dibuat dengan def atau anonymous dengan lambda] pada dataframe/series atau hanya kolom tertentu dari dataframe.
Berikut ini adalah contohnya yaitu akan merubah setiap baris pada kolom brand menjadi lowercase
Jika dijalankan maka akan menghasilkan:
Method .map[] hanya dapat diterapkan pada series atau dataframe yang diakses satu kolom saja. Method ini digunakan untuk mensubstitusikan suatu nilai ke dalam tiap baris datanya.
Mari lihat contoh yang diberikan berikut ini yang mana akan ambil huruf terakhir dari brand
Jika dijalankan maka akan menghasilkan
Transforming — Part 4
Di sub bab sebelumnya sudah mengetahui bahwa map hanya dapat digunakan untuk pandas series. Pada sub bab ini akan menggunakan method .applymap pada dataframe
Kali ini kita gunakan dengan dua cara:
Cara 1 dengan tanpa define function awalnya, langsung pake fungsi anonymous lambda x
Cara 2 dengan define function
Setelah itu, berikut keluaran hasil outputnya:
Cara 1 dan cara 2 menunjukkan bahwa keduanya menhasilkan dataframe yang sama.
Dengan cara yang sama seperti diatas kita akan membuat matriks random ukuran 3 x 4 dengan seed randomnya 1234. Kemudian gunakan kedua cara seperti di atas untuk merubah seluruh isi dengan fungsi kuadrat x**2 + 3*x + 2.
Berikut syntax yang bisa digunakan:
Jika dijalankan maka menghasilkan output berikut:
Inspeksi Missing Value
Value yang hilang/tidak lengkap dari dataframe akan membuat analisis atau model prediksi yang dibuat menjadi tidak akurat dan mengakibatkan keputusan salah yang diambil. Terdapat beberapa cara untuk mengatasi data yang hilang/tidak lengkap tersebut.
Data COVID-19 yang akan digunakan ini diambil dari google big query, tetapi sudah disediakan datasetnya dalam format csv dengan nama “public data covid19 jhu csse eu.csv”. Ini adalah studi kasus untuk meng-handle missing value. Bagaimanakah langkah-langkahnya?
Di pandas data yang hilang umumnya direpresentasikan dengan NaN.
Langkah pertama, harus tahu kolom mana yang terdapat data hilang dan berapa banyak dengan cara:
Cara 1: menerapkan method .info[] pada dataframe yang dapat diikuti dari kode berikut ini
Notes :
Dataset : //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/CHAPTER+4+-+missing+value+-+public+data+covid19+.csv
Berikut syntax yang digunakan:
Cara 2: mengetahui berapa banyak nilai hilang dari tiap kolom di dataset tersebut dengan menerapkan chaining method pada dataframe yaitu .isna[].sum[]. Method .isna[] digunakan untuk mengecek berapa data yang bernilai NaN dan .sum[] menjumlahkannya secara default untuk masing-masing kolom dataframe.
Perhatikanlah kode berikut
df.to_csv["tsv1.tsv", index=False, sep='\t']
3Treatment untuk Missing ValueTerdapat beberapa cara untuk mengatasi missing value, antara lain:
- dibiarkan saja,
- hapus value itu, atau
- isi value tersebut dengan value yang lain [biasanya interpolasi, mean, median, etc]
Sebelum melakukan action ke missing value pada data covid diatas, sebaiknya tampilkan beberapa row teratas dari dataset itu
dan dilihat kembali jumlah missing value tiap kolomnya
agar dapat ditelaah terlebih dahulu.
Hanya kolom combine_key yang keseluruhan barisnya adalah missing value [1000 buah], sementara kolom country_region, date, dan confirmed tidak memiliki missing value. Untuk kolom lainnya terdapat beragam jumlah missing value. Apa yang dapat dilakukan?
Untuk memahami mana kolom yang akan ditreatment dengan tiga perlakukan di atas lihat nature dari data terlebih dahulu. Contohnya pada kolom death dan recovered jika ada yang missing value maka kemungkinan terbesarnya adalah tidak ada meninggal atau sembuh pada hari tersebut.
Untuk kolom yang seluruhnya missing yaitu combined_key dapat dibuang saja satu kolom itu karena tidak ada data yang dapat diketahui dari kolom tersebut.
Sementara, kolom yang lainnya bagaimana? Misal ambil kolom province_stat, missing valuenya dapat terjadi bahwa tidak dilaporkan itu berasal dari daerah mana di negara itu. Dapat mengisi misal dengan string ‘unknown’ karena tahu kolom tersebut bertipe data string.
Sekarang dapat menerapkan dua aksi yaitu
- Membiarkannya saja
- Mengahapus kolom
Treatment pertama [membiarkannya saja] seperti pada kolom confirmed, death, dan recovered. Akan tetapi jika tidak ada yang terkonfirmasi, meninggal dan sembuh sebenarnya dapat menukar value ini dengan angka nol. Meskipun ini lebih make sense dalam representasi datanya, tetapi untuk sub bab ini ketiga kolom tersebut diasumsikan dibiarkan memiliki nilai missing value.
Treatment kedua yaitu dengan menghapus kolom, yang mana ini digunakan jika seluruh kolom dari dataset yang dipunyai semua barisnya adalah missing value. Untuk itu dapat menerapkan method .dropna[] pada dataframe, bagaimana caranya?
df.to_csv["tsv1.tsv", index=False, sep='\t']
4Pada method .dropna[] ada dua keyword argumen yang harus diisikan yaitu axis dan how. Keyword axis digunakan untuk menentukan arah dataframe yang akan dibuang angka 1 untuk menyatakan kolom [column-based] atau dapat ditulis dalam string “column”. Jika digunakan angka 0 berarti itu dalam searah index [row-based] atau dapat ditulis dalam string “index”.
Sementara, keyword how digunakan untuk bagaimana cara membuangnya. Opsi yang dapat diterimanya [dalam string] adalah
- “all” artinya jika seluruh data di satu/beberapa kolom atau di satu/beberapa baris adalah missing value.
- “any” artinya jika memiliki 1 saja data yang hilang maka buanglah baris/kolom tersebut.
df.to_csv["tsv1.tsv", index=False, sep='\t']
5menghandle missing value pada dataframe. Treatment ini dilakukan dengan cara mengisi missing value dengan nilai lain, yang dapat berupa :
- nilai statistik seperti mean atau median
- interpolasi data
- text tertentu
Akan mulai pada kolom yang missing yang tipe datanya adalah berupa object. Kolom tersebut adalah province_state, karena tidak tahu secara persis province_state mana yang dimaksud, bisa menempatkan string “unknown” sebagai substitusi missing value. Meskipun keduanya berarti sama-sama tidak tahu tetapi berbeda dalam representasi datanya.
Untuk melakukan hal demikian dapat menggunakan method .fillna[] pada kolom dataframe yang dimaksud. Perhatikan kode berikut
df.to_csv["tsv1.tsv", index=False, sep='\t']
6Menghandle missing value tentunya dengan jalan mengganti missing value dengan nilai statistik kolom bersangkutan, baik median atau mean [nilai rata-rata]. Misalnya akan menggunakan kolom active. Dengan mengabaikan terlebih dahulu sebaran berdasarkan negara [univariate], jika mengisi dengan nilai rata-rata maka harus melihat terlebih dahulu data apakah memiliki ouliers atau tidak. Jika ada outliers dari data maka menggunakan nilai tengah [median] data adalah cara yang lebih safe.
Untuk itu diputuskan dengan mengecek nilai median dan nilai mean kolom active juga nilai min dan max-nya. Jika data pada kolom active terdistribusi normal maka nilai mean dan median akan hampir sama.
Terlihat data memiliki distribusi yang skewness, karena nilai mean dan median yang cukup jauh serta range data yang cukup lebar. Di sini pada kolom active data memiliki outliers. Jadi akan mengisi missing value dengan median.
df.to_csv["tsv1.tsv", index=False, sep='\t']
7Data yang menggunakan interpolasi untuk mengisi data yang hilang adalah time series data, yang secara default akan diisi dengan interpolasi linear.
Perhatikan kode berikut:
df.to_csv["tsv1.tsv", index=False, sep='\t']
8Case Study! Let’s TryyyyyyyyyyDiberikan dataset ‘retail_raw_test.csv’
- Baca dataset
df.to_csv["tsv1.tsv", index=False, sep='\t']
92. Mengganti tipe data
- customer_id dari string ke int64,
- quantity dari string ke int64,
- item_price dari string ke int64
df.to_clipboard[]
03. transform product_value supaya bentuknya seragam dengan format PXXXX, assign ke kolom baru “product_id”, dan drop kolom “product_value”, jika terdapat nan gantilah dengan “unknown”.
df.to_clipboard[]
14. tranform order_date menjadi value dengan format YYYY-mm-dd
df.to_clipboard[]
25. cek data hilang dari tiap kolom dan kemudian isi missing value
- di brand dengan “no_brand”, dan
- cek dulu bagaimana missing value di city & province — isi missing value di city dan province dengan “unknown”
df.to_clipboard[]
36. create column city/province dari gabungan city & province
df.to_clipboard[]
47. membuat index berdasarkan city_provice, order_date, customer_id, order_id, product_id [cek index]
df.to_clipboard[]
58. membuat kolom “total_price” sebagai hasil perkalian quantity dengan item_price
df.to_clipboard[]
69. slice data hanya untuk Jan 2019
df.to_clipboard[]
7Performa Penjualan di Setiap Cabang
Diberikan 4 csv files yang isinya retail data untuk tiap Quarter:
- csv [data dari bulan January — March] → //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/LO4/retail_data_from_1_until_3.csv
- csv [data dari bulan April — June] → //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/LO4/retail_data_from_4_until_6.csv
- csv [data dari bulan July — September] → //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/LO4/retail_data_from_7_until_9.csv
- csv [data dari bulan October — December] → //dqlab-dataset.s3-ap-southeast-1.amazonaws.com/LO4/retail_data_from_10_until_12.csv
Goal: Automation untuk pembuatan grafik dari measurement yang dibutuhkan.
Untuk part 1 ini yang perlu dilakukan:
[1]. Load masing-masing data *.csv dengan Pandas
df.to_clipboard[]
8[2]. Pengecekan dan Transformasi Data
- Cek data sekilas [melihat bentuk data biasanya 5 data teratas]
df.to_clipboard[]
9- Cek list kolom untuk semua dataframe apakah seluruh kolom dari keempat dataframe yang terpisah itu sama
df_excel.to_excel["xlsx1.xlsx", index=False]
0- Jika sama digabungkan.
df_excel.to_excel["xlsx1.xlsx", index=False]
1- Cek informasi dataframe yang telah digabungkan
df_excel.to_excel["xlsx1.xlsx", index=False]
2- Statistik deskriptif dari dataframe yang telah digabungkan.
df_excel.to_excel["xlsx1.xlsx", index=False]
3[3] Transformasi Data
- Jika ada data yang tidak seharusnya maka dapat dibuang
df_excel.to_excel["xlsx1.xlsx", index=False]
4- Jika ada kolom yang seharusnya bertipe datetime64 ubahlah
df_excel.to_excel["xlsx1.xlsx", index=False]
5- Cek kembali informasi dataframe
df_excel.to_excel["xlsx1.xlsx", index=False]
2- Tampilkan kembali statistik deskriptif dari dataframe
df_excel.to_excel["xlsx1.xlsx", index=False]
7[4]. Filter province yang hanya termasuk 5 provinsi besar di Jawa [DKI Jakarta, Jawa Barat, Jawa Tengah, Jawa Timur, dan Yogyakarta]
df_excel.to_excel["xlsx1.xlsx", index=False]
8[5]. Mengelompokkan data berdasarkan order_date dan province yang sudah difilter dan menghitung order unique count, customer unique count, product unique count, brand unique count, dan GMV [Gross Merchandise Volume = total_price untuk semua penjualan]
df_excel.to_excel["xlsx1.xlsx", index=False]
9[6]. Melakukan unstack untuk mendapatkan order_date di bagian baris dan province di bagian column
df.to_gbq["temp.test", project_id="XXXXXX", if_exists="fail"]
0[7]. Slicing data untuk masing-masing measurement [kolom], misal: kolom order
df.to_gbq["temp.test", project_id="XXXXXX", if_exists="fail"]
1[8]. Lakukan resampling pada data tersebut untuk dilakukan perhitungan secara bulanan
df.to_gbq["temp.test", project_id="XXXXXX", if_exists="fail"]
2Sekarang dilanjutkan untuk langkah #[9] yaitu menampilkan grafik dari langkah #[8] yang telah dilakukan.
[9]. Plot untuk hasil pada langkah #[8]
df.to_gbq["temp.test", project_id="XXXXXX", if_exists="fail"]
3Langah 7 s/d 9 yang telah dilakukan baru untuk satu measurement yaitu order. Berarti ada empat kali lagi kode seperti ini harus dibuat. Karena struktur code masih sama, dapat menggunakan perulangan sesuai dengan jumlah measurement yaitu 5, sehingga kelima measurement dapat ditampilkan grafiknya dalam satu canvas figure.
Mari memulai dengan membuat sebuah perulangan dengan dataframe unstack_city_province yang digunakan [hasil dari langkah ke 5].
df.to_gbq["temp.test", project_id="XXXXXX", if_exists="fail"]
4Penutup
Akhirnya, kita telah sampai di penutup mengenai pembahasan kita tentang Data Manipulation with Pandas — Part 1. Materi-materi yang telah kita pelajari dan praktekkan dalam modul ini aku telah mendapatkan pengetahuan [knowledge] dan praktek [skill] untuk:
- Memahami library Pandas dan interaksinya dengan numpy
- Memahami dan mempraktekkkan bagaimana membuat series dan dataframe pada pandas dari berbagai tipe data seperti list, list of list, dict, ataupun numpy array
- emahami dan mempraktekkkan bagaimana membaca dataset dari berbagai format standar seperti csv, tsc, excel, json, sql sehingga dapat dijadikan pandas dataframe/series serta bagaimana cara menyimpannya ke format standar dataset.
- Mampu memahami dan mempraktekkan proses indexing, transformasi dan slicing pada dataframe
- Mampu memahami dan mempraktekkan bagaimana cara menghandle missing value pada suatu dataframe
- Latihan dalam mengerjakan project bisnis sederhana menggunakan pandas
Uwuuuuwwww, gimana nih temen-temen! Seruuu banget dong yaaa belajar Python. Jadi, belajar banyak kan mengenai Exploratory Data Analysis with Python for Beginner kali ini. Mudah-mudahan kalian semuanya paham ya! Semoga bermanfaat!
“With data collection, ‘the sooner the better’ is always the best answer.” — Marissa MayerTerima kasih banyak sebelumnya atas waktu yang diluangkan untuk membaca artikel ini. Kurang lebihnya mohon maaf. See you!