本文主要内容是对数据分布进行分析,主要是集中和离中趋势度量,包括了做观测数据的连续概率分布的估计等,同时也是matplotlib常用的几个部分的练习。
首先模块导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
1、集中趋势度量
创建数据
data = pd.DataFrame({'value':np.random.randint(100,120,100),
'f':np.random.rand(100)})
f为权重,这里将f列设置成总和为1的权重占比1
data['f'] = data['f']/data['f'].sum()
(1)算数平均数
简单算数平均值 = 总和 / 样本数量 (不涉及权重)
mean = data['value'].mean()
加权算数平均值 = (x1f1 + x2f2 + ... + xnfn) / (f1 + f2 + ... + fn)
c_mean = (data['value']*data['f']).sum()/(data['f'].sum())
(2)位置平均数
众数为
mod = data['value'].mode()
中位数为
med = data['value'].median()
密度曲线
data['value'].plot(kind = 'kde',title = '密度曲线图')
密度曲线中加入:简单算数平均值、 加权算数平均值、中位数
简单算数平均值
plt.axvline(mean,color='r',linestyle='--')
plt.text(120,0.03,'简单算数平均值',color='r')
加权算数平均值
plt.axvline(c_mean,color='b',linestyle='--')
plt.text(120,0.035,'加权算数平均值',color='b')
中位数
plt.axvline(med,color='g',linestyle='--')
plt.text(120,0.04,'中位数',color='g')
image
2、离中趋势度量
创建数据、A/B销售额量级在同一水平
data = pd.DataFrame({'A_sale':np.random.rand(30)*1000,
'B_sale':np.random.rand(30)*1000},
index = pd.period_range('20170601','20170630'))
极差
sta = data['A_sale'].describe()
stb = data['B_sale'].describe()
max_min_a = sta['max'] - sta['min']
max_min_b = stb['max'] - stb['min']
A销售额的分位差为, B销售额的分位差为:
a_iqr = sta['75%'] - sta['25%']
b_iqr = stb['75%'] - stb['25%']
没有考虑中间变量的变动,测定离中趋势不稳定
箱型图
color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray')
data.plot.box(grid=True,color=color,vert=False)
image
(2)方差与标准差
方差:
a_var = data['A_sale'].var()
b_var = data['B_sale'].var()
标准差:
std_a = sta['std']
std_b = stb['std']
fig,ax = plt.subplots(2,1,figsize=(10,10))
A密度曲线,1个标准差
data['A_sale'].plot(kind='kde',title='A密度曲线',ax=ax[0])
ax[0].axvline(sta['50%'],linestyle='--',color='r')
ax[0].axvline(sta['50%']+std_a,linestyle='--',color='b')
ax[0].axvline(sta['50%']-std_a,linestyle='--',color='b')
B密度曲线,1个标准差
data['B_sale'].plot(kind='kde',title='B密度曲线',ax=ax[1])
ax[1].axvline(stb['50%'],linestyle='--',color='r')
ax[1].axvline(stb['50%']+std_b,linestyle='--',color='b')
ax[1].axvline(stb['50%']-std_b,linestyle='--',color='b')
image
image
更多文章关注二维码相互交流呀!
网友评论