De earste stap as jo begjinne te wurkjen mei in nije dataset is it te begripen. Om dit te dwaan, moatte jo bygelyks de berikken fan wearden útfine dy't aksepteare binne troch de fariabelen, har soarten, en ek útfine oer it oantal ûntbrekkende wearden.
De pandasbibleteek biedt ús in protte nuttige ark foar it útfieren fan ferkennende gegevensanalyse (EDA). Mar foardat jo se brûke, moatte jo meastal begjinne mei mear algemiene funksjes lykas df.describe(). It moat lykwols opmurken wurde dat de mooglikheden fan sokke funksjes beheind binne, en de earste fazen fan wurkjen mei alle datasets by it útfieren fan EDA binne heul faak tige ferlykber mei elkoar.
De skriuwer fan it materiaal dat wy hjoed publisearje seit dat hy gjin fan is fan it útfieren fan repetitive aksjes. As gefolch, op syk nei ark om fluch en effisjint ferkennende gegevensanalyse út te fieren, fûn hy de bibleteek
Hjir sille wy sjen nei de funksjes fan it brûken fan de pandas-profilearjende bibleteek mei de Titanic-dataset as foarbyld.
Exploratory data analyze mei help fan pandas
Ik besleat om te eksperimintearjen mei panda-profilearring op 'e Titanic-dataset fanwegen de ferskate soarten gegevens dy't it befettet en de oanwêzigens fan ûntbrekkende wearden deryn. Ik leau dat de pandas-profilearjende bibleteek foaral ynteressant is yn gefallen wêr't de gegevens noch net skjinmakke binne en fierdere ferwurking fereasket ôfhinklik fan har skaaimerken. Om sa'n ferwurking mei súkses út te fieren, moatte jo witte wêr't jo moatte begjinne en wêr't jo op moatte betelje. Dit is wêr't pandas-profilearjen mooglikheden fan pas komme.
Earst ymportearje wy de gegevens en brûke panda's om beskriuwende statistiken te krijen:
# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np
# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')
# вычисление показателей описательной статистики
df.describe()
Nei it útfieren fan dit stik koade, krije jo wat yn 'e folgjende figuer wurdt werjûn.
Beskriuwende statistiken krigen mei standert pandas-ark
Hoewol d'r hjir in protte nuttige ynformaasje is, befettet it net alles dat ynteressant wêze soe om te witten oer de ûndersochte gegevens. Bygelyks, men soe oannimme dat yn in gegevens frame, yn in struktuer DataFrame
, der binne 891 rigen. As dit kontrolearre wurde moat, dan is in oare rigel koade nedich om de grutte fan it frame te bepalen. Hoewol dizze berekkeningen net bysûnder boarne-yntinsyf binne, is it hieltyd werheljen fan tiid bûn oan fergriemen fan tiid dy't wierskynlik better koe wurde bestege oan it skjinmeitsjen fan de gegevens.
Exploratory gegevensanalyse mei help fan pandas-profilearring
Litte wy no itselde dwaan mei pandas-profiling:
pandas_profiling.ProfileReport(df)
It útfieren fan de boppesteande rigel fan koade sil in rapport generearje mei yndikatoaren foar ferkennende gegevensanalyse. De hjirboppe werjûn koade sil de fûne gegevens útfiere, mar jo kinne it in HTML-bestân meitsje dat jo bygelyks oan ien sjen kinne.
It earste diel fan it rapport sil in Oersjoch seksje befetsje, dy't basisynformaasje jout oer de gegevens (oantal observaasjes, oantal fariabelen, ensfh.). It sil ek in list mei warskôgings befetsje, de analist ynformearje oer dingen om spesjaal omtinken oan te jaan. Dizze warskôgings kinne oanwizings leverje oer wêr't jo jo ynspanningen foar opromjen fan gegevens kinne fokusje.
Oersjoch rapport seksje
Exploratory Variable Analysis
Under de seksje Oersjoch fan it rapport kinne jo nuttige ynformaasje fine oer elke fariabele. Se befetsje ûnder oare lytse diagrammen dy't de ferdieling fan elke fariabele beskriuwe.
Oer de Age Numerike fariabele
Lykas jo kinne sjen út it foarige foarbyld, jout pandas-profiling ús ferskate nuttige yndikatoaren, lykas it persintaazje en oantal ûntbrekkende wearden, lykas de beskriuwende statistyske maatregels dy't wy al hawwe sjoen. Omdat Age
is in numerike fariabele, fisualisaasje fan syn ferdieling yn 'e foarm fan in histogram lit ús konkludearje dat wy hawwe in ferdieling skewe nei rjochts.
By it beskôgjen fan in kategoaryske fariabele binne de útfierresultaten wat oars fan dy fûn foar in numerike fariabele.
Oer de Seks kategoriale fariabele
Nammentlik, ynstee fan it gemiddelde, minimum en maksimum te finen, fûn de pandas-profilearjende bibleteek it oantal klassen. Omdat Sex
- in binêre fariabele, syn wearden wurde fertsjintwurdige troch twa klassen.
As jo graach koade ûndersykje lykas ik, dan binne jo miskien ynteressearre yn hoe't de pandas-profilearjende bibleteek dizze metriken krekt berekkent. It útfine oer dit, jûn dat de bibleteekkoade iepen en beskikber is op GitHub, is net sa dreech. Om't ik gjin grutte fan bin fan it brûken fan swarte doazen yn myn projekten, sjoch ik nei de boarnekoade fan 'e biblioteek. Dit is bygelyks it meganisme foar it ferwurkjen fan numerike fariabelen, fertsjintwurdige troch de funksje
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)
Hoewol dit stikje koade frij grut en kompleks liket, is it eins heul ienfâldich te begripen. It punt is dat yn 'e boarnekoade fan' e bibleteek in funksje is dy't de soarten fariabelen bepaalt. As bliken docht dat de bibleteek in numerike fariabele tsjinkaam, sil de boppesteande funksje de metriken fine wêr't wy nei sochten. Dizze funksje brûkt standert pandas operaasjes foar wurkjen mei objekten fan type Series
,lyk series.mean()
. Berekkeningsresultaten wurde opslein yn in wurdboek stats
. Histogrammen wurde oanmakke mei in oanpaste ferzje fan 'e funksje matplotlib.pyplot.hist
. Oanpassing is rjochte op it garandearjen dat de funksje kin wurkje mei ferskate soarten datasets.
Korrelaasje-yndikatoaren en stekproefgegevens studearre
Nei de resultaten fan 'e analyze fan' e fariabelen sil pandas-profiling, yn 'e seksje Korrelaasjes, de Pearson- en Spearman-korrelaasjematriksen werjaan.
Pearson korrelaasje matrix
As it nedich is, kinne jo, yn 'e rigel fan koade dy't de generaasje fan it rapport trigger, de yndikatoaren ynstelle fan' e drompelwearden brûkt by it berekkenjen fan 'e korrelaasje. Troch dit te dwaan kinne jo opjaan hokker sterkte fan korrelaasje wichtich wurdt beskôge foar jo analyse.
Uteinlik toant it pandas-profilearringrapport, yn 'e Sample-seksje, as foarbyld in stik gegevens nommen fan it begjin fan' e dataset. Dizze oanpak kin liede ta onaangename ferrassingen, om't de earste pear observaasjes in stekproef kinne fertsjintwurdigje dy't de skaaimerken fan 'e folsleine dataset net reflektearje.
Seksje mei sample gegevens ûnder stúdzje
As gefolch ried ik net oan om omtinken te jaan oan dizze lêste paragraaf. Ynstee dêrfan is it better om it kommando te brûken df.sample(5)
, dy't willekeurich 5 observaasjes sil selektearje út 'e dataset.
Resultaten
Gearfetsjend, de pandas-profilearjende bibleteek jout de analist wat nuttige mooglikheden dy't fan pas komme sille yn gefallen wêr't jo fluch in rûch idee moatte krije fan 'e gegevens of in yntelliginsje-analyzerapport oan immen moatte trochjaan. Tagelyk wurdt wirklik wurk mei gegevens, rekken hâldend mei har funksjes, útfierd, lykas sûnder gebrûk fan pandas-profilearring, mei de hân.
As jo nei sjen wolle hoe't alle analyze fan yntelliginsjegegevens derút sjocht yn ien Jupyter-notebook, sjoch dan ris nei
Dear readers! Wêr begjinne jo mei it analysearjen fan nije datasets?
Boarne: www.habr.com