Data Manipulation with Pandas Part 1 - nurkomarhidaya/DQLab GitHub Wiki
#1. Introduction to Pandas
Pendahuluan
“Apa kegunaan mempelajari Pandas? Aku tahunya Pandas nama hewan,” kelakarku pada Andra. Benar kan! Lagi-lagi aku menemukan istilah umum tapi punya makna berbeda di dunia data.
“Itu Panda, Aksara. Kalau Pandas berguna untuk melakukan analisis dan pengolahan data dari menengah sampai besar. Coba dibaca saja dulu modulnya biar lebih jelas. Nanti akan ada praktik yang memperjelas,” tukas Andra.
Seperti yang bisa kutebak, aku harus memahami modul dan pembelajaran baru ini sendiri. Karena kulihat Andra sudah melengang pergi setelah memberi intruksi sederhana seperti itu. Tak apa, perlahan aku terbiasa juga belajar mandiri. Walau memang lebih nyaman kalau dibimbing, hehehe.
Memanggil Library Pandas
DataFrame & Series
Atribut DataFrame & Series -Part1
Atribut DataFrame & Series -Part2
Atribut DataFrame & Series -Part3
Quiz
Creating Series & Dataframe from List
Creating Series & Dataframe from Dictionary
Creating Series & Dataframe from Numpy Array
Quiz
2. Dataset I/O
Pendahuluan
Aku berhenti sejenak dari bacaan modul dan latihan kuis. Timbul satu pertanyaan yang menggelitikku. Dan, pas sekali aku melihat Andra sedang mampir ke meja di seberangku. Waktu yang tepat untuk memanggilnya dan bertanya.
“Ndra, memangnya file apa saja sih yang bisa dibaca oleh Pandas? Aku penasaran.”
“Saya kirim saja yah lengkapnya ada di link. Coba kamu cek di email,” jawab Andra singkat, padat, jelas.
Sesaat setelah aku bertanya, aku melihat Andra mengutak-atik ponselnya. Semenit kemudian, aku sudah menemukan link di kotak masuk email-ku yang berisi file-file yang bisa diakses Pandas. Aku pun membukanya dan menyimaknya satu per satu:
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)
Read Dataset -CSV dan TSV
Read Dataset - Excel
Read Dataset - JSON
url = "https://storage.googleapis.com/dqlab-dataset/covid2019-api-herokuapp-v2.json"
Read Dataset - SQL
Read Dataset - Google BigQuery
Write Dataset
Head & Tail
Quiz
3. Indexing, Slicing, dan Transforming
Pendahuluan
Aku masih fokus mengutak-atik dokumen yang bisa dibaca oleh Pandas ketika Andra menyahut dari belakangku. “Sudah dipelajari modulnya, Aksara? Apakah sudah cukup paham dasarnya penggunaan basic data of Pandas? Terutama cara bikin dataframe dan data source yang diolah dari Pandas?”
Seperti biasa, Andra ingin memastikan proses belajarku berjalan lancar. Tapi, mumpung ia berada di sini dan aku punya pertanyaan, lebih baik kusampaikan.
“Iya, Ndra. Tapi aku masih agak bingung soal manipulasi data, seperti membuat index, slicing, dan transform tipe data di series maupun dataframe,” ungkapku jujur. Apakah Andra akan membantuku? Aku menunggu responsnya sampai kemudian Andra menarik bangku ke sebelahku.
“Oke, coba sini saya bantu jelaskan.”
Mataku berbinar. Aku tak akan melewatkan kesempatan ini. Aku pun menggeser bangku agar lebih dekat dengan Andra yang siap menampilkan beberapa contoh manipulasi data, terutama membuat index, seperti yang dijelaskan selanjutnya.
Indexing - Part1
Index 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.
Indexing - Part2
Indexing - Part3
Indexing - Part4
Dataset : https://storage.googleapis.com/dqlab-dataset/sample_tsv.tsv
Indexing - Part5
Dataset : https://storage.googleapis.com/dqlab-dataset/sample_tsv.tsv
QUIZ
Slicing - Part1
Dataset: https://storage.googleapis.com/dqlab-dataset/sample_csv.csv
Slicing - Part2
Dataset : https://storage.googleapis.com/dqlab-dataset/sample_csv.csv
QUIZ
Transforming - Part1
Dataset : https://storage.googleapis.com/dqlab-dataset/sample_csv.csv
Transforming - Part2
Dataset : https://storage.googleapis.com/dqlab-dataset/sample_csv.csv
Transforming - Part3
Dataset : https://storage.googleapis.com/dqlab-dataset/sample_csv.csv
Transforming - Part4
Penutup dari Andra
“Sampai di sini sudah cukup jelas, Aksara? Terutama soal manipulasi data dengan index,” ujar Andra mengonfirmasi padaku.
Aku mengangguk antusias, “Iya, ini keren banget! Kayak upgrade-an dari Excel ya.”
“Oke, kalau begitu kamu bisa coba mengerjakan kuisnya sebelum kita lanjut ke materi selanjutnya. Soalnya bakal ada proyek yang mau diberikan padamu berkaitan dengan Pandas ini.”
Proyek? Ah, pantas saja Andra yang sibuk itu mau meluangkan waktu untuk menjelaskan panjang lebar seperti tadi. Tapi tak bisa dipungkiri, aku sedikit gugup sekaligus tertantang untuk mengetahui detail proyeknya.
4. Handling Missing Values
Pendahuluan
“Aksara, saya barusan kirim email lagi ya berisi link seputar handling missing values untuk Pandas. Kamu bisa belajar lebih lengkap di sana bersama isi modul.” “Siap!” Tanpa menunggu lagi, aku mengecek link yang diberikan Andra:
https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html
Inspeksi Missing Value
Treatment untuk Missing Value - Part1
Treatment untuk Missing Value - Part2
Treatment untuk Missing Value - Part3
Treatment untuk Missing Value - Part4
Treatment untuk Missing Value - Part5
QUIZ
5. Mini Project
Pendahuluan
“Ndra, aku sudah cukup paham dengan teorinya,” sahutku seakan memberi kode jika aku sudah siap mengerjakan proyek yang tadi dijanjikan. “Saya suka kepercayaan dirimu, Aksara. Kalau begitu, sudah siap kalau diberi proyek?” pancing Andra. Aku mengangguk mantap.
“Oke, untuk proyek pertama, kamu akan melakukan ETL sebelum analisis data. Karena data yang dibutuhkan masih belum bersih, sehingga tidak bisa dilakukan analisis lebih lanjut.”
Aku menyimak pemaparan dari Andra sembari memikirkan solusi untuk ETL. Tentunya bisa aku eksekusi dengan Pandas. “Baik, Ndra. Data yang dibutuhkan apa saja nantinya?”
“Data untuk cabang perusahaan ritel kita, Aksara. Berarti kumpulan data bulan Januari 2019 untuk setiap kota dan provinsi, tanggal order-nya, customer, order-nya apa aja terkait brand, product, quantity dan item price-nya juga. Dan, yang terakhir adalah GMV/Gross Merchandise Volume (total price)-nya.”
“Banyak banget!” gumamku dalam hati.
“Saya tahu kamu pasti sudah memikirkan detlennya karena data yang dibutuhkan banyak. Jangan khawatir, saya beri tenggat waktu sampai akhir minggu ini, bukan besok. Cukup?”
Aku mengangkat ibu jari, “Langsung aku cicil dari sekarang deh, Ndra.”
“Baik, selamat bekerja Aksara!”
Project dari Andra
Dataset : https://storage.googleapis.com/dqlab-dataset/retail_raw_test.csv
Evaluasi Andra untuk project yang telah disubmit
Aku baru saja mengumpulkan hasil kerja dari proyek pertamaku pada Andra. Lebih cepat satu hari dari tenggat waktu yang diberikan, semoga hasilnya juga memuaskan! Doaku dalam hati.
“Aksara, saya baru saja meninjau pekerjaanmu. Saya ada pertanyaan,” ujar Andra yang lagi-lagi sudah ada di sebelahku. Sepertinya Andra punya kemampuan teleportasi yang bisa muncul tiba-tiba.
“Ada yang salah, Ndra?”
“Saya ingin tahu alasanmu mengapa di langkah ketiga, kamu cari tahu terlebih dulu nilai null. Mengapa tidak kamu convert to string secara langsung?”
“Soalnya, kalau aku cek di df.info()nya masih ada yang kosong di kolom ‘product_value’, Ndra. Kalau aku langsung convert to string, nantinya value NaN akan berubah menjadi string ‘nan’, kemudian ketika aku pad 0 di depan dan concat dengan char ‘P’, hasilnya akan menjadi ‘P0nan’ yang aneh sekali, Ndra,” jelasku.
“Oke. Satu lagi pertanyaanku, Aksara. Kenapa kamu memakai langkah ke-4? Mengapa tidak langsung menggunakan kolom date yang sudah ada. Bukankah format waktunya sudah ideal?”
Aku merasa tanya jawab ini tampak seperti ujian apakah aku benar-benar memahami cara kerja Pandas. Aku memantapkan diri untuk memberi jawaban, “Tidak semua format datetime yang ideal pada umumnya akan ideal di dalam pandas environment. Seenggaknya harus translate dulu menjadi format yang ideal di dalam pandas sehingga pandas bisa mengenali.”
“Great! Untuk materi dan proyek ini, kamu dinyatakan lulus, Aksara.”
Mendengar apresiasi ini langsung dari Andra membuat hatiku hangat. Senang sekali rasanya!
Hasil Belajarku
Walau harus bekerja keras, aku cukup puas dengan hasil kerjaku hari ini. Aku memandangi kode final yang sudah selesai kukerjakan. Diam-diam ada perasaan bangga menyelip di benakku! YES!
Akhirnya, aku telah menyelesaikan modul Data Manipulation with Pandas - Part 1. Materi-materi yang telah kupelajari dan praktikkan 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
- Memahami 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 mempraktikkan proses indexing, transformasi, dan slicing pada dataframe
- Mampu memahami dan mempraktikkan bagaimana cara melakukan handle missing value pada suatu dataframe
- Latihan dalam mengerjakan project bisnis sederhana menggunakan pandas