数据特征分析

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图

# 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图,直方图作为参考
View Code

  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方法


原文地址:https://www.cnblogs.com/654321cc/p/11910760.html