web-dev-qa-db-ja.com

Pandasプロファイリングで大規模なデータセットをプロファイリングする方法は?

データは完全にクリーンではありませんが、パンダでは問題なく使用されます。 pandasライブラリは、EDAに非常に役立つ多くの関数を提供します。

しかし、大きなデータ、つまり10列の1億レコードにプロファイリングを使用し、データベーステーブルから読み取ると、完了せず、ラップトップのメモリが不足します。csvのデータサイズは約6 GBで、私のRAMは14GBですが、アイドル時の使用量は約3〜4GBです。

df = pd.read_sql_query("select * from table", conn_params)
profile = pandas.profiling.ProfileReport(df)
profile.to_file(outputfile="myoutput.html")

check_recoded = Falseオプションも試してみました。しかし、それは完全にプロファイリングに役立つわけではありません。データをチャンクして読み取り、最終的に全体として要約レポートを生成する方法はありますか? OR大規模なデータセットでこの関数を使用する他の方法。

3
Viv

pandasプロファイリングを使用して大きなフリーテキストフィールドで相関分析を行うと、この問題が発生する可能性があるため、以下のオプションを試してみましたか?

df = pd.read_sql_query("select * from table", conn_params)
profile = pandas.profiling.ProfileReport(df, , check_correlation = False)

詳細については、以下のgithubリンクを参照してください。 https://github.com/pandas-profiling/pandas-profiling/issues/84

1
ashu Kr

相関の計算を無効にする(これにより計算が大幅に削減される)構文が、pandas-profiling=1.4と現在の(ベータ)バージョンpandas-profiling=2.0の間で大幅に変更されました。

profile = df.profile_report(correlations={
    "pearson": False,
    "spearman": False,
    "kendall": False,
    "phi_k": False,
    "cramers": False,
    "recoded":False,}
)

さらに、ヒストグラムのプロット用のビンの計算を無効にすることで、実行される計算を減らすことができます。

profile = df.profile_report(plot={'histogram': {'bins': None}}
1
cptnJ

バージョン2.4以降、コストのかかる計算(相関や動的ビニングなど)を無効にする最小モードを使用できます。

from pandas_profiling import ProfileReport


profile = ProfileReport(df, minimal=True)
profile.to_file(output_file="output.html")
0