一、统计分析
统计分析是对定量数据进行统计描述,常从集中趋势和离中趋势两个方面分析。
集中趋势:指一组数据向某一中心靠拢的倾向,核心在于寻找数据的代表值或中心值-统计平均数(算数平均数和位置平均数)
算术平均数:简单算术平均数和权重算术平均数
位置平均数:中位数和众数
离中趋势:
极差和分位差
标准差和方差
二、集中趋势
随机生成整数和总和为1的百分占比
df = pd.DataFrame({\'value\':np.random.randint(1,100,100),\'f\':np.random.rand(100)})
df[\'f\'] = df[\'f\']/df[\'f\'].sum()
算术平均数
mean = df[\'value\'].mean() mean_f = (df[\'value\'] * df[\'f\']).sum()/df[\'f\'].sum() print(\'简单算术平均数:%.2f\'%mean) print(\'权重算术平均数:%2.f\'%mean_f) # 简单算术平均数:48.34 # 权重算术平均数:51
位置平均数
m = df[\'value\'].mode().tolist() #Seris数据类型可通过tolist()或to_list()转化为列表 med = df[\'value\'].median() print(\'众数为:\',m) print(\'中位数为:\',med) # 众数为: [85] # 中位数为: 48.0
集中趋势密度图
df[\'value\'].plot(kind = \'kde\') plt.axvline(mean,linestyle=\'--\',color = \'r\') plt.text(mean+5,0.002,\'简单算术平均数\',color = \'r\') plt.axvline(mean_f,linestyle=\'--\',color = \'y\') plt.text(mean_f+5,0.004,\'加权算术平均数\',color = \'y\') plt.axvline(med,linestyle=\'--\',color = \'g\') plt.text(med - 30,0.006,\'中位数\',color = \'g\')
三、离中趋势
随机生成DataFrame,表示对应日期的销量
df = pd.DataFrame({\'A_sale\':np.random.rand(30)*1000,\'B_sale\':np.random.rand(30)*1000},index = pd.date_range(\'2019/6/1\',\'2019/6/30\'))
极差和分位差
a_jc = df[\'A_sale\'].max() - df[\'A_sale\'].min() b_jc = df[\'B_sale\'].max() - df[\'B_sale\'].min() print(\'产品A销售额极差为%.2f,产品B销售额极差为%.2f\'%(a_jc,b_jc)) a_des = df[\'A_sale\'].describe() b_des = df[\'B_sale\'].describe() a_iqr = a_des[\'75%\'] - a_des[\'25%\'] b_iqr = b_des[\'75%\'] - b_des[\'25%\'] print(\'产品A销售额分位差为%.2f,产品B销售额分位差为%.2f\'%(a_iqr,b_iqr)) # 产品A销售额极差为968.05,产品B销售额极差为946.94 # 产品A销售额分位差为550.63,产品B销售额分位差为479.76
箱型图展示离散关系
df.boxplot(vert = False)
假设有n个样本,x1、x2...xn,算术平均数为x
方差:( (x1-x)^2 + (x2-x)^2 + ...+ (xn-x)^2 )/n
标准差:方差的平方根
a_std = df[\'A_sale\'].std() a_var = df[\'A_sale\'].var() b_std = df[\'B_sale\'].std() b_var = df[\'B_sale\'].var() print(\'产品A销售额标准差为%.2f,方差为%.2f\'%(a_std,a_var)) print(\'产品B销售额标准差为%.2f,方差为%.2f\'%(b_std,b_var)) # 产品A销售额标准差为304.25,方差为92565.69 # 产品B销售额标准差为297.36,方差为88424.61
密度图展示中位数、方差
fig = plt.figure(figsize = (12,5)) ax1 = fig.add_subplot(1,2,1) df[\'A_sale\'].plot(kind = \'kde\') plt.axvline(a_des[\'50%\'] - a_std,linestyle = \'--\',color = \'r\') plt.axvline(a_des[\'50%\'],linestyle = \'--\') plt.axvline(a_des[\'50%\'] + a_std,linestyle = \'--\',color = \'y\') ax2 = fig.add_subplot(1,2,2) df[\'B_sale\'].plot(kind = \'kde\') plt.axvline(b_des[\'50%\'] - b_std,linestyle = \'--\',color = \'r\') plt.axvline(b_des[\'50%\'],linestyle = \'--\') plt.axvline(b_des[\'50%\'] + b_std,linestyle = \'--\',color = \'y\')