| 项目 | 期中试卷 |
| 课程班级博客链接 | 20级数据班(本) |
| 这个作业要求链接 | 作业要求 |
| 博客名称 | 2003031112—解道聪—Python数据分析五一假期作业—MySQL的安装以及使用 |
| 要求 | 每道题要有题目,代码(使用插入代码,不会插入代码的自己查资料解决,不要直接截图代码!!),截图(只截运行结果)。 |
《Python数据分析》课程期中上机考试题目
一、分析1996~2015年人口数据特征间的关系(1题50分,共50分)
考查知识点:掌握pyplot常用的绘图参数的调节方法;掌握子图的绘制方法;掌握绘制图形的保存与展示方法;掌握散点图和折线图的作用与绘制方法。
需求说明:
人口数据总共拥有6个特征,分别为年末总人口、男性人口、女性人口、城镇人口、乡村人口和年份。查看各个特征随着时间推移发生的变化情况可以分析出未来男女人口比例、城乡人口变化的方向。
截图如下:


要求:
(1)使用NumPy库读取人口数据。
(2)创建画布,并添加子图。
(3)在两个子图上分别绘制散点图和折线图。
(4)保存,显示图片。
(5)分析未来人口变化趋势
代码:
#导入模块
import numpy as np
import matplotlib.pyplot as plt
#使⽤numpy库读取⼈⼝数据
data=np.load("D:/360安全浏览器下载/populations.npz",allow_pickle=True)#读取文件,返回输入数组
print(data.files)#查看⽂件中的数组
print(data['data'])
print(data['feature_names'])
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False# 防止字符无法显示
name=data['feature_names']#提取其中的feature_names数组,视为数据的标签
values=data['data']#提取其中的data数组,视为数据的存在位置
#设置画布
p1=plt.figure(figsize=(19,11))#确定画布⼤⼩
pip1=p1.add_subplot(2,1,1)#创建⼀个两⾏⼀列的⼦图并开始绘制
#在⼦图上绘制散点图
plt.scatter(values[0:20,0],values[0:20,1])#,marker='8',color='red'
plt.ylabel('总人口(万⼈)')
plt.legend('年末')
plt.title('1996~2015年末与各类人口散点图')
pip2=p1.add_subplot(2,1,2)#绘制⼦图2
plt.scatter(values[0:20,0],values[0:20,2])#,marker='o',color='yellow'
plt.scatter(values[0:20,0],values[0:20,3])#,marker='D',color='green'
plt.scatter(values[0:20,0],values[0:20,4])#,marker='p',color='blue'
plt.scatter(values[0:20,0],values[0:20,5])#,marker='s',color='purple'
plt.xlabel('时间')
plt.ylabel('总人口(万人)')
plt.xticks(values[0:20,0])
plt.legend(['男性','女性','城镇','乡村'])
#在⼦图上绘制折线图
p2=plt.figure(figsize=(12,12))
p1=p2.add_subplot(2,1,1)
plt.plot(values[0:20,0],values[0:20,1])#,linestyle = '-',color='r',marker='8'
plt.ylabel('总人口(万人)')
plt.xticks(range(0,20,1),values[range(0,20,1),0],rotation=45)#rotation设置倾斜度
plt.legend('年末')
plt.title('1996~2015年末总与各类人口折线图')
p2=p2.add_subplot(2,1,2)
plt.plot(values[0:20,0],values[0:20,2])#,'y-'
plt.plot(values[0:20,0],values[0:20,3])#,'g-.'
plt.plot(values[0:20,0],values[0:20,4])#,'b-'
plt.plot(values[0:20,0],values[0:20,5])#,'p-'
plt.xlabel('时间')
plt.ylabel('总人口(万人)')
plt.xticks(values[0:20,0])
plt.legend(['男性','女性','城镇','乡村'])
#显⽰图⽚
plt.show()



二、读取并查看P2P网络贷款数据主表的基本信息(1题10分,共10分)
考查知识点:掌握常见的数据读取方式;掌握DataFrame常用属性与方法;掌握基础时间数据处理方法;掌握分组聚合的原理与方法;掌握透视表与交叉表的制作。
需求说明:
P2P贷款主表数据主要存放了网贷用户的基本信息。探索数据的基本信息,能够洞察数据的整体分布、数据的类属关系、从而发现数据间的关联。
要求:
(1)使用ndim、shape、memory_usage属性分别查看维度、大小、占用内存信息。
代码:
import os
import pandas as pd
master = pd.read_csv('C:/Users/admin/Desktop/Training_Master.csv',encoding='gbk')
print('P2P网络贷款主表数据的维度为:',master.ndim)
print('P2P网络贷款主表数据的形状大小为:',master.shape)
print('P2P网络贷款主表数据的占用内存为:',master.memory_usage)
#代码16-2
print('P2P网络贷款主表数据的描述性统计为:\n',master.describe())
结果
P2P网络贷款主表数据的维度为: 2
P2P网络贷款主表数据的形状大小为: (30000, 228)
P2P网络贷款主表数据的占用内存为: <bound method DataFrame.memory_usage of Idx UserInfo_1 UserInfo_2 UserInfo_3 UserInfo_4 WeblogInfo_1 \
0 10001 1.0 深圳 4.0 深圳 NaN
1 10002 1.0 温州 4.0 温州 NaN
2 10003 1.0 宜昌 3.0 宜昌 NaN
3 10006 4.0 南平 1.0 南平 NaN
4 10007 5.0 辽阳 1.0 辽阳 NaN
... ... ... ... ... ... ...
29995 9991 3.0 南阳 4.0 南阳 NaN
29996 9992 3.0 宁德 4.0 泉州 NaN
29997 9995 1.0 天津 2.0 天津 NaN
29998 9997 3.0 运城 3.0 运城 NaN
29999 9998 4.0 金华 5.0 无锡 NaN
WeblogInfo_2 WeblogInfo_3 WeblogInfo_4 WeblogInfo_5 ... \
0 1.0 NaN 1.0 1.0 ...
1 0.0 NaN 1.0 1.0 ...
2 0.0 NaN 2.0 2.0 ...
3 NaN NaN NaN NaN ...
4 0.0 NaN 1.0 1.0 ...
... ... ... ... ... ...
29995 1.0 NaN 3.0 2.0 ...
29996 0.0 NaN 6.0 1.0 ...
29997 0.0 NaN 2.0 2.0 ...
29998 0.0 NaN 1.0 1.0 ...
29999 0.0 NaN 1.0 1.0 ...
SocialNetwork_10 SocialNetwork_11 SocialNetwork_12 SocialNetwork_13 \
0 222 -1 0 0
1 1 -1 0 0
2 -1 -1 -1 1
3 -1 -1 -1 0
4 -1 -1 -1 0
... ... ... ... ...
29995 0 -1 0 1
29996 407 -1 0 0
29997 -1 -1 -1 0
29998 612 -1 0 1
29999 -1 -1 -1 0
SocialNetwork_14 SocialNetwork_15 SocialNetwork_16 SocialNetwork_17 \
0 0 0 0 1
1 0 0 0 2
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
... ... ... ... ...
29995 0 0 0 1
29996 0 0 0 1
29997 0 0 0 0
29998 0 0 0 1
29999 0 0 0 0
target ListingInfo
0 0 2014/3/5
1 0 2014/2/26
2 0 2014/2/28
3 0 2014/2/25
4 0 2014/2/27
... ... ...
29995 0 2014/2/22
29996 0 2014/2/28
29997 0 2014/2/24
29998 0 2014/2/28
29999 0 2014/3/5
[30000 rows x 228 columns]>
P2P网络贷款主表数据的描述性统计为:
Idx UserInfo_1 UserInfo_3 WeblogInfo_1 WeblogInfo_2 \
count 30000.000000 29994.000000 29993.000000 970.000000 28342.000000
mean 46318.673267 3.219911 4.694329 2.201031 0.131466
std 26640.397805 1.827684 1.321458 7.831679 0.358486
min 3.000000 0.000000 0.000000 1.000000 0.000000
25% 22924.250000 1.000000 4.000000 1.000000 0.000000
50% 46849.500000 3.000000 5.000000 1.000000 0.000000
75% 69447.250000 5.000000 5.000000 1.000000 0.000000
max 91703.000000 7.000000 7.000000 133.000000 4.000000
WeblogInfo_3 WeblogInfo_4 WeblogInfo_5 WeblogInfo_6 WeblogInfo_7 \
count 970.000000 28349.000000 28349.000000 28349.000000 30000.000000
mean 1.308247 3.025962 1.816960 2.948711 10.632800
std 7.866457 3.772421 1.701177 3.770300 16.097588
min 0.000000 1.000000 1.000000 1.000000 0.000000
25% 0.000000 1.000000 1.000000 1.000000 2.000000
50% 0.000000 2.000000 1.000000 2.000000 6.000000
75% 1.000000 3.000000 2.000000 3.000000 13.000000
max 133.000000 165.000000 73.000000 165.000000 722.000000
... SocialNetwork_9 SocialNetwork_10 SocialNetwork_11 \
count ... 30000.000000 30000.000000 30000.000000
mean ... 35.516167 75.211233 -0.999267
std ... 135.954587 742.978305 0.052911
min ... -1.000000 -1.000000 -1.000000
25% ... -1.000000 -1.000000 -1.000000
50% ... -1.000000 -1.000000 -1.000000
75% ... -1.000000 -1.000000 -1.000000
max ... 3242.000000 71253.000000 6.000000
SocialNetwork_12 SocialNetwork_13 SocialNetwork_14 SocialNetwork_15 \
count 30000.000000 30000.000000 30000.000000 30000.000000
mean -0.745033 0.221167 0.062033 0.027967
std 0.441473 0.420545 0.242598 0.164880
min -1.000000 0.000000 0.000000 0.000000
25% -1.000000 0.000000 0.000000 0.000000
50% -1.000000 0.000000 0.000000 0.000000
75% 0.000000 0.000000 0.000000 0.000000
max 1.000000 2.000000 3.000000 1.000000
SocialNetwork_16 SocialNetwork_17 target
count 30000.000000 30000.000000 30000.000000
mean 0.016633 0.253467 0.073267
std 0.127895 0.437296 0.260578
min 0.000000 0.000000 0.000000
25% 0.000000 0.000000 0.000000
50% 0.000000 0.000000 0.000000
75% 0.000000 1.000000 0.000000
max 1.000000 3.000000 1.000000
[8 rows x 208 columns]
三、提取用户信息更新表和登录信息表的时间信息(1题10分,共10分)
考查知识点:掌握常见的数据读取方式;掌握DataFrame常用属性与方法;掌握基础时间数据处理方法;掌握分组聚合的原理与方法;掌握透视表与交叉表的制作。
需求说明:
用户信息更新表和登录信息表汇总均存在大量的时间数据,提取时间数据内存在的信息,一方面可以加深对数据的理解,另一方面能够探索这部分信息和目标的关联程度。同时用户登录时间、借款成交时间、用户信息更新时间这些时间的时间差信息冶能反映出P2P网络贷款不同用户的行为信息。
要求:
(1)使用to_datetime函数转换用户信息更新表和登录信息表的时间字符串。
代码:
import pandas as pd
LogInfo = pd.read_csv('C:/Users/admin/Desktop/Training_LogInfo.csv',encoding='gbk')
Userupdate = pd.read_csv('C:/Users/admin/Desktop/Training_Userupdate.csv',encoding='gbk')
# 转换时间字符串
LogInfo['Listinginfo1']=pd.to_datetime(LogInfo['Listinginfo1'])
LogInfo['LogInfo3']=pd.to_datetime(LogInfo['LogInfo3'])
print('转换登录信息表的时间字符串前5行:\n',LogInfo.head())
Userupdate['ListingInfo1']=pd.to_datetime(Userupdate['ListingInfo1'])
Userupdate['UserupdateInfo2']=pd.to_datetime(Userupdate['UserupdateInfo2'])
print('转换用户信息更新表的时间字符串前5行:\n',Userupdate.head())
四、使用分组聚合方法进一步分析用户信息更新表和登录信息表(1题30分,共30分)
考查知识点:掌握常见的数据读取方式;掌握DataFrame常用属性与方法;掌握基础时间数据处理方法;掌握分组聚合的原理与方法;掌握透视表与交叉表的制作。
需求说明:
分析用户信息更新表和登录信息表时,除了提取时间本身的信息外,还可以结合用户编号进行分组聚合,然后进行组内分析。通过组内分析可以得出每组组内的最早和最晚信息更新时间、最早和最晚登录时间、信息更新的次数、登录的次数等信息。
要求:
(1)使用groupby方法对用户信息更新表和登录信息表进行分组。
(2)使用agg方法求取分组后的最早和最晚更新及登录时间。
(3)使用size方法求取分组后的数据的信息更新次数与登录次数。
import pandas as pd import numpy as np LogInfo = pd.read_csv('C:/Users/admin/Desktop/Training_LogInfo (1).csv',encoding='gbk') Userupdate = pd.read_csv('C:/Users/admin/Desktop/Training_Userupdate.csv',encoding='gbk') # 使用groupby方法对用户信息更新表和登录信息表进行分组 LogGroup = LogInfo[['Idx','LogInfo3']].groupby(by = 'Idx') UserGroup = Userupdate[['Idx','UserupdateInfo2']].groupby(by = 'Idx') #代码18-2 # 使用agg方法求取分组后的最早,最晚,更新登录时间 print('分组后的最早登录时间为:\n',LogGroup.agg(np.min)) print('分组后的最晚登录时间为:\n',LogGroup.agg(np.max)) print('分组后的最早更新时间为:\n',UserGroup.agg(np.min)) print('分组后的最晚更新时间为:\n',UserGroup.agg(np.max)) #代码18-3 # 使用size方法求取分组后的数据的信息更新次数与登录次数 print('分组后的数据的信息更新次数为:\n',LogGroup.size()) print('分组后的数据的登录次数为:\n',UserGroup.size())
运行结果:
分组后的最早登录时间为:
LogInfo3
Idx
3 2013-08-30
5 2013-10-24
8 2013-10-25
12 2012-12-08
16 2013-10-27
... ...
91689 2014-10-26
91693 2014-10-26
91695 2014-09-26
91702 2014-10-26
91703 2014-10-26
[28987 rows x 1 columns]
分组后的最晚登录时间为:
LogInfo3
Idx
3 2013-11-01
5 2013-11-06
8 2013-11-06
12 2013-11-01
16 2013-11-04
... ...
91689 2014-10-29
91693 2014-11-05
91695 2014-10-30
91702 2014-10-28
91703 2014-11-03
[28987 rows x 1 columns]
分组后的最早更新时间为:
UserupdateInfo2
Idx
3 2013/08/30
5 2013/10/24
8 2013/10/25
12 2012/12/08
16 2013/10/27
... ...
91689 2014/10/26
91693 2014/10/26
91695 2014/09/26
91702 2014/10/26
91703 2014/10/26
[29995 rows x 1 columns]
分组后的最晚更新时间为:
UserupdateInfo2
Idx
3 2013/08/30
5 2013/10/24
8 2013/11/04
12 2013/10/02
16 2013/11/05
... ...
91689 2014/10/26
91693 2014/10/28
91695 2014/10/26
91702 2014/10/26
91703 2014/11/02
[29995 rows x 1 columns]
分组后的数据的信息更新次数为:
Idx
3 26
5 11
8 125
12 199
16 15
...
91689 7
91693 15
91695 20
91702 7
91703 21
Length: 28987, dtype: int64
分组后的数据的登录次数为:
Idx
3 13
5 13
8 14
12 14
16 13
..
91689 12
91693 3
91695 20
91702 11
91703 15
Length: 29995, dtype: int64
浙公网安备 33010602011771号