Cara menggunakan COMPRHEND pada Python

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?

Dilansir dari SearchDataManagement, data quality atau kualitas data adalah ukuran kondisi data berdasarkan faktor-faktor seperti akurasi, kelengkapan, konsistensi, reliabilitas dan mutakhir. Mengukur tingkat kualitas data dapat membantu organisasi mengidentifikasi kesalahan data yang perlu diselesaikan dan menilai apakah data dalam sistem TI mereka sesuai untuk memenuhi tujuan yang dimaksudkan.

Mengapa kualitas data itu penting?
Data yang buruk dapat memiliki konsekuensi bisnis yang signifikan bagi perusahaan. Data berkualitas buruk sering dipatok sebagai sumber gangguan operasional, analitik yang tidak akurat, dan strategi bisnis yang menimbulkan kesalahpahaman. Contoh salah satu akibat buruknya kualitas data misalnya mencakup biaya tambahan ketika produk dikirim ke alamat pelanggan yang salah, kehilangan peluang penjualan karena catatan pelanggan yang salah atau tidak lengkap, dan denda untuk pelaporan keuangan atau kepatuhan peraturan yang tidak tepat

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 Profiling

Pada 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 Data

Sebagai 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 data

Dengan 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 Statistics

Di bagian ini, kita akan mempelajari berbagai statistik deskriptif yang dapat digunakan untuk lebih memahami struktur data.

Length

Fungsi 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

Count

Fungsi 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 Value

Dengan 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 Minimum

Fungsi max dan min digunakan untuk mengetahui element terbesar dan terkecil dari suatu kolom di dataframe.

Mean, Medium, Modus dan Standard Deviasi

Fungsi 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 Statistics

Quantiles 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.

Correlation

Korelasi 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 Libraries

Seperti 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 Data

Dataset 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:

  1. Leave as it is (dibiarkan)
  2. Filling the missing value (imputasi)
  3. Drop them (hapus row yang mengandung missing value)

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,

  • Ceklah jika terdapat missing value pada variabel dataframe, dan kemudian cetak ke console

Terdapat 5 kolom yang terindikasi missing data dengan data type Boolean

  • Imputasi missing value pada kolom quantity dengan menggunaan nilai rataan (mean), dan kemudian cetak ke console
  • Drop-lah missing value pada kolom quantity, dan kemudian cetak ke console

Tugas Praktek

Bagaimana 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:

Outliers

Outliers 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:

  1. Remove the outliers (dibuang)
  2. Filling the missing value (imputasi)
  3. Capping
  4. Prediction

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:

  • < Q1–1.5 * IQR
  • > Q3 + 1.5 * IQR

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 Praktek

Setelah 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 Data

Duplikasi 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 Praktek

Terakhir 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 Profiling

Setelah 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:

  1. Import dataset csv ke variable bernama uncleaned_raw
  2. Inspeksi dataframe uncleaned_raw
  3. Check kolom yang mengandung missing value, jika ada, kolom apakah itu dan berapa persen missing value pada kolom tersebut?
  4. Mengisi missing value tersebut dengan mean dari kolom tersebut!

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 1

Untuk memprosesnya bisa dilakukan dengan cara berikut:

  1. Mengetahui kolom yang memiliki outliers! Gunakan visualisasi dengan boxplot pada dataframe uncleaned_raw.

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 2

Langkah selanjutnya bisa dilakukan dengan cara berikut:

  1. Melakukan proses removing outliers pada kolom UnitPrice.
  2. Checking duplikasi and melakukan deduplikasi dataset tersebut!

Dapat disimpulkan bahwa setelah dilakukan checking duplikasi dan melakukan duplikasi data didapatkan jumlah sebesar 505 data

Penutup/Kesimpulan

Congratulations! 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 :

  • Mampu melakukan profiling data baik untuk data angka maupun teks
  • Mampu membuat rule untuk data cleansing (standarisasi data, value lookup, dan treatment duplikasi data)

_________________________________________________________________

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!

Data Quality requires a certain level of sophistication within a company to even understand that it’s a problem — Colleen Graham

REFERENSI:

Data Quality With Python For Beginner

Data Mentor: Kevin Stewart — Senior Data Analyst at Traveloka