【Python数据分析专题】-数据探索分析

数据探索

文章目录

  • 1. 查询
    • query
  • 2. 统计分析
    • 2.1 描述统计
      • 2.1.1均值、中位数描述
      • 2.1.2 分布描述
      • 2.1.3 MAD
      • 2.1.4 偏度、峰度
      • 1 集中趋势
      • 2 离中趋势
      • 3 数据分布
        • 分布函数的生成
      • 抽样
    • 2.2 点估计与置信区间
    • 2.3 概率分布
    • 2.4 检验
    • 2.5 卡方检验
    • 2.6 ANOVA
    • 2.7 AB测试
    • 2.8 态分布
  • 按数据类型选分析方式
  • 3. 估计
    • 3.1 点估计
    • 3.2 中心极限定理
    • 3.3 置信区间

1. 查询

query

  • df.query(‘查询条件’)

    df.query('col1 == 某个值')
    df.query('col1 == [值1,值2]')
    

2. 统计分析

2.1 描述统计

2.1.1均值、中位数描述

se.mean(axis=1) # 求行的均值
se.median()
plt.vlines(se.mean(),ymin=0,ymax=3,linewidth=5) # 绘制均值垂直线
plt.vlines(se.median()ymin=0,ymax=3,linewidth=3,color='red') # 绘制红色中位数线

2.1.2 分布描述

  • .describe()

    df['col'].describe()
    
  • .quantile()

    df['col'].quantile([0.5,0.75]) # 返回中位数和第三分位数
    
  • df['col'].var() # 方差
    df['col'].std() # 标准差
    

2.1.3 MAD

  • MAD = median( |X_i - median(X)| )

  • abs_median_devs = abs(df['col'] - df['col'].median())
    abs_median_devs.median() * 1.4826
    

2.1.4 偏度、峰度

  • 偏度

    • 是统计数据分布偏斜方向和程度的度量
    • 是统计数据分布非对称程度的数字特征
    • 右偏:长尾巴在右边
    df['col'].skew() # 大于0-右偏
    
  • 峰度

    • 表征概率密度分布曲线在平均值出峰值高低的特征数
    • 峰度高-看起来很尖
    import scipy.stats as stats
    stats.kurtosis(数据集变量)
    

1 集中趋势

  • df['col'].mean() # 均值
    df['Age'].median() # 中位数
    df['Age'].describe() # 描述统计
    df['Age'].describe(percentiles=[0.5,0.75]) # 分位数求:中位数和第三分位数
    df['Age'].quantile(0.5) # 分位数
    df.mode() # 众数
    df['Age'].mode() # 众数
    

2 离中趋势

  • df['Age'].std() # 标准差
    df['Age'].var() # 方差
    df.sum() # 注意离散数据的求和
    

3 数据分布

  • df.skew() # 偏态系数
    df.kurt() # 峰度系数:这里设定正态分布的峰度为0
    

分布函数的生成

  • 分布函数的生成

    import scipy.stats as ss
    
  • 正态分布

    # 查看其性质:
    ss.norm.stats(moments='mvsk') # m:均值、v:方差、s:偏态系数、k:峰态系数
    
    # 生成正态分布集
    ss.norm.rvs(size=1000) # 1000个符合正态分布的数字
    
    ss.norm.pdf(x=) # 指定横坐标,返回纵坐标的值:分布函数在x上的值
    ss.norm.ppf(0.9) # 从负无穷大到 所求的值,其累积值为0.9
    ss.norm.cdf(2) # 从-无穷,到x=2,求其累计概率
    
  • 卡方分布

    ss.chi2
    
  • t分布

    ss.t
    
  • f分布

    ss.f
    

抽样

  • df.sample(n=10) # 抽取10个
    df.sample(frac=0.01) # 抽样1%
    df['col'].sample(n=10) # 抽样10个
    

2.2 点估计与置信区间

2.3 概率分布

2.4 检验

2.5 卡方检验

2.6 ANOVA

2.7 AB测试

2.8 态分布

按数据类型选分析方式

自变量x 因变量Y 检验方式
连续 分类 方差分析
分类 连续 方差分析
分类 分类 卡方检验
连续 连续 相关性分析

3. 估计

3.1 点估计

  • 样本对总体进行点估计
  • 有偏差
  1. 数值类型集

    • 点估计

      # 构建总体
      np.random.seed(2019)
      salary_1 = scipy.stats.poisson.rvs(mu = 2000, size = 10000)
      salary_2 = scipy.stats.poisson.rvs(mu = 3000, size = 15000)
      salary_all = np.concatenate((salary_1,salary_2))
      salary_all.mean()
      
      # 抽样(样本)
      sample_salary = np.random.choice(salary_all,size=500)
      sample_salary.mean() - salary_all.mean()
      
  2. 分类数据集

    • 点估计

      import random
      random.seed(2019)
      a = (['doctor']*10000 +\
           ['teacher']*25000 +\
           ['farmer']*50000 +\
           ['engineer']*25000 +\
           ['other']*25000)
      demo_sample = random.sample(a,1000)
      for b in set(a):
          print(b + '标题一:')
          print(demo_sample.count(a)/1000) # 每种职业在样本中的占比
          print(b + '标题二:')
          print(a.count(b)/135000) # 每种职业在总体中的占比
      

3.2 中心极限定理

  • sampling distribution符合正态分布

  • 重复采样2000次

    np.random.seed(2020)
    sample_point = []
    for x in range(2000):
        sample = np.random.choice(salary_all,size=500)
        sample_point.append(sample.mean())
        
    # 可视化
    pd.DataFrame(sample_point).plot(kind='density', # 概率密度图
                                    figsize=(9,9),
                                    xlim=(2000,3000)
                                   )
    # 总体 与 重复采样后均值 比较
    salary_all.mean() - np.array(sample_point).mean()
    

3.3 置信区间

  • 展现的是这个参数的真实值有一定概率落在测量结果周围的程度

  • z ∗ σ n z*\frac{\sigma}{\sqrt n} zn σ

  • z z z:关键值

  • σ \sigma σ :总体的标准差

  • n \sqrt n n :样本的开平方根

  • 
    

By 儒冠多误身 2019/04/21

你可能感兴趣的:(数据分析,2019)