4

我正在对我的数字数据进行探索性数据分析,我尝试运行 pandas 分析,但在生成报告结构时出现错误。

import pandas as pd
from pandas_profiling import ProfileReport
df = pd.read_csv('mydatadata.csv')
print(df)
profile = ProfileReport(df) 
profile.to_file(output_file="mydata.html")

错误日志如下所示

总结数据集:99%|████████████████████████████████████████████ ███████████████████████████▌| 1144/1150 [46:07<24:03, 240.60s/it, 计算 cramers 相关性]C:\Users\USER\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas_profiling\model\correlations. py:101: UserWarning: 尝试计算 cramers 相关性,但失败了。要隐藏此警告,请禁用计算(使用df.profile_report(correlations={"cramers": {"calculate": False}})如果这对您的用例有问题,请将其报告为问题: https ://github.com/pandas-profiling/pandas-profiling/issues (包括错误消息:'没有数据;observed大小为 0.') warnings.warn( 总结数据集:100%|██████████████████████████████████ █████████████████████████████████████████████████▋| 1145/1150 [46:19<17:32, 210.49s/it, Get scatter matrix] 分配位图失败

4

2 回答 2

0

您的代码可能失败的原因

如果您的代码因与我相同的原因而失败,则:

  1. 尝试同时制作多个配置文件
  2. 尝试根据变量制作具有大型数据集的配置文件

您的代码中可能的修复

Github 页面上记录了一种解决方法,用于大数据集下的 pandas-profiling。其中,有这个例子:

    from pandas_profiling import ProfileReport
    profile = ProfileReport(large_dataset, minimal=True)
    profile.to_file("output.html")

熊猫分析源中的可能修复?

我得到了完全相同的错误。我尝试查找它,它似乎来自 Matplotlib 内存泄漏。意思是,这些情节在形成时没有被正确擦除。我尝试将以下内容添加到pandas_profiling可视化文件夹中的 utils.py 文件中:

    plt.clf()
    plt.cla()
    plt.close('all')

我过去发现那里的代码plt.close()在制作多个背靠背的情节时不够用。但是,我仍然遇到这个错误,这让我认为它可能不是 Matplotlib(或者我在某个地方错过了它。

上面的minimal=True修复有时可能会起作用。当我的数据集太大时,它偶尔仍然会失败。

于 2021-06-09T12:18:25.540 回答
0

我也遇到过这种特殊的错误情况。对配置文件设置的个人实验将事情缩小到生成的绘图数量,或者在运行时执行之前请求生成的数量。在我的实验中不同的是需要交互图的 PlotReport() 配置文件生成的序列号:整体绘制的交互图越少,遇到此错误的频率就越低。

如果您只尝试生成单个配置文件并且您绝对需要所有交互图,那么通过对这些东西的多处理 Pool.map() 调用来隔离进程可能会有所帮助,但这是一个时间和/或 RAM 贪婪的选项需要通过实例连接获得创造性,以便为来自较小 DataFrame 的交互图配对列值,例如总体上更多的报告。

无论如何,由于 ProfileReport 配置设置的文档很糟糕,以下是我错综复杂地找出您可能应该调查的文档:

  • vars.cat.words -- 布尔值,触发字符串/分类变量的词云图生成,可能不需要它。
  • missing_diagrams.bar -- 布尔值,如果不需要图表则关闭
  • missing_diagrams.matrix -- 布尔值,如果不需要图表则关闭
  • missing_diagrams.heatmap -- 布尔值,如果不需要图表则关闭
  • missing_diagrams.dendrogram -- 布尔值,如果不需要图表则关闭
  • 如果您不需要编辑,相关性.everythingthatisn'tpearson -- 布尔值,如果不需要图表,则关闭。
  • interaction.targets -- Python 字符串列表。在此处指定一个或多个列名会将交互图限制为仅涉及这些变量的交互图。如果您不忍心在生成报告之前删除列,这可能就是您正在寻找的内容。
  • interaction.continuous -- 布尔值,如果您不想进行交互,请关闭。
  • plot.image_format -- 字符串、'svg' 或 'png',我猜可能存在数据结构大小差异,这可能与其他人正在处理的明显内存泄漏有关,也可能无关,但请看图。
  • plot.dpi -- 整数,指定绘制图像的 dpi,同样可能与明显的内存泄漏有关。
  • plot.pie.max_unique -- 整数,设置为 0 以禁用偶尔绘制的饼图,同样可能与图表绘制的明显内存泄漏有关。

祝你好运,不要害怕尝试其他选项,例如DataPrep。我希望我在进入这个兔子洞之前做到了。

于 2021-09-15T09:55:04.903 回答