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.
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
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.
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.
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.
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.
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
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.
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.
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
Pembaca yang dihormati! Di manakah anda mula menganalisis set data baharu?
Sumber: www.habr.com