数据分析-统计分析

一、统计分析

统计分析是对定量数据进行统计描述,常从集中趋势和离中趋势两个方面分析。

集中趋势:指一组数据向某一中心靠拢的倾向,核心在于寻找数据的代表值或中心值-统计平均数(算数平均数和位置平均数)

  算术平均数:简单算术平均数和权重算术平均数

  位置平均数:中位数和众数

离中趋势:

  极差和分位差

  标准差和方差

二、集中趋势

随机生成整数和总和为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

箱型图展示离散关系

假设有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')

猜你喜欢

转载自www.cnblogs.com/Forever77/p/11349224.html