图书学习打卡:Python数据分析基础教程/王斌会 第六章 数据的统计分析
6.1 随机变量及其分布
6.1.1 均匀分布
6.1.2 正态分布
##6.1 随机变量及其分布
####6.1.1 均匀分布
a=0;b=1;y=1/(b-a)
plt.plot(a,y); plt.hlines(y,a,b);
plt.show()
#plt.vlines(0,0,1);plt.vlines(1,0,1);
#####(1)整数随机数
import random
random.randint(10,20) #[10,20]上的随机整数
#####(2)实数随机数
random.uniform(0,1) #[0,1]上的随机实数
#####(3)整数随机数列
import numpy as np
np.random.randint(10,21,9) #[10,20]上的随机整数
#####(4)实数随机数列
np.random.uniform(0,1,10) #[0,1]上的10个随机实数=np.random.rand(10)
###6.1.2 正态分布
#####(2)标准正态分布
from math import sqrt,pi #调用数学函数,import math as *
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) #68.27%
da.norm_p(-2,2) #94.45%
da.norm_p(-1.96,1.96) #95%
da.norm_p(-3,3) #99.73%
da.norm_p(-2.58,2.58) #99%
za=st.norm.ppf(0.95);za #单侧
[st.norm.ppf(0.025),st.norm.ppf(0.975)] #双侧
#####(3)正态随机数
np.random.normal(10,4,5) #产生5个均值为10标准差为4的正态随机数
np.random.normal(0,1,5) #生成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)
#cnts, bins = np.histogram(z, bins=50, normed=True)
#bins = (bins[:-1] + bins[1:]) / 2
#plt.hist(z,bins=50,density=True)
#plt.plot(bins, cnts)
#plt.hist(z,density=True)[0]
#plt.hist(z,density=True)[1]
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 统计量的分布
##6.2 数据分析统计基础
###6.2.1 的 统计量的
#####(1)简单随机抽样
np.random.randint(0,2,10) #[0,2)上的10个随机整数
i=np.random.randint(1,53,6);i #抽取10个学生,[1,52]上的6个整数
BSdata.iloc[i] #随机抽取的6个学生信息
BSdata.sample(6) #直接抽取6个学生的信息
###6.2.2 统计量的分布
def norm_sim1(N=1000,n=10): # n样本个数, N模拟次数(即抽样次数)
xbar=np.zeros(N) #模拟样本均值
for i in range(N): #[0,1]上的标准正态随机数及均值
xbar[i]=np.random.normal(0,1,n).mean()
sns.distplot(xbar,bins=50) #plt.hist(xbar,bins=50)
print(pd.DataFrame(xbar).describe().T)
norm_sim1()
norm_sim1(10000,30)
#sns.distplot(norm_sim1()) #plt.hist(norm_sim1())
#sns.distplot(norm_sim1(n=30,N=10000)) #plt.hist(norm_sim1(n=30,N=10000))
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() #[0,1]上的均匀随机数及均值
sns.distplot(xbar,bins=50)
print(pd.DataFrame(xbar).describe().T)
norm_sim2()
norm_sim2(10000,30)
#sns.distplot(norm_sim2()) #plt.hist(norm_sim2())
#sns.distplot(norm_sim1(n=30,N=10000)) #plt.hist(norm_sim2(n=30,N=10000))
#####(3)t分布曲线
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 假设检验
##6.3 基本统计推断方法
###3.2.1 参数的估计方法
####3.2.1.1 点估计
#####(1)均值的点估计
BSdata['身高'].mean()
#####(2)标准差的点估计
BSdata['身高'].std()
##### (3)比例的点估计
#f=BSdata['开设'].value_counts();p=f/sum(f);p
42/150
#3.2.1.2 区间估计
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))
#st.t.interval(0.95, len(X)-1, X.mean(), st.sem(X))
###6.3.2 参数的假设检验
#####(1)t检验
import scipy.stats as st #加载统计方法包
st.ttest_1samp(BSdata.身高, popmean = 166)
st.ttest_1samp(BSdata.身高, popmean = 170)
### 单样本t检验及图示
import DaPy_fun as da
da.ttest_1plot(BSdata.身高,166)
da.ttest_1plot(BSdata.身高,170)