Mempercepat eksplorasi data menggunakan panda-profiling library

Pertama-tama, memulai dengan set data baru, Anda harus memahaminya. Untuk melakukan ini, perlu, misalnya, untuk mengetahui rentang nilai yang diterima oleh variabel, tipe mereka, dan juga untuk belajar tentang jumlah nilai yang hilang.

Perpustakaan panda memberi kita banyak alat yang berguna untuk melakukan Analisis Data Eksplorasi (EDA). Tetapi sebelum menggunakannya, Anda biasanya harus mulai dengan fungsi yang lebih umum, seperti df.describe (). Benar, harus dicatat bahwa kemungkinan yang disediakan oleh fungsi tersebut terbatas, dan tahap awal bekerja dengan set data selama EDA sangat sering sangat mirip satu sama lain.



Penulis materi yang kami terbitkan hari ini mengatakan bahwa ia bukan penggemar tindakan berulang. Akibatnya, dalam mencari alat untuk melakukan analisis data eksplorasi dengan cepat dan efisien, ia menemukan perpustakaan profil panda . Hasil karyanya dinyatakan bukan dalam bentuk indikator individu tertentu, tetapi dalam bentuk laporan HTML yang agak terperinci yang berisi sebagian besar informasi tentang data yang dianalisis yang mungkin perlu Anda ketahui sebelum mulai bekerja lebih dekat dengannya.

Di sini kita akan mempertimbangkan fitur-fitur menggunakan panda-profiling library menggunakan contoh dataset Titanic.

Analisis data eksplorasi panda


Saya memutuskan untuk bereksperimen dengan profil panda pada dataset Titanic karena fakta bahwa ia memiliki data dari berbagai jenis dan karena nilai-nilai yang hilang di dalamnya. Saya percaya bahwa panda-profiling library sangat menarik dalam kasus-kasus di mana data belum dibersihkan dan membutuhkan pemrosesan lebih lanjut, tergantung pada fitur-fiturnya. Agar berhasil melakukan pemrosesan tersebut, Anda perlu tahu di mana harus memulai dan apa yang harus dicari. Di sinilah fitur panda-profiling berguna.

Untuk memulai, kami mengimpor data dan menggunakan panda untuk mendapatkan indikator statistik deskriptif:

#    import pandas as pd import pandas_profiling import numpy as np #   df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv') #     df.describe() 

Setelah mengeksekusi kode ini, Anda mendapatkan apa yang ditunjukkan pada gambar berikut.


Metrik statistik deskriptif menggunakan alat panda standar

Meskipun berisi banyak informasi berguna, tidak ada semua yang menarik untuk dipelajari tentang data yang sedang dipelajari. Misalnya, kita dapat mengasumsikan bahwa dalam bingkai data, dalam struktur DataFrame , ada 891 DataFrame . Jika Anda perlu memeriksa ini, Anda akan memerlukan baris kode lain yang menentukan ukuran frame. Meskipun perhitungan ini tidak terlalu intensif sumber daya, pengulangan konstan mereka tentu akan menyebabkan hilangnya waktu, yang mungkin lebih baik dihabiskan untuk pembersihan data.

Analisis data eksplorasi menggunakan panda-profiling


Sekarang lakukan hal yang sama menggunakan panda-profiling:

 pandas_profiling.ProfileReport(df) 

Implementasi dari baris kode di atas akan memungkinkan Anda untuk menghasilkan laporan dengan indikator analisis data eksplorasi. Kode yang ditunjukkan di atas akan mengarah pada kesimpulan dari informasi data yang ditemukan, tetapi dapat dilakukan sehingga hasilnya akan menjadi file HTML, yang, misalnya, dapat ditampilkan kepada seseorang.

Bagian pertama dari laporan ini akan berisi bagian Tinjauan Umum, yang menyediakan informasi dasar tentang data (jumlah pengamatan, jumlah variabel, dan sebagainya). Selain itu, itu akan berisi daftar peringatan yang memberi tahu analis tentang apa yang harus Anda perhatikan. Peringatan ini bisa menjadi petunjuk di mana Anda bisa memfokuskan upaya Anda saat membersihkan data Anda.


Ikhtisar Bagian Laporan

Analisis Variabel Eksplorasi


Di belakang bagian Ikhtisar laporan, Anda dapat menemukan informasi yang berguna tentang setiap variabel. Antara lain, mereka termasuk diagram kecil yang menggambarkan distribusi masing-masing variabel.


Informasi Variabel Angka Numerik

Seperti yang dapat Anda lihat dari contoh sebelumnya, profil panda memberi kami beberapa indikator yang bermanfaat, seperti persentase dan jumlah nilai yang hilang, serta indikator statistik deskriptif yang telah kita lihat. Karena Age adalah variabel numerik, visualisasi distribusinya dalam bentuk histogram memungkinkan kita untuk menyimpulkan bahwa kita memiliki distribusi sudut kanan.

Ketika mempertimbangkan variabel kategori, indikator yang ditampilkan sedikit berbeda dari yang ditemukan untuk variabel numerik.


Informasi variabel kategorikal jenis kelamin

Yaitu, alih-alih menemukan rata-rata, minimum dan maksimum, perpustakaan profil panda menemukan jumlah kelas. Karena Sex adalah variabel biner, nilainya diwakili oleh dua kelas.

Jika Anda, seperti saya, ingin meneliti kode ini, maka Anda mungkin tertarik pada bagaimana tepatnya perpustakaan profil panda menghitung indikator-indikator ini. Mengetahui hal ini, mengingat bahwa kode perpustakaan terbuka dan tersedia di GitHub, tidak begitu sulit. Karena saya bukan penggemar menggunakan "kotak hitam" di proyek saya, saya melihat kode sumber perpustakaan. Misalnya, berikut adalah mekanisme untuk memproses variabel numerik yang diwakili oleh fungsi description_numeric_1d :

 def describe_numeric_1d(series, **kwargs):   """Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series).   Also create histograms (mini an full) of its distribution.   Parameters   ----------   series : Series       The variable to describe.   Returns   -------   Series       The description of the variable as a Series with index being stats keys.   """   # Format a number as a percentage. For example 0.25 will be turned to 25%.   _percentile_format = "{:.0%}"   stats = dict()   stats['type'] = base.TYPE_NUM   stats['mean'] = series.mean()   stats['std'] = series.std()   stats['variance'] = series.var()   stats['min'] = series.min()   stats['max'] = series.max()   stats['range'] = stats['max'] - stats['min']   # To avoid to compute it several times   _series_no_na = series.dropna()   for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):       # The dropna() is a workaround for https://github.com/pydata/pandas/issues/13098       stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)   stats['iqr'] = stats['75%'] - stats['25%']   stats['kurtosis'] = series.kurt()   stats['skewness'] = series.skew()   stats['sum'] = series.sum()   stats['mad'] = series.mad()   stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN   stats['n_zeros'] = (len(series) - np.count_nonzero(series))   stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)   # Histograms   stats['histogram'] = histogram(series, **kwargs)   stats['mini_histogram'] = mini_histogram(series, **kwargs)   return pd.Series(stats, name=series.name) 

Meskipun potongan kode ini mungkin tampak agak besar dan kompleks, pada kenyataannya, memahaminya sangat sederhana. Intinya adalah bahwa dalam kode sumber perpustakaan ada fungsi yang menentukan jenis variabel. Jika ternyata perpustakaan memenuhi variabel numerik, fungsi di atas akan menemukan indikator yang kami pertimbangkan. Fungsi ini menggunakan operasi panda standar untuk bekerja dengan objek dari tipe Series , seperti series.mean() . Hasil perhitungan disimpan dalam kamus stats . Histogram dibuat menggunakan versi yang disesuaikan dari fungsi matplotlib.pyplot.hist . Adaptasi bertujuan untuk mengaktifkan fungsi untuk bekerja dengan berbagai jenis set data.

Indikator korelasi dan sampel data yang dipelajari


Setelah hasil analisis variabel, panda-profiling, di bagian Korelasi, menampilkan matriks korelasi Pearson dan Spearman.


Matriks korelasi Pearson

Jika perlu, dimungkinkan, di baris kode yang memulai pembentukan laporan, untuk menetapkan nilai ambang yang digunakan dalam menghitung korelasi. Dengan melakukan ini, Anda dapat menunjukkan kekuatan korelasi apa yang dianggap penting untuk analisis Anda.

Akhirnya, laporan profil panda, di bagian Sampel, menampilkan, sebagai contoh, sepotong data yang diambil dari awal kumpulan data. Pendekatan ini dapat menyebabkan kejutan yang tidak menyenangkan, karena beberapa pengamatan pertama dapat menjadi sampel yang tidak mencerminkan fitur dari seluruh kumpulan data.


Bagian yang berisi data sampel

Akibatnya, saya tidak menyarankan untuk memperhatikan bagian terakhir ini. Sebagai gantinya, lebih baik menggunakan perintah df.sample(5) , yang secara acak akan memilih 5 case dari kumpulan data.

Ringkasan


Ringkasnya di atas, dapat dicatat bahwa panda-profiling library menyediakan analis dengan beberapa fitur yang berguna yang akan berguna dalam kasus-kasus di mana Anda perlu dengan cepat mendapatkan gambaran kasar umum tentang data atau mengirim seseorang laporan analisis data intelijen. Pada saat yang sama, pekerjaan nyata dengan data, dengan mempertimbangkan fitur-fiturnya, dilakukan, tanpa menggunakan profil panda, secara manual.

Jika Anda ingin melihat bagaimana seluruh analisis data intelijen terlihat dalam satu notebook-Jupyter - lihat ini proyek saya dibuat menggunakan nbviewer. Dan dalam repositori GitHub ini Anda dapat menemukan kode yang sesuai.

Pembaca yang budiman! Bagaimana Anda mulai menganalisis kumpulan data baru?

Source: https://habr.com/ru/post/id451478/


All Articles