用 python 绘制正态分布曲线

作者: 橙子LifeX | 来源:发表于2017-03-14 13:45 被阅读3177次

    打开 jupyter notebook

    import pandas as pd # 导入另一个包“pandas” 命名为 pd,理解成pandas是在 numpy 基础上的升级包
    import numpy as np #导入一个数据分析用的包“numpy” 命名为 np
    import matplotlib.pyplot as plt # 导入 matplotlib 命名为 plt,类似 matlab,集成了许多可视化命令
    
    #jupyter 的魔术关键字(magic keywords)
    #在文档中显示 matplotlib 包生成的图形
    # 设置图形的风格
    %matplotlib inline 
    %config InlineBackend.figure_format = 'retina'
    
    data = pd.read_csv('stakes.csv') #载入数据文件
    data.head(5) #查看前5个头部数据
    
    len(data) #查看数据长度
    
    89
    
    time = data["time"] #把数据集中的 time 定义为 time
    
    #mean均值,是正态分布的中心,把 数据集中的均值 定义为 mean
    mean = time.mean()
    mean
    
    149.22101123595513
    
    #S.D.标准差,把数据集中的标准差 定义为 std
    std = time.std()
    std
    
    1.6278164717748154
    
    #正态分布的概率密度函数。可以理解成 x 是 mu(均值)和 sigma(标准差)的函数
    def normfun(x,mu,sigma):
        pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))
        return pdf
    
    概率密度函数公式
    # 设定 x 轴前两个数字是 X 轴的开始和结束,第三个数字表示步长,或者区间的间隔长度
    x = np.arange(142,157,0.1) 
    #设定 y 轴,载入刚才的正态分布函数
    y = normfun(x, mean, std)
    plt.plot(x,y)
    #画出直方图,最后的“normed”参数,是赋范的意思,数学概念
    plt.hist(time, bins=10, rwidth=0.9, normed=True)
    plt.title('Time distribution')
    plt.xlabel('Time')
    plt.ylabel('Probability')
    #输出
    plt.show()
    

    对于正态分布的理解

    1. 把直方图和正态分布曲线放在一起看的时候,会发现不同的直方图组数会有完全不同的效果,上图采用的组数为10,如果把组数增加到40就会变成下图。因为样本数为89,并不是很大,所以看起来好像分布并不是很规则,只是有回归正态分布的倾向,如果增加样本数量的话,跟抛硬币一样,n 足够大的时候,也许会更加接近正态分布。所以数据的规律是一点点的呈现的,数据量越大,就越容易验证假说,找到规律,这也就是“大数据”的力量。
    1. 正态分布是很比较常见的,我觉得在数据分析中需要注意的是分布的变化,比如:原本认为应该符合正态分布的数据,结果不太符合,会不会有什么问题没有考虑到?或者出现了某种干扰因素。另外在对比两个不同数据集的差异时,也可以观察他们的正态分布情况,均值的差异和波动性的差异,可以反应出很多问题。

    本文为 泰阁志-解密大数据 第三次作业,了解更多请关注微信“泰阁志”

    关于 python 与 jupyter notebook,包括 magic keyword,参考了@鱼心 的教程:

    相关文章

      网友评论

      • 吃葡萄的小兔纸:这广告猝不及防哈哈哈 我也来~
        解答了我关于normed疑问 感谢~
      • 894bd9f703e5:想一想为什么很多时候要把样本假设成正太分布,整体分布有什么优良的特性?
      • TheTiger:数值计算中常用的技术就是拟合,可以用来作这些事
        TheTiger:@橙子LifeX 其实到不是必须的,这些慢慢来
        橙子LifeX:@泰阁志 哦哦,貌似我应该看看推荐书目,谢谢小虎
      • TheTiger:当数据大到一定程度后,再继续增加也不会提升,有一个瓶颈。
        橙子LifeX:@泰阁志 嗯,有道理
      • 鱼心DrFish:另外直方图并不能很好的判断是否是正态分布,如果用图形来看的话,最好是CDF图。
        橙子LifeX:@鱼心fishstar :smile:谢谢余博点评
        橙子LifeX:@鱼心fishstar 查了一下,CDF是PDF的积分,慢慢学
      • 鱼心DrFish:赞!首发!注释很完整!好习惯,继续保持!
        hist中的normed没那么高深,就是吧直方图纵坐标中的频数变成频率,仔细观察坐标轴,和第一课的作业比较。
        昆明石头:从图形中看,所有直方图的频率之和大于1,按理应该是小于等于1。这是为什么呢???
        橙子LifeX:@鱼心fishstar 哦哦,明白了,纵坐标不同了

      本文标题:用 python 绘制正态分布曲线

      本文链接:https://www.haomeiwen.com/subject/brthnttx.html