二项分布

二项分布是n个独立的是/非试验中成功的次数的概率分布,其中每次试验的成功概率为p。这是一个离散分布,所以使用概率质量函数(PMF)来表示k次成功的概率:

最常见的二项分布就是投硬币问题了,投n次硬币,正面朝上次数就满足该分布。下面我们使用计算机模拟的方法,产生10000个符合(n,p)的二项分布随机数,相当于进行10000次实验,每次实验投掷了n枚硬币,正面朝上的硬币数就是所产生的随机数。同时使用直方图函数绘制出二项分布的PMF图。

def plot_binomial(n,p): '''绘制二项分布的概率质量函数''' sample = np.random.binomial(n,p,size=10000) # 产生10000个符合二项分布的随机数 bins = np.arange(n+2) plt.hist(sample, bins=bins, align='left', normed=True, rwidth=0.1) # 绘制直方图 #设置标题和坐标 plt.title('Binomial PMF with n={}, p={}'.format(n,p)) plt.xlabel('number of successes') plt.ylabel('probability')plot_binomial(10, 0.5)

投10枚硬币,如果正面或反面朝上的概率相同,即p=0.5, 那么出现正面次数的分布符合上图所示的二项分布。该分布左右对称,最有可能的情况是正面出现5次。

但如果这是一枚作假的硬币呢?比如正面朝上的概率p=0.2,或者是p=0.8,又会怎样呢?我们依然可以做出该情况下的PMF图。

fig = plt.figure(figsize=(12,4.5)) #设置画布大小p1 = fig.add_subplot(121) # 添加第一个子图plot_binomial(10, 0.2)p2 = fig.add_subplot(122) # 添加第二个子图plot_binomial(10, 0.8)

这时的分布不再对称了,正如我们所料,当概率p=0.2时,正面最有可能出现2次;而当p=0.8时,正面最有可能出现8次。

泊松分布

泊松分布用于描述单位时间内随机事件发生次数的概率分布,它也是离散分布,其概率质量函数为:

比如你在等公交车,假设这些公交车的到来是独立且随机的(当然这不是现实),前后车之间没有关系,那么在1小时中到来的公交车数量就符合泊松分布。同样使用统计模拟的方法绘制该泊松分布,这里假设每小时平均来6辆车(即上述公式中lambda=6)。

lamb = 6sample = np.random.poisson(lamb, size=10000) # 生成10000个符合泊松分布的随机数bins = np.arange(20)plt.hist(sample, bins=bins, align='left', rwidth=0.1, normed=True) # 绘制直方图# 设置标题和坐标轴plt.title('Poisson PMF (lambda=6)')plt.xlabel('number of arrivals')plt.ylabel('probability')plt.show()

指数分布

指数分布用以描述独立随机事件发生的时间间隔,这是一个连续分布,所以用质量密度函数表示:

比如上面等公交车的例子,两辆车到来的时间间隔,就符合指数分布。假设平均间隔为10分钟(即1/lambda=10),那么从上次发车开始,你等车的时间就满足下图所示的指数分布。

tau = 10sample = np.random.exponential(tau, size=10000) # 产生10000个满足指数分布的随机数plt.hist(sample, bins=80, alpha=0.7, normed=True) #绘制直方图plt.margins(0.02) # 根据公式绘制指数分布的概率密度函数lam = 1 / taux = np.arange(0,80,0.1)y = lam * np.exp(- lam * x)plt.plot(x,y,color='orange', lw=3)#设置标题和坐标轴plt.title('Exponential distribution, 1/lambda=10')plt.xlabel('time')plt.ylabel('PDF')plt.show()

正态分布

正态分布是一种很常用的统计分布,可以描述现实世界的诸多事物,具备非常漂亮的性质,我们在下一讲参数估计之中心极限定理时会详细介绍。其概率密度函数为:

以下绘制了均值为0,标准差为1的正态分布的概率密度曲线,其形状好似一口倒扣的钟,因此也称钟形曲线。

def norm_pdf(x,mu,sigma): '''正态分布概率密度函数''' pdf = np.exp(-((x - mu)**2) / (2* sigma**2)) / (sigma * np.sqrt(2*np.pi)) return pdfmu = 0 # 均值为0sigma = 1 # 标准差为1# 用统计模拟绘制正态分布的直方图sample = np.random.normal(mu, sigma, size=10000)plt. hist(sample, bins=100, alpha=0.7, normed=True)# 根据正态分布的公式绘制PDF曲线x = np.arange(-5, 5, 0.01)y = norm_pdf(x, mu, sigma)plt.plot(x,y, color='orange', lw=3)plt.show()

身高、体重的分布

以上从计算机模拟的角度出发,介绍了四种分布,现在让我们看一下现实中的数据分布。继续上一讲数据探索之描述性统计中使用的BRFSS数据集,我们查看其中的身高和体重数据,看看他们是不是满足正态分布。

首先导入数据,并编写绘制PDF和CDF图的函数plot_pdf_cdf(),便于重复使用。

# 导入BRFSS数据import brfssdf = brfss.ReadBrfss()height = df.height.dropna()weight = df.weight.dropna()

def plot_pdf_cdf(data, xbins, xrange, xlabel): '''绘制概率密度函数PDF和累积分布函数CDF''' fig = plt.figure(figsize=(16,5)) # 设置画布尺寸 p1 = fig.add_subplot(121) # 添加第一个子图 # 绘制正态分布PDF曲线 std = data.std() mean = data.mean() x = np.arange(xrange[0], xrange[1], (xrange[1]-xrange[0])/100) y = norm_pdf(x, mean, std) plt.plot(x,y, label='normal distribution') # 绘制数据的直方图 plt.hist(data, bins=xbins, range=xrange, rwidth=0.9, alpha=0.5, normed=True, label='observables') # 图片设置 plt.legend() plt.xlabel(xlabel) plt.title(xlabel +' PDF') p2 = fig.add_subplot(122) #添加第二个子图 # 绘制正态分布CDF曲线 sample = np.random.normal(mean, std, size=10000) plt.hist(sample, cumulative=True, bins=1000, range=xrange, normed=True, histtype='step', lw=2, label='normal distribution') # 绘制数据的CDF曲线 plt.hist(data, cumulative=True, bins=1000, range=xrange, normed=True, histtype='step', lw=2, label='observables') #图片设置 plt.legend(loc='upper left') plt.xlabel(xlabel) plt.title( xlabel + ' CDF') plt.show()

人群的身高分布比较符合正态分布。

plot_pdf_cdf(data=height, xbins=21, xrange=(1.2, 2.2), xlabel='height')

但是体重分布明显右偏,与对称的正态分布存在一定的差异。

plot_pdf_cdf(data=weight, xbins=60, xrange=(0,300), xlabel='weight')

将体重数据取对数值后,其分布就与正态分布非常吻合。

log_weight = np.log(weight)plot_pdf_cdf(data=log_weight, xbins=53, xrange=(3,6), xlabel='log weight')

参考资料:

维基百科:蒙特卡罗方法

《Think Stats 2》

《统计学》,William Mendenhall著

End.

作者:鱼心DrFish

链接:http://www.jianshu.com/p/8a0479f55b21

已获作者授权

python对数据进行统计分析_用Python结合统计学知识进行数据探索分析相关推荐

  1. 深度学习数据集中数据差异大_使用差异隐私来利用大数据并保留隐私

    深度学习数据集中数据差异大 The modern world runs on "big data," the massive data sets used by governmen ...

  2. python文本结构化处理_在Python中标记非结构化文本数据

    python文本结构化处理 Labelled data has been a crucial demand for supervised machine learning leading to a n ...

  3. python怎么读取sav格式_利用Python读取外部数据文件

    利用Python读取外部数据文件 [color=rgb(0, 0, 0) !important]刘顺祥 [color=rgb(0, 0, 0) !important]摘要: 不论是数据分析,数据可视化 ...

  4. python 搭建web应用程序_用Python构建数据科学Web应用程序

    作者|Chanin Nantasenamat 编译|VK 来源|Towards Data Science 在本文中,我将向你展示如何使用streamlit python库快速构建一个简单的数据驱动we ...

  5. python处理数据的包_在Python中利用Into包整洁地进行数据迁移的教程

    动机 我们花费大量的时间将数据从普通的交换格式(比如CSV),迁移到像数组.数据库或者二进制存储等高效的计算格式.更糟糕的是,许多人没有将数据迁移到高效的格式,因为他们不知道怎么(或者不能)为他们的工 ...

  6. python中计算如何实现_基于python如何实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...

  7. python 批量打印文档_使用python将Excel数据填充Word模板并生成Word

    [项目需求] Excel中有一万多条学生学平险数据,需要给每位学生打印购买回执单,回执单包括学生姓名,身份证号,学校等信息,目前只能从Excel拷贝数据到Word模板中,然后打印,效率及其低下,寻求帮 ...

  8. python数据框去重_【Python】基于某些列删除数据框中的重复值

    Python按照某些列去重,可用drop_duplicates函数轻松处理.本文致力用简洁的语言介绍该函数. 一.drop_duplicates函数介绍 drop_duplicates函数可以按某列去 ...

  9. python编写spark程序 视频_【Python版pyspark】Spark大数据基础入门视频课程

    [注意:本课程只包含pyspark系列课程的基础入门部分] Python版本的pyspark是学习Python的人的福音,为广大的Python开发人员提供了一个使用Python调用Spark接口处理大 ...

最新文章

  1. CNN在中文文本分类的应用
  2. 2018/11/11蓝桥杯Java培训
  3. jt808 位置信息方向错误_开车别大意,要掌握方向盘的正确握法,确保行车安全...
  4. C/C++ 整型提升(Integral Promotion)
  5. 用一句SQL取出第 m 条到第 n 条记录的方法
  6. 如何在 SAP Fiori Elements List Report 表格工具栏里增添新的自定义按钮
  7. Mac电脑mysql创建数据库步骤_mac上创建MySQL的基本步骤
  8. TGE学习笔记07 - 脚本控制动画
  9. inside uboot (六) DRAM芯片的控制线及时序
  10. 化浆池是什么东西_一种双工位浆化池的制作方法
  11. STM32 TIMER DIAGRAM
  12. 机器学习-1-.py文件的导入问题
  13. mongo小结和使用示例
  14. mysql取出qq表情_mysql存储emoji表情报错处理,qq互联mysql存储昵称中带表情的数据时报错。...
  15. PHP+Mysql高并发解决方案
  16. BP神经网络算法基本原理,BP神经网络计算过程
  17. 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day6)
  18. 手把手教你整合SSM实现一个简单的CRUD项目
  19. 通信总线传输速率计算
  20. ISA8051内部结构讲解

热门文章

  1. 还敢用智能手表吗?三星Gear Live会泄露用户数据
  2. 局域网内PC,打开WEB网页慢或者超时
  3. 疯狂大厨 android,疯狂大厨玩转餐厅安卓版
  4. 2020年软考-信息系统项目管理师--基础知识精讲视频-任铄-专题视频课程
  5. 校园文化建设计算机教室标语,学校标语:校园文化建设标语
  6. 【Hadoop】节点的上线、下线
  7. 期货从入门到高深之手动交易---软件的使用2
  8. 简单讲讲python程序控制流程
  9. Android 友盟推送SDK集成---一路艰辛
  10. Android推送机制的实现原理