实验四Pandas统计分析_第1页
实验四Pandas统计分析_第2页
实验四Pandas统计分析_第3页
实验四Pandas统计分析_第4页
实验四Pandas统计分析_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验四Pandas统计分析

1.实验类型

设计型实验

2.实验目的和要求

(1)掌握csv数据读取方法。

(2)掌握DataFrame的常用属性与方法。

(3)掌握pandas描述性统计方法。

(4)掌握时间字符串和标准时间的转换方法。

(5)掌握时间信息提取的方法。

(6)掌握时间数据的算术运算。

(7)掌握分组聚合的原理与步骤。

(8)掌握agg/apply聚合方法。

(9)掌握透视表、交叉表的制作方法。

3.实验内容

题目一:读取并查看P2P网络贷款数据主表的基本信息

⑴训练要点

•掌握csv数据读取方法。

•掌握DataFrame的常用属性与方法。

•掌握pandas描述性统计方法。

探索数据的基本信息,洞察数据的整体分布,数据的类属关系,从而发现数

据间的关联。

(2)需求说明

P2P网络贷款主表数据Training.主要存放了网贷用户的基本信息。探索数据

的基本信息,能够洞察数据的整体分布、数据的类属关系,从而发现数据间的关

联。

⑶实现步骤

•使用ndim、shape^memory_usage属性分别查看维度、大小、占用内存

信息。

•使用describe方法进行描述性统计,并剔除值相同或全为空的列(包括

部分数据为相同值,剩下数据为空的列)。

题目二:提取登录信息表的时间信息

⑴训练要点

•掌握时间字符串和标准时间的转换方法。

•掌握时间信息提取的方法。

•掌握时间数据的算术运算。

(2)需求说明

用户登录信息表Training.中均存在大量的时间数据,提取时间数据内存在的

信息,一方面可以加深对数据的理解,另一方面能够探索这部分信息和目标的关

联程度。同时用户登录时间('Loglnfo3')、借款成交时间('Listinginfol')这些

时间的时间差信息也能够反映出P2P网络贷款不同用户的行为信息。

⑶实现步骤

•使用to_datetime函数转换用户登录信息表的时间字符串。

•新增3歹IJ,取值分别为字段'Listinginfol'的时间信息:年、月、周。

•计算用户登录信息表中两时间的差,分别以日、小时、分钟计算。

题目三:使用分组聚合方法进一步分析登录信息表

⑴训练要点

•掌握分组聚合的原理与步骤。

•掌握agg/apply聚合方法。

(2)需求说明

分析用户登录信息表时,除了提取时间本身的信息外,还可以结合用户编号

进行分组聚合,然后进行组内分析。通过组内分析可以得出每组组内的最早和最

晚信息更新时间、最早利最晚登录时间、信息更新的次数、登录的次数等信息。

⑶实现步骤

•使用groupby方法对用户登录信息表按用户Id进行分组。

•使用agg方法求取分组后的最早和最晚登录时间与最早借款成交时间,

并使用apply函数在每一行上计算最早借款成交时间与最早登录时诃的

差值。

题目四:使对登录信息表进行长宽表转换

(1)训练要点

•掌握透视表、交叉表的制作方法。

⑵需求说明

通过对数据的描述性统计,以及时间数据信息提取,分组聚合操作已经获得

了相当多的信息,但登录信息表Training.是长表,而主表是宽表,需要通过长宽

表转换将数据合并在一张表内。

⑶实现步骤

•使用povit_table函数进行长宽表转换:

登录信息表Training.以'Idx'为行索引,列索引为1oglnfo2',值为

,Loginfol',聚合函数为count生成透视表。

•使用crosstab函数进行长宽表转换:

登录信息表Training.以]dx,为行索引,列索弓I为'Loginf。?,值为

4Loginfol,,聚合函数为count,生成交叉表。

4.实验背景知识

pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建

的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据

集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

所有知识点的实例均在“课堂代码实例”中。

(1)查看数据的大小、维度、占用内存信息

使用属性ndim可以查看数据的维度,shape查询数据的形状大小,

memory_usage函数查看数据的占用内存信息。

In[16]:print("氏度:=excelData.size)*Series长度.包括::

print("形状:=excelData.shape)*形状,(•)

print("维度:=excelData.ndim)a维度

print("类型:=excelData.<1types)#类型

print(”获取列索引:”,excelData.columns)

print(”获取行索引:",excelData.index)

长度:3285

形状:(365,9)

维度:2

类型:dateobject

maxTempobject

minTempobject

weatherobject

windDictobject

windPowercbject

AQIint64

AQIInfocbject

AQILevelint64

dtype:object

获位列索引:Index(['date','maxTemp','minTemp','eather','windDict','windPower','AQI'

*AQIInfo','AQILevel*],

dtype=,cbject')

获取行索引:RangeIndex(start=0,stop=365,step=l)

图1查看数据属性代码实例

In[15j:print("内存使用情况",excelData.memory_usage())

内存使用情况Index128

date2920

iiaxTemp2920

ninTemp2920

veather2920

vindDict2920

vindPower2920

AQI2920

AQIInfo2920

AQILevel2920

dtype:int64

图2查看内存使用情况

(2)描述统计

describe函数能够一次性得出数据框所有数值型特征的非空值数目、均值、四

分位数、标准差。

In[11]:df.describe()

Out[11]:

maxTempminTempAQIAQILevel

count365.000000365.000000365.000000365.000000

mean18.6657538.35890482.1835622.090411

std11.85804611.75505351.9361591.029798

min-5.000000-12.00000021.0000001.000000

25%8.000000-3.00000046,0000001.000000

50%21.0000008.00000069.0000002.000000

75%29.00000019.000000104.0000003.000000

max38.00000027.000000387.0000006.000000

图3describe函数示例

(3)剔除值相同或全为空的列

方法1:

describe函数返回了非空值数目与方差,可根据这2项判断值是否相同或全

为空。再通过函数可以删除指定的行与列。

方法2:

e函数可从列中提取唯一值,返回结果包含空值;series.value_counts函数返

回一个Series,其中包含唯一值的计数。默认情况下,它不包含NA值,可通过

dropna进行设置。这俩个方法均可判断列的值是否相同或全为空。再通过函数

可以删除指定的行与列。

In[5]:df=pd.DataFrame({"a”:[1,2,3],

"b”:[np.nan,np.nan,np.nan]})

df

Out[5]:

ab

01NaN

12NaN

23NaN

In[6]:df['a'].unique()

Out[6]:array([1,2,3],dtype=int64)

In[7]:df['b'].unique0

Out[7]:array([nan])

In[8]:df.loc[:,'a'].value_counts()

Out[8]:11

21

31

Name:a,dtype:int64

In[9]:df.loc[:,'b*].value_counts(dropnaFalse)

Out[9]:NaN3

Name:b,dtype:int64

In[10]:df,loc[:,*b#].count0

Out[10]:0

图4e与series.value_counts示例代码

(4)时间字符串转换为标准时间格式

pandas提供的to_datetime函数,能够将时间相关的字符串都会转换成为

Timestampo

In[45]:dates=pd.to_datetime([datetime(2021,10,23),'24thofOctober,2021,,

'2021-Oct-25','10-26-2021','20211027'])

dates

Out[45]:Datetimelndex([,2021-10-23,,12021-10-24*,*2021-10-25*,*2021-10-26,,

*2021-10-27*],

dtype='datetime64[ns]',freq=None)

图5to_datetime函数示例代码

(5)提取时间序列数据信息

结合pandas提供的转换函数,如map、apply,可以实现对DataFrame某一

列时间信息数据年份,月份,周信息的提取。

In[2J:叫"[污柒指数燧伤为0-50.51-100、101150.151-2C0.201300和大广300六科

*优、R、花依力柒.中度污集、叭发污柒.严蛆污柒

dofAQIUv(»l_nap(aqi):-aqiAQILevel的中的,公大青

ifaqi=1:

return"优":

elifaqi=2:

return”良■:

olifaqi-3:

return'轻度污臭";

elifaqi-4:

return"中度河会":

elifaqi=5:

return行染T:

olifaqi"■6:

return"严》R污柒;

else:

return

df.loc[:/AQILevel*].nap(AQILevel.map)

Out[2]:date

2018-O1-C1口

2018-01-C2优

2018-01-C3优

2018-01-04优

2018-01-05优

2018-12-27优

2018-12-28优

2018-12-29

2018-12-30

2018-12-31ft

Name:AQILevel.Length:365.dtype:object

图6m叩函数示例代码

In[23]:datel=pd.TimestampC10-26-20219:13:45,)

datel

Out[23]:TimestampC2021-10-2609:13:45,)

In[24]:datel.year

Out[24]:2021

In[25]:datel.day

Out[25]:26

In[80]:datel.week

Out[80]:43

In[26]:datel.quarter

Out[26]:4

In[27]:datel.is_leap_year

Out[27]:False

图7Timestramp相关属性

(6)加减时间数据

Timedelta能够直接对两个时间序列进行相减,从而得出一个Timedelta。

In[69]:#时间戳相减

pd.to_datetime(,2019-9-4*)-pd.to_datetime(,2018-1-T)

Out[69]:Timedelta('611days00:00:00,)

In[70]:pd.Tin:edelta(days=50)-pd.Timedelta(*10min)

Out[70]:Timedelta(149days23:50:001)

In[71]:pd.Timedelta(days=50)/2

Out[71]:Timedelta(,25days00:00:001)

In[72]:tDelta=pd.Timedelta(*50days12:10:00*)

才转换为秒

sees=tDelta.total_seconds()

sees

Out[72]:43638C0.0

In[73]:I#转化为小时

sces/€0/60

Out[73]:1212.1666666666667

图8Timedelta计算示例代码

(7)使用groupby方法对数据分组

使用groupby函数对用户登录信息表按Id进行分组。

In'll]:groups=df.groupby(['weather'windDict'])

groups

Out[11]:<pandas.core.groupby.generic.DataFrameGroupByobjectatOx0000022E54F40D30>

In[12]:a通过gejgroup获取某•分组参数为元组(顺序数)

groups.get_group(C多云','东北风'))

0ut[12]:

yearmonthdaymaxTempmlnTempweatherwlndDIctwlndPowerAQI

2420ie125-3-11多云32级27

53201622310•4多云和烟,1-2级45

1122018423199多云Sdtlxl34级34

177?01£6?737♦云兄网34级54

20720ie7273223多云和网「2级65

22620U8153224多云和网3Y级33

32620ie112370多云的呕2级93

343201612101-6多云利网1级79

36420161231-2-10多云3dtM1级56

图9groupby函数示例代码

(8)使用agg函数进行聚合

使用agg函数对各个分组结果进行聚合操作.

­不同列使用不同的聚合函数:利用字典进行聚合操作的指定

In[22]:#统计锤个月日单高温咱最小值2及日最吟温中最卜冉

df.groupby(df['month']).agg({'maxTemp,:['min','max'],'minTemp1/max'})

Out[22]:

maxTempmlnTemp

minmaxmax

month

1-47-4

2-1120

342711

4103017

5183522

6233825

7253727

8263627

9193120

10142514

117186

12-5102

图lOagg函数示例代码

(9)使用apply函数转换数据

In[27]:u返网每个月AQ1的最大值

defget_maxNum(df):

dfl=df.sort_values(by='AQI',ascending=False)

returndfl.ilocLO,:]

maxTempDf=df.groupbyCmonth').apply(get_maxNum)

maxTempDf

Out[27]:

yearmonthdaymaxTempminTempweatherwlndDIctwlndPowerAQI

month

120181146-5晴~多云西1网1-2级187

2201822770明1-2级220

32018328259多云-晴^<11-2级387

42018422611多云1讽1-2级287

520185122816小雨东南风3Y级186

620186263625卫西南风3*4级174

720187203327多云西南风34级116

82018823626多云-晴南风1-2级118

920189142819小雨-多云南风1-2级128

10201810151711小雨1讽1-2级198

1120181114135多云南风1-2级266

12201812292戢多云钿皈1级234

图11apply函数示例代码

(10)使用povit_table函数和crosstab进行长宽表转换

In[4]:dd=pd.pivot_table(df,values=['maxTemp','minTemp'],index=,month',

columns=,year',aggfunc=[min,max])

dd

Out[4]:minmax

maxlempminTempmaxTempminTemp

year20182019201820192018201920182019

month

1-4-3-12-13784-5

2-10-10-1112130-1

345-4-52728*110

410111030311716

5181910935362221

62324171638392524

7252622

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论