Tho*_*aud 8 python matplotlib pandas
我有一个带有分类和连续值的 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
Run Code Online (Sandbox Code Playgroud)
实例权重表示由于分层抽样,每个记录代表的总体人数。
我想做的是将每个变量的分布绘制成直方图。问题是我不能只绘制这个当前数据帧的直方图,因为它不代表实际分布。为了具有代表性,我必须在绘制之前将每一行乘以其 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)
Run Code Online (Sandbox Code Playgroud)
现在怎么考虑体重?
您应该使用matplotlib 'hist' 函数的 'weights' 参数,该参数也可通过pandas 'plot' 函数获得。
在您的示例中,要绘制在变量 'INSTANCE_WEIGHT' 上加权的变量 'AGE' 的分布,您应该执行以下操作:
df["AGE"].plot(kind="hist", weights=df["INSTANCE_WEIGHT"])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5443 次 |
| 最近记录: |