博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python scipy stats学习笔记
阅读量:5094 次
发布时间:2019-06-13

本文共 5212 字,大约阅读时间需要 17 分钟。

from scipy.stats import chi2                 # 卡方分布 from scipy.stats import norm                 # 正态分布 from scipy.stats import t                    # t分布 from scipy.stats import f                    # F分布 import matplotlib.pyplot as plt import numpy as np import pandas as pd import scipy.stats as stats from scipy.stats import chi2_contingency     # 列联表分析 # matplotlib画图注释中文需要设置 from matplotlib.font_manager import FontProperties xy_font_set = FontProperties(fname=r"c:\windows\fonts\方正稚艺简体.ttf", size=12) zhushi_font_set = FontProperties(fname=r"c:\windows\fonts\方正粗倩简体.ttf", size=12) titleYW_font_set = FontProperties(fname=r"c:\windows\fonts\Gabriola.ttf", size=20) titleZW_font_set = FontProperties(fname=r"c:\windows\fonts\汉仪细行楷简.ttf", size=18) # rvs: Random Variates # pdf: Probability Density Function                         概率密度函数 # cdf: Cumulative Distribution Function                     概率密度函数的积分函数 # sf: Survival Function (1-CDF) # ppf: Percent Point Function (Inverse of CDF)              百分点函数,概率密度函数的积分值 # isf: Inverse Survival Function (Inverse of SF) # stats: Return mean, variance, (Fisher’s) skew, or (Fisher’s) kurtosis # moment: non-central moments of the distribution # ppf以概率的形式,查询函数值-----------类似分布临界表 plt.figure() # example ------------------------------------------- 卡方分布(右侧单边) plt.subplot2grid((2, 2), (0, 0)) df = 20                                                   # 自由度 # print(chi2.ppf(0.01, df))                               # 计算函q=0.01概率时数值。其中 q = 1-a # print(chi2.cdf(8.260, df))                              # 知道x值求a x = np.linspace(chi2.ppf(0.01, df),                       # 绘制概率密度图                  chi2.ppf(0.99, df), 100) plt.plot(x, chi2.pdf(x, df), alpha=0.6, label='chi2 pdf') plt.title(u'自由度为20时的卡方概率密度函数图',  fontproperties=titleZW_font_set, size=10) # 计算平均数、方差、标准差 # print(chi2.mean(df)) # print(chi2.var(df)) # print(chi2.std(df)) # example ---------------------------------------------------- 标准正态分布(左侧单边) plt.subplot2grid((2, 2), (0, 1)) # print(norm.ppf(0.6179))                                         # 知道q时求x, q=a # print(norm.cdf(0.3))                                            # 知道x时求q x = np.linspace(norm.ppf(0.01), norm.ppf(0.99), 100) plt.plot(x, norm.pdf(x), alpha=0.6, label='norm pdf') plt.title(u'标准正态分布概率密度函数图',  fontproperties=titleZW_font_set, size=10) # example ----------------------------------------------------- t分布(双边分布) plt.subplot2grid((2, 2), (1, 0)) df = 15 x = np.linspace(t.ppf(0.01, df), t.ppf(0.99, df), 100) # print(t.ppf(0.95, df))                                           # q=0.95,a=(1-q)*2 # print(t.cdf(1.753, df)) plt.plot(x, t.pdf(x, df), alpha=0.6, label='t pdf') plt.title(u'自由度为15时的t分布概率密度函数图',  fontproperties=titleZW_font_set, size=10) # example ------------------------------------------------------ F分布(右侧单边分布) plt.subplot2grid((2, 2), (1, 1)) df = 5 dn = 8 x = np.linspace(f.ppf(0.01, df, dn), f.ppf(0.99, df, dn), 100) # print(f.ppf(0.95, df, dn)) plt.plot(x, f.pdf(x, df, dn), alpha=0.6, label='f pdf') plt.title(u'自由度为5和8时的f分布概率密度函数图',  fontproperties=titleZW_font_set, size=10) # example ------------------------------------------------------- 非标准正态分布 plt.figure() std = 1 mean = 2 normalDistribution = stats.norm(mean, std)                        # 构建统计分布 x = np.linspace(normalDistribution.ppf(0.01), normalDistribution.ppf(0.99), 100) plt.plot(x, normalDistribution.pdf(x)) # plt.show() # example -------------------------------------------------------- 对连续数据进行正态拟合 plt.figure() train = pd.read_csv("csv/Titanic/train.csv") train_Age = train.dropna(subset=['Age']) M_S = stats.norm.fit(train_Age['Age'])                            # 正态拟合的平均值与标准差 train_Age['Age'].plot(kind='kde')                                 # 原本的概率密度分布图 normalDistribution = stats.norm(M_S[0], M_S[1])                   # 绘制拟合的正态分布图 x = np.linspace(normalDistribution.ppf(0.01), normalDistribution.ppf(0.99), 100) plt.plot(x, normalDistribution.pdf(x), c='orange') plt.xlabel('Age about Titanic') plt.title('Titanic[Age] on NormalDistribution', size=20) plt.legend(['Origin', 'NormDistribution']) # ----------------------------------------------------------------- R x C列联表,独立性检验 # 建立关于性别与存活 train_pclass_0 = train['Pclass'][train['Survived'] == 0].value_counts() train_pclass_1 = train['Pclass'][train['Survived'] == 1].value_counts() train_pclass_01 = pd.concat([train_pclass_0, train_pclass_1], axis=1, sort=True) train_pclass_01.columns = ['Not_Survived', 'Survived'] g, p, dof, expctd = chi2_contingency(train_pclass_01.values)             # g为chi2值,服从自由度为dof的卡方分布 print(g) # 拟合优度检验,判断两个分类型变量是否独立 # 首先绘制卡方自由度为dof的曲线 plt.figure() x = np.linspace(chi2.ppf(0.01, dof), chi2.ppf(0.99, dof), 100) plt.plot(x, chi2.pdf(x, dof)) # 以95%置信区间,查看小概率事件区间 plt.axvline(chi2.ppf(0.975, dof), color='r') plt.axvline(chi2.ppf(0.025, dof), color='r') plt.title('chi2 distribution'+'whose dof is '+str(dof)) plt.text(chi2.ppf(0.975, dof), 0.02, 'q=0.95,z='+str(round(chi2.ppf(0.975, dof), 2)), ha='right', va='top', color='g', alpha=0.8, size=15) plt.text(chi2.ppf(0.025, dof), 0.02, 'q=0.05,z='+str(round(chi2.ppf(0.025, dof), 2)), ha='left', va='top', color='g', alpha=0.8, size=15) plt.show()

转载于:https://www.cnblogs.com/hirokuh/p/9335200.html

你可能感兴趣的文章
getElement的几中属性介绍
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
python3 生成器与迭代器
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
git .gitignore 文件不起作用
查看>>
digitalocean --- How To Install Apache Tomcat 8 on Ubuntu 16.04
查看>>
【题解】[P4178 Tree]
查看>>
cer证书签名验证
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
QML学习笔记之一
查看>>
App右上角数字
查看>>
小算法
查看>>