python数学实验与建模pdf_Python数学实验与建模(4)第4章 概率论与数理统计
概率论与数理统计是数学中的⼀个有特⾊的分⽀,具有⾃⼰独特的概念和⽅法,内容丰富,与很多学科交叉相连,⼴泛应⽤于⼯业、农业、军事和科学技术领域。随机变量的概率计算和数字特征
描述性统计和统计图
参数估计和假设检验
⽅差分析
⼀元线性回归模型
常⽤的数据清洗⽅法
1.随机变量的概率计算和数字特征
1)随机变量的概率计算
例:设
,
(1)求
;
(2)确定c,使得
代码如下:
from scipy.stats import norm
from scipy.optimize import fsolve
print("p=", norm.cdf(6, 3, 5) - norm.cdf(2, 3, 5))
f = lambda c: norm.cdf(2 * c, 3, 5) - norm.cdf(-3 * c, 3, 5) - 0.6
print("c=", fsolve(f, 0))
运⾏结果:
例:设
,
若
满⾜条件
,则称
为标准正态分布的上
分位数.试计算⼏个常⽤的
的值,并画出
的⽰意图.
from scipy.stats import norm
from pylab import plot, fill_between, show, text, savefig, rc
from numpy import array, linspace, zeros
alpha = array([0.001, 0.005, 0.01, 0.025, 0.05, 0.10])
za = norm.ppf(1 - alpha, 0, 1) # 求上alpha分位数
print("上alpha分位数分别为", za)
x = linspace(-4, 4, 100)
y = norm.pdf(x, 0, 1)
rc('font', size=16)
rc('text', usetex=False)
plot(x, y) # 画标准正态分布密度曲线
x2 = linspace(za[-1], 4, 100)
y2 = norm.pdf(x2)
y1 = [0] * len(x2)
fill_between(x2, y1, y2, color='r') # y1,y2对应的点之间填充
plot([-4, 4], [0, 0]) # 画⽔平线
text(1.9, 0.07, "$\\leftarrow\\alpha$=0.1") # 标注
savefig("figure4_2.png", dpi=500)
show()
运⾏结果:
2)随机变量数字特征简介
3)随机变量数字特征计算及应⽤
例:计算⼆项分布b(20,0.8)的均值和⽅差.
from scipy.stats import binom
n, p = 20, 0.8
print("期望和⽅差分布为:", binom.stats(n, p))
运⾏结果:
例:计算⼆项分布b(20,0.8)的均值、⽅差、偏度和峰度.
from scipy.stats import binom
n, p = 20, 0.8
mean, variance, skewness, kurtosis = binom.stats(n, p, moments='mvsk') # 上述语句不显⽰,只为了说明数据顺序
print("所求的数字特征为:", binom.stats(n, p, moments='mvsk'))
运⾏结果:
例:路灯维修周期问题.(详细见P126)
from scipy.integrate import quad
from numpy import exp, sqrt, pi, abs
a = 80
b = 0.02
BD = a/b
mu = 4000
s = 100
y = lambda x: x * exp(-(x-mu)**2/(2*s**2))/sqrt(2*pi)/s # 定义积分的被积函数
I = 0
x1 = 0
x2 = 10000
while abs(I - BD) > 1E-16:
c = (x1 + x2) / 2linspace numpy
I = quad(y, -10000, c)[0] # 由3sigma准则这⾥积分下限取为-10000,取零效果⼀样
if I > BD:
x2 = c
else:
x1 = c
print("最佳更换周期为:", c)
运⾏结果:
2.描述性统计和统计图
数理统计研究的对象是受随机因素影响的数据,简称统计。统计是以概率论为基础的⼀门应⽤学科。数据样本少则⼏个,多则成千万个,⼈们希望能⽤少数⼏个包含最多相关信息的数据来体现所研究对象的规律。描述性统计就是搜集、整理、加⼯和分析统计数据,使之系统化、条理化,以显⽰出数据资料的趋势、特征和数量关系。它是统计推断的基础,实⽤性较强,在统计⼯作中经常使⽤。
1)统计的基础知识
2)⽤Python计算统计量
使⽤NumPy库中的函数可以计算统计量,也可以使⽤sciy.stats中的函数计算统计量。
NumPy库中计算统计量的函数如下表所⽰:函数meanmedianptpvarstdcovcorrcoef
功能均值中位数极差⽅差标准差协⽅差相关系数
例:学校随机抽取100名学⽣,测量他们的⾝⾼和体重,所得数据如下表,试分别求⾝⾼的均值、中位数、极差、⽅差、标准差;计算⾝⾼
与体重的协⽅差、相关系数。
代码如下:
from numpy import reshape, hstack, mean, median, ptp, var, std, cov, corrcoef
import pandas as pd
df = pd.read_excel("Pdata4_6_1.xlsx", header=None)
a = df.values # 提取数据矩阵
h = a[:, ::2] # 提取奇数列⾝⾼
w = a[:, 1::2] # 提取偶数列体重
h = reshape(h, (-1, 1)) # 转换成列向量,⾃动计算⾏数
w = reshape(w, (-1, 1)) # 转换成列向量,⾃动计算⾏数
hw = hstack([h, w]) # 构造两列的数组
print([mean(h), median(h), ptp(h), var(h), std(h)]) # 计算均值,中位数,极差,⽅差,标准差
print("协⽅差为:{}\n相关系数为:{}".format(cov(hw.T)[0, 1], corrcoef(hw.T)[0, 1]))
运⾏结果:
使⽤Pandas的DataFrame计算统计量:
上例,使⽤Pandas的describe⽅法计算相关统计量,并计算⾝⾼和体重的偏度、峰度和样本的25%,50%,90%分位数。代码如下:
from numpy import reshape, c_
import pandas as pd
df = pd.read_excel("Pdata4_6_1.xlsx", header=None)
a = df.values
h1 = a[:, ::2]
w1 = a[:, 1::2]
h2 = reshape(h1, (-1, 1))
w2 = reshape(w1, (-1, 1))
df2 = pd.DataFrame(c_[h2, w2], columns=["⾝⾼", "体重"]) # 构造数据框
print("求得的描述统计量如下:\n", df2.describe())
print("偏度为:\n", df2.skew())
print("峰度为:\n", df2.kurt())
print("分位数为:\n", df2.quantile(0.9))
运⾏结果:
3)统计图
例:画图⾝⾼和体重的直⽅图,并统计从最⼩体重到最⼤体重,等间距分成6个⼩区间时,数据出现在每个⼩区间的频次。代码如下:
import numpy as np
import matplotlib.pyplot as plt
a = np.loadtxt("Pdata4_")
h = a[:, ::2]
w = a[:, 1::2]
h = np.reshape(h, (-1, 1))
w = np.reshape(w, (-1, 1))
<('font', size=16)
<('font', family="SimHei")
plt.subplot(121)
plt.xlabel("⾝⾼")
plt.hist(h, 10) # 只画直⽅图不返回频数表
plt.subplot(122)
ps = plt.hist(w, 6) # 画图并返回频数表ps
plt.xlabel("体重")
print("体重的频数表为:", ps)
plt.savefig("figure4_8.png", dpi=500)
plt.show()
运⾏结果:
例:下⾯分别给出了25个男⼦和25个⼥⼦的肺活量数据(以L计,数据已经排过序),试画出箱线图。代码如下:
import numpy as np
import matplotlib.pyplot as plt
a = np.loadtxt("") # 读⼊两⾏的数据
b = a.T # 转置成两列的数据
<('font', size=16)
<('font', family='SimHei')
plt.boxplot(b, labels=['⼥⼦', '男⼦'])
plt.savefig('figure4_9.png', dpi=500)
plt.show()
运⾏结果:
例:画出⾝⾼和体重的箱线图(疑似异常值)
代码如下:
import numpy as np
import matplotlib.pyplot as plt
a = np.loadtxt("Pdata4_")
h = a[:, ::2]
w = a[:, 1::2]
h = np.reshape(h, (-1, 1))
w = np.reshape(w, (-1, 1))
hw = np.hstack((h, w))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论