问题描述
问题不在于编码,而在于理解归一化在数据统计和相关性方面的含义 这是我正在做的一个例子。 没有标准化:
plt.subplot(111)
plt.plot(df['alcoholism'].value_counts(),marker='o')
plt.plot(df.query('no_show =="Yes"')['alcoholism'].value_counts(),color='black')
plt.show();
使用标准化:
plt.subplot(111)
plt.plot(df['alcoholism'].value_counts(normalize=True),marker='o')
plt.plot(df.query('no_show =="Yes"')['alcoholism'].value_counts(normalize=True),color='black')
plt.show();
哪一个更好地将值与标准化或不标准化相关?或者这是一个完全错误的想法? 我是数据和熊猫的新手,所以请原谅我糟糕的代码,链接,评论,风格:)
解决方法
正如您在标准化(第二个图)时所看到的,对于绘制的每条线,两个点的总和等于 1。标准化是为您提供每个值的发生率,而不是出现次数。
the doc 说的是:
normalize : bool,默认为 False
返回比例而不是频率。
-
value_counts()
可能返回如下内容:0 110000 1 1000 dtype: int64
-
和
value_counts(normalize=True)
可能返回如下内容:0 0.990991 1 0.009009 dtype: float64
换句话说,归一化和非归一化之间的关系可以检查为:
>>> counts = df['alcoholism'].value_counts()
>>> rate = df['alcoholism'].value_counts(normalize=True)
>>> np.allclose(rate,counts / counts.sum())
True
其中 np.allclose
允许正确比较两个浮点数系列。