在第九章主要讲解了直方图的使用,直方图主要用来度量数据的“分布,差异,集中趋势等”。
这里是“我们”想要加薪,但是也害怕被“打回原形”,或者被“封存”,这里给出了历年的加薪记录,这里有3000个人的记录。
按照书中的思路,我们先看一下加薪的分布。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv('./hfda_data/hfda_ch09_employees.csv')
plt.figure(1)
plt.hist(df.iloc[::, 1], bins=np.arange(0, 25, 1), density=1, histtype='bar',
facecolor='blue', edgecolor='black', rwidth=0.8, alpha=1)
plt.xlim(0, 25)
plt.xticks(np.arange(0, 25, 1))
plt.show()
看到这里作者用了r语言来制作直方图,看来我们之前设置的rwidth有点多此一举了,而且作者这次用了50个bins(breaks=50)
我们这里也更改一下
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv('./hfda_data/hfda_ch09_employees.csv')
plt.figure(1)
plt.hist(df.iloc[::, 1], bins=np.arange(0, 25, 0.5), density=1, histtype='bar',
facecolor='blue', edgecolor='black', alpha=1)
plt.xlim(0, 25)
plt.show()
同时书中用r语言显示了实际加薪列的汇总值,我们这里用
df.iloc[::, 1].describe()
就可以得到。
书中又将数据分成了不同的子集来制作直方图:
plt.hist(df[df.year == 2007].iloc[::, 1], bins=np.arange(0, 25, 0.5), density=1, histtype='bar',
facecolor='blue', edgecolor='black', alpha=1)
这里我们只考虑 df.year列等于2007的数据,如果用其他子集方法一致,这里就不进行一一列举了。
书中最后计算了谈判与否两个子集的平均值 标准差等。我们这里也试着计算一下。
df[df.negotiated == True].iloc[::, 1].describe()
df[df.negotiated == False].iloc[::, 1].describe()
得到的结果与数中不一致,这里我又打开numbers表格计算了一遍,答案与pandas结论相符,可能使用的原始数据与作者不一致所致(原书276页)
我们得到的谈判的标准差在3左右,未谈判的在0.965左右。谈判平均增幅8%,未谈判5%,在25%的一栏中谈判加薪的就已经超过了未加薪的,因此谈判还是很有必要的(结论与书中一致)。
这是阅读中第二次发现书中的问题(第一次为贝叶斯公式那章),书中也可能存在其他问题,而我没有发现。请各位读书的过程中仔细一些,以免将一些错误当作正确的知识学习了。