Mempercepat analisis data eksplorasi menggunakan pustaka profil pandas

Langkah pertama saat mulai bekerja dengan kumpulan data baru adalah memahaminya. Untuk melakukan ini, Anda perlu, misalnya, mengetahui rentang nilai yang diterima oleh variabel, jenisnya, dan juga mencari tahu jumlah nilai yang hilang.

Pustaka pandas memberi kita banyak alat yang berguna untuk melakukan analisis data eksplorasi (EDA). Namun sebelum menggunakannya, Anda biasanya perlu memulai dengan fungsi yang lebih umum seperti df.describe(). Namun, perlu dicatat bahwa kemampuan yang disediakan oleh fungsi-fungsi tersebut terbatas, dan tahap awal bekerja dengan kumpulan data apa pun saat melakukan EDA seringkali sangat mirip satu sama lain.

Mempercepat analisis data eksplorasi menggunakan pustaka profil pandas

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

Di sini kita akan melihat fitur penggunaan perpustakaan profil pandas menggunakan dataset Titanic sebagai contoh.

Analisis data eksplorasi menggunakan panda

Saya memutuskan untuk bereksperimen dengan pembuatan profil panda pada kumpulan data Titanic karena berbagai jenis data yang dikandungnya dan adanya nilai yang hilang di dalamnya. Saya percaya bahwa perpustakaan profiling pandas sangat menarik ketika data belum dibersihkan dan memerlukan pemrosesan lebih lanjut tergantung pada karakteristiknya. Agar berhasil melakukan pemrosesan tersebut, Anda perlu tahu harus mulai dari mana dan apa yang harus diperhatikan. Di sinilah kemampuan pembuatan profil panda berguna.

Pertama, kita mengimpor data dan menggunakan panda untuk mendapatkan 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 potongan kode ini, Anda akan mendapatkan apa yang ditunjukkan pada gambar berikut.

Mempercepat analisis data eksplorasi menggunakan pustaka profil pandas
Statistik deskriptif diperoleh dengan menggunakan alat pandas standar

Meskipun terdapat banyak informasi berguna di sini, namun tidak memuat semua hal yang menarik untuk diketahui tentang data yang diteliti. Misalnya, orang mungkin berasumsi bahwa dalam bingkai data, dalam suatu struktur DataFrame, ada 891 baris. Jika ini perlu diperiksa, maka diperlukan baris kode lain untuk menentukan ukuran frame. Meskipun penghitungan ini tidak memerlukan banyak sumber daya, mengulanginya sepanjang waktu akan membuang-buang waktu yang mungkin lebih baik digunakan untuk membersihkan data.

Analisis data eksplorasi menggunakan pandas-profiling

Sekarang mari kita lakukan hal yang sama menggunakan profil pandas:

pandas_profiling.ProfileReport(df)

Mengeksekusi baris kode di atas akan menghasilkan laporan dengan indikator analisis data eksplorasi. Kode yang ditunjukkan di atas akan menampilkan data yang ditemukan, tetapi Anda dapat membuatnya menampilkan file HTML yang dapat Anda perlihatkan kepada seseorang, misalnya.

Bagian pertama laporan akan berisi bagian Ikhtisar, yang memberikan informasi dasar tentang data (jumlah pengamatan, jumlah variabel, dll.). Ini juga akan berisi daftar peringatan, memberi tahu analis tentang hal-hal yang perlu diperhatikan secara khusus. Peringatan ini dapat memberikan petunjuk tentang di mana Anda dapat memfokuskan upaya pembersihan data.

Mempercepat analisis data eksplorasi menggunakan pustaka profil pandas
Bagian laporan ikhtisar

Analisis Variabel Eksplorasi

Di bawah bagian Ikhtisar laporan, Anda dapat menemukan informasi berguna tentang setiap variabel. Hal ini mencakup, antara lain, bagan kecil yang menggambarkan distribusi setiap variabel.

Mempercepat analisis data eksplorasi menggunakan pustaka profil pandas
Tentang Variabel Numerik Usia

Seperti yang bisa Anda lihat dari contoh sebelumnya, pembuatan profil panda memberi kita beberapa indikator berguna, seperti persentase dan jumlah nilai yang hilang, serta ukuran statistik deskriptif yang telah kita lihat. Karena Age merupakan variabel numerik, visualisasi distribusinya dalam bentuk histogram memungkinkan kita menyimpulkan bahwa distribusi kita condong ke kanan.

Saat mempertimbangkan variabel kategori, hasil keluarannya sedikit berbeda dari hasil variabel numerik.

Mempercepat analisis data eksplorasi menggunakan pustaka profil pandas
Tentang variabel kategori Jenis Kelamin

Yaitu, alih-alih mencari rata-rata, minimum dan maksimum, perpustakaan profil pandas menemukan jumlah kelas. Karena Sex β€” variabel biner, nilainya diwakili oleh dua kelas.

Jika Anda ingin memeriksa kode seperti yang saya lakukan, Anda mungkin tertarik pada bagaimana sebenarnya perpustakaan profil pandas menghitung metrik ini. Mencari tahu tentang hal ini, mengingat kode perpustakaan terbuka dan tersedia di GitHub, tidaklah terlalu sulit. Karena saya bukan penggemar berat penggunaan kotak hitam dalam proyek saya, saya melihat kode sumber perpustakaan. Misalnya, seperti inilah mekanisme pemrosesan variabel numerik yang diwakili oleh fungsi deskripsikan_numerik_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 cukup besar dan rumit, sebenarnya sangat mudah untuk dipahami. Intinya di dalam source code perpustakaan terdapat fungsi yang menentukan jenis variabel. Jika ternyata perpustakaan menemukan variabel numerik, fungsi di atas akan menemukan metrik yang kita lihat. Fungsi ini menggunakan operasi panda standar untuk bekerja dengan objek bertipe Series, menyukai series.mean(). Hasil perhitungan disimpan dalam kamus stats. Histogram dihasilkan menggunakan versi fungsi yang diadaptasi matplotlib.pyplot.hist. Adaptasi ditujukan untuk memastikan bahwa fungsi tersebut dapat bekerja dengan berbagai jenis kumpulan data.

Indikator korelasi dan data sampel diteliti

Setelah hasil analisis variabel, pandas-profiling pada bagian Korelasi akan menampilkan matriks korelasi Pearson dan Spearman.

Mempercepat analisis data eksplorasi menggunakan pustaka profil pandas
Matriks korelasi Pearson

Jika perlu, Anda dapat, di baris kode yang memicu pembuatan laporan, mengatur indikator nilai ambang batas yang digunakan saat menghitung korelasi. Dengan melakukan ini, Anda dapat menentukan kekuatan korelasi apa yang dianggap penting untuk analisis Anda.

Terakhir, laporan pembuatan profil panda, di bagian Sampel, menampilkan, sebagai contoh, sepotong data yang diambil dari awal kumpulan data. Pendekatan ini dapat menimbulkan kejutan yang tidak menyenangkan, karena beberapa observasi pertama mungkin mewakili sampel yang tidak mencerminkan karakteristik keseluruhan kumpulan data.

Mempercepat analisis data eksplorasi menggunakan pustaka profil pandas
Bagian berisi data sampel yang diteliti

Oleh karena itu, saya tidak menyarankan untuk memperhatikan bagian terakhir ini. Sebaliknya, lebih baik menggunakan perintah df.sample(5), yang secara acak akan memilih 5 observasi dari kumpulan data.

Hasil

Ringkasnya, pustaka profiling panda memberi analis beberapa kemampuan berguna yang akan berguna jika Anda perlu dengan cepat mendapatkan gambaran kasar tentang data atau meneruskan laporan analisis intelijen kepada seseorang. Pada saat yang sama, pekerjaan nyata dengan data, dengan mempertimbangkan fitur-fiturnya, dilakukan, seperti tanpa menggunakan profil panda, secara manual.

Jika Anda ingin melihat seperti apa semua analisis data intelijen dalam satu buku catatan Jupyter, lihatlah ini proyek saya dibuat menggunakan nbviewer. Dan masuk ini Anda dapat menemukan kode yang sesuai di repositori GitHub.

Pembaca yang terhormat Di mana Anda mulai menganalisis kumpulan data baru?

Mempercepat analisis data eksplorasi menggunakan pustaka profil pandas

Sumber: www.habr.com

Tambah komentar