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.
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
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.
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.
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.
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.
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
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.
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.
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
Pembaca yang terhormat Di mana Anda mulai menganalisis kumpulan data baru?
Sumber: www.habr.com