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

image image

DataFrame & Series

image image

Atribut DataFrame & Series -Part1

image image image

image

Atribut DataFrame & Series -Part2

image image

image

Atribut DataFrame & Series -Part3

image image image

image

Quiz

image

Creating Series & Dataframe from List

image image

image

Creating Series & Dataframe from Dictionary

image image image

Creating Series & Dataframe from Numpy Array

image image

image

Quiz

image

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:

  1. _CSV _(Comma Separated Values), antar data dalam satu baris dipisahkan oleh comma, ",".
  2. _TSV _(Tab Separated Values), antar data dalam satu baris dipisahkan oleh "Tab".
  3. Excel
  4. Google BigQuery
  5. SQL Query
  6. _JSON _(Java Script Object Notation)

Read Dataset -CSV dan TSV

image image

image

Read Dataset - Excel

image image

Read Dataset - JSON

image image

url = "https://storage.googleapis.com/dqlab-dataset/covid2019-api-herokuapp-v2.json"

Read Dataset - SQL

image image

Read Dataset - Google BigQuery

image image

Write Dataset

image image

Head & Tail

image image

image

Quiz

image

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:

  1. satu kolom (single index), atau
  2. 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

image image

image

Indexing - Part3

image image image image image

image

Indexing - Part4

image image

image

Dataset : https://storage.googleapis.com/dqlab-dataset/sample_tsv.tsv

Indexing - Part5

image image image Dataset : https://storage.googleapis.com/dqlab-dataset/sample_tsv.tsv

QUIZ

image

Slicing - Part1

image image image Dataset: https://storage.googleapis.com/dqlab-dataset/sample_csv.csv

Slicing - Part2

image image image Dataset : https://storage.googleapis.com/dqlab-dataset/sample_csv.csv

QUIZ

image

Transforming - Part1

image image image Dataset : https://storage.googleapis.com/dqlab-dataset/sample_csv.csv

Transforming - Part2

image image image Dataset : https://storage.googleapis.com/dqlab-dataset/sample_csv.csv

Transforming - Part3

image image image image image Dataset : https://storage.googleapis.com/dqlab-dataset/sample_csv.csv

Transforming - Part4

image image image image

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

image image image image Dataset : https://storage.googleapis.com/dqlab-dataset/CHAPTER%204%20-%20missing%20value%20-%20public%20data%20covid19%20.csv

Treatment untuk Missing Value - Part1

image image

Treatment untuk Missing Value - Part2

image image image Dataset: https://storage.googleapis.com/dqlab-dataset/CHAPTER%204%20-%20missing%20value%20-%20public%20data%20covid19%20.csv

Treatment untuk Missing Value - Part3

image image image Dataset : https://storage.googleapis.com/dqlab-dataset/CHAPTER%204%20-%20missing%20value%20-%20public%20data%20covid19%20.csv

Treatment untuk Missing Value - Part4

image image image Dataset : https://storage.googleapis.com/dqlab-dataset/CHAPTER%204%20-%20missing%20value%20-%20public%20data%20covid19%20.csv

Treatment untuk Missing Value - Part5

image image image image

QUIZ

image

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

image image Dataset : https://storage.googleapis.com/dqlab-dataset/retail_raw_test.csv

https://codeshare.io/YLrZdQ

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

image