【问题标题】:Weights for histogram in pandas大熊猫直方图的权重
【发布时间】:2018-08-06 23:13:39
【问题描述】:

我有一个带有分类和连续值的 pandas 数据框(称为数据),如下所示:

INDEX  AGE  SEX  INCOME  COUNTRY  INSTANCE_WEIGHT
1      25   M    30000   USA      120
2      53   F    42000   FR       95
3      37   F    22000   USA      140
4      18   M    0       FR       110
.
.
.
15000  29  F     39000   USA      200

实例权重表示由于分层抽样,每条记录所代表的总体人数。

我想做的是将每个变量的分布绘制成直方图。问题是我不能只绘制当前数据帧的直方图,因为它不代表真实分布。为了具有代表性,我必须在绘制之前将每一行乘以其 intance_weight 。这个问题听起来很简单,但我找不到这样做的好方法。

一种解决方案是将每一行复制instance_weight 次,但实际数据帧是 300k 行,instance_weight大约是 1000。

这是我现在绘制每个列的直方图的代码。

fig = plt.figure(figsize=(20,70))
cols = 4
rows = ceil(float(data.shape[1]) / cols)
for i, column in enumerate(data.drop(["instance_weight","index"], axis=1).columns):
    ax = fig.add_subplot(rows, cols, i + 1)
    ax.set_title(column)
    # Check if data categorical or not
    if data.dtypes[column] == np.object:
        data[column].value_counts().plot(kind="bar", axes=ax,
                                         alpha=0.8, color=sns.color_palette(n_colors=1))
    else:
        data[column].hist(axes=ax, alpha=0.8)
        plt.xticks(rotation="vertical")
plt.subplots_adjust(hspace=1, wspace=0.2)

现在如何考虑重量?

【问题讨论】:

  • 在 x 和 y 轴上你想要什么?
  • 你可以乘以数字列like so,但这对非数字列没有帮助...

标签: python pandas matplotlib


【解决方案1】:

您应该使用matplotlib 'hist' function 的“权重”参数,也可以通过pandas 'plot' function 获得。

在您的示例中,要绘制在变量“INSTANCE_WEIGHT”上加权的变量“AGE”的分布,您应该这样做:

df["AGE"].plot(kind="hist", weights=df["INSTANCE_WEIGHT"])

【讨论】:

    猜你喜欢
    • 2020-10-27
    • 2018-07-05
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2019-08-19
    • 2019-07-23
    相关资源
    最近更新 更多