2003031112—解道聪—Python数据分析五一假期作业—MySQL的安装以及使用


项目 期中试卷
课程班级博客链接 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网络贷款主表数据的占用内存为: 
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()) 
结果:
转换登录信息表的时间字符串前5行: Idx Listinginfo1 LogInfo1 LogInfo2 LogInfo3 0 10001 2014-03-05 107 6 2014-02-20 1 10001 2014-03-05 107 6 2014-02-23 2 10001 2014-03-05 107 6 2014-02-24 3 10001 2014-03-05 107 6 2014-02-25 4 10001 2014-03-05 107 6 2014-02-27 转换用户信息更新表的时间字符串前5行: Idx ListingInfo1 UserupdateInfo1 UserupdateInfo2 0 10001 2014-03-05 _EducationId 2014-02-20 1 10001 2014-03-05 _HasBuyCar 2014-02-20 2 10001 2014-03-05 _LastUpdateDate 2014-02-20 3 10001 2014-03-05 _MarriageStatusId 2014-02-20 4 10001 2014-03-05 _MobilePhone 2014-02-20
   

使用分组聚合方法进一步分析用户信息更新表和登录信息表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
   
?

相关