Mempercepatkan analisis data penerokaan menggunakan perpustakaan berprofil panda

Langkah pertama apabila mula bekerja dengan set data baharu ialah memahaminya. Untuk melakukan ini, anda perlu, sebagai contoh, untuk mengetahui julat nilai yang diterima oleh pembolehubah, jenisnya, dan juga mengetahui tentang bilangan nilai yang hilang.

Perpustakaan panda menyediakan kita dengan banyak alat berguna untuk melaksanakan analisis data penerokaan (EDA). Tetapi sebelum anda menggunakannya, anda biasanya perlu bermula dengan fungsi yang lebih umum seperti df.describe(). Walau bagaimanapun, perlu diingatkan bahawa keupayaan yang disediakan oleh fungsi sedemikian adalah terhad, dan peringkat awal bekerja dengan mana-mana set data apabila melaksanakan EDA selalunya hampir sama antara satu sama lain.

Mempercepatkan analisis data penerokaan menggunakan perpustakaan berprofil panda

Pengarang bahan yang kami terbitkan hari ini mengatakan bahawa dia bukan peminat melakukan tindakan berulang. Akibatnya, dalam mencari alat untuk melaksanakan analisis data penerokaan dengan cepat dan cekap, dia menemui perpustakaan panda-profiling. Hasil kerjanya dinyatakan bukan dalam bentuk penunjuk individu tertentu, tetapi dalam bentuk laporan HTML yang agak terperinci yang mengandungi kebanyakan maklumat tentang data yang dianalisis yang mungkin perlu anda ketahui sebelum mula bekerja dengan lebih dekat dengannya.

Di sini kita akan melihat ciri menggunakan perpustakaan berprofil panda menggunakan set data Titanic sebagai contoh.

Analisis data penerokaan menggunakan panda

Saya memutuskan untuk bereksperimen dengan profil panda pada dataset Titanic kerana jenis data yang berbeza yang terkandung di dalamnya dan kehadiran nilai yang hilang di dalamnya. Saya percaya bahawa perpustakaan berprofil panda sangat menarik dalam kes di mana data masih belum dibersihkan dan memerlukan pemprosesan lanjut bergantung pada ciri-cirinya. Untuk berjaya melaksanakan pemprosesan sedemikian, anda perlu tahu di mana untuk bermula dan apa yang perlu diberi perhatian. Di sinilah keupayaan profil panda berguna.

Mula-mula, kami mengimport 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()

Selepas melaksanakan sekeping kod ini, anda akan mendapat apa yang ditunjukkan dalam rajah berikut.

Mempercepatkan analisis data penerokaan menggunakan perpustakaan berprofil panda
Statistik deskriptif diperoleh menggunakan alat panda standard

Walaupun terdapat banyak maklumat berguna di sini, ia tidak mengandungi semua yang menarik untuk diketahui tentang data yang dikaji. Sebagai contoh, seseorang mungkin menganggap bahawa dalam bingkai data, dalam struktur DataFrame, terdapat 891 baris. Jika ini perlu diperiksa, maka baris kod lain diperlukan untuk menentukan saiz bingkai. Walaupun pengiraan ini tidak terlalu intensif sumber, mengulanginya sepanjang masa pasti akan membuang masa yang mungkin lebih baik dibelanjakan untuk membersihkan data.

Analisis data penerokaan menggunakan profil panda

Sekarang mari kita lakukan perkara yang sama menggunakan profil panda:

pandas_profiling.ProfileReport(df)

Melaksanakan baris kod di atas akan menghasilkan laporan dengan penunjuk analisis data penerokaan. Kod yang ditunjukkan di atas akan mengeluarkan data yang ditemui, tetapi anda boleh menjadikannya mengeluarkan fail HTML yang boleh anda tunjukkan kepada seseorang, contohnya.

Bahagian pertama laporan akan mengandungi bahagian Gambaran Keseluruhan, memberikan maklumat asas tentang data (bilangan pemerhatian, bilangan pembolehubah, dll.). Ia juga akan mengandungi senarai makluman, memberitahu penganalisis tentang perkara yang perlu diberi perhatian khusus. Makluman ini boleh memberikan petunjuk tentang tempat anda boleh memfokuskan usaha pembersihan data anda.

Mempercepatkan analisis data penerokaan menggunakan perpustakaan berprofil panda
Bahagian laporan gambaran keseluruhan

Analisis Pembolehubah Penerokaan

Di bawah bahagian Gambaran Keseluruhan laporan anda boleh mendapatkan maklumat berguna tentang setiap pembolehubah. Ia termasuk, antara lain, carta kecil yang menerangkan taburan setiap pembolehubah.

Mempercepatkan analisis data penerokaan menggunakan perpustakaan berprofil panda
Mengenai Pembolehubah Angka Umur

Seperti yang anda boleh lihat daripada contoh sebelumnya, profil panda memberi kita beberapa petunjuk berguna, seperti peratusan dan bilangan nilai yang hilang, serta ukuran statistik deskriptif yang telah kita lihat. Kerana Age ialah pembolehubah berangka, visualisasi taburannya dalam bentuk histogram membolehkan kita membuat kesimpulan bahawa kita mempunyai taburan yang condong ke kanan.

Apabila mempertimbangkan pembolehubah kategori, hasil keluaran adalah sedikit berbeza daripada yang ditemui untuk pembolehubah berangka.

Mempercepatkan analisis data penerokaan menggunakan perpustakaan berprofil panda
Mengenai pembolehubah kategori Seks

Iaitu, daripada mencari purata, minimum dan maksimum, perpustakaan profil panda menemui bilangan kelas. Kerana Sex β€” pembolehubah binari, nilainya diwakili oleh dua kelas.

Jika anda suka memeriksa kod seperti yang saya lakukan, anda mungkin berminat dengan cara tepat pustaka profil panda mengira metrik ini. Mengetahui tentang perkara ini, memandangkan kod perpustakaan dibuka dan tersedia di GitHub, tidaklah begitu sukar. Oleh kerana saya bukan peminat besar menggunakan kotak hitam dalam projek saya, saya melihat kod sumber perpustakaan. Sebagai contoh, inilah rupa mekanisme untuk memproses pembolehubah berangka, diwakili oleh fungsi tersebut describe_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)

Walaupun sekeping kod ini mungkin kelihatan agak besar dan kompleks, ia sebenarnya sangat mudah untuk difahami. Maksudnya ialah dalam kod sumber perpustakaan terdapat fungsi yang menentukan jenis pembolehubah. Jika ternyata perpustakaan telah menemui pembolehubah berangka, fungsi di atas akan mencari metrik yang kami lihat. Fungsi ini menggunakan operasi panda standard untuk bekerja dengan objek jenis Series, seperti series.mean(). Hasil pengiraan disimpan dalam kamus stats. Histogram dijana menggunakan versi fungsi yang disesuaikan matplotlib.pyplot.hist. Penyesuaian bertujuan untuk memastikan bahawa fungsi boleh berfungsi dengan pelbagai jenis set data.

Penunjuk korelasi dan data sampel yang dikaji

Selepas keputusan analisis pembolehubah, panda-profiling, di bahagian Correlations, akan memaparkan matriks korelasi Pearson dan Spearman.

Mempercepatkan analisis data penerokaan menggunakan perpustakaan berprofil panda
Matriks korelasi Pearson

Jika perlu, anda boleh, dalam baris kod yang mencetuskan penjanaan laporan, menetapkan penunjuk nilai ambang yang digunakan semasa mengira korelasi. Dengan melakukan ini, anda boleh menentukan kekuatan korelasi yang dianggap penting untuk analisis anda.

Akhir sekali, laporan profil panda, dalam bahagian Sampel, memaparkan, sebagai contoh, sekeping data yang diambil dari permulaan set data. Pendekatan ini boleh membawa kepada kejutan yang tidak menyenangkan, kerana beberapa pemerhatian pertama mungkin mewakili sampel yang tidak mencerminkan ciri keseluruhan set data.

Mempercepatkan analisis data penerokaan menggunakan perpustakaan berprofil panda
Bahagian yang mengandungi data sampel yang dikaji

Akibatnya, saya tidak mengesyorkan memberi perhatian kepada bahagian terakhir ini. Sebaliknya, lebih baik menggunakan arahan df.sample(5), yang akan memilih 5 pemerhatian secara rawak daripada set data.

Keputusan

Untuk meringkaskan, perpustakaan berprofil panda memberi penganalisis beberapa keupayaan berguna yang akan berguna dalam kes di mana anda perlu mendapatkan gambaran kasar data dengan cepat atau menyampaikan laporan analisis perisikan kepada seseorang. Pada masa yang sama, kerja sebenar dengan data, dengan mengambil kira ciri-cirinya, dilakukan, tanpa menggunakan profil panda, secara manual.

Jika anda ingin melihat rupa semua analisis data perisikan dalam satu buku nota Jupyter, sila lihat ini projek saya dibuat menggunakan nbviewer. Dan dalam ini Anda boleh mencari kod yang sepadan dalam repositori GitHub.

Pembaca yang dihormati! Di manakah anda mula menganalisis set data baharu?

Mempercepatkan analisis data penerokaan menggunakan perpustakaan berprofil panda

Sumber: www.habr.com

Tambah komen