python自定义函数画图_4.1-5 自定义函数

##《Python数据分析基础教程》

### 函数库 [DaPy_fun.py](http://leanote.com/api/file/getAttach?fileId=5b112c43ab644114cd001d04)

### 王斌会 王术 2018-6-1

> (1)安装库:将DaPy_fun.py文档拷贝到当前工作目录下

(2)调用包:from DaPy_fun import *

(3)使用函数:tab(x)

------------------------------

### def tab(x,plot=False): #计数频数表和绘图

> f=x.value_counts();f

s=sum(f);

p=round(f/s*100,3);p

T1=pd.concat([f,p],axis=1);

T1.columns=['例数','构成比'];

T2=pd.DataFrame({'例数':s,'构成比':100.00},index=['合计'])

Tab=T1.append(T2)

if plot:

fig,ax = plt.subplots(1,2,figsize=(15,6))

ax[0].bar(f.index,f); # 条图

ax[1].pie(p,labels=p.index); # 饼图

return(round(Tab,3))

### def freq(X,bins=10,density=False): #计量频数表与直方图

> if density:

H=plt.hist(X,bins,density=density)

plt.plot(H[1],st.norm.pdf(H[1]),color='r');

else:

H=plt.hist(X,bins);

a=H[1][:-1];a

b=H[1][1:];b

f=H[0];f

p=f/sum(f)*100;p

cp=np.cumsum(p);cp

Freq=pd.DataFrame([a,b,f,p,cp],index=['[下限','上限)','频数','频率(%)','累计频数(%)'])

return(round(Freq.T,2))

### def stats(x): #基本统计量

> stat=[x.count(),x.min(),x.quantile(.25),x.mean(),x.median(),

x.quantile(.75),x.max(),x.max()-x.min(),x.var(),x.std(),x.skew(),x.kurt()]

stat=pd.Series(stat,index=['Count','Min', 'Q1(25%)','Mean','Median',

'Q3(75%)','Max','Range','Var','Std','Skew','Kurt'])

return(stat)

### def norm_p(a=-2,b=2): ### 正态曲线面积图

> x=np.arange(-4,4,0.1)

y=st.norm.pdf(x)

x1=x[(a<=x) & (x<=b)];x1

y1=y[(a<=x) & (x<=b)];y1

p=st.norm.cdf(b)-st.norm.cdf(a);p

plt.title("N(0,1)分布: [%6.3f %6.3f] p=%6.4f"%(a,b,p))

plt.plot(x,y);

plt.hlines(0,-4,4);

plt.vlines(x1,0,y1,colors='r');

plt.text(-0.5,0.2,"p=%6.4f" % p,fontsize=15);

### def t_interval(b,x): #均值可信区间

> a=1-b

n = len(x)

ta=st.t.ppf(1-a/2,n-1);ta

se=x.std()/sqrt(n)

return(x.mean()-ta*se, x.mean()+se*ta)

### def ttest_1plot(X,mu=0): # 单样本均值t检验图

> k=0.1

df=len(X)-1

t1p=st.ttest_1samp(X, popmean = mu);t1p

x=np.arange(-4,4,k)

y=st.t.pdf(x,df)

t=abs(t1p[0]);p=t1p[1]

x1=x[x<=-t];x1

y1=y[x<=-t];y1

x2=x[x>=t];x2

y2=y[x>=t];y2

print(" 单样本t检验\t t=%6.3f p=%6.4f"%(t,p))

print(" t置信区间: ",st.t.interval(0.95,len(X)-1,X.mean(),X.std()))

plt.plot(x,y);

plt.hlines(0,-4,4);

plt.vlines(x1,0,y1,colors='r');

plt.vlines(x2,0,y2,colors='r');

#plt.text(-3.3,0.08,"p/2=%6.4f" % (t1p[1]/2),fontsize=15);

#plt.text(2,0.08,"p/2=%6.4f" % (t1p[1]/2),fontsize=15);

plt.text(-0.5,0.05,"p=%6.4f" % t1p[1],fontsize=15);

plt.vlines(st.t.ppf(0.05/2,df),0,0.2,colors='b');

plt.vlines(-st.t.ppf(0.05/2,df),0,0.2,colors='b');

plt.text(-0.5,0.2,r"$\alpha$=%3.2f"%0.05,fontsize=15);

### def reglinedemo(n=20): #模拟直线回归

> x=np.arange(n)+1

e=np.random.normal(0,1,n)

y=2+0.5*x+e

import statsmodels.api as sm

x1=sm.add_constant(x);x1

fm=sm.OLS(y,x1).fit();fm

plt.plot(x,y,'.',x,fm.fittedvalues,'r-'); #添加回归线,红色

for i in range(len(x)):

plt.vlines(x,y,fm.fittedvalues,linestyles='dotted',colors='b');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值