数据特征分析
1 分布分析
1 极差 写个函数就行
def d_range(df,*args)
2 定量用直方图
1)直接用plot.hist()
2)s = pd.cut()
return indices of half-open bins to which each value of `x` belongs. 这个方法感觉 就在手动绘制直方图会用到,可能以后类似相关的也会用到
s_count = s.value_counts()
s_count_df = pd.DataFrame(s_count)
s_count_df['频率'] / [ ' 累计频率'] / [ ' 累计频数 ']
s_count_df[''].bar
3 定性 用饼图
2 对比分析
1 绝对数比较(相减),用得相对较少
用到的知识点是 1)子图 fig = plt.figure ax = fig.add_subplot(2,1,1)
2) 条形图 plt.bar(x,y) x横坐标,y对应的值
3) plt.xticks ax.set_xticklabels 因为plt.bar 横坐标x 只是0-50 这样的序列
# (3)柱状图堆叠图+差值折线图比较 fig3 = plt.figure(figsize=(10,6)) plt.subplots_adjust(hspace=0.3) # 创建子图及间隔设置 ax1 = fig3.add_subplot(2,1,1) x = range(len(data)) y1 = data['A_sale'] y2 = -data['B_sale'] plt.bar(x,y1,width = 1,facecolor = 'yellowgreen') plt.bar(x,y2,width = 1,facecolor = 'lightskyblue') plt.title('AB产品销量对比-堆叠图') plt.grid() plt.xticks(range(0,30,6)) ax1.set_xticklabels(data.index[::6]) # 创建堆叠图 ax2 = fig3.add_subplot(2,1,2) y3 = data['A_sale']-data['B_sale'] plt.plot(x,y3,'--go') plt.axhline(0,hold=None,color='r',linestyle="--",alpha=0.8) # 添加y轴参考线 plt.grid() plt.title('AB产品销量对比-差值折线') plt.xticks(range(0,30,6)) ax2.set_xticklabels(data.index[::6]) # 创建差值折线图
2 相对数比较 (相除),用的较多
1)结构分析
# 在分组基础上,各组总量指标与总体的总量指标对比,计算出各组数量在总量中所占比重
# 反映总体的内部结构
2)比例分析
# 在分组的基础上,将总体不同部分的指标数值进行对比,其相对指标一般称为“比例相对数”
# 比例相对数 = 总体中某一部分数值 / 总体中另一部分数值 → “基本建设投资额中工业、农业、教育投资的比例”、“男女比例”...
在这里用到了 s.plot.area(ylim=[ ])
3)空间比较分析(横向对比分析,抽象的空间概念)
# 同类现象在同一时间不同空间的指标数值进行对比,反应同类现象在不同空间上的差异程度和现象发展不平衡的状况
# 空间比较相对数 = 甲空间某一现象的数值 / 乙空间同类现象的数值
# 一个很现实的例子 → 绝对数来看,我国多经济总量世界第一,但从人均水平来看是另一回事
4)动态对比分析
# 同一现象在不同时间上的指标数值进行对比,反应现象的数量随着时间推移而发展变动的程度及趋势
# 最基本方法,计算动态相对数 → 发展速度
# 动态相对数(发展速度) = 某一现象的报告期数值 / 同一现象的基期数值
# 基期:用来比较的基础时期
# 报告期:所要研究的时期,又称计算期
data = pd.DataFrame({'A':np.random.rand(30)*2000+1000}, index = pd.period_range('20170601','20170630')) print(data.head()) print('------') # 创建数据 → 30天内A产品的销售情况 data['base'] = 1000 # 假设基期销售额为1000,后面每一天都为计算期 data['l_growth'] = data['A'] - data['base'] # 累计增长量 = 报告期水平 - 固定基期水平 data['z_growth'] = data['A'] - data.shift(1)['A'] # 逐期增长量 = 报告期水平 - 报告期前一期水平 data[data.isnull()] = 0 # 替换缺失值 data[['l_growth','z_growth']].plot(figsize = (10,4),style = '--.',alpha = 0.8) plt.axhline(0,hold=None,color='r',linestyle="--",alpha=0.8) # 添加y轴参考线 plt.legend(loc = 'lower left') plt.grid() # 通过折线图查看增长量情况 data['lspeed'] = data['l_growth'] / 1000 # 定基增长速度 data['zspeed'] = data['z_growth'] / data.shift(1)['A'] # 环比增长速度 data[['lspeed','zspeed']].plot(figsize = (10,4),style = '--.',alpha = 0.8) plt.axhline(0,hold=None,color='r',linestyle="--",alpha=0.8) # 添加y轴参考线 plt.grid() print(data.head()) print('------') # 通过折线图查看发展速度
https://wiki.mbalib.com/wiki/%E7%B4%AF%E8%AE%A1%E5%A2%9E%E9%95%BF%E9%87%8F
https://wiki.mbalib.com/wiki/%E5%AE%9A%E5%9F%BA%E5%A2%9E%E9%95%BF%E9%80%9F%E5%BA%A6
3 统计分析
统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析
1 集中趋势
1)算术平均数
1)简答平均数 mean()
2)加权平均数
2)位置平均数
1)众数 mode()
2)中位数 median()
2 离中趋势
1)方差 var() 与 标准差 std() describe().loc['std']
2)极差 与 四分位差 (iqr)--> 箱型图 box
4 帕累托分析 二八法则
思路:将值从大到小排序,算占比的cumsum。
用到的方法:series.plt(secondary_y=True)。注意,这里series,的索引不能是数字,用英文字母都可以。
plt.axvline()
plt.text
5 正态性检验
1 描述统计方法
1)直方图 hist 密度图 kde ,可以在同一张表内显示。直接看图的形状。
data['a'].hist(bins=100) data['a'].plot(kind='kde',secondary_y=True)
2)Q-Q图
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# QQ图判断 # QQ图通过把测试样本数据的分位数与已知分布相比较,从而来检验数据的分布情况 # QQ图是一种散点图,对应于正态分布的QQ图,就是由标准正态分布的分位数为横坐标,样本值为纵坐标的散点图 # 参考直线:四分之一分位点和四分之三分位点这两点确定,看散点是否落在这条线的附近 # 绘制思路 # ① 在做好数据清洗后,对数据进行排序(次序统计量:x(1)<x(2)<....<x(n)) # ② 排序后,计算出每个数据对应的百分位p{i},即第i个数据x(i)为p(i)分位数,其中p(i)=(i-0.5)/n (pi有多重算法,这里以最常用方法为主) # ③ 绘制直方图 + qq图,直方图作为参考
2 统计检验方法
1)K-S检验
# 直接用算法做KS检验 from scipy import stats # scipy包是一个高级的科学计算库,它和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算 data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86, 76,80,81,75,77,72,81,72,84,86,80,68,77,87, 76,77,78,92,75,80,78] # 样本数据,35位健康男性在未进食之前的血糖浓度 df = pd.DataFrame(data, columns =['value']) u = df['value'].mean() # 计算均值 std = df['value'].std() # 计算标准差 stats.kstest(df['value'], 'norm', (u, std)) # .kstest方法:KS检验,参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差 # 结果返回两个值:statistic → D值,pvalue → P值 # p值大于0.05,为正态分布
6 相关性分析
1)图示初判,散点图,散点矩阵
2) 正态性 --> pearson Series/DataFrame.corr方法
3) 非正态性 --> spearman Series/DataFrame.corr方法