【Python】实训4:pandas统计分析基础(pandas基础操作)
题⽬来源:
《Python数据分析与应⽤》第4章 pandas统计分析基础
【 黄红梅、张良均主编 中国⼯信出版集团和⼈民邮电出版社】
本博客题⽬⽂字主要来⾃:
印象笔记OCR⽂字识别转换(敲题⽬是不可能去敲题⽬的)
【OCR (Optical Character Recognition,光学字符识别)】
oracle导入字符集不一致(下载后到第4章->实训数据)
实训1读取并查看P2P⽹络贷款数据主表的基本信息
1.训练要点
(1)掌握CSV数据读取⽅法
(2)掌握 DataFrame的常⽤属性与⽅法
(3)掌握pandas描述性统计⽅法。
2.需求说明
P2P⽹络贷款主表数据主要存放了⽹贷⽤户的基本信息。探索数据的基本信息,能洞察数据的整体分布、数据的类属关系,从⽽发现数据间的关联。
3.实现思路及步骤
(1)使⽤ndim、 shape、 memory_usage属性分别查看维度、⼤⼩、占⽤内存信息
(2)使⽤describe⽅法进⾏描述性统计,并剔除值相同或全为空的列。
#实训1:读取并查看P2P⽹络贷款数据主表的基本信息
import pandas as pd
ad_csv("./第4章-实训数据/Training_Master.csv",encoding="gbk")
ad_csv("./第4章-实训数据/Training_Userupdate.csv",encoding="gbk")
ad_csv("./第4章-实训数据/Training_LogInfo.csv",encoding="gbk")
#查看ndim维度、shape形状、memory_usage占⽤内存
print("主表的维度为:",Master.ndim)
print("主表的形状为:",Master.shape)
print("主表的占⽤内存为:",_usage().head())
print("⽤户信息更新表的维度为:",Userupdate.ndim)
print("⽤户信息更新表的形状为:",Userupdate.shape)
print("⽤户信息更新表的占⽤内存为:",_usage().head())
print("登录信息表的维度为:",LogInfo.ndim)
print("登录信息表的形状为:",LogInfo.shape)
print("登录信息表的占⽤内存为:",_usage().head())
'''
#额外练习——其他属性
print("主表的索引为:",Master.index)
print("主表的值为:",Master.values)
print("主表的列名为:",lumns)
print("主表的数据类型为:",Master.dtypes)
print("主表的元素个数为:",Master.size)
'''
#describe⽅法
print("主表的描述性统计为:",Master.describe())python数据分析基础教程答案
#删除值相同或者全空的列
def Drop_same_null(data):
print("删除前的的形状为:",data.shape)
before=data.shape[1]
NullCol=data.describe().loc["count"]==0
for i in range(0,len(NullCol)):
if NullCol[i]:
data.drop(labels=NullCol.index[i],axis=1,inplace=True)
StdCol=data.describe().loc["std"]==0
for j in range(0,len(StdCol)):
if StdCol[j]:
data.drop(labels=StdCol.index[j],axis=1,inplace=True)sql数据库怎么下载的
after=data.shape[1]
print("删除后的形状为:",data.shape)
print("主表的删除值相同或者全空的列后的情况:")
Drop_same_null(Master)
print("⽤户信息更新表的删除值相同或者全空后的情况:")
Drop_same_null(Userupdate)
print("登录信息表的删除值相同或者全空后的情况:")
Drop_same_null(LogInfo)
稍微分析:
本题实训主要是为了练习查看获取的信息的能⼒,以及去除⼀些不希望存在的⼲扰项(⽐如空值和值相关项),这⾥在去除值相同项⽤了个⼩技巧(只要标准差为0,那么这⼀列的值都是相同的)所以这⾥去除了所有列的标准差为0的项,从⽽去除了所有值相同的列。
实训2提取⽤户信息更新表和登录信息表的时间信息
1.训练要点
(1)掌握时间字符串和标准时间的转换⽅法。
(2)掌握时间信息提取的⽅法。
(3)掌握时间数据的算术运算。
2.需求说明
⽤户信息更新表和登录信息表中均存在⼤量的时间数据,提取时间数据内存在的信息,⼀⽅⾯可以加深对数据的理解,另⼀⽅⾯能够探索这部分信息和⽬标的关联程度。同时⽤户登录时间、借款成交时间、⽤户信息更新时间这些时间的时间差信⾃也能够反映出PP⽹络贷款不同⽤户的⾏为信息。
3.实现思路及步骤
(1)使⽤to_datetime函数转换⽤户信息更新表和登录信息表的时间字符串。
(2)使⽤year、 month、week等⽅法提取⽤户信息更新表和登录信息表中的时间信息
(3)计算⽤户信息更新表和登录信息表中两时间的差,分别以⽇、⼩时、分钟计算。
#实训2 提取⽤户信息更新表和登录信息表的时间信息
import pandas as pd
ad_csv("./第4章-实训数据/Training_Master.csv",encoding="gbk")
ad_csv("./第4章-实训数据/Training_Userupdate.csv",encoding="gbk")
ad_csv("./第4章-实训数据/Training_LogInfo.csv",encoding="gbk")
#(1)使⽤to_datetime函数转换⽤户信息更新表和登录信息表的时间字符串。
Userupdate["ListingInfo1"]=pd.to_datetime(Userupdate["ListingInfo1"])
Userupdate["UserupdateInfo2"]=pd.to_datetime(Userupdate["UserupdateInfo2"])
LogInfo["Listinginfo1"]=pd.to_datetime(LogInfo["Listinginfo1"])
LogInfo["LogInfo3"]=pd.to_datetime(LogInfo["LogInfo3"])
#(2)使⽤year、 month、week等⽅法提取⽤户信息更新表和登录信息表中的时间信息丢勒
year=[i.year for i in Userupdate["ListingInfo1"].head()]
print("ListingInfo1中的前5个年份信息:",year[:5])
month=[i.month for i in Userupdate["ListingInfo1"].head()]
print("ListingInfo1中的前5个⽉份信息:",month[:5])
week=[i.week for i in Userupdate["ListingInfo1"].head()]
print("ListingInfo1中的前5个星期信息:",week[:5])
day=[i.day for i in Userupdate["ListingInfo1"].head()]
print("ListingInfo1中的前5个⽇期信息:",day[:5])
#(3)计算⽤户信息更新表和登录信息表中两时间的差,分别以⽇、⼩时、分钟计算
timeDeltaUserupdate=Userupdate["ListingInfo1"]-Userupdate["UserupdateInfo2"]
print("计算时间差以⽇期为单位:\n",timeDeltaUserupdate.head())
def TransformDayIntoHour(data):
buttongroup组件的作用for i in range(0,len(data)):
data[i]=data[i].total_seconds()/3600
return data
print("计算时间差以⼩时为单位:\n",TransformDayIntoHour(timeDeltaUserupdate).head())
def TransformDayIntoMinute(data):
for i in range(0,len(data)):
data[i]=data[i].total_seconds()/60
return data
timeDeltaUserupdate=Userupdate["ListingInfo1"]-Userupdate["UserupdateInfo2"]
print("计算时间差以分钟为单位:\n",TransformDayIntoMinute(timeDeltaUserupdate).head())
实训3使⽤分组聚合⽅法进⼀步分析⽤户信息更新表和登录信息表
1.训练要点
(1)掌握分组聚合的原理与步骤。
(2)掌握agg、 apply聚合⽅法
(3)掌握transform聚合⽅法。
2.需求说明
分析⽤户信息更新表和登录信息表时,除了提取时间本⾝的信息外,还可以结合⽤户编号进⾏分组聚合,然后进⾏组内分析。通过组内分析可以得出每组组内的最早和最晚信息更新时间、最早和最晚登录时间、信息更新的次数、登录的次数等信息。
3.实现思路及步骤
(1)使⽤groupby⽅法对⽤户信息更新表和登录信息表进⾏分组
(2)使⽤agg⽅法求取分组后的最早和最晚更新及登录时间。
(3)使⽤size⽅法求取分组后的数据的信息更新次数与登录次数。
#实训3 使⽤分组聚合⽅法进⼀步分析⽤户信息更新表和登录信息表
import pandas as pd
import numpy as np
ad_csv("./第4章-实训数据/Training_Userupdate.csv",encoding="gbk")
ad_csv("./第4章-实训数据/Training_LogInfo.csv",encoding="gbk")
#(1)使⽤groupby⽅法对⽤户信息更新表和登录信息表进⾏分组
UserupdateGroup=Userupdate[["Idx","UserupdateInfo2"]].groupby(by="Idx")
LogInfoGroup=LogInfo[["Idx","LogInfo3"]].groupby(by="Idx")
print('分组后的⽤户信息更新表为:',UserupdateGroup.head())
print('分组后的登录信息表为:',LogInfoGroup.head())
#(2)使⽤agg⽅法求取分组后的最早和最晚更新及登录时间。
print("分组后最早更新时间:",UserupdateGroup.agg(np.min).head())
print("分组后最晚更新时间:",UserupdateGroup.agg(np.max).head())
#(3)使⽤size⽅法求取分组后的数据的信息更新次数与登录次数。
print("分组后信息更新次数:",UserupdateGroup.size().head())
print("分组后登录次数:",LogInfoGroup.size().head())
实训4对⽤户信息更新表和登录信息表进⾏长宽表转换
1.训练要点
(1)掌握透视表的制作⽅法。
(2)掌握交叉表的制作⽅法。
2.需求说明
通过对数据的描述性统计,以及时间数据信息提取,分组聚合操作已经获得了相当多的信息,但⽤户信息更新表和登录信息表是长表⽽主表是宽表,需要通过长宽表转换将数据合并在⼀张以⽤户编号为主键的表内。
3.实现思路及步骤
剪纸教程图解老虎
(1)使⽤pivot_table函数进⾏长宽表转换。
(2)使⽤crosstab⽅法进⾏长宽表转换。
很遗憾,实训4具体想⼲嘛我搞的不是很懂。
其实,这本书的相关实训很多都表达不清楚(美其名⽈:开放问题),稍微结合⾃⼰的理解,就做出⼀个答案了。但这⾥的实训4确实有点感觉不好写出结果…所以,我也没啥深⼊探究的兴趣,那就不写了
你是完美主义吗?
你有强迫症吗?
⽣活中⾯临的种种选择该如何取舍?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。