第3章【综合练习题】根据某系的实验教学计划,完成以下分析:读取DataScience.xlsx文件数据,创建为DataFrame数据对象。根据银行储户的基本信息,完成以下分析。从文件中读取信息

本书中所有的数据文件保存在data文件夹中,链接如下:

https://pan.baidu.com/s/1Tu__B-YfXDz_yXzbzNKB4A?pwd=sfw2 
提取码:sfw2

P63综合练习题

1.根据某系的实验教学计划,完成以下分析:

1)读取DataScience.xlsx文件数据,创建为DataFrame数据对象;

#1)
import pandas as pd
df = pd.read_excel('Data\DataScience.xls')

2)查询实验教学计划的基本内容及总数(df.index,df.columns);

#2)
print(df.index)
print(df.columns)

3)查询实验教学计划中是否含有NaN数据?将含有NaN数据的行导出为数据文件pre.csv,判断采用何种数据清洗模式:填充、删除或手工填充;

#3)
print(df.isnull().any())                         #axis默认为0,按列查找
df[df.isnull().any(axis = 1)].to_csv('pre.csv',mode = 'w')    
df.dropna(how = 'all',inplace = True)            #删除全部值都为Nan的行(默认按行)
df.drop_duplicates(inplace = True)               #删除重复的数据
df.fillna(method = 'ffill',inplace = True)       #经判断,采用前一行数据填充

4)查询“课程名称”、“实验项目名称”、“实验类型”和“二级实验室名称”四列数据内容;

print(df[['课程名称','实验项目名称','实验类型','二级实验室名称']])

5)统计每门课程的实验课时数;

#5)
#方法一
print(df.groupby('课程名称').aggregate({'实验课时数':np.sum}))

#方法二
print(df.groupby('课程名称')['实验课时数'].sum())         #分组并按指定列进行数据计算

#方法三
print(df.groupby('课程名称')['实验课时数'].apply(sum))    #运用apply函数进行计算

6)统计每周开设各门课程的实验课时数;

#6)
#方法一
print(df.groupby(['周次','课程名称']).aggregate({'实验课时数':np.sum}))    #或df.groupby(['周次','课程名称']).aggregate({'实验课时数':['sum']})

#方法二
print(df.groupby(['周次','课程名称'])['实验课时数'].sum())

#方法三
print(df.groupby(['周次','课程名称'])['实验课时数'].apply(sum))

7)统计每门课程的实验类型分布(crosstab);

#7)
print(pd.crosstab(df['课程名称'],df['实验类型']))

8)统计每个班级的实验课课表;

#8)
#方法一
print(df[['班级','周次','星期','节次','课程名称','实验项目名称','实验课时数','实验类型','班级人数','二级实验室名称','实验地点门牌号']].sort_values(by = ['班级','周次','星期','节次'],ascending = True))  

#方法二
for name,group in df.sort_values(by = ['班级','周次','星期','节次'],ascending =True).groupby(['班级']):
    print(name)
    print(group)

9)分析各二级实验室承担的实验课时数;

print(df.groupby(['二级实验室名称','周次']).aggregate({'实验课时数':np.sum}))
print(pd.crosstab(df['二级实验室名称'],df['实验课时数'])) 

10)分析各二级实验室能够支持的实验类型。

#方法一:
print(df.groupby('二级实验室名称')['实验类型'].unique())

#方法二:
print(pd.crosstab(df['二级实验室名称'],df['实验类型']))

#方法三:
print(df[['二级实验室名称','实验类型']].drop_duplicates().sort_values(by = ['二级实验室名称','实验类型']))

#方法四
df1 = df[['二级实验室名称','实验类型']].drop_duplicates()
for name,group in df1.groupby('二级实验室名称'):
    print(name)
    print(group)

2.根据银行储户的基本信息,完成以下分析。

1)从“bankpep.csv”文件中读取用户信息。

#第2题
import pandas as pd
import numpy as np
#1)
bankpep_data = pd.read_csv('data/bankpep.csv')

2)查看储户的总数,以及居住在不同区域的储户数。

#2)
#求储户总数的四种方法
#方法一:统计id总数来求储户总数
print(bankpep_data['id'].count())
       
#方法二:count()函数
print(bankpep_data.count())

#方法三:info()函数
print(bankpep_data.info())

#方法四:计算index
print(bankpep_data.index)

#求不同区域的储户数
print(bankpep_data.groupby('region')['id'].count())    

3)计算不同性别储户收入的均值和方差。

#3)
print(bankpep_data.groupby(['sex']).aggregate({'income':['mean','var']}))
#或者写成bankpep_data.groupby(['sex']).aggregate({'income':[np.mean,np.var]})

4)统计接受新业务的储户中各类性别、区域的人数。

#4)
#方法一
print(bankpep_data.groupby(['sex','region'])['pep'].count())

#方法二
print(bankpep_data[['pep','sex','region']].groupby(['sex','region']).count())

5)将存款账户、接受新业务的值转化为数值型。

#5)
#三种方法取一种方法就好。
#方法一
bankpep_data[['save_act','pep']] = np.where(bankpep_data[['save_act','pep']] =='YES',1,0)
print(bankpep_data)

#方法二
bankpep_data.loc[bankpep_data['save_act'] =='YES',['save_act']] = 1
bankpep_data.loc[bankpep_data['save_act'] =='NO',['save_act']] = 0
bankpep_data.loc[bankpep_data['pep'] =='YES',['pep']] = 1                
bankpep_data.loc[bankpep_data['pep'] =='NO',['pep']] = 0
print(bankpep_data)

#方法三:map函数映射
set_map = {'YES':1,'NO':0}
bankpep_data['save_act'] = bankpep_data['save_act'].map(set_map)   #map函数不能多列同时进行
bankpep_data['pep'] = bankpep_data['pep'].map(set_map)
print(bankpep_data)

6)分析收入、存款账户与接收新业务之间的关系。

#6)
print(bankpep_data[['income','save_act','pep']].corr().round(2))    #保留两位小数

由运行结果可知,“收入(income)”与“存款账户(save_act)”的相关系数r为0.27,“收入(income)”与“接受新业务(pep)”的相关系数r为0.22,表示它们两者之间都存在一定程度的相关性。而“存款账户(save_act)”与“接受新业务(pep)”的相关系数r为-0.07,r值接近于0,表示两者之间几乎没有相关性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是学数据分析的阿龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值