Python:Python数据分析基础教程/王斌会 第四章 数据的探索性分析

Python数据分析基础教程/王斌会

第四章 数据的探索性分析

在这里插入图片描述

- 4.1数据的表述分析

4.1.1基本描述统计量

在这里插入图片描述
在这里插入图片描述

4.1.2计数数据的汇总分析

在这里插入图片描述

4.1.3计量数据的汇总分析

#(1)均数(算术平均数)
BSdata.身高.mean()
#(2)中位数
BSdata.身高.median()
#(3)极差
BSdata.身高.max()-BSdata.身高.min()
#(4)方差
BSdata.身高.var()
#(5)标准差
BSdata.身高.std()
#(6)四分位数间距
BSdata.身高.quantile(0.75)-BSdata.身高.quantile(0.25)
#(7)偏度
BSdata.身高.skew()
#(8)峰度
BSdata.身高.kurt()

#(9)自定义计算基本统计量函数
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'])
    x.plot(kind='kde') #拟合核密度 kde 曲线,见下节
    return(stat)
stats(BSdata.身高)
stats(BSdata.支出)

- 4.2基本绘图命令

import matplotlib.pyplot as plt              #基本绘图包
plt.rcParams['font.sans-serif']=['KaiTi'];   #SimHei黑体
plt.rcParams['axes.unicode_minus']=False;    #正常显示图中负号

4.2.1常用会图工具–基于matplotlib

在这里插入图片描述
在这里插入图片描述


#(1)常用的统计图函数
#(2)图形参数设置
X=['A','B','C','D','E','F','G']
Y=[1,4,7,3,2,5,6]
plt.bar(X,Y); # 条图
plt.pie(Y,labels=X);  # 饼图
#plt.pie(Y,labels=X,autopct='%1.2f%%')

plt.plot(X,Y)  #线图 plot

plt.hist(BSdata.身高)  # 频数直方图
plt.hist(BSdata.身高,density=True) # 频率直方图

plt.scatter(BSdata.身高, BSdata.体重);  # 散点图
plt.xlabel(u'身高');plt.ylabel(u'体重');

#(3)图形参数设置
plt.plot(X,Y,c='red');
plt.ylim(0,8);
plt.xlabel('names');plt.ylabel('values');
plt.xticks(range(len(X)), X);
plt.plot(X,Y,linestyle='--',marker='o');

plt.plot(X,Y,'o--'); plt.axvline(x=1);plt.axhline(y=4);
#plt.vlines(1,0,6,colors='r');plt.hlines(4,0,6);

plt.plot(X,Y);plt.text(2,7,'peakpoint')
plt.plot(X,Y,label=u'折线');
plt.legend();

#误差条图
s=[0.1,0.4,0.7,0.3,0.2,0.5,0.6]
plt.bar(X,Y,yerr=s,error_kw={'capsize':5})

#(4)多图
plt.figure(figsize=(12,6));
plt.subplot(121); plt.bar(X,Y);
plt.subplot(122); plt.plot(Y);

plt.figure(figsize=(7,10));
plt.subplot(211); plt.bar(X,Y);
plt.subplot(212); plt.plot(Y);

fig,ax = plt.subplots(1,2,figsize=(14,6))
ax[0].bar(X,Y)
ax[1].plot(X,Y)

fig,ax=plt.subplots(2,2,figsize=(15,10))
ax[0,0].bar(X,Y); ax[0,1].pie(Y,labels=X)
ax[1,0].plot(Y); ax[1,1].plot(Y,'.-',linewidth=3);

4.2.1常用会图工具–基于pandas

在这里插入图片描述

###4.2.2 基于pandas 的绘图
BSdata['体重'].plot(kind='line');
BSdata['体重'].plot(kind='hist')
BSdata['体重'].plot(kind='box');
BSdata['体重'].plot(kind='density',title='Density');

BSdata[['身高','体重','支出']].plot(subplots=True,layout=(1,3),kind='box')
BSdata[['身高','体重','支出']].plot(subplots=True,layout=(1,3),kind='density')
BSdata[['身高','体重','支出']].plot(subplots=True,layout=(3,1),kind='density')

T1=BSdata['开设'].value_counts();T1
pd.DataFrame({'频数':T1,'频率':T1/T1.sum()*100})
T1.plot(kind='bar'); #T1.sort_values().plot(kind='bar');
T1.plot(kind='pie');

效果图
在这里插入图片描述

- 4.3数据的分类分析

4.3.1一维数据分析

在这里插入图片描述

4.3.2二维数据分析

在这里插入图片描述

4.3.3计量数据分析

在这里插入图片描述

4.3.4多维数据分析

在这里插入图片描述

-附件:第四章代码汇总

#4 数据的探索性分析
##4.1 数据的描述分析
###4.1.1基本描述统计量
BSdata.describe()
BSdata[['性别','开设','课程','软件']].describe()

####4.1.2计数数据汇总分析
#(1)频数:绝对数
T1=BSdata.性别.value_counts();T1
#(2)频率:相对数
T1/sum(T1)*100

###4.1.3 计量数据汇总分析
#(1)均数(算术平均数)(2)中位数(3)极差(4)方差(5)标准差(6)四分位数间距(7)偏度(8)峰度  (同上 略)
####(9)自定义计算基本统计量函数!!
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'])
    x.plot(kind='kde') #拟合核密度 kde 曲线,见下节
    return(stat)
stats(BSdata.身高)
stats(BSdata.支出)

#4.2 基本绘图命令
##4.2.1 常用的绘图函数
import DaPy1func as da
da.stats(BSdata.身高)
da.stats(BSdata.支出)

import matplotlib.pyplot as plt              #基本绘图包
plt.rcParams['font.sans-serif']=['KaiTi'];   #SimHei黑体
plt.rcParams['axes.unicode_minus']=False;    #正常显示图中负号
plt.figure(figsize=(6,5));                   #图形大小
'''本地直接显示图形'''
matplotlib inline
#(1)常用的统计图函数
#(2)图形参数设置

####二、计数数据的基本统计图
#############同上略
###4.2.2 基于pandas 的绘图
#############同上略

##4.3 数据的分类分析
###4.3.1 一维频数分析
####4.3.1.1 计数数据频数分布
#(1)pivot_table
BSdata['开设'].value_counts()
#pd.pivot_table(BSdata,values='学号',index='开设',aggfunc=len)
#BSdata.pivot_table(values='学号',index='开设',aggfunc=len)
# (2) 计数频数表
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(2,1,figsize=(8,15))
     ax[0].bar(f.index,f); # 条图
     ax[1].pie(p,labels=p.index,autopct='%1.2f%%');  # 饼图
   return(round(Tab,3))

tab(BSdata.开设,True)

####4.3.1.2 计量数据频数分布
#(1)身高频数表
pd.cut(BSdata.身高,bins=10).value_counts()
pd.cut(BSdata.身高,bins=10).value_counts().plot(kind='bar');
#(2)支出频数表
pd.cut(BSdata.支出,bins=[0,10,30,100]).value_counts()
pd.cut(BSdata.支出,bins=[0,10,30,100]).value_counts().plot(kind='bar');
# (3) 计量频数表
def freq(X,bins=10): #计量频数表与直方图
    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])
    Freq.index=['[下限','上限)','频数','频率(%)','累计频数(%)']
    return(round(Freq.T,2))

freq(BSdata.体重)

###4.3.2 二维集聚分析
####4.3.2.1 计数数据的列联表
#(1)二维列联表
pd.crosstab(BSdata.开设,BSdata.课程)
pd.crosstab(BSdata.开设,BSdata.课程,margins=True)

pd.crosstab(BSdata.开设,BSdata.课程,margins=True,normalize='index')
pd.crosstab(BSdata.开设,BSdata.课程,margins=True,normalize='columns')
pd.crosstab(BSdata.开设,BSdata.课程,margins=True,normalize='all').round(3)

BSdata.pivot_table('学号','开设','课程',aggfunc=len)
BSdata.pivot_table('学号',index='开设',columns='课程',aggfunc=len)
pd.pivot_table(BSdata,values='学号',index='开设',columns='课程',aggfunc=len)

BSdata
#(2)复式条图
T2=pd.crosstab(BSdata.开设,BSdata.课程);T2
T2.plot(kind='bar');

T2.plot(kind='barh');
T2.plot(kind='bar',stacked=True);

####4.3.2.2 计量数据的集聚表
#(1)groupby函数
BSdata.groupby(['性别'])
type(BSdata.groupby(['性别']))

BSdata.groupby(['性别'])['身高'].mean()
BSdata.groupby(['性别'])['身高'].size()
BSdata.groupby(['性别','开设'])['身高'].mean()

#(2)agg函数
BSdata.groupby(['性别'])['身高'].agg([np.mean, np.std])

#(3)应用apply()
BSdata.groupby(['性别'])['身高','体重'].apply(np.mean)
BSdata.groupby(['性别','开设'])['身高','体重'].apply(np.mean)

###4.3.3 多维透视分析
####4.2.3.1 计数数据的透视分析
#(1)pivot_table
BSdata.pivot_table(index=['性别'],values=['学号'],aggfunc=len)
BSdata.pivot_table(values=['学号'],index=['性别','开设'],aggfunc=len)
BSdata.pivot_table(values=['学号'],index=['开设'],columns=['性别'],aggfunc=len)

####4.2.3.2 计量数据的透视分析
#pd.pivot_table(BSdata,index=["性别"],aggfunc=len)
BSdata.pivot_table(index=['性别'],values=["身高"],aggfunc=np.mean)
BSdata.pivot_table(index=['性别'],values=["身高"],aggfunc=[np.mean,np.std])
BSdata.pivot_table(index=["性别"],values=["身高","体重"])

####4.2.3.3 复合数据的透视分析
pd.pivot_table(BSdata,index=["性别","开设"],aggfunc=len,margins=True)
BSdata.pivot_table('学号', ['性别','开设'], '课程', aggfunc=len, margins=True, margins_name='合计')
pd.pivot_table(BSdata,index=["性别"],aggfunc=np.mean)
BSdata.pivot_table(['身高','体重'],['性别',"开设"],aggfunc=[len,np.mean,np.std] )
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值