精华内容
下载资源
问答
  • python数据统计分析

    万次阅读 多人点赞 2019-02-17 09:08:25
      scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立的statsmodels包。  scipy的stats包含一些比较基本的工具...

    1. 常用函数库

      scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立的statsmodels包。

     scipy的stats包含一些比较基本的工具,比如:t检验,正态性检验,卡方检验之类,statsmodels提供了更为系统的统计模型,包括线性模型,时序分析,还包含数据集,做图工具等等。

    2. 小样本数据的正态性检验

    (1) 用途

     夏皮罗维尔克检验法 (Shapiro-Wilk) 用于检验参数提供的一组小样本数据线是否符合正态分布,统计量越大则表示数据越符合正态分布,但是在非正态分布的小样本数据中也经常会出现较大的W值。需要查表来估计其概率。由于原假设是其符合正态分布,所以当P值小于指定显著水平时表示其不符合正态分布。

     正态性检验是数据分析的第一步,数据是否符合正态性决定了后续使用不同的分析和预测方法,当数据不符合正态性分布时,我们可以通过不同的转换方法把非正太态数据转换成正态分布后再使用相应的统计方法进行下一步操作。

    (2) 示例

    from scipy import stats
    import numpy as np
    
    np.random.seed(12345678)
    x = stats.norm.rvs(loc=5, scale=10, size=80) # loc为均值,scale为方差
    print(stats.shapiro(x))
    # 运行结果:(0.9654011726379395, 0.029035290703177452)
    

    (3) 结果分析

     返回结果 p-value=0.029035290703177452,比指定的显著水平(一般为5%)小,则拒绝假设:x不服从正态分布。

    3. 检验样本是否服务某一分布

    (1) 用途

     科尔莫戈罗夫检验(Kolmogorov-Smirnov test),检验样本数据是否服从某一分布,仅适用于连续分布的检验。下例中用它检验正态分布。

    (2) 示例

    from scipy import stats
    import numpy as np
    
    np.random.seed(12345678)
    x = stats.norm.rvs(loc=0, scale=1, size=300)
    print(stats.kstest(x,'norm'))
    # 运行结果:KstestResult(statistic=0.0315638260778347, pvalue=0.9260909172362317)
    

    (3) 结果分析

     生成300个服从N(0,1)标准正态分布的随机数,在使用k-s检验该数据是否服从正态分布,提出假设:x从正态分布。最终返回的结果,p-value=0.9260909172362317,比指定的显著水平(一般为5%)大,则我们不能拒绝假设:x服从正态分布。这并不是说x服从正态分布一定是正确的,而是说没有充分的证据证明x不服从正态分布。因此我们的假设被接受,认为x服从正态分布。如果p-value小于我们指定的显著性水平,则我们可以肯定的拒绝提出的假设,认为x肯定不服从正态分布,这个拒绝是绝对正确的。

    4.方差齐性检验

    (1) 用途

     方差反映了一组数据与其平均值的偏离程度,方差齐性检验用以检验两组或多组数据与其均值偏离程度是否存在差异,也是很多检验和算法的先决条件。

    (2) 示例

    from scipy import stats
    import numpy as np
    
    np.random.seed(12345678)
    rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)  
    rvs2 = stats.norm.rvs(loc=25,scale=9,size=500)
    print(stats.levene(rvs1, rvs2))
    # 运行结果:LeveneResult(statistic=1.6939963163060798, pvalue=0.19337536323599344)
    

    (3) 结果分析

     返回结果 p-value=0.19337536323599344, 比指定的显著水平(假设为5%)大,认为两组数据具有方差齐性。

    5. 图形描述相关性

    (1) 用途

     最常用的两变量相关性分析,是用作图描述相关性,图的横轴是一个变量,纵轴是另一变量,画散点图,从图中可以直观地看到相关性的方向和强弱,线性正相关一般形成由左下到右上的图形;负相关则是从左上到右下的图形,还有一些非线性相关也能从图中观察到。

    (2) 示例

    import statsmodels.api as sm
    import matplotlib.pyplot as plt
    data = sm.datasets.ccard.load_pandas().data
    plt.scatter(data['INCOMESQ'], data['INCOME'])
    

    (3) 结果分析

     从图中可以看到明显的正相关趋势。

    6. 正态资料的相关分析

    (1) 用途

     皮尔森相关系数(Pearson correlation coefficient)是反应俩变量之间线性相关程度的统计量,用它来分析正态分布的两个连续型变量之间的相关性。常用于分析自变量之间,以及自变量和因变量之间的相关性。

    (2) 示例

    from scipy import stats
    import numpy as np
    
    np.random.seed(12345678)
    a = np.random.normal(0,1,100)
    b = np.random.normal(2,2,100)
    print(stats.pearsonr(a, b))
    # 运行结果:(-0.034173596625908326, 0.73571128614545933)
    

    (3) 结果分析

     返回结果的第一个值为相关系数表示线性相关程度,其取值范围在[-1,1],绝对值越接近1,说明两个变量的相关性越强,绝对值越接近0说明两个变量的相关性越差。当两个变量完全不相关时相关系数为0。第二个值为p-value,统计学上,一般当p-value<0.05时,可以认为两变量存在相关性。

    7. 非正态资料的相关分析

    (1) 用途

     斯皮尔曼等级相关系数(Spearman’s correlation coefficient for ranked data ),它主要用于评价顺序变量间的线性相关关系,在计算过程中,只考虑变量值的顺序(rank, 秩或称等级),而不考虑变量值的大小。常用于计算类型变量的相关性。

    (2) 示例

    from scipy import stats
    import numpy as np
    
    print(stats.spearmanr([1,2,3,4,5], [5,6,7,8,7]))
    # 运行结果:SpearmanrResult(correlation=0.82078268166812329, pvalue=0.088587005313543812)
    

    (3) 结果分析

     返回结果的第一个值为相关系数表示线性相关程度,本例中correlation趋近于1表示正相关。第二个值为p-value,p-value越小,表示相关程度越显著。

    8. 单样本T检验

    (1) 用途

     单样本T检验,用于检验数据是否来自一致均值的总体,T检验主要是以均值为核心的检验。注意以下几种T检验都是双侧T检验。

    (2) 示例

    from scipy import stats
    import numpy as np
    
    np.random.seed(12345678)
    rvs = stats.norm.rvs(loc=5, scale=10, size=(100,2))
    print(stats.ttest_1samp(rvs, [1, 5]))
    # 运行结果:Ttest_1sampResult(statistic=array([ 5.12435977,  1.07927393]), pvalue=array([  1.47820719e-06,   2.83088106e-01]))
    

    (3) 结果分析

     本例中生成了2列100行的数组,ttest_1samp的第二个参数是分别对两列估计的均值,p-value返回结果,第一列1.47820719e-06比指定的显著水平(一般为5%)小,认为差异显著,拒绝假设;第二列2.83088106e-01大于指定显著水平,不能拒绝假设:服从正态分布。

    9. 两独立样本T检验

    (1) 用途

     有于比较两组数据是否来自于同一正态分布的总体。注意:如果要比较的两组数据不满足方差齐性, 需要在ttest_ind()函数中添加参数equal_var = False。

    (2) 示例

    from scipy import stats
    import numpy as np
    
    np.random.seed(12345678)
    rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)  
    rvs2 = stats.norm.rvs(loc=6,scale=10,size=500)
    print(stats.ttest_ind(rvs1,rvs2))
    # 运行结果:Ttest_indResult(statistic=-1.3022440006355476, pvalue=0.19313343989106416)
    

    (3) 结果分析

     返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.19313343989106416,比指定的显著水平(一般为5%)大,不能拒绝假设,两组数据来自于同一总结,两组数据之间无差异。

    10. 配对样本T检验

    (1) 用途

     配对样本T检验可视为单样本T检验的扩展,检验的对象由一群来自正态分布独立样本更改为二群配对样本观测值之差。它常用于比较同一受试对象处理的前后差异,或者按照某一条件进行两两配对分别给与不同处理的受试对象之间是否存在差异。

    (2) 示例

    from scipy import stats
    import numpy as np
    
    np.random.seed(12345678)
    rvs1 = stats.norm.rvs(loc=5,scale=10,size=500) 
    rvs2 = (stats.norm.rvs(loc=5,scale=10,size=500) + stats.norm.rvs(scale=0.2,size=500)) 
    print(stats.ttest_rel(rvs1,rvs2))
    运行结果:Ttest_relResult(statistic=0.24101764965300979, pvalue=0.80964043445811551)
    

    (3) 结果分析

     返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.80964043445811551,比指定的显著水平(一般为5%)大,不能拒绝假设。

    11. 单因素方差分析

    (1) 用途

     方差分析(Analysis of Variance,简称ANOVA),又称F检验,用于两个及两个以上样本均数差别的显著性检验。方差分析主要是考虑各组之间的均数差别。

     单因素方差分析(One-wayAnova),是检验由单一因素影响的多组样本某因变量的均值是否有显著差异。

     当因变量Y是数值型,自变量X是分类值,通常的做法是按X的类别把实例成分几组,分析Y值在X的不同分组中是否存在差异。

    (2) 示例

    from scipy import stats
    a = [47,56,46,56,48,48,57,56,45,57]  # 分组1
    b = [87,85,99,85,79,81,82,78,85,91]  # 分组2
    c = [29,31,36,27,29,30,29,36,36,33]  # 分组3
    print(stats.f_oneway(a,b,c))
    # 运行结果:F_onewayResult(statistic=287.74898314933193, pvalue=6.2231520821576832e-19)
    

    (3) 结果分析

     返回结果的第一个值为统计量,它由组间差异除以组间差异得到,上例中组间差异很大,第二个返回值p-value=6.2231520821576832e-19小于边界值(一般为0.05),拒绝原假设, 即认为以上三组数据存在统计学差异,并不能判断是哪两组之间存在差异 。只有两组数据时,效果同 stats.levene 一样。

    12. 多因素方差分析

    (1) 用途

     当有两个或者两个以上自变量对因变量产生影响时,可以用多因素方差分析的方法来进行分析。它不仅要考虑每个因素的主效应,还要考虑因素之间的交互效应。

    (2) 示例

    from statsmodels.formula.api import ols
    from statsmodels.stats.anova import anova_lm
    import pandas as pd
     
    X1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2] 
    X2 = [1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2]
    Y  = [76,78,76,76,76,74,74,76,76,55,65,90,65,90,65,90,90,79,70,90, 88,76,76,76,56,76,76,98,88,78,65,67,67,87,78,56,54,56,54,56] 
     
    data = {'T':X1, 'G':X2, 'L':Y}
    df = pd.DataFrame(data)
    formula = 'L~T+G+T:G' # 公式                                        
    model = ols(formula,df).fit()
    print(anova_lm(model))
    '''
    运行结果:
                df    sum_sq      mean_sq         F    PR(>F)
    T          1.0   265.225   265.225000  2.444407  0.126693
    G          1.0   207.025   207.025000  1.908016  0.175698
    T:G        1.0  1050.625  1050.625000  9.682932  0.003631
    Residual  36.0  3906.100   108.502778       NaN       NaN
    '''
    

    (3) 结果分析

     上述程序定义了公式,公式中,"~"用于隔离因变量和自变量,”+“用于分隔各个自变量, ":"表示两个自变量交互影响。从返回结果的P值可以看出,X1和X2的值组间差异不大,而组合后的T:G的组间有明显差异。

    13. 卡方检验

    (1) 用途

     上面介绍的T检验是参数检验,卡方检验是一种非参数检验方法。相对来说,非参数检验对数据分布的要求比较宽松,并且也不要求太大数据量。卡方检验是一种对计数资料的假设检验方法,主要是比较理论频数和实际频数的吻合程度。常用于特征选择,比如,检验男人和女人在是否患有高血压上有无区别,如果有区别,则说明性别与是否患有高血压有关,在后续分析时就需要把性别这个分类变量放入模型训练。

     基本数据有R行C列, 故通称RC列联表(contingency table), 简称RC表,它是观测数据按两个或更多属性(定性变量)分类时所列出的频数表。

    (2) 示例

    import numpy as np
    import pandas as pd
    from scipy.stats import chi2_contingency
    
    np.random.seed(12345678)
    data = np.random.randint(2, size=(40, 3)) # 2个分类,50个实例,3个特征
    data = pd.DataFrame(data, columns=['A', 'B', 'C'])
    contingency = pd.crosstab(data['A'], data['B']) # 建立列联表
    print(chi2_contingency(contingency)) # 卡方检验
    '''
    运行结果:
    (0.36556036556036503, 0.54543425102570975, 1, 
    array([[ 10.45,   8.55],
           [ 11.55,   9.45]]))'''
    

    (3) 结果分析

     卡方检验函数的参数是列联表中的频数,返回结果第一个值为统计量值,第二个结果为p-value值,p-value=0.54543425102570975,比指定的显著水平(一般5%)大,不能拒绝原假设,即相关性不显著。第三个结果是自由度,第四个结果的数组是列联表的期望值分布。

    14. 单变量统计分析

    (1) 用途

     单变量统计描述是数据分析中最简单的形式,其中被分析的数据只包含一个变量,不处理原因或关系。单变量分析的主要目的是通过对数据的统计描述了解当前数据的基本情况,并找出数据的分布模型。

     单变量数据统计描述从集中趋势上看,指标有:均值,中位数,分位数,众数;从离散程度上看,指标有:极差、四分位数、方差、标准差、协方差、变异系数,从分布上看,有偏度,峰度等。需要考虑的还有极大值,极小值(数值型变量)和频数,构成比(分类或等级变量)。

     此外,还可以用统计图直观展示数据分布特征,如:柱状图、正方图、箱式图、频率多边形和饼状图。

    15. 多元线性回归

    (1) 用途

     多元线性回归模型(multivariable linear regression model ),因变量Y(计量资料)往往受到多个变量X的影响,多元线性回归模型用于计算各个自变量对因变量的影响程度,可以认为是对多维空间中的点做线性拟合。

    (2) 示例

    import statsmodels.api as sm 
    data = sm.datasets.ccard.load_pandas().data
    model = sm.OLS(endog = data['AVGEXP'], exog = data[['AGE','INCOME','INCOMESQ','OWNRENT']]).fit()
    print(model.summary())
    '''
    运行结果:
                                OLS Regression Results                            
    ==============================================================================
    Dep. Variable:                 AVGEXP   R-squared:                       0.543
    Model:                            OLS   Adj. R-squared:                  0.516
    Method:                 Least Squares   F-statistic:                     20.22
    Date:                Thu, 31 Jan 2019   Prob (F-statistic):           5.24e-11
    Time:                        15:11:29   Log-Likelihood:                -507.24
    No. Observations:                  72   AIC:                             1022.
    Df Residuals:                      68   BIC:                             1032.
    Df Model:                           4                                         
    Covariance Type:            nonrobust                                         
    ==============================================================================
                     coef    std err          t      P>|t|      [0.025      0.975]
    ------------------------------------------------------------------------------
    AGE           -6.8112      4.551     -1.497      0.139     -15.892       2.270
    INCOME       175.8245     63.743      2.758      0.007      48.628     303.021
    INCOMESQ      -9.7235      6.030     -1.613      0.111     -21.756       2.309
    OWNRENT       54.7496     80.044      0.684      0.496    -104.977     214.476
    ==============================================================================
    Omnibus:                       76.325   Durbin-Watson:                   1.692
    Prob(Omnibus):                  0.000   Jarque-Bera (JB):              649.447
    Skew:                           3.194   Prob(JB):                    9.42e-142
    Kurtosis:                      16.255   Cond. No.                         87.5
    ==============================================================================
    '''
    

    (3) 结果分析

     直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P<0.05则认为自变量具有统计学意义,从上例中可以看到收入INCOME最有显著性。

    16. 逻辑回归

    (1) 用途

     当因变量Y为2分类变量(或多分类变量时)可以用相应的logistic回归分析各个自变量对因变量的影响程度。

    (2) 示例

    import statsmodels.api as sm
    data = sm.datasets.ccard.load_pandas().data
    data['OWNRENT'] = data['OWNRENT'].astype(int)
    model = sm.Logit(endog = data['OWNRENT'], exog = data[['AVGEXP','AGE','INCOME','INCOMESQ']]).fit()
    print(model.summary())
    '''
    运行结果:
    Optimization terminated successfully.
             Current function value: 0.504920
             Iterations 8
                               Logit Regression Results                           
    ==============================================================================
    Dep. Variable:                OWNRENT   No. Observations:                   72
    Model:                          Logit   Df Residuals:                       68
    Method:                           MLE   Df Model:                            3
    Date:                Fri, 01 Feb 2019   Pseudo R-squ.:                  0.2368
    Time:                        17:05:47   Log-Likelihood:                -36.354
    converged:                       True   LL-Null:                       -47.633
                                            LLR p-value:                 4.995e-05
    ==============================================================================
                     coef    std err          z      P>|z|      [0.025      0.975]
    ------------------------------------------------------------------------------
    AVGEXP         0.0002      0.001      0.228      0.820      -0.002       0.002
    AGE            0.0853      0.042      2.021      0.043       0.003       0.168
    INCOME        -2.5798      0.822     -3.137      0.002      -4.191      -0.968
    INCOMESQ       0.4243      0.126      3.381      0.001       0.178       0.670
    ==============================================================================
    '''
    

    (3) 结果分析

     直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P<0.05则认为自变量具有统计学意义。

    展开全文
  • 1. 常用函数库scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立的statsmodels包。scipy的stats包含一些比较基本...

    1. 常用函数库

    scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立的statsmodels包。

    scipy的stats包含一些比较基本的工具,比如:t检验,正态性检验,卡方检验之类,statsmodels提供了更为系统的统计模型,包括线性模型,时序分析,还包含数据集,做图工具等等。

    2. 小样本数据的正态性检验

    (1) 用途

    夏皮罗维尔克检验法 (Shapiro-Wilk) 用于检验参数提供的一组小样本数据线是否符合正态分布,统计量越大则表示数据越符合正态分布,但是在非正态分布的小样本数据中也经常会出现较大的W值。需要查表来估计其概率。由于原假设是其符合正态分布,所以当P值小于指定显著水平时表示其不符合正态分布。

    正态性检验是数据分析的第一步,数据是否符合正态性决定了后续使用不同的分析和预测方法,当数据不符合正态性分布时,我们可以通过不同的转换方法把非正太态数据转换成正态分布后再使用相应的统计方法进行下一步操作。

    (2) 示例

    from scipy import stats

    import numpy as np

    np.random.seed(12345678)

    x = stats.norm.rvs(loc=5, scale=10, size=80) # loc为均值,scale为方差

    print(stats.shapiro(x))

    # 运行结果:(0.9654011726379395, 0.029035290703177452)

    (3) 结果分析

    返回结果 p-value=0.029035290703177452,比指定的显著水平(一般为5%)小,则拒绝假设:x不服从正态分布。

    3. 检验样本是否服务某一分布

    (1) 用途

    科尔莫戈罗夫检验(Kolmogorov-Smirnov test),检验样本数据是否服从某一分布,仅适用于连续分布的检验。下例中用它检验正态分布。

    (2) 示例

    from scipy import stats

    import numpy as np

    np.random.seed(12345678)

    x = stats.norm.rvs(loc=0, scale=1, size=300)

    print(stats.kstest(x,'norm'))

    # 运行结果:KstestResult(statistic=0.0315638260778347, pvalue=0.9260909172362317)

    (3) 结果分析

    生成300个服从N(0,1)标准正态分布的随机数,在使用k-s检验该数据是否服从正态分布,提出假设:x从正态分布。最终返回的结果,p-value=0.9260909172362317,比指定的显著水平(一般为5%)大,则我们不能拒绝假设:x服从正态分布。这并不是说x服从正态分布一定是正确的,而是说没有充分的证据证明x不服从正态分布。因此我们的假设被接受,认为x服从正态分布。如果p-value小于我们指定的显著性水平,则我们可以肯定的拒绝提出的假设,认为x肯定不服从正态分布,这个拒绝是绝对正确的。

    4.方差齐性检验

    (1) 用途

    方差反映了一组数据与其平均值的偏离程度,方差齐性检验用以检验两组或多组数据与其均值偏离程度是否存在差异,也是很多检验和算法的先决条件。

    (2) 示例

    from scipy import stats

    import numpy as np

    np.random.seed(12345678)

    rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)

    rvs2 = stats.norm.rvs(loc=25,scale=9,size=500)

    print(stats.levene(rvs1, rvs2))

    # 运行结果:LeveneResult(statistic=1.6939963163060798, pvalue=0.19337536323599344)

    (3) 结果分析

    返回结果 p-value=0.19337536323599344, 比指定的显著水平(假设为5%)大,认为两组数据具有方差齐性。

    5. 图形描述相关性

    (1) 用途

    最常用的两变量相关性分析,是用作图描述相关性,图的横轴是一个变量,纵轴是另一变量,画散点图,从图中可以直观地看到相关性的方向和强弱,线性正相关一般形成由左下到右上的图形;负相关则是从左上到右下的图形,还有一些非线性相关也能从图中观察到。

    (2) 示例

    import statsmodels.api as sm

    import matplotlib.pyplot as plt

    data = sm.datasets.ccard.load_pandas().data

    plt.scatter(data['INCOMESQ'], data['INCOME'])

    933f45ba36fb

    (3) 结果分析

    从图中可以看到明显的正相关趋势。

    6. 正态资料的相关分析

    (1) 用途

    皮尔森相关系数(Pearson correlation coefficient)是反应俩变量之间线性相关程度的统计量,用它来分析正态分布的两个连续型变量之间的相关性。常用于分析自变量之间,以及自变量和因变量之间的相关性。

    (2) 示例

    from scipy import stats

    import numpy as np

    np.random.seed(12345678)

    a = np.random.normal(0,1,100)

    b = np.random.normal(2,2,100)

    print(stats.pearsonr(a, b))

    # 运行结果:(-0.034173596625908326, 0.73571128614545933)

    (3) 结果分析

    返回结果的第一个值为相关系数表示线性相关程度,其取值范围在[-1,1],绝对值越接近1,说明两个变量的相关性越强,绝对值越接近0说明两个变量的相关性越差。当两个变量完全不相关时相关系数为0。第二个值为p-value,统计学上,一般当p-value<0.05时,可以认为两变量存在相关性。

    7. 非正态资料的相关分析

    (1) 用途

    斯皮尔曼等级相关系数(Spearman’s correlation coefficient for ranked data ),它主要用于评价顺序变量间的线性相关关系,在计算过程中,只考虑变量值的顺序(rank, 秩或称等级),而不考虑变量值的大小。常用于计算类型变量的相关性。

    (2) 示例

    from scipy import stats

    import numpy as np

    print(stats.spearmanr([1,2,3,4,5], [5,6,7,8,7]))

    # 运行结果:SpearmanrResult(correlation=0.82078268166812329, pvalue=0.088587005313543812)

    (3) 结果分析

    返回结果的第一个值为相关系数表示线性相关程度,本例中correlation趋近于1表示正相关。第二个值为p-value,p-value越小,表示相关程度越显著。

    8. 单样本T检验

    (1) 用途

    单样本T检验,用于检验数据是否来自一致均值的总体,T检验主要是以均值为核心的检验。注意以下几种T检验都是双侧T检验。

    (2) 示例

    from scipy import stats

    import numpy as np

    np.random.seed(12345678)

    rvs = stats.norm.rvs(loc=5, scale=10, size=(100,2))

    print(stats.ttest_1samp(rvs, [1, 5]))

    # 运行结果:Ttest_1sampResult(statistic=array([ 5.12435977, 1.07927393]), pvalue=array([ 1.47820719e-06, 2.83088106e-01]))

    (3) 结果分析

    本例中生成了2列100行的数组,ttest_1samp的第二个参数是分别对两列估计的均值,p-value返回结果,第一列1.47820719e-06比指定的显著水平(一般为5%)小,认为差异显著,拒绝假设;第二列2.83088106e-01大于指定显著水平,不能拒绝假设:服从正态分布。

    9. 两独立样本T检验

    (1) 用途

    有于比较两组数据是否来自于同一正态分布的总体。注意:如果要比较的两组数据不满足方差齐性, 需要在ttest_ind()函数中添加参数equal_var = False。

    (2) 示例

    from scipy import stats

    import numpy as np

    np.random.seed(12345678)

    rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)

    rvs2 = stats.norm.rvs(loc=6,scale=10,size=500)

    print(stats.ttest_ind(rvs1,rvs2))

    # 运行结果:Ttest_indResult(statistic=-1.3022440006355476, pvalue=0.19313343989106416)

    (3) 结果分析

    返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.19313343989106416,比指定的显著水平(一般为5%)大,不能拒绝假设,两组数据来自于同一总结,两组数据之间无差异。

    10. 配对样本T检验

    (1) 用途

    配对样本T检验可视为单样本T检验的扩展,检验的对象由一群来自正态分布独立样本更改为二群配对样本观测值之差。它常用于比较同一受试对象处理的前后差异,或者按照某一条件进行两两配对分别给与不同处理的受试对象之间是否存在差异。

    (2) 示例

    from scipy import stats

    import numpy as np

    np.random.seed(12345678)

    rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)

    rvs2 = (stats.norm.rvs(loc=5,scale=10,size=500) + stats.norm.rvs(scale=0.2,size=500))

    print(stats.ttest_rel(rvs1,rvs2))

    运行结果:Ttest_relResult(statistic=0.24101764965300979, pvalue=0.80964043445811551)

    (3) 结果分析

    返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.80964043445811551,比指定的显著水平(一般为5%)大,不能拒绝假设。

    11. 单因素方差分析

    (1) 用途

    方差分析(Analysis of Variance,简称ANOVA),又称F检验,用于两个及两个以上样本均数差别的显著性检验。方差分析主要是考虑各组之间的均数差别。

    单因素方差分析(One-wayAnova),是检验由单一因素影响的多组样本某因变量的均值是否有显著差异。

    当因变量Y是数值型,自变量X是分类值,通常的做法是按X的类别把实例成分几组,分析Y值在X的不同分组中是否存在差异。

    (2) 示例

    from scipy import stats

    a = [47,56,46,56,48,48,57,56,45,57] # 分组1

    b = [87,85,99,85,79,81,82,78,85,91] # 分组2

    c = [29,31,36,27,29,30,29,36,36,33] # 分组3

    print(stats.f_oneway(a,b,c))

    # 运行结果:F_onewayResult(statistic=287.74898314933193, pvalue=6.2231520821576832e-19)

    (3) 结果分析

    返回结果的第一个值为统计量,它由组间差异除以组间差异得到,上例中组间差异很大,第二个返回值p-value=6.2231520821576832e-19小于边界值(一般为0.05),拒绝原假设, 即认为以上三组数据存在统计学差异,并不能判断是哪两组之间存在差异 。只有两组数据时,效果同 stats.levene 一样。

    12. 多因素方差分析

    (1) 用途

    当有两个或者两个以上自变量对因变量产生影响时,可以用多因素方差分析的方法来进行分析。它不仅要考虑每个因素的主效应,还要考虑因素之间的交互效应。

    (2) 示例

    from statsmodels.formula.api import ols

    from statsmodels.stats.anova import anova_lm

    import pandas as pd

    X1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]

    X2 = [1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2]

    Y = [76,78,76,76,76,74,74,76,76,55,65,90,65,90,65,90,90,79,70,90, 88,76,76,76,56,76,76,98,88,78,65,67,67,87,78,56,54,56,54,56]

    data = {'T':X1, 'G':X2, 'L':Y}

    df = pd.DataFrame(data)

    formula = 'L~T+G+T:G' # 公式

    model = ols(formula,df).fit()

    print(anova_lm(model))

    '''

    运行结果:

    df sum_sq mean_sq F PR(>F)

    T 1.0 265.225 265.225000 2.444407 0.126693

    G 1.0 207.025 207.025000 1.908016 0.175698

    T:G 1.0 1050.625 1050.625000 9.682932 0.003631

    Residual 36.0 3906.100 108.502778 NaN NaN

    '''

    (3) 结果分析

    上述程序定义了公式,公式中,"~"用于隔离因变量和自变量,”+"用于分隔各个自变量, ":"表示两个自变量交互影响。从返回结果的P值可以看出,X1和X2的值组间差异不大,而组合后的T:G的组间有明显差异。

    13. 卡方检验

    (1) 用途

    上面介绍的T检验是参数检验,卡方检验是一种非参数检验方法。相对来说,非参数检验对数据分布的要求比较宽松,并且也不要求太大数据量。卡方检验是一种对计数资料的假设检验方法,主要是比较理论频数和实际频数的吻合程度。常用于特征选择,比如,检验男人和女人在是否患有高血压上有无区别,如果有区别,则说明性别与是否患有高血压有关,在后续分析时就需要把性别这个分类变量放入模型训练。

    基本数据有R行C列, 故通称RC列联表(contingency table), 简称RC表,它是观测数据按两个或更多属性(定性变量)分类时所列出的频数表。

    (2) 示例

    import numpy as np

    import pandas as pd

    from scipy.stats import chi2_contingency

    np.random.seed(12345678)

    data = np.random.randint(2, size=(40, 3)) # 2个分类,50个实例,3个特征

    data = pd.DataFrame(data, columns=['A', 'B', 'C'])

    contingency = pd.crosstab(data['A'], data['B']) # 建立列联表

    print(chi2_contingency(contingency)) # 卡方检验

    '''

    运行结果:

    (0.36556036556036503, 0.54543425102570975, 1,

    array([[ 10.45, 8.55],

    [ 11.55, 9.45]]))'''

    (3) 结果分析

    卡方检验函数的参数是列联表中的频数,返回结果第一个值为统计量值,第二个结果为p-value值,p-value=0.54543425102570975,比指定的显著水平(一般5%)大,不能拒绝原假设,即相关性不显著。第三个结果是自由度,第四个结果的数组是列联表的期望值分布。

    14. 单变量统计分析

    (1) 用途

    单变量统计描述是数据分析中最简单的形式,其中被分析的数据只包含一个变量,不处理原因或关系。单变量分析的主要目的是通过对数据的统计描述了解当前数据的基本情况,并找出数据的分布模型。

    单变量数据统计描述从集中趋势上看,指标有:均值,中位数,分位数,众数;从离散程度上看,指标有:极差、四分位数、方差、标准差、协方差、变异系数,从分布上看,有偏度,峰度等。需要考虑的还有极大值,极小值(数值型变量)和频数,构成比(分类或等级变量)。

    此外,还可以用统计图直观展示数据分布特征,如:柱状图、正方图、箱式图、频率多边形和饼状图。

    15. 多元线性回归

    (1) 用途

    多元线性回归模型(multivariable linear regression model ),因变量Y(计量资料)往往受到多个变量X的影响,多元线性回归模型用于计算各个自变量对因变量的影响程度,可以认为是对多维空间中的点做线性拟合。

    (2) 示例

    import statsmodels.api as sm

    data = sm.datasets.ccard.load_pandas().data

    model = sm.OLS(endog = data['AVGEXP'], exog = data[['AGE','INCOME','INCOMESQ','OWNRENT']]).fit()

    print(model.summary())

    '''

    运行结果:

    OLS Regression Results

    ==============================================================================

    Dep. Variable: AVGEXP R-squared: 0.543

    Model: OLS Adj. R-squared: 0.516

    Method: Least Squares F-statistic: 20.22

    Date: Thu, 31 Jan 2019 Prob (F-statistic): 5.24e-11

    Time: 15:11:29 Log-Likelihood: -507.24

    No. Observations: 72 AIC: 1022.

    Df Residuals: 68 BIC: 1032.

    Df Model: 4

    Covariance Type: nonrobust

    ==============================================================================

    coef std err t P>|t| [0.025 0.975]

    ------------------------------------------------------------------------------

    AGE -6.8112 4.551 -1.497 0.139 -15.892 2.270

    INCOME 175.8245 63.743 2.758 0.007 48.628 303.021

    INCOMESQ -9.7235 6.030 -1.613 0.111 -21.756 2.309

    OWNRENT 54.7496 80.044 0.684 0.496 -104.977 214.476

    ==============================================================================

    Omnibus: 76.325 Durbin-Watson: 1.692

    Prob(Omnibus): 0.000 Jarque-Bera (JB): 649.447

    Skew: 3.194 Prob(JB): 9.42e-142

    Kurtosis: 16.255 Cond. No. 87.5

    ==============================================================================

    '''

    (3) 结果分析

    直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P<0.05则认为自变量具有统计学意义,从上例中可以看到收入INCOME最有显著性。

    16. 逻辑回归

    (1) 用途

    当因变量Y为2分类变量(或多分类变量时)可以用相应的logistic回归分析各个自变量对因变量的影响程度。

    (2) 示例

    import statsmodels.api as sm

    data = sm.datasets.ccard.load_pandas().data

    data['OWNRENT'] = data['OWNRENT'].astype(int)

    model = sm.Logit(endog = data['OWNRENT'], exog = data[['AVGEXP','AGE','INCOME','INCOMESQ']]).fit()

    print(model.summary())

    '''

    运行结果:

    Optimization terminated successfully.

    Current function value: 0.504920

    Iterations 8

    Logit Regression Results

    ==============================================================================

    Dep. Variable: OWNRENT No. Observations: 72

    Model: Logit Df Residuals: 68

    Method: MLE Df Model: 3

    Date: Fri, 01 Feb 2019 Pseudo R-squ.: 0.2368

    Time: 17:05:47 Log-Likelihood: -36.354

    converged: True LL-Null: -47.633

    LLR p-value: 4.995e-05

    ==============================================================================

    coef std err z P>|z| [0.025 0.975]

    ------------------------------------------------------------------------------

    AVGEXP 0.0002 0.001 0.228 0.820 -0.002 0.002

    AGE 0.0853 0.042 2.021 0.043 0.003 0.168

    INCOME -2.5798 0.822 -3.137 0.002 -4.191 -0.968

    INCOMESQ 0.4243 0.126 3.381 0.001 0.178 0.670

    ==============================================================================

    '''

    (3) 结果分析

    直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P<0.05则认为自变量具有统计学意义。

    展开全文
  • Pandas数据清洗 引入数据清洗的目的就是为了解决重复值,缺省值和异常值带来的影响,使得得数据的引用更加有效和准确。 数据清洗–重复值 重复值主要分为两种: 记录重复:一个或多个特征列的几条记录完全一致 ...

    Pandas数据清洗

    在这里插入图片描述
    引入数据清洗的目的就是为了解决重复值,缺省值和异常值带来的影响,使得得数据的引用更加有效和准确。
    在这里插入图片描述

    数据清洗–重复值

    重复值主要分为两种:

    • 记录重复:一个或多个特征列的几条记录完全一致
      对于记录重复数据,一般采用直接删除方式:
    DataFrame.drop_duplicates(subset=None,Keep='first',inplace=Flase)
    
    subset: 用来指定特定的列,默认所有列
    

    例:
    在这里插入图片描述

    • 特征重复:一个或多个特征名不同,但是数据完全一样
      pandas提供了一个corr函数可以进行相似度的检测,当相似度为1,表示两列数据一模一样。
    DataFrame.corr(method='pearson',min_periods=1)
    

    在这里插入图片描述
    例:
    在这里插入图片描述

    数据清洗——缺省值

    Pandas通过isnull和notnull检查DataFrame中的缺省值和非缺省值。
    在这里插入图片描述

    在这里插入图片描述

    数据清洗——缺省值处理

    我们一般对缺省值进行三种方式处理:

    1、删除法
    2、替换法
    3、插值法:删除法导致数据量减少,替换法导致数据标准差变化。插值法通过合适的值替换缺省值。

    删除法:

    在这里插入图片描述

    data.dropna()
    

    替换法

    在这里插入图片描述

    data.fillna('Temp':25;'Wet':75;'Fog':100)
    

    在这里插入图片描述

    插值法

    在这里插入图片描述

    数据处理——异常值处理

    数据处理中,异常值是指偏离明显的数值,有时候也成为离群点,异常值在进行数据分析的时候,分析结果容易产生偏差甚至错误,对于异常值,一般采用删除的方法。
    异常值的检测:

    • 3δ原则
      在正要分布中δ代表标准差,μ代表均值。x=μ即为图像的对称轴。
      在这里插入图片描述

    • 箱线图分析
      在这里插入图片描述

    Pandas标准化数据

    数据标准化的目的就是对数据进行差异性的消除,使得数据取值大致相同。
    数据标准化的方式很多,主要介绍两种:
    1、离差标准化
    2、标准差标准化

    1、离差标准化

    在这里插入图片描述

    ## 自定义离差标准化函数
    def MinMaxScale(data):
    	data = (data-data.min())/(data.max()-data.min())
    	return data
    

    2、标准差标准化

    在这里插入图片描述

    ## 自定义标准差标准化函数
    def StandardScaler(data):
    	data = (data-data.mean())/data.std()
    	return data
    

    Pandas转换数据

    • 数据转换:
      某些数据不是数值型的数据,如性别等,在进行计算的时候,往往需要数值型的数据,此时,需要将这些数据进行数值型的转换。
      Pandas提供函数get_dummies获取并将非数值型的数据(哑数据)并转换成数值型数据。
      pandas.get_dummies(data,prefix,dummy_na,columns)
      
    展开全文
  • Python数据特征分析-统计分析统计分析导入库集中趋势度量算数平均数位置平均数离中趋势度量极差、分位差方差与标准差 统计分析 介绍:统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析 ...

    统计分析

    介绍:统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析

    导入库

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    % matplotlib inline
    

    集中趋势度量

    介绍:指一组数据向某一中心靠拢的倾向,核心在于寻找数据的代表值或中心值 —— 统计平均数
    分为:算数平均数、位置平均数

    算数平均数

    data = pd.DataFrame({'value':np.random.randint(100,120,100),
                        'f':np.random.rand(100)})
    data['f'] = data['f'] / data['f'].sum()  # f为权重,这里将f列设置成总和为1的权重占比
    print(data.head())
    print('------')
    # 创建数据
    
    mean = data['value'].mean()
    print('简单算数平均值为:%.2f' % mean)
    # 简单算数平均值 = 总和 / 样本数量 (不涉及权重)
    
    mean_w = (data['value'] * data['f']).sum() / data['f'].sum()
    print('加权算数平均值为:%.2f' % mean_w)
    # 加权算数平均值 = (x1f1 + x2f2 + ... + xnfn) / (f1 + f2 + ... + fn)
    

    *

    在这里插入图片描述

    位置平均数

    m = data['value'].mode()
    print('众数为',m.tolist())
    # 众数是一组数据中出现次数最多的数,这里可能返回多个值
    
    med = data['value'].median()
    print('中位数为%i' % med)
    # 中位数指将总体各单位标志按照大小顺序排列后,中间位置的数字
    
    data['value'].plot(kind = 'kde',style = '--k',grid = True)
    # 密度曲线
    
    plt.axvline(mean,hold=None,color='r',linestyle="--",alpha=0.8)  
    plt.text(mean + 5,0.005,'简单算数平均值为:%.2f' % mean, color = 'r')
    # 简单算数平均值
    
    plt.axvline(mean_w,hold=None,color='b',linestyle="--",alpha=0.8)  
    plt.text(mean + 5,0.01,'加权算数平均值:%.2f' % mean_w, color = 'b')
    # 加权算数平均值
    
    plt.axvline(med,hold=None,color='g',linestyle="--",alpha=0.8)  
    plt.text(mean + 5,0.015,'中位数:%i' % med, color = 'g')
    # 中位数
    # **这里三个数text显示的横坐标一致,目的是图示效果不拥挤
    

    *

    在这里插入图片描述

    离中趋势度量

    介绍:指一组数据中各数据以不同程度的距离偏离中心的趋势
    包含:极差与分位差、方差与标准差、离散系数

    极差、分位差

    data = pd.DataFrame({'A_sale':np.random.rand(30)*1000,
                        'B_sale':np.random.rand(30)*1000},
                       index = pd.period_range('20170601','20170630'))
    print(data.head())
    print('------')
    # 创建数据
    # A/B销售额量级在同一水平
    
    a_r = data['A_sale'].max() - data['A_sale'].min()
    b_r = data['B_sale'].max() - data['B_sale'].min()
    print('A销售额的极差为:%.2f, B销售额的极差为:%.2f' % (a_r,b_r))
    print('------')
    # 极差
    # 没有考虑中间变量的变动,测定离中趋势不稳定
    
    sta = data['A_sale'].describe()
    stb = data['B_sale'].describe()
    print(sta)
    a_iqr = sta.loc['75%'] - sta.loc['25%']
    b_iqr = stb.loc['75%'] - stb.loc['25%']
    print('A销售额的分位差为:%.2f, B销售额的分位差为:%.2f' % (a_iqr,b_iqr))
    print('------')
    # 分位差
    
    color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray')
    data.plot.box(vert=False,grid = True,color = color,figsize = (10,3))
    # 箱型图
    

    *

    在这里插入图片描述

    方差与标准差

    a_std = sta.loc['std']
    b_std = stb.loc['std']
    a_var = data['A_sale'].var()
    b_var = data['B_sale'].var()
    print('A销售额的标准差为:%.2f, B销售额的标准差为:%.2f' % (a_std,b_std))
    print('A销售额的方差为:%.2f, B销售额的方差为:%.2f' % (a_var,b_var))
    # 方差 → 各组中数值与算数平均数离差平方的算术平均数
    # 标准差 → 方差的平方根
    # 标准差是最常用的离中趋势指标 → 标准差越大,离中趋势越明显
    
    fig = plt.figure(figsize = (12,4))
    ax1 = fig.add_subplot(1,2,1)
    data['A_sale'].plot(kind = 'kde',style = 'k--',grid = True,title = 'A密度曲线')
    plt.axvline(sta.loc['50%'],hold=None,color='r',linestyle="--",alpha=0.8)  
    plt.axvline(sta.loc['50%'] - a_std,hold=None,color='b',linestyle="--",alpha=0.8)  
    plt.axvline(sta.loc['50%'] + a_std,hold=None,color='b',linestyle="--",alpha=0.8)  
    # A密度曲线,1个标准差
    
    ax2 = fig.add_subplot(1,2,2)
    data['B_sale'].plot(kind = 'kde',style = 'k--',grid = True,title = 'B密度曲线')
    plt.axvline(stb.loc['50%'],hold=None,color='r',linestyle="--",alpha=0.8)  
    plt.axvline(stb.loc['50%'] - b_std,hold=None,color='b',linestyle="--",alpha=0.8)  
    plt.axvline(stb.loc['50%'] + b_std,hold=None,color='b',linestyle="--",alpha=0.8)  
    # B密度曲线,1个标准差
    

    *

    在这里插入图片描述

    • python 数据特征分析

    1. Python数据特征分析-分布分析
    2. Python数据特征分析-对比分析
    3. Python数据特征分析-统计分析
    4. Python数据特征分析-帕累托分析
    5. Python数据特征分析-正态性检验
    6. Python数据特征分析-相关性分析

    展开全文
  • 购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 Python数据分析(统计分析)视频培训课程概述:Python统计分析系列课程以Python爬虫为核心工具,结合其工具包进行统计分析实验。课程内容包括数据科学必备的几种...
  • 主要介绍了基于Python数据分析之pandas统计分析,具有很好对参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python数据统计分析

    2018-05-28 15:10:00
    #餐饮销量数据统计分析 from __future__ import print_function import pandas as pd catering_sale = '../data/catering_sale.xls' #餐饮数据 data = pd.read_excel(catering_sale, index_col =...
  • pandas模块为我们提供了非常多的描述性统计分析的指标函数,如总和、均值、最小值、最大值等,我们来具体看看这些函数:1、随机生成三组数据import numpy as npimport pandas as pdnp.random.seed(1234)d1 = pd....
  • 1.统计学(检验、分布)的 python(numpy/pandas/scipy) 实现 ... 2.Python数据分析numpy统计函数 https://blog.csdn.net/qq_34619992/article/details/79640511 3.Python回归分析五...
  • 使用Python进行统计分析数据可视化 在线课程WebEx: : 课程总结 统计分析数据可视化和Python编程都可以通过动手实践集中在一处。 教科书 Wes McKinny第二版进行数据分析的Python 讲解 运行Python代码和基于云的...
  • 本案例将租房网站上的杭州地区的租房数据作为参考,运用所学到的数据分析知识来分析真实数据,并心图表的形式得到以下指标: 统计每个区域的房源总数量。 使用条形图分析哪各户型数量最多、更受欢迎。 统计每个...
  • 上期讲了金融数据的储存,这期讲解利用Python进行金融数据统计分析 下面运行环境没有的,请看第一期内容安装环境 本节重点: 分析HS300股票的市值和PE的统计规律 个股日收益率的统计规律研究 金融数据分析中...
  • https://www.jianshu.com/p/933f45ba36fb:《python数据统计分析》 https://blog.csdn.net/qq_30138291/article/details/79801777:《相关性系数介绍+python代码实现 correlation analysis》
  • Python数据分析之pandas统计分析

    万次阅读 多人点赞 2017-07-27 11:03:58
    pandas模块为我们提供了非常多的描述性统计分析的指标函数,如总和、均值、最小值、最大值等,我们来具体看看这些函数:1、随机生成三组数据import numpy as np import pandas as pdnp.random.seed(1234) d1 = pd....
  • 简单数据统计分析 随机变量的概率分布对现实世界的建模和分析发挥这重要作用。有时,理论分布于收集到的某过程的历史数据十分贴近。有时,可以先对某过程的基本特性做先验性判断,然后不需要收集数据就可以选出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,758
精华内容 2,303
关键字:

python数据统计分析

python 订阅