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则认为自变量具有统计学意义。

python数据分析-python数据统计分析相关推荐

  1. 视频教程-数据挖掘基础:零基础学Python数据分析-大数据

    数据挖掘基础:零基础学Python数据分析 辽宁师范大学教师,特聘教授,硕士生导师.大数据与商务智能实验室主任. 李洪磊 ¥198.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术 ...

  2. Python数据分析中数据预处理:编码将文字型数据转换为数值型

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python数据分析中 数据预处理:编码 将文字型数据转换为数值型 选择题 对于以下pyth ...

  3. python逐笔输入数据_知到智慧树Python数据分析与数据可视化结课测验

    知到智慧树Python数据分析与数据可视化结课测验答案 更多相关问题 已知三角形三个顶点的坐标是A(-1,2,3),B(1,1,1),C(0,0,5),试证三角形ABC是直角三角形,并求角B-- Wh ...

  4. python集合中的元素不允许重复_Python语言中同一个集合中的元素不会重复,每个元素都是唯一的。-智慧树Python数据分析与数据可视化章节答案...

    Python数据分析与数据可视化:Python语言中同一个集合中的元素不会重复,每个元素都是唯一的.[?ж???] A:对 B:错 Python数据分析与数据可视化章节测试答案: 对 更多相关问题 智 ...

  5. Python数据分析——Matplotlib数据可视化基础(二)

    Python数据分析--Matplotlib数据可视化基础(二) 思维导图: 图形的绘制 认识要绘制的图形 基本绘图流程 pyplot基础图表函数 pyplot饼图的绘制 pie函数 matplotl ...

  6. 视频教程-迈向数据科学家:带你玩转Python数据分析-Python

    迈向数据科学家:带你玩转Python数据分析 苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门><跟老齐学Python ...

  7. 【Python数据分析】数据预处理1——数据清洗

    在数据挖掘过程中,数据预处理过程是占比很大的一部分工作 数据预处理过程主要有以下几个部分 1.数据清洗--2.数据集成--3.数据变换--4.数据规约 本文介绍数据清洗部分 一.缺失值分析与处理 1. ...

  8. python数据分析笔记——数据加载与整理

    Python数据分析--数据加载与整理 总第47篇 ▼ (本文框架) 数据加载 导入文本数据 1.导入文本格式数据(CSV)的方法: 方法一:使用pd.read_csv(),默认打开csv文件. 9. ...

  9. 【Python数据分析】数据预处理3——数据规约(含主成分分析详解、Python主要预处理函数)

    数据规约产生更小且保持完整性的新数据集,在规约后的数据集上进行分析和挖掘将提高效率 一.属性规约 属性规约通过属性合并创建新属性维数,或者通过直接删除不相关的属性来减少数据维数,从而提高数据挖掘的效率 ...

  10. 【Python数据分析】数据预处理2——数据集成

    数据挖掘需要的数据往往分布在不同的数据源中,数据集成就是将多个数据源合并存放在一个一致的数据存储位置(如数据仓库)中的过程. 一.实体识别 常见的实体识别有: 1.同名异义(两个不同数据源中属性名称相 ...

最新文章

  1. mysql 7.4_CentOS 7.4 64位/ mysql
  2. 丹佛斯变频器模拟量速度输入_变频器与PLC是如何协同作战的?了解这几个控制方式很有必要...
  3. KVM嵌套虚拟化 -- 在虚拟机中创建虚拟机
  4. 从3个科技公司里学到的57条经验(转)
  5. Linux c 算法与数据结构--双向链表
  6. input框传值是怎么才能是整形_做了这些项目,到底多久才能化妆?
  7. 从月薪8K的分析师到月薪2W,只因我有了这份工具清单!
  8. sihpostreboot关闭没有权限_安卓保护隐私,给APP一次性的权限
  9. windows快速搭建activity6.0
  10. 《哈里波特:魔法觉醒》被指侮辱女性玩家?官方回应:动画BUG
  11. 大数据之-Hadoop之HDFS_读数据流程_原理篇---大数据之hadoop工作笔记0069
  12. ie的window.open 未指明的错误_错误还是违法——离开的原因之一
  13. 什么是LED屏/ThinkPadX200/X200S/X301/T400/T500等那些是LED屏?
  14. Faster RCNN学习笔记
  15. 计算机专业课程设计收获及总结,课程设计的心得体会
  16. QT关于屏幕保护程序
  17. oracle表自动模拟多条数据,Oracle使用虚拟表dual一次插入多条记录
  18. opencv-python频繁报错尝试解决措施
  19. 智原领先推出网通ASIC专用28纳米28G可编程SerDes
  20. iOS-长按识别二维码/生成二维码/扫描二维码

热门文章

  1. SQL SERVER 和ACCESS/excel的数据导入导出
  2. 剑指offer第二版(150M超清分享PDF+源码)(转)
  3. Xamarin.Forms 启动页面的设置
  4. 批处理脚本 - 可移动的远程桌面启动器
  5. CVE-2016-3714-ImageMagick 漏洞利用
  6. 第2章—装配Bean—自动化装配Bean
  7. C++11 auto类型说明符
  8. Python 函数式编程(3) —— 闭包
  9. iOS Swift-元组tuples(The Swift Programming Language)
  10. transform属性