Manipulasi & Visualisasi Data
Setelah mempelajari cara melihat, memilih, dan melakukan filtering pada DataFrame, langkah berikutnya adalah mulai menganalisis dan memvisualisasikan data.
Ketika bekerja dengan dataset, kita tidak hanya ingin melihat datanya.
Kita juga ingin mengetahui:
- Apakah terdapat hubungan antar kolom?
- Bagaimana data dikelompokkan?
- Berapa nilai rata-rata setiap kelompok?
- Bagaimana persebaran data?
- Apakah terdapat pola tertentu?
- Apakah terdapat data yang perlu dibersihkan sebelum dianalisis?
Pandas menyediakan berbagai fitur untuk membantu proses tersebut.
Untuk visualisasi, Pandas juga dapat bekerja bersama Matplotlib.
Pada materi ini kita akan mempelajari:
pd.crosstab().groupby().plot().hist()- Dasar penggunaan Matplotlib
- Data cleaning sederhana
- Mengubah data harga dari teks menjadi numerik
Membandingkan Kolom
Salah satu aktivitas penting dalam analisis data adalah membandingkan dua atau lebih variabel.
Misalnya kita memiliki dataset penjualan mobil dengan kolom:
Make
Colour
Odometer (KM)
Doors
Price
Kita mungkin ingin mengetahui:
Apakah jumlah pintu berbeda berdasarkan merek mobil?
atau:
Berapa banyak mobil dari setiap merek
yang memiliki jumlah pintu tertentu?
Pandas menyediakan pd.crosstab() untuk membantu melakukan analisis seperti ini.
Menggunakan pd.crosstab()
pd.crosstab() digunakan untuk membuat cross-tabulation, yaitu tabel yang memperlihatkan hubungan atau frekuensi antara dua variabel kategorikal.
Contohnya:
import pandas as pd
pd.crosstab(car_sales["Make"], car_sales["Doors"])
Secara sederhana, kita sedang meminta Pandas untuk membandingkan:
Make
↓
Merek mobil
dengan
Doors
↓
Jumlah pintu
Memahami Hasil pd.crosstab()
Misalnya hasilnya seperti:
Doors 3 4 5
Make
BMW 0 3 0
Honda 0 4 0
Toyota 1 5 2
Kita dapat membaca tabel tersebut sebagai:
Toyota
├── 1 mobil memiliki 3 pintu
├── 5 mobil memiliki 4 pintu
└── 2 mobil memiliki 5 pintu
Jadi crosstab() membantu kita melihat frekuensi atau jumlah kemunculan kombinasi kategori.
Kapan Menggunakan pd.crosstab()?
crosstab() cocok digunakan ketika kita ingin mengetahui hubungan sederhana antara kategori.
Contohnya:
Merek mobil vs jumlah pintu
Jenis kelamin vs kategori produk
Kota vs jenis pelanggan
Kategori produk vs status pembelian
Misalnya:
pd.crosstab(
car_sales["Make"],
car_sales["Doors"]
)
Hasilnya dapat memberikan gambaran mengenai distribusi jumlah pintu berdasarkan merek mobil.
Mengelompokkan Data dengan .groupby()
Selain crosstab(), Pandas menyediakan method:
.groupby()
groupby() digunakan untuk mengelompokkan data berdasarkan satu atau beberapa kolom.
Setelah data dikelompokkan, kita dapat melakukan operasi tertentu terhadap masing-masing kelompok.
Misalnya:
Toyota
Honda
BMW
Nissan
kemudian kita ingin menghitung:
Rata-rata harga
Rata-rata odometer
untuk setiap merek.
Contoh .groupby()
Contoh sederhana:
car_sales.groupby(["Make"]).mean(numeric_only=True)
Kode tersebut dapat dibaca:
Kelompokkan data berdasarkan Make
↓
Buat kelompok berdasarkan merek
↓
Hitung rata-rata
Misalnya terdapat:
Toyota
Toyota
Honda
Honda
BMW
maka Pandas akan membuat kelompok:
Toyota
Honda
BMW
dan menghitung nilai rata-rata untuk setiap kelompok.
Memahami Konsep groupby()
Bayangkan kita memiliki data:
| Make | Price |
|---|---|
| Toyota | 4000 |
| Toyota | 6000 |
| Honda | 5000 |
| Honda | 7000 |
| BMW | 15000 |
Dengan:
car_sales.groupby(["Make"]).mean(numeric_only=True)
kita secara konseptual melakukan:
Toyota
4000
6000
↓
Mean = 5000
Honda
5000
7000
↓
Mean = 6000
BMW
15000
↓
Mean = 15000
Dengan demikian, groupby() sangat berguna untuk melakukan analisis berdasarkan kelompok.
crosstab() vs groupby()
Keduanya dapat digunakan untuk analisis data, tetapi tujuan utamanya berbeda.
| Method | Tujuan utama |
|---|---|
pd.crosstab() | Melihat hubungan/frekuensi antar kategori |
.groupby() | Mengelompokkan data untuk kemudian melakukan operasi |
Contoh:
pd.crosstab(car_sales["Make"], car_sales["Doors"])
lebih cocok untuk melihat:
Jumlah mobil berdasarkan Make dan Doors
Sedangkan:
car_sales.groupby(["Make"]).mean(numeric_only=True)
lebih cocok untuk melihat:
Rata-rata data numerik berdasarkan Make
Visualisasi Data
Selain menggunakan angka dan tabel, kita juga perlu memvisualisasikan data.
Visualisasi membantu kita melihat pola yang mungkin sulit ditemukan hanya dengan membaca tabel.
Contohnya:
Data
↓
Tabel
↓
Grafik
↓
Pola lebih mudah dilihat
Dalam Data Science dan Machine Learning, visualisasi dapat membantu kita memahami dataset sebelum melakukan modelling.
Pandas dan Matplotlib
Pandas memiliki kemampuan plotting yang terintegrasi dengan Matplotlib.
Matplotlib adalah library Python yang digunakan untuk membuat berbagai jenis visualisasi.
Contohnya:
import matplotlib.pyplot as plt
Pandas kemudian dapat menggunakan kemampuan plotting tersebut.
Secara sederhana:
Pandas
↓
DataFrame
↓
Plotting
↓
Matplotlib
↓
Visualisasi
Menampilkan Plot di Jupyter Notebook
Jika menggunakan Jupyter Notebook, kita dapat menggunakan:
%matplotlib inline
Kemudian:
import matplotlib.pyplot as plt
%matplotlib inline merupakan magic command Jupyter yang digunakan untuk menampilkan grafik secara langsung di dalam notebook.
Contoh:
%matplotlib inline
import matplotlib.pyplot as plt
Pada banyak environment Jupyter modern, plot biasanya sudah dapat ditampilkan tanpa konfigurasi tambahan ini. Namun, memahami perintah tersebut tetap berguna karena sering ditemukan pada notebook pembelajaran dan project lama.
Line Plot
Salah satu jenis visualisasi dasar adalah line plot.
Line plot dapat digunakan untuk melihat perubahan atau tren data.
Misalnya kita memiliki data:
Odometer (KM)
Kita dapat membuat line plot:
car_sales["Odometer (KM)"].plot()
Pandas akan membuat grafik berdasarkan nilai pada kolom tersebut.
Memahami Line Plot
Secara sederhana:
Odometer (KM)
↓
Line Plot
↓
Melihat pola perubahan data
Line plot dapat membantu kita melihat apakah nilai data:
naik
turun
stabil
atau memiliki pola tertentu
Namun, tidak semua data cocok divisualisasikan menggunakan line plot.
Pemilihan jenis grafik harus disesuaikan dengan tujuan analisis.
Histogram
Jenis visualisasi lain yang sangat berguna adalah histogram.
Histogram digunakan untuk melihat distribusi atau persebaran data numerik.
Contohnya:
car_sales["Odometer (KM)"].hist()
Histogram membantu kita melihat bagaimana nilai dalam sebuah kolom tersebar.
Memahami Histogram
Misalnya kita memiliki data:
60000
70000
80000
90000
100000
110000
120000
150000
Histogram akan mengelompokkan nilai ke dalam beberapa rentang.
Secara konseptual:
Jumlah Data
│
│ ███
│ ███
│ ███ ███
│ ███ ███ ███
└──────────────────
Rentang Nilai
Dari histogram, kita dapat melihat apakah data:
- terkonsentrasi pada rentang tertentu
- tersebar luas
- memiliki nilai ekstrem
- memiliki distribusi yang tidak seimbang
Line Plot vs Histogram
Kedua grafik memiliki tujuan yang berbeda.
| Grafik | Tujuan |
|---|---|
| Line Plot | Melihat pola atau perubahan nilai |
| Histogram | Melihat distribusi data |
Contohnya:
car_sales["Odometer (KM)"].plot()
digunakan untuk line plot.
Sedangkan:
car_sales["Odometer (KM)"].hist()
digunakan untuk histogram.
Mengapa Visualisasi Penting dalam Machine Learning?
Visualisasi bukan hanya untuk membuat data terlihat menarik.
Visualisasi dapat membantu kita menemukan masalah dan pola pada dataset.
Misalnya:
Data
↓
Visualisasi
↓
Menemukan pola
↓
Menemukan outlier
↓
Memahami distribusi
↓
Membuat keputusan preprocessing
Sebelum membuat model Machine Learning, pemahaman seperti ini sangat berguna.
Data Cleaning
Ketika melakukan analisis data, kita mungkin menemukan data yang belum memiliki format yang sesuai.
Misalnya kolom harga:
Price
$4,000.00
$5,500.00
$12,000.00
Secara visual data tersebut memang terlihat seperti angka.
Namun bagi program, nilai tersebut sebenarnya merupakan teks/string karena mengandung:
$
,
.
Akibatnya, kita tidak dapat memperlakukannya sebagai angka secara langsung.
Masalah Data Numerik yang Berbentuk Teks
Misalnya:
"$4,000.00"
Secara manusia, kita memahami bahwa nilai tersebut berarti:
4000
Tetapi komputer dapat membaca nilai tersebut sebagai:
string
bukan:
number
Hal ini menjadi masalah ketika kita ingin melakukan:
Perhitungan rata-rata
Penjumlahan
Visualisasi
Machine Learning
Karena itu, data perlu dibersihkan dan dikonversi menjadi tipe numerik.
Membersihkan Kolom Price
Kita dapat menggunakan .str.replace() untuk menghapus karakter yang tidak diperlukan.
Contohnya:
car_sales["Price"] = car_sales["Price"].str.replace(
r"[\$\,\.]",
"",
regex=True
).astype(int)
Kode tersebut melakukan beberapa proses:
"$4,000.00"
↓
hapus $
↓
hapus ,
↓
hapus .
↓
"400000"
↓
ubah menjadi integer
↓
400000
Mengapa Menggunakan regex=True?
Pada versi Pandas yang lebih baru, penggunaan pola regular expression pada .str.replace() perlu ditulis secara eksplisit dengan:
regex=True
Contoh:
car_sales["Price"].str.replace(
r"[\$\,\.]",
"",
regex=True
)
regex=True memberitahu Pandas bahwa parameter pertama merupakan regular expression.
Ini penting karena kode lama seperti:
car_sales["Price"].str.replace(r"[\$\,\.]", "")
dapat menghasilkan error atau warning pada versi Pandas tertentu.
Untuk kode yang lebih kompatibel dengan Pandas modern, gunakan:
regex=True
Memahami Regular Expression Secara Sederhana
Kita belum perlu mempelajari regular expression secara mendalam.
Pada contoh:
r"[\$\,\.]"
pola tersebut digunakan untuk mencari karakter:
$
,
.
Kemudian karakter tersebut diganti dengan string kosong:
""
Sehingga:
"$4,000.00"
menjadi:
"400000"
Mengubah String Menjadi Integer
Setelah karakter yang tidak diperlukan dihapus, data masih berupa string.
Contohnya:
"400000"
Kita dapat mengubahnya menjadi integer menggunakan:
.astype(int)
Sehingga:
"400000"
menjadi:
400000
Sekarang data sudah dapat diperlakukan sebagai angka.
Menghilangkan Dua Angka Nol Terakhir
Pada dataset tertentu, setelah proses pembersihan:
"$4,000.00"
dapat berubah menjadi:
400000
Padahal nilai yang diinginkan adalah:
4000
Hal ini terjadi karena titik desimal juga dihapus.
Salah satu pendekatan yang digunakan dalam dataset pembelajaran tersebut adalah membagi nilai dengan 100.
Contohnya:
car_sales["Price"] = car_sales["Price"] // 100
Hasil:
400000
↓
4000
Operator:
//
merupakan floor division pada Python.
Mengapa Menggunakan //?
Dalam kasus data harga yang sudah menjadi integer, kita dapat menggunakan:
// 100
untuk membagi nilai dan mendapatkan hasil pembagian bulat.
Contoh:
400000 // 100
hasil:
4000
Namun, pendekatan ini hanya tepat jika kita memang memahami format data dan mengetahui bahwa dua digit terakhir merepresentasikan bagian desimal.
Jangan membagi data dengan 100 secara sembarangan tanpa memahami format dataset.
Contoh Data Cleaning Lengkap
Misalnya:
Price
$4,000.00
$5,500.00
$12,000.00
Kita dapat melakukan:
car_sales["Price"] = car_sales["Price"].str.replace(
r"[\$\,\.]",
"",
regex=True
).astype(int)
car_sales["Price"] = car_sales["Price"] // 100
Alurnya:
"$4,000.00"
↓
"400000"
↓
400000
↓
4000
Penting: Perhatikan Format Data
Data cleaning harus dilakukan berdasarkan format data yang sebenarnya.
Misalnya:
$4,000.00
dapat dibersihkan dengan pendekatan di atas.
Tetapi jika format datanya:
4.000,00
maka aturan pembersihannya berbeda karena titik dan koma memiliki fungsi yang berbeda.
Karena itu, jangan sekadar menyalin kode cleaning.
Biasakan memahami:
Format Data
↓
Masalah
↓
Transformasi yang Dibutuhkan
↓
Data Bersih
Setelah Data Dibersihkan
Setelah kolom Price menjadi numerik, kita dapat melakukan operasi yang sebelumnya sulit atau tidak dapat dilakukan dengan benar.
Misalnya:
car_sales["Price"].mean()
atau:
car_sales["Price"].hist()
Sekarang kita dapat:
Menghitung statistik
↓
Membuat visualisasi
↓
Menganalisis data
↓
Mempersiapkan Machine Learning
Contoh Workflow Analisis
Secara sederhana, workflow yang kita lakukan adalah:
Membaca Dataset
↓
Memahami Data
↓
Memilih Data
↓
Membersihkan Data
↓
Mengelompokkan Data
↓
Membandingkan Data
↓
Memvisualisasikan Data
↓
Menarik Insight
Pandas membantu banyak bagian dalam workflow tersebut.
Contoh Kode Lengkap
Berikut contoh sederhana yang menggabungkan konsep pada materi ini:
import pandas as pd
import matplotlib.pyplot as plt
# Membaca dataset
car_sales = pd.read_csv("car-sales.csv")
# Melihat perbandingan Make dan Doors
pd.crosstab(
car_sales["Make"],
car_sales["Doors"]
)
# Mengelompokkan berdasarkan Make
car_sales.groupby(["Make"]).mean(numeric_only=True)
# Membuat line plot
car_sales["Odometer (KM)"].plot()
# Membuat histogram
car_sales["Odometer (KM)"].hist()
plt.show()
Contoh di atas menunjukkan bagaimana Pandas dapat digunakan untuk:
Membaca data
↓
Membandingkan data
↓
Mengelompokkan data
↓
Memvisualisasikan data
Contoh Data Cleaning dan Visualisasi
Jika Price masih berupa string:
car_sales["Price"] = car_sales["Price"].str.replace(
r"[\$\,\.]",
"",
regex=True
).astype(int)
car_sales["Price"] = car_sales["Price"] // 100
Setelah itu kita dapat membuat histogram:
car_sales["Price"].hist()
plt.show()
Dengan demikian, data yang awalnya tidak siap digunakan dapat dibersihkan terlebih dahulu sebelum dianalisis.
Pandas sebagai Bagian dari Workflow Data Science
Pada tahap ini kita mulai melihat bahwa Pandas bukan sekadar library untuk membuat tabel.
Pandas dapat digunakan untuk:
Membaca data
↓
Memeriksa data
↓
Memilih data
↓
Membersihkan data
↓
Mengelompokkan data
↓
Menganalisis data
↓
Mempersiapkan visualisasi
Karena itu Pandas menjadi salah satu tool penting dalam workflow Data Science.
Hubungan Pandas, Matplotlib, dan Machine Learning
Ketiga tool tersebut dapat memiliki peran berbeda.
Pandas
↓
Mengelola dan memahami data
↓
Matplotlib
↓
Memvisualisasikan data
↓
Scikit-Learn
↓
Membuat model Machine Learning
Contohnya:
CSV Dataset
↓
Pandas
↓
Data Cleaning
↓
Data Analysis
↓
Matplotlib
↓
Visualization
↓
Preprocessing
↓
Machine Learning
Workflow tersebut akan sering kita gunakan ketika membangun project Machine Learning.
Checklist Pemula
Setelah mempelajari materi ini, pastikan sudah memahami:
- Apa fungsi
pd.crosstab()? - Apa fungsi
.groupby()? - Apa perbedaan
crosstab()dangroupby()? - Apa fungsi line plot?
- Apa fungsi histogram?
- Apa hubungan Pandas dengan Matplotlib?
- Mengapa data perlu divisualisasikan?
- Apa yang dimaksud dengan data cleaning?
- Mengapa
$4,000.00dapat dianggap sebagai teks? - Mengapa data numerik perlu memiliki tipe yang sesuai?
- Apa fungsi
.str.replace()? - Mengapa menggunakan
regex=True? - Apa fungsi
.astype(int)? - Mengapa pada dataset tertentu perlu membagi nilai dengan
100? - Mengapa kita harus memahami format data sebelum melakukan cleaning?
Kesimpulan
Pada materi ini kita mulai menggunakan Pandas untuk melakukan analisis yang lebih bermakna terhadap dataset.
Untuk membandingkan data berdasarkan kategori, kita dapat menggunakan:
pd.crosstab(car_sales["Make"], car_sales["Doors"])
Untuk mengelompokkan data:
car_sales.groupby(["Make"]).mean(numeric_only=True)
Untuk visualisasi sederhana:
car_sales["Odometer (KM)"].plot()
dan:
car_sales["Odometer (KM)"].hist()
Kita juga belajar bahwa data mentah tidak selalu siap digunakan.
Contohnya:
"$4,000.00"
perlu dibersihkan sebelum dapat diperlakukan sebagai angka.
Salah satu contoh prosesnya:
car_sales["Price"] = car_sales["Price"].str.replace(
r"[\$\,\.]",
"",
regex=True
).astype(int)
Kemudian, jika format dataset memang menyebabkan dua digit desimal menjadi bagian dari angka integer:
car_sales["Price"] = car_sales["Price"] // 100
Konsep penting yang perlu diingat adalah:
Raw Data
↓
Data Cleaning
↓
Data Analysis
↓
Visualization
↓
Data Preparation
↓
Machine Learning
Pandas membantu kita memahami dan mempersiapkan data sebelum data tersebut digunakan lebih jauh dalam proses Machine Learning.