Python验证数据的抽样分布类型
假如要对一份统计数据进行分析,一般其来源来自于社会调研/普查,所以数据不是总体而是一定程度的抽样。对于抽样数据的分析,就可以结合上篇统计量及其抽样分布的内容,判断数据符合哪种分布。使用已知分布特性,可以完成对总体的统计分析。
本文使用python函数判断数据集是否符合特定抽样分布。
数据来源
本次试验使用kagglehttps://www.kaggle.com/datasets上的公开数据集,可以通过搜索框进行数据集搜索。
通过搜索「income」关键值,最后决定使用https://www.kaggle.com/goldenoakresearch/us-household-income-stats-geo-locations/version/1#US_Income_Kaggle.csv这个数据集,其中包含抽样区域的家庭收入均值,中位数和标准差。通过页面中的pdf文件链接,可以获取每个字段的说明。
抽样分布验证
读入数据
import pandas as pd
import numpy as np
us_income = pd.read_csv("US_Income_Kaggle.csv", encoding="ISO-8859-1")
需要注意,csv文件的 编码是Latin-1
,因此需要显式指定编码读取。
画出收入均值的直方图
import seaborn as sns
sns.distplot(us_income['Mean'], color="b", bins=10, kde=True)
从图形看,在低收入侧,有一个数量的下降,并不符合正态分布的曲线。
使用函数判断是否服从正态分布
from scipy import stats
stats.kstest(us_income['Mean'], 'norm')
Out[23]: KstestResult(statistic=0.980404837353683, pvalue=0.0)
因为kstest可以做多种分布的验证,这里需要指定验证的分布类型为正态分布,即第2个参数。
stats.shapiro(us_income['Mean'])
UserWarning: p-value may not be accurate for N > 5000.
warnings.warn("p-value may not be accurate for N > 5000.")
Out[25]: (0.9653068780899048, 0.0)
shapiro函数不适合样本数>5000的正态分布检验,所以这里提示warning。
stats.normaltest(us_income['Mean'],axis=0)
Out[27]: NormaltestResult(statistic=1170.1750576510913, pvalue=7.938067739808798e-255)
normaltest函数专门用于正态分布分布检验,其中axis=0
表示按行读取数据。
通过以上的函数,可以得到所有的pvalue都小于0.05,这种情况下,我们认为区域收入平均值不服从正态分布。
是否服从t分布
np.random.seed(1)
ks = stats.t.fit(us_income['Mean'])
df = ks[0]
loc = ks[1]
scale = ks[2]
t_estm = stats.t.rvs(df=df, loc=loc, scale=scale, size=len(us_income['Mean']))
stats.ks_2samp(us_income['Mean'], t_estm)
Out[40]: Ks_2sampResult(statistic=0.07327168078639335, pvalue=1.7671996893936462e-36)
这里的思路是先用t分布拟合区域收入均值,然后使用ks_2samp
函数比较区域收入均值和t分布的随机变量。因为pvalue小于0.05,认为该数据集不服从t分布。用以下方法可以画出拟合数据和数据集的对比图。
from matplotlib import pyplot as plt
plt.figure()
us_income['Mean'].plot(kind = 'kde')
t_distribution = stats.t(ks[0], ks[1],ks[2])
x = np.linspace(t_distribution.ppf(0.01), t_distribution.ppf(0.99), 100)
plt.plot(x, t_distribution.pdf(x), c='orange')
plt.xlabel('location based income')
plt.title('income on t_distribution', size=20)
plt.legend(['income_data', 't_distribution'])
是否服从卡方分布
np.random.seed(1)
chi_square = stats.chi2.fit(us_income['Mean'])
df = chi_square[0]
loc = chi_square[1]
scale = chi_square[2]
chi_estm = stats.chi2.rvs(df=df, loc=loc, scale=scale, size=len(us_income['Mean']))
stats.ks_2samp(us_income['Mean'], chi_estm)
Out[40]: Ks_2sampResult(statistic=0.07327168078639335, pvalue=1.7671996893936462e-36)
同样采用拟合值与原数据集比较,pvalue小于0.05,认为该数据不服从卡方分布。拟合数据和数据集的对比图方法同上,此处从略。
总结
对于数据集的抽样分布类型,可以使用scipy.stats
包中的相应函数进行判断。其中,正态分布可以使用kstest
,normaltest
等函数;对于t分布和卡方分布,可以先对数据进行相应分布的拟合,然后用ks_2samp
函数对拟合的数据同原始数据比较,获得两个数据是否服从相同的分布。
欢迎扫描二维码进行关注
Python验证数据的抽样分布类型的更多相关文章
- Python的数据的基本类型
基本数据类型 int整数 str 字符串 一般不存放大量的数据 bool 布尔值,用来判断. True,False list 列表.存放大量数据,[]表示,里面可以放各种数据类型 ...
- 使用 Python 验证数据集中的体温是否符合正态分布
数据集地址:http://jse.amstat.org/datasets/normtemp.dat.txt 数据集描述:总共只有三列:体温.性别.心率 #代码 from scipy import st ...
- python 可变、不可变类型、深拷贝、浅拷贝理解
简介 python中数据分为可变类型,不可变类型.不同的数据类型影响着不同情况下的深浅拷贝. 下面则将简要介绍一下 可变类型 当某个数据的值发生改变时,它对应的内存地址不发生改变,常见的有列表.字典. ...
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- Python——可变和不可变类型数据
什么是不可变类型? 存储空间保存的数据不允许被修改,这种数据就是不可变类型. 常见的不可变类型有: 数字类型 int, bool, float, complex, long(2.x) 字符串 str ...
- python基础知识五 各类型数据方法补充,转换,分类,编码+坑中菜
3.9各类型数据方法补充,转换,分类,编码,坑中菜 3.9.1数据类型方法补充 1.str:不可变 补充方法 s1.capitalize():首字母大写 s1 = "alex" s ...
- python和数据科学(Anaconda)
Python拥有着极其丰富且稳定的数据科学工具环境.遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke).在这篇文章中,我会一步一步指导你怎么进入这个PyData丛林. 你可 ...
- Python之数据序列化(json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
- 数据挖掘(二)用python实现数据探索:汇总统计和可视化
今天我们来讲一讲有关数据探索的问题.其实这个概念还蛮容易理解的,就是我们刚拿到数据之后对数据进行的一个探索的过程,旨在了解数据的属性与分布,发现数据一些明显的规律,这样的话一方面有助于我们进行数据预处 ...
随机推荐
- 创建express项目(nodejs)
1.下载nodejs安装包 nodejs官网下载最新版本就行,网址:http://nodejs.cn/download/,点击自己适用的系统,自动下载跟电脑操作系统位数符合的安装包, 2.配置环境 最 ...
- 实例分析jdom和dom4j的使用和区别 (转)
实例分析jdom和dom4j的使用和区别 对于xml的解析和生成,我们在实际应用中用的比较多的是JDOM和DOM4J,下面通过例子来分析两者的区别(在这里我就不详细讲解怎么具体解析xml,如果对于 ...
- 谷歌guava缓存
简易缓存,可以设置时间的缓存 private static Cache<String,String> tokenCache = CacheBuilder.newBuilder().expi ...
- laravel-5.6路由命名
1.第一种:通过route路由中的as关键字来实现 1 Route::get('api/user',['as'='web.user'],'messageController@userInformati ...
- UDDI:百科
ylbtech-UDDI:百科 UDDI是一种用于描述.发现.集成Web Service的技术,它是Web Service协议栈的一个重要部分.通过UDDI,企业可以根据自己的需要动态查找并使用Web ...
- spring + mybatis + mysql/oracle开发
1)创建一个spring-mybatis-mysql这么一个javaweb或java工程 2)导入spring-ioc,spring-aop,spring-transaction,mybatis,c3 ...
- Dalvik VM和JVM的比较
为什么不是jvm 而要搞一个dalvik vm ? jvm 在设计上考虑的时pc机 dalvik在设计上针对手机,特点:1. 速度快 2. 功耗低 (在移动设备上)
- 机器学习之保存与加载.pickle模型文件
import pickle from sklearn.externals import joblib from sklearn.svm import SVC from sklearn import d ...
- IDEA 底部工具栏没有 Version Control 解决办法
百度了半天 都说VCS配置不对 但是默认IDEA是配置好的 根本不需要修改 忽然看到 工具栏的快捷键 于是 Alt + 9 就出现了 完美
- 【JVM学习笔记】异常表的重要作用以及locals属性的含义
有如下代码 public class Test { public void work() { try { InputStream is = new FileInputStream("test ...