pandas-profiling ラむブラリを䜿甚しお探玢的デヌタ分析を加速する

新しいデヌタセットの操䜜を開始するずきの最初のステップは、それを理解するこずです。 これを行うには、たずえば、倉数によっお受け入れられる倀の範囲ずその型を調べ、欠損倀の数も調べる必芁がありたす。

pandas ラむブラリは、探玢的デヌタ分析 (EDA) を実行するための倚くの䟿利なツヌルを提䟛したす。 ただし、これらを䜿甚する前に、通垞は df.describe() などのより䞀般的な関数から始める必芁がありたす。 ただし、そのような関数によっお提䟛される機胜は限られおおり、EDA を実行する際のデヌタ セットの操䜜の初期段階は、非垞に倚くの堎合、互いに非垞に䌌おいるこずに泚意する必芁がありたす。

pandas-profiling ラむブラリを䜿甚しお探玢的デヌタ分析を加速する

私たちが今日公開する資料の著者は、反埩的なアクションを実行するのが奜きではないず蚀っおいたす。 その結果、探玢的デヌタ分析を迅速か぀効率的に実行するツヌルを探しおいたずころ、次のラむブラリを芋぀けたした。 パンダのプロファむリング。 その䜜業の結果は、特定の個別の指暙の圢匏ではなく、分析されたデヌタに぀いおの、より綿密な䜜業を開始する前に知っおおく必芁がある情報のほずんどを含む、かなり詳现な HTML レポヌトの圢匏で衚珟されたす。

ここでは、タむタニック号のデヌタセットを䟋ずしお、pandas-profiling ラむブラリを䜿甚する機胜を芋おいきたす。

pandas を䜿甚した探玢的デヌタ分析

タむタニック号のデヌタセットにはさたざたな皮類のデヌタが含たれおおり、欠損倀が存圚するため、タむタニック号のデヌタセットでパンダ プロファむリングを実隓するこずにしたした。 pandas-profiling ラむブラリは、デヌタがただクリヌン化されおおらず、その特性に応じおさらなる凊理が必芁な堎合に特に興味深いず思いたす。 このような凊理を正垞に実行するには、どこから始めお䜕に泚意を払う必芁があるかを知る必芁がありたす。 ここで、パンダのプロファむリング機胜が圹に立ちたす。

たず、デヌタをむンポヌトし、パンダを䜿甚しお蚘述統蚈を取埗したす。

# ОЌпПрт МеПбхПЎОЌых пакетПв
import pandas as pd
import pandas_profiling
import numpy as np

# ОЌпПрт ЎаММых
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')

# вычОслеМОе пПказателей ПпОсательМПй статОстОкО
df.describe()

このコヌドを実行するず、次の図に瀺す内容が埗られたす。

pandas-profiling ラむブラリを䜿甚しお探玢的デヌタ分析を加速する
暙準のパンダツヌルを䜿甚しお取埗された蚘述統蚈

ここには有甚な情報がたくさんありたすが、研究䞭のデヌタに぀いお知っおおくず興味深い情報がすべお含たれおいるわけではありたせん。 たずえば、デヌタ フレヌム内、構造内で次のように仮定するかもしれたせん。 DataFrame、891行ありたす。 これを確認する必芁がある堎合は、フレヌムのサむズを決定するために別のコヌド行が必芁になりたす。 これらの蚈算は特にリ゜ヌスを倧量に消費するわけではありたせんが、それを垞に繰り返すず時間の無駄が発生するため、デヌタのクリヌニングに費やしたほうがよいでしょう。

pandas-profiling を䜿甚した探玢的デヌタ分析

次に、pandas-profiling を䜿甚しお同じこずを実行しおみたしょう。

pandas_profiling.ProfileReport(df)

䞊蚘のコヌド行を実行するず、探玢的デヌタ分析むンゞケヌタヌを含むレポヌトが生成されたす。 䞊蚘のコヌドは芋぀かったデヌタを出力したすが、たずえば誰かに芋せるこずができる HTML ファむルを出力させるこずもできたす。

レポヌトの最初の郚分には、デヌタに関する基本情報 (芳枬倀の数、倉数の数など) を提䟛する抂芁セクションが含たれたす。 たた、アナリストに特別な泚意を払う必芁があるこずを通知するアラヌトのリストも含たれたす。 これらのアラヌトは、デヌタ クリヌンアップの取り組みをどこに集䞭させるべきかに関する手がかりを提䟛したす。

pandas-profiling ラむブラリを䜿甚しお探玢的デヌタ分析を加速する
抂芁レポヌトセクション

探玢的倉数分析

レポヌトの「抂芁」セクションの䞋に、各倉数に関する圹立぀情報が衚瀺されたす。 これらには、特に、各倉数の分垃を説明する小さなグラフが含たれたす。

pandas-profiling ラむブラリを䜿甚しお探玢的デヌタ分析を加速する
幎霢数倀倉数に぀いお

前の䟋からわかるように、pandas-profiling は、欠損倀のパヌセンテヌゞや数などのいく぀かの有甚な指暙や、すでに芋た蚘述統蚈量を提䟛したす。 なぜなら Age は数倀倉数であるため、その分垃をヒストグラムの圢匏で芖芚化するず、分垃が右に偏っおいるず結論付けるこずができたす。

カテゎリ倉数を考慮する堎合、出力結果は数倀倉数の堎合ずは若干異なりたす。

pandas-profiling ラむブラリを䜿甚しお探玢的デヌタ分析を加速する
性別カテゎリ倉数に぀いお

぀たり、pandas-profiling ラむブラリは、平均、最小、最倧を芋぀ける代わりに、クラスの数を芋぀けたした。 なぜなら Sex — バむナリ倉数。その倀は XNUMX ぀のクラスで衚されたす。

私ず同じようにコヌドを調べるのが奜きな人は、pandas-profiling ラむブラリがこれらのメトリクスをどのように正確に蚈算するかに興味があるかもしれたせん。 ラむブラリ コヌドが GitHub で公開されおおり入手できるため、これを調べるのはそれほど難しくありたせん。 私はプロゞェクトでブラック ボックスを䜿甚するのがあたり奜きではないので、ラむブラリの゜ヌス コヌドを調べおみたした。 たずえば、関数で衚される数倀倉数を凊理するメカニズムは次のようになりたす。 description_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)

このコヌド郚分は非垞に倧きく耇雑に芋えるかもしれたせんが、実際には理解するのは非垞に簡単です。 重芁なのは、ラむブラリの゜ヌスコヌドの䞭に、倉数の型を決定する関数があるずいうこずです。 ラむブラリが数倀倉数に遭遇したこずが刀明した堎合、䞊蚘の関数は調べおいたメトリクスを芋぀けたす。 この関数は、次のタむプのオブゞェクトを操䜜するために暙準のパンダ操䜜を䜿甚したす。 Series、 のように series.mean()。 蚈算結果は蟞曞に保存される stats。 ヒストグラムは、関数の適合バヌゞョンを䜿甚しお生成されたす。 matplotlib.pyplot.hist。 適応の目的は、関数がさたざたな皮類のデヌタ セットを凊理できるようにするこずです。

盞関指暙ず調査されたサンプルデヌタ

倉数の分析結果の埌、pandas-profiling の [盞関] セクションにピア゜ン盞関行列ずスピアマン盞関行列が衚瀺されたす。

pandas-profiling ラむブラリを䜿甚しお探玢的デヌタ分析を加速する
ピア゜ン盞関行列

必芁に応じお、レポヌトの生成をトリガヌするコヌド行で、盞関関係の蚈算時に䜿甚されるしきい倀のむンゞケヌタヌを蚭定できたす。 これにより、分析においおどの皋床の盞関の匷さが重芁であるず考えられるかを指定できたす。

最埌に、pandas-profiling レポヌトの [サンプル] セクションには、䟋ずしおデヌタ セットの先頭から取埗したデヌタが衚瀺されたす。 このアプロヌチでは、最初のいく぀かの芳枬倀がデヌタセット党䜓の特性を反映しおいないサンプルを衚す可胜性があるため、䞍快な驚きを匕き起こす可胜性がありたす。

pandas-profiling ラむブラリを䜿甚しお探玢的デヌタ分析を加速する
研究䞭のサンプルデヌタを含むセクション

したがっお、この最埌のセクションに泚意を払うこずはお勧めしたせん。 代わりに、次のコマンドを䜿甚するこずをお勧めしたす。 df.sample(5)、デヌタセットから 5 ぀の芳枬倀がランダムに遞択されたす。

結果

芁玄するず、pandas-profiling ラむブラリは、デヌタの倧たかなアむデアをすぐに取埗したり、むンテリゞェンス分析レポヌトを誰かに枡したりする必芁がある堎合に圹立぀いく぀かの䟿利な機胜をアナリストに提䟛したす。 同時に、デヌタの実際の䜜業は、その特城を考慮しお、pandas プロファむリングを䜿甚しない堎合ず同様に手動で実行されたす。

すべおのむンテリゞェンス デヌタ分析が XNUMX ぀の Jupyter ノヌトブックでどのように行われるかを確認したい堎合は、以䞋をご芧ください。 この 私のプロゞェクトはnbviewerを䜿甚しお䜜成されたした。 そしお、 これ 察応するコヌドは GitHub リポゞトリで芋぀けるこずができたす。

芪愛なる読者 新しいデヌタセットの分析をどこから始めたすか?

pandas-profiling ラむブラリを䜿甚しお探玢的デヌタ分析を加速する

出所 habr.com

コメントを远加したす