python 数据分析 数据模型

前言

  • 在大多数现实情况下,模型可以简化并通过模型对显式进行探索,本章可以学到的东西
  • 数据分析中使用基础模型
  • 使用积累分布函数和概率密度来描述变量
  • 使用preceding function(?)和很多工具来进行点估计和生成符合特定分布的随机数
  • 离散和连续随机变量

模型和实验

  • 模型倾向于统计模型,在随机实验情况下
  • 需要导入的包和包别名
from pandas import Series,DateFrame
import numpy.random as rnd
import scipy.stats as st #统计相关函数

积累分布函数

  • 虽然直方图能够直观感受数据的一个分布情况,但有时候我们需要精准的数据表达,那么利用积累分布函数
  • 生成一个符合正态分布的随机数据
mean=0   #均值
stdev=1  #标准差
nvalues=10  #随机点的个数
norm_variate=rnd.normal(mean,stdev,nvalues)
  • 这段代码生成伪随机数,电脑不可能生成完全随机数,生成数字都会服从一个给定的分布。当然,这样的随机已经能满足大多数数据分析的需要。
  • 积累分布函数以后都简称为cdf,在一个实际数据集中,cdf函数会是一个阶段函数

分布

  • 数据分布分为离散分布和随机分布,对于离散或者连续变量数据分布会使用Scipy.stats中统计模块来统计数据,官方文档地址:https://docs.scipy.org/doc/scipy/reference/stats.html

  • 模块组合函数命名方式
    st.< rv_name>.< function>(< argument>)

    • st:选择统计模块包
    • rv_name:分布名称
    • function:计算的具体函数
    • argument:函数的参数
  • 模块中每个分布都会有的部分函数:

    • rvs():生成伪随机数
    • cdf():积累分布函数
    • pdf(),pmf():连续变量:pdf随机变量概率密度;离散变量:pmf概率质量函数
    • ppf():积累分布函数的逆函数,百分数点->变量数值
    • stats():分布的统计量
    • mean(),std(),or var():变量均值,标准差,方差
    • fit():将数据来拟合变量分布,返回数据的shape,location(位置),scale(反映数据形状)参数
  • 对于正态分布,location对应mean,scale对应标准差std

  • 例子:绘制一个正态分布的CDF函数和PDF函数图形

    • 数据(模拟的是年龄超过20岁女性的身高分布):
      N(样本点个数)=4857
      mean(均值)=63.8
      serror(标准误差)=0.06
      sdev(样本标准差)=serror*sqrt(N)[公式]
      rvnorm=st.norm(loc-mean,scale=sdev)
      x轴数据范围:xmin=mean-3sdev,xmax=mean+3sdev (根据2
      3delta原则)
    • 代码
    xmin = mean-3*sdev 
    
    xmax = mean+3*sdev 
    
    xx = np.linspace(xmin,xmax,200) 
    
    plt.figure(figsize=(8,3)) 
    
    plt.subplot(1,2,1) 
    
    plt.plot(xx, rvnorm.cdf(xx)) 
    
    plt.title('Cumulative distribution function') 
    
    plt.xlabel('Height (in)') 
    
    plt.ylabel('Proportion of women') 
    
    plt.axis([xmin, xmax, 0.0, 1.0]) 
    
    plt.subplot(1,2,2) 
    
    plt.plot(xx, rvnorm.pdf(xx)) 
    
    plt.title('Probability density function') 
    
    plt.xlabel('Height (in)') 
    
    plt.axis([xmin, xmax, 0.0, 0.1]);
    
    • 结果


      正态分布CDF与PDF
      正态分布CDF与PDF
    • 计算这里rvnorm的1/4百分位数可以使用ppf(),那么数值为rvnorm.ppf(0.25)
    • 计算该数据的点估计参数可以由如下代码得到:
    mean,variance,skew,kurtosis=rvnorm.stats(moments='mvks')
    
      - mean:变量的均值
      - variance:变量方差
      - skew:偏度,反映数据的对称程度
      - kurtosis:峰度值,反映数据的峰是尖锐的还是平滑的,正态分布的峰度值=0,因为该分布是参考分
    
  • weibull分布

    • 参数:eta(scale参数),beta(shape参数),loc 都是正数
    • 描述设备故障与时间的关系
    • 参数描述
      • shape参数beta:
        1. beta<1:
          故障率随着时间递减,反映机器是有缺陷的,使用过程会很早就失灵
        2. beta=1:
          故障率是常数,那么随机数与时间之间的分就是指数分布
        3. beta>1:
          故障率随着时间递增而递增,反映正常使用机器的过程
      • scale参数 yta决定分布传播的范围,scale参数越大那么对于机器故障的估计就存在越大不确定性。注意该分布中scale参数不是模型的标准差
    • 例子:
      • 数据:
        eta = 1.0 
        beta = 1.5 
        rvweib = st.weibull_min(beta, scale=eta)
    
    • 根据数据绘制直方图
      weib_variates = rvweib.rvs(size=500)
      weib_df = DataFrame(weib_variates,columns=['weibull_variate']) 
      
      weib_df.hist(bins=30)
      
    • 结果


      enter image description here
      enter image description here
  • 概率分布函数pdf

    • 反映连续随机变量概率密度,其中一段与x轴之间面积表示概率
  • 概率质量函数pmf

    • 表示离散变量

模型的产生

  • 模型是用来简化数据计算模式,概率模型考虑相关因素,重要指标,近似模拟数据从而简化计算模式
  • 例子
    • 二项分布模型(N,P)
      • 有N个离散变量,变量之间相互独立,每个变量服从二次分布,每个变量=1的概率都是P
      • 适用情景:质量控制系,1代表质量达标的项,0代表质量不达标的项,那么就可以得到系统中达标项的模型
    • 可以利用pmf函数来查看二项分布的分布情况
    • 代码
    N = 20 
    
    p = 0.5 
    
    rv_binom = st.binom(N, p)
    xx = np.arange(N+1) 
    
    cdf = rv_binom.cdf(xx) 
    
    pmf = rv_binom.pmf(xx) 
    
    xvalues = np.arange(N+1) 
    
    plt.figure(figsize=(9,3.5)) 
    
    plt.subplot(1,2,1) 
    
    plt.step(xvalues, cdf, lw=2, color='brown') 
    
    plt.grid(lw=1, ls='dashed') 
    
    plt.title('Binomial cdf, $N=20$, $p=0.5$', fontsize=16) 
    
    plt.subplot(1,2,2) 
    
    left = xx - 0.5 
    
    plt.bar(left, pmf, 1.0, color='CornflowerBlue') 
    
    plt.title('Binomial pmf, $N=20$, $p=0.5$', fontsize=16)#使用latex公式写法 
    
    plt.axis([0, 20, 0, .18]);
    
    • 结果


      enter image description here
      enter image description here
    • 当样本数量很大时,二项分布近似正态分布,那么就有de Moivre估计,估计的正态分布参数与二项分布有一样的均值和方差,mean=NP std=sqrt(NP*(1-P))

多变量分布

  • 多变量分布就是不仅观察一个样本数据,会有多种类型的样本数据;除了数据分布情况,可能会关注变量之间的相关性
  • 典型多变量分布是双变量正态分布,该分布是scipy.stats中一部分,那么就可以利用该部分生成随机变量
  • 生成服从双变量正态分布的代码:
binorm_varites=st.multivariate_normal.rvs(mean=[0,0],size=300)#方差是默认值1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容