Source: Ryerson University Halo haloo semua! Kembali lagi bersama saya Reyvan Maulid Pradistya di medium! Masih melanjutkan untuk challenge sebelumnya dari DQLAB dong tentunya. Sungguh sangat amat tertantang sekaliii kali ini. Pada pembahasan kali ini kita akan bergeser sedikit untuk membahas terkait dengan Data Quality with Python for Beginner tentunya diaplikasikan pada software Python. Tentunya konsep dasar dalam data quality menggunakan Python, yang mencakup data profiling sampai data cleansing dimana hal tersebut merupakan bagian yang penting dari proses pre-analysis. Namun, sebelumnya kita perlu mengetahui terlebih dahulu tentang sebenarnya apa itu Data Quality? Show
Mengapa kualitas data itu penting? Jadii, sudah tahu kan betapa pentingnya data quality dalam keputusan bisnis maupun skala industri di ranah data. Sekarang, saya akan mengajak kalian semua untuk masuk ke pembahasan masing-masing terkait Data Quality dimulai dari Data Profiling Data ProfilingPada bagian ini kamu akan mempelajari bagaimana memprofile suatu data secara statistik sehingga data kamu dapat dibersihkan (cleansing) nantinya. Apa itu Data Profiling?Pada bagian sebelumnya, kita sudah mempelajari mengenai exploratory data analysis, dimana Exploratory Data Analysis (EDA) adalah menggunakan pendekatan statistik yang bertujuan untuk menemukan dan meringkas sebuah dataset, mengetahui struktur dan hubungan antar variabel dalam dataset. EDA merupakan proses pre-analysis baik untuk descriptive analysis maupun predictive analysis. Dalam pembahasan ini, kita akan fokus pada satu aspek EDA, yaitu: Data Profiling! Data profiling adalah kegiatan merangkum dataset menggunakan statistik deskriptif. Tujuan dari pembuatan data profiling adalah untuk memiliki pemahaman yang kuat tentang data sehingga dapat mulai menyusun framework analisis dan memvisualisasikan data. Importing DataSebagai langkah pertama yang harus dilakukan adalah inisialisasi Library dan mengimport dataset tersebut ke dalam Python menggunakan library Pandas dan diassign sebagai retail_raw. Library yang perlu diimport adalah: (1) pandas, (2) numpy, (3) io, dan (4) pandas_profiling. Untuk dua library yang pertama importlah sebagai aliasnya. Datasetnya kalian bisa akses disini Inspeksi tipe dataDengan library Pandas, dapat menjalankan fungsi .dtypes untuk melihat data untuk setiap kolom termasuk tipe datanya. Dapat dilihat, terdapat beragam tipe data pada kolom retail raw. Dominan tipe data yang disajikan yaitu tipe data object. Seperti city, province, order_date, brand dan product_id Descriptive StatisticsDi bagian ini, kita akan mempelajari berbagai statistik deskriptif yang dapat digunakan untuk lebih memahami struktur data. LengthFungsi len menghitung jumlah pengamatan dalam suatu series / column. Fungsi len akan menghitung semua pengamatan, terlepas dari apakah ada null-value atau tidak (include missing value). Contoh penggunaan untuk mengetahui length dari kolom city dari dataframe retail_raw Selain kolom city, kita coba memulai analisis dengan menginspeksi length dari kolom product_id dari dataframe retail_raw Baik product_id maupun city, kedua kolom memiliki jumlah pengamatan yang sama yakni sebesar 5000 CountFungsi count menghitung jumlah pengamatan non-NA / non-null dalam suatu series / column. Fungsi len akan hanya menghitung elemen dari kolom yang mempunyai nilai (exclude missing value). Contoh penggunaan untuk mengetahui count dari kolom city dari dataframe retail_raw Sekarang, kita akan coba mengetahui jumlah non-null value dari kolom product_id dari dataframe retail_raw agar hasil analisisnya lebih lengkap Berdasarkan hasil output, jumlah non-null value pada kolom product_id dari dataframe retail_raw justru lebih banyak jika dibandingkan dengan kolom city. Lanjut ke bagian berikutnya. Missing ValueDengan Length dan Count, sekarang dapat menghitung jumlah missing-value. Jumlah nilai yang hilang adalah perbedaan antara Length dan Count. Sekarang, kita akan coba mengaplikasikannya untuk mencari missing value pada kolom city Selanjutnya, kita perlu mengetahui jumlah missing-value dari kolom tersebut. Ini artinya kita perlu membuat syntaks untuk menghitung persentase missing-value dari product_id! Jika ditilik dari segi nilai missing valuenya yang paling kecil adalah kolom product_id sebesar 0,2% jika dibandingkan dengan kolom city sebesar 0,3% Maximum dan MinimumFungsi max dan min digunakan untuk mengetahui element terbesar dan terkecil dari suatu kolom di dataframe. Mean, Medium, Modus dan Standard DeviasiFungsi mean, medium, modus dan standard deviasi digunakan untuk mengetahui pemusatan data dan persebarannya. Berikut kita aplikasikan pada kolom quantity untuk mengetahui analisis statistik deskriptifnya Selanjutnya, kita akan coba mengeahui statistics deskriptif untuk data item_price dari dataframe retail_raw! Berupa max, min, mean, median, dan std Quantile StatisticsQuantiles adalah titik potong yang membagi distribusi dalam ukuran yang sama. Jika akan membagi distribusi menjadi empat grup yang sama, kuantil yang dibuat dinamai quartile. Jika dibagi kedalam 10 sepuluh group yang sama dinamakan percentile. Dalam kasus di bawah ini, ingin membagi distribusi menjadi empat grup atau quartile. Berikut kita aplikasikan pada kolom quantity untuk mengetahui berapa besar nilai quantile Sekarang saatnya lanjut untuk membuat distribusi quartile dari item_price dari dataframe retail_raw. CorrelationKorelasi adalah cara yang tepat untuk menemukan hubungan antara variabel numerik. Koefisien korelasi berkisar antara -1 hingga 1. Korelasi 1 adalah korelasi positif total, korelasi -1 adalah korelasi negatif total dan korelasi 0 adalah korelasi non-linear. Saatnya kita akan mengetahui berapa korelasinya dan keeratan hubungan antara quantity dan item_price? Ternyata, setelah diketahui terdapat hubungan negatif antara quantity dan item_price. Serta nilai korelasi yang dihasilkan mendekati 0 yaitu 0,134. Artinya adalah semakin mahal harga suatu produk maka konsumen akan menghemat untuk membeli dengan quantity atau jumlah yang justru lebih sedikit. Penggunaan Profiling LibrariesSeperti yang terlihat di atas, mengumpulkan statistik deskriptif dapat menjadi proses yang panjang. Pandas Profiling library memiliki function yang dapat membuat profiling data secara otomatis. Untuk dapat menggunakannya, cukup dengan memanggil library: Syntax: Contoh penggunaan untuk dataset retail_raw: Mengingat output yang ditampilkan kaya akan penggunaan javascript, maka silakan klik tautan berikut ini untuk dibuka di tab baru browser kamu untuk melihat profiling report dari data frame retail_raw yang telah DQLab buatkan. Akan dapat memahami proses profiling data yang menerapkan EDA (exploratory data analysis) dari report yang di-generate menggunakan library pandas_profiling melalui method ProfileReport Apa itu Data Cleansing?Selanjutnya, setelah kita mengetahui data profilling kita beralih pembahasan mengenai Data Cleansing Data Cleansing berarti proses mengidentifikasi bagian data yang salah, tidak lengkap, tidak akurat, tidak relevan atau hilang dan kemudian memodifikasi, mengganti atau menghapusnya sesuai dengan kebutuhan. Data Cleansing dianggap sebagai elemen dasar dari Data Science Pada bagian ini, akan membahas data cleansing dari treatment terhadap missing data, treatment outliers, sampai deduplikasi data. Missing DataDataset yang ditemui di real-world biasanya akan memiliki banyak missing value. Kemampuan untuk treatment missing value sangat penting karena jika membiarkan missing value itu dapat memengaruhi analisis dan machine learning model. Sehingga jika menemukan nilai yang hilang dalam dataset, harus melakukan treatment sedemikian rupa. Cara check kolom yang mempunyai missing value: Cara treatment terhadap missing-value antara lain:
Imputasi merupakan suatu metode treatment terhadap missing value dengan mengisinya menggunakan teknik tertentu. Bisa menggunakan mean, modus ataupun menggunakan predictive modelling. Pada pemmbahasan kali ini kita akan membahas mengenai pemanfaatan function fillna dari Pandas untuk imputasi ini, yaitu .function() yang dimaksud pada syntax di atas adalah penggunaa fungsi .mean() atau .mode(). Penggunaan fungsi .mean() atau .mode() ini bergantung pada kondisi yang mengharuskan menggunakan nilai rata — rata atau modus dari kolom yang akan diimputasi, seperti nama_dataframe['nama_kolom'].fillna(nama_dataframe.nama_kolom.mean()) atau nama_dataframe['nama_kolom'].fillna(nama_dataframe.nama_kolom.modus()) Drop row yang mengandung missing value. Dapat menggunakan function dropna dari Pandas Untuk menangani missing data pada retail_raw,
Terdapat 5 kolom yang terindikasi missing data dengan data type Boolean
Tugas PraktekBagaimana temen-temen? Sampai sejauh ini apakah sudah paham? Sudah, sejauh ini paham sih. apalagi tiap subbab ada latihan singkatnya, banyak banget lagi! Cuma sedikit kendala saja soal missing value. YES! Me Too! Missing value memang bagian yang paling membuat penasaran karena sedari tadi kita berkutat dengan persoalan ini. Kali ini kita akan coba melengkapi missing value tersebut dengan mean dari item_price. Berikut caranya: OutliersOutliers merupakan data observasi yang muncul dengan nilai-nilai ekstrim. Yang dimaksud dengan nilai-nilai ekstrim dalam observasi adalah nilai yang jauh atau beda sama sekali dengan sebagian besar nilai lain dalam kelompoknya. Cara treatment terhadap outliers antara lain:
Pada umumnya, outliers dapat ditentukan dengan metric IQR (interquartile range). Rumus dasar dari IQR: Q3 — Q1, dan data suatu observasi dapat dikatakan outliers jika memenuhi kedua syarat dibawah ini:
Syntax di Python: Kemudian untuk membuang outliersnya: Mari melihat penggunaannya pada dataframe retail_raw untuk kolom quantity! Dapat dilihat pada hasil ukuran baris dan kolom setelah data yang outliersnya dibuang dari yang awalnya 5000 kini menjadi 4699 Tugas PraktekSetelah berhasil mengatasi missing value tadi, kita memutuskan untuk mencoba menemukan sejumlah outliers menggunakan IQR. Dengan begitu, kita bisa mengetahui berapa IQR dari variabel item_price. Dapat dilihat pada hasil ukuran baris dan kolom setelah data yang outliersnya dibuang dari yang awalnya 4699 kini menjadi 4379 pada kolom item_price Deduplikasi DataDuplikasi data merupakan data dengan kondisi pada row-row tertentu memiliki kesamaan data di seluruh kolomnya. Tentunya ada data yang duplikat dalam dataset yang dimiliki. Kondisi duplikasi harus diatasi dengan jalan mengeliminir baris yang mengalami duplikasi, sehingga proses ini dikenal dengan deduplikasi. Untuk mencek duplikasi data: Syntax untuk membuang duplikasi: Tugas PraktekTerakhir lagi menuju selesai! Kita tinggal membuang duplikasi data dari dataset review_raw. YEYEYYEYEYE!!! Dapat disimpulkan bahwa terdapat 6 data yang terduplikasi sehingga yang awalnya berjumlah 4379 kini menjadi 4373 data saja Case Studi: Data ProfilingSetelah kita memahami materinya, saatnya kita bergegas menuju Case Studyy yuhuuu!! Berikut ini adalah dataset yang bisa kalian gunakan. Bisa diakses disini ya! Kamu bisa memprosesnya dengan cara berikut:
Berikut syntaxnya: Selanjutnya, kita akan menjawab pertanyaan pertama yaitu inspeksi data teratas (disajikan hanya 5 data teratas menurut nomor invoice dan nomor CustomerID) Kemudian, kita akan mengetahui berapa besar persentase yang diperoleh dari missing value tersebut Dapat diketahui bahwa hanya ada satu kolom yang memiliki missing value yaitu kolom Quantity dengan persentase sebesar 4% (ditandai dengan True) Case Study: Data Cleansing — Part 1Untuk memprosesnya bisa dilakukan dengan cara berikut:
Sebelum menentukannya maka nilai yang berada di atas atau dibawah whisker dinamakan nilai outlier atau ekstrim. Boxplots dapat membantu kita dalam memahami karakteristik dari distribusi data. Selain untuk melihat derajat penyebaran data (yang dapat dilihat dari tinggi/panjang boxplot) juga dapat digunakan untuk menilai kesimetrisan sebaran data. Panjang kotak menggambarkan tingkat penyebaran atau keragaman data pengamatan, sedangkan letak median dan panjang whisker menggambarkan tingkat kesimetrisannya. Berdasarkan boxplots diatas, kolom unit price menunjukkan adanya nilai outliers. Adanya outlier di bagian atas boxplot yang disertai dengan whisker bagian atas yang lebih panjang, menunjukkan bahwa distribusi data cenderung menjulur ke arah kanan (positive skewness).Case Study: Data Cleansing — Part 2Langkah selanjutnya bisa dilakukan dengan cara berikut:
Dapat disimpulkan bahwa setelah dilakukan checking duplikasi dan melakukan duplikasi data didapatkan jumlah sebesar 505 data Penutup/KesimpulanCongratulations! Akhirnya kita telah menyelesaikan modul Data Quality with Python for Beginner. Berdasarkan materi-materi yang diberikan dan yang telah kupelajari dan praktekkan dalam modul ini, akhirnya saya dan kalian semua telah mendapatkan pengetahuan (knowledge) dan praktek (skill) yang diantaranya :
_________________________________________________________________ Oke, kalau begitu sekian dulu pembahasan kita kali ini. Terima kasih atas kesediaan kalian dan waktu yang telah diluangkan untuk membaca tulisan ini. Semoga bermanfaat! Happy Weekend! Sampai Jumpa lagi di next topic! Selamat menikmati liburan akhir tahun semuanyaa!
REFERENSI: Data Quality With Python For Beginner Data Mentor: Kevin Stewart — Senior Data Analyst at Traveloka |