图书学习打卡:Python数据分析基础教程/王斌会 第六章 数据的统计分析
6.1 随机变量及其分布
6.1.1 均匀分布
6.1.2 正态分布
a=0;b=1;y=1/(b-a)
plt.plot(a,y); plt.hlines(y,a,b);
plt.show()
import random
random.randint(10,20)
random.uniform(0,1)
import numpy as np
np.random.randint(10,21,9)
np.random.uniform(0,1,10)
from math import sqrt,pi
x=np.linspace(-4,4,50);
y=1/sqrt(2*pi)*np.exp(-x**2/2);
plt.plot(x,y);
plt.show()
import scipy.stats as st
P=st.norm.cdf(2);P
'''加载自定义库,在当前目录下建立DaPy1func.py函数库即可'''
import DaPy_fun as da
'''标准正态曲线面积(概率) '''
da.norm_p(-1,1)
da.norm_p(-2,2)
da.norm_p(-1.96,1.96)
da.norm_p(-3,3)
da.norm_p(-2.58,2.58)
za=st.norm.ppf(0.95);za
[st.norm.ppf(0.025),st.norm.ppf(0.975)]
np.random.normal(10,4,5)
np.random.normal(0,1,5)
'''一页绘制四个正态随机图 '''
fig,ax = plt.subplots(2,2)
for i in range(2):
for j in range(2):
ax[i,j].hist(np.random.normal(0,1,500),bins = 50)
plt.subplots_adjust(wspace = 0,hspace=0)
z=np.random.normal(0,1,100)
import seaborn as sns
sns.distplot(z)
st.probplot(BSdata.身高, dist="norm", plot=plt);
st.probplot(BSdata['支出'], dist="norm", plot=plt);
6.2 统计分析基础
6.2.1 统计量的概念
6.2.2 统计量的分布
np.random.randint(0,2,10)
i=np.random.randint(1,53,6);i
BSdata.iloc[i]
BSdata.sample(6)
def norm_sim1(N=1000,n=10):
xbar=np.zeros(N)
for i in range(N):
xbar[i]=np.random.normal(0,1,n).mean()
sns.distplot(xbar,bins=50)
print(pd.DataFrame(xbar).describe().T)
norm_sim1()
norm_sim1(10000,30)
def norm_sim2(N=1000,n=10):
xbar=np.zeros(N)
for i in range(N):
xbar[i]=np.random.uniform(0,1,n).mean()
sns.distplot(xbar,bins=50)
print(pd.DataFrame(xbar).describe().T)
norm_sim2()
norm_sim2(10000,30)
x=np.arange(-4,4,0.1)
yn=st.norm.pdf(x,0,1);yt3=st.t.pdf(x,3);yt10=st.t.pdf(x,10)
plt.plot(x,yn,'r-',x,yt3,'b.',x,yt10,'g-.');
plt.legend(["N(0,1)","t(3)","t(10)"]);
6.3 基本统计推断方法
6.3.1 点估计与区间估计
6.3.2 假设检验
BSdata['身高'].mean()
BSdata['身高'].std()
42/150
da.norm_p(-2,2)
def t_interval(b,x):
a=1-b
n = len(x)
import scipy.stats as st
ta=st.t.ppf(1-a/2,n-1);ta
from math import sqrt
se=x.std()/sqrt(n)
return(x.mean()-ta*se, x.mean()+se*ta)
t_interval(0.95,BSdata['身高'])
X=BSdata['身高']
st.norm.interval(0.95,X.mean())
n=len(X)
st.t.interval(0.95, n-1, X.mean(), X.std()/sqrt(n))
import scipy.stats as st
st.ttest_1samp(BSdata.身高, popmean = 166)
st.ttest_1samp(BSdata.身高, popmean = 170)
import DaPy_fun as da
da.ttest_1plot(BSdata.身高,166)
da.ttest_1plot(BSdata.身高,170)