【问题标题】:Plotting price distribution绘制价格分布
【发布时间】:2020-09-16 05:29:23
【问题描述】:

我有一个包含 17 个特征和 14k 个观察值的数据集。

我想绘制price 分布图以便更好地理解。 price 特征具有 float64 数据类型

绘制价格分布图为我提供以下信息

分布看起来像这样

为什么这个情节看起来像这样?我的数据有问题吗?解决这个问题的正确方法是什么?

代码:

fig, ax = plt.subplots(1, 1, figsize = (9,5))
data['sale_price'].hist(bins=50, ax=ax)
plt.xlabel('Price')
plt.title('Distribution of prices')
plt.ylabel('Number of houses')

【问题讨论】:

  • 请同时添加您的代码。
  • @DhavalTaunk 完成。更新
  • 该图仅反映了您的数据。是什么让你感到困惑?
  • @DYZ 不对。这是我的自定义数据。我还绘制了来自 kaggle 和其他人的住房数据,所有这些都给了我一个不同的情节,带有正确的 x 轴(价格)。这没有任何意义。

标签: python matplotlib


【解决方案1】:

您的直方图似乎严重长尾。由于您的价格高达3*1e7,而您的大部分数据要小得多,按1e6 的顺序排列。所以bin=50 参数会使得第一个 bin 包含几乎所有的数据。可能的治疗方法:

  • 使用对数区间(请参阅post
  • 根据 0-75 分位数选择 bin

但是请注意,第二个解决方案在直方图的右尾创建了一个丑陋的值计数累积,这可能是不希望的。仍然......这取决于数据。我会使用对数直方图来表示房价。我想这在可视化方面更有意义

【讨论】:

  • 感谢您的解释。真的有帮助。那么,您是否会说要么使用对数,但还要收集更多数据?
  • 收集更多数据不会有什么不同,因为 this 直方图显示了您的人口的真实分布(除非您的数据收集更偏向于低价房屋)。您的可视化方法应该改进......在这种情况下,对数 bin 可以完成这项工作。
  • 对。再次感谢。就这样我明白了..你是说我的数据集的价值(高价)比低价高得多吗?我理解正确吗?
  • 不...我所说的以及您的数据所呈现的是,您的大部分数据都在百万 (1e6) 的范围内,负责左侧的那个高箱子。但是您的高价数量较少,这使您的直方图像这样。可以这样想:99% 的房子价值在 100 万左右,但是在你的数据中也有一些价值 1000 万的巨大豪宅,你的直方图的 bin 应该涵盖这些。你的数组是这样的:[1, 1, 1, 1, 1.5, 2, 2, 2.5, 3, 3, 10, 25, 100, 1000]1 周围有很多价值,但是一些昂贵的房子值得1000
  • 您还可以将对数比例应用于计数(y 轴)。在hist 方法中试试这个log=True。它可能会揭示您正在处理的内容(如果有效,请告诉我,以便我更新答案)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2013-06-10
  • 2015-01-03
  • 1970-01-01
  • 2022-06-27
  • 2018-10-12
  • 2013-09-14
相关资源
最近更新 更多