如何使用 Pandas 分析来分析大型数据集?

Viv*_*Viv 7 python profiling pandas pandas-profiling

数据并不完全干净,但在使用熊猫时没有问题。pandas 库为 EDA 提供了许多非常有用的函数。

但是,当我对大数据(即 10 亿条记录和 10 列)使用分析时,从数据库表中读取它时,它没有完成并且我的笔记本电脑内存不足,csv 中的数据大小约为 6 GB,我的 RAM 为 14 GB 我的空闲使用量大约是 3 - 4 GB。

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

我也尝试过使用check_recoded = False选项。但这对完全分析没有帮助。有什么办法可以对数据进行分块读取,最终生成一个整体的汇总报告?或任何其他方法将此函数用于大型数据集。

Gio*_*ous 7

v2.4引入了禁用昂贵计算(例如相关性和动态分箱)的最小模式

from pandas_profiling import ProfileReport


profile = ProfileReport(df, minimal=True)
profile.to_file(output_file="output.html")
Run Code Online (Sandbox Code Playgroud)


小智 5

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,}
)
Run Code Online (Sandbox Code Playgroud)

此外,您可以通过禁用绘制直方图的箱计算来减少执行的计算。

profile = df.profile_report(plot={'histogram': {'bins': None}}
Run Code Online (Sandbox Code Playgroud)


ash*_* Kr 1

您是否尝试使用以下选项,因为在使用 pandas 分析对大型自由文本字段进行相关性分析时可能会导致此问题?

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

请参阅以下 github 链接了解更多详细信息: https://github.com/pandas-profiling/pandas-profiling/issues/84