Python数据分析三剑客学习笔记Day5

您所在的位置:网站首页 三剑客豆瓣评分多少 Python数据分析三剑客学习笔记Day5

Python数据分析三剑客学习笔记Day5

2024-01-16 14:37| 来源: 网络整理| 查看: 265

本文是视频Python数据分析三剑客 数学建模基础 numpy、pandas、matplotlib的学习笔记。 ————————————————————————————————————————————————————

目录 数据重塑和轴向旋转层次化索引Series的层次化索引:内层选取 通过unstack方法将series变成DataFrame通过stack方法复原 DataFrame的层次化索引设置行列索引选取列交换内外层索引 尝试将电影数据处理成多层索引结构把产地和年代同时设为索引,产地为外层索引,年代为内层索引每个索引都是一个元组取消层次化索引 数据旋转dataframe可以使用stack和unstack,转化为层次化索引的series 数据分组,分组运算按照电影的产地进行分组先定义一个分组变量group可以计算分组后的各个统计量计算平均值求和 计算每年的平均评分传入多个分组变量获得每个地区,每一年的评分的均值 series通过unstack方法转化为DataFrame,没有数据会产生缺失值 离散化处理pd.cut()函数用评分等级将数据分组根据投票人数来刻画电影热门 离散化数据的应用:找出大烂片!找出高分冷门电影! 数据保存 合并数据集1. append()方法2. merge()方法3. concat()方法 第五次课作业(1)读取数据。读取之前作业保存的“酒店数据1.xlsx”(2)将“类型”和“名字”设置为层次化索引,并交换索引的位置。然后将层次化索引取消。(3)将数据集转置,获取转制后的index和columns。(4)用Groupby方法来计算每个地区的评分人数的总和以及均值。(5)用Grouby方法计算每个类型的平均价格,最高价和最低价。(6)数据离散化,按照价格将酒店分为3个等级,0-500为C,500-1000为B,大于1000为A,列名设置为“价格等级”。(7)获取评分均值最高和最低的地区的数据,分别使用append和concat方法将获取的两个数据集合并。(8)数据离散化,按照评分人数将酒店平均分为3个等级,三个等级的酒店数量尽量保持一致。评分人数最多的为A,最少的为C。列名设置为“热门等级”。(9)选出评分人数为A,价格也为A的酒店数据,计算其平均评分。(10)取价格最高的5个酒店的数据,使用stack和unstack方法实现dataframe和Series之间的转换。(11)纵向拆分数据集,分为df1和df2,df1包含名字,类型,城市,地区,df2包含名字,地点,评分,评分人数,价格,价格等级,热门等级。(12)将df2按照价格进行排序,重新设置df2的索引。索引值等于价格排名。(13)使用merge方法将df1和df2合并。(14)将合并后的数据集保存数据到“酒店数据2.xlsx”。

数据重塑和轴向旋转 层次化索引

层次化索引可以使我们在一个轴上拥有多个索引

Series的层次化索引: s=pd.Series(np.arange(1,10),index=[['a','a','a','b','b','c','c','d','d'],[1,2,3,1,2,3,1,2,3]]) s a 1 1 2 2 3 3 b 1 4 2 5 c 3 6 1 7 d 2 8 3 9 dtype: int32 s.index MultiIndex([('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('c', 3), ('c', 1), ('d', 2), ('d', 3)], ) s['a'] 1 1 2 2 3 3 dtype: int32

切片操作:

s['a':'c'] a 1 1 2 2 3 3 b 1 4 2 5 c 3 6 1 7 dtype: int32 内层选取 s[:,1]#内层选取 a 1 b 4 c 7 dtype: int32 s['c',1] 7 通过unstack方法将series变成DataFrame s.unstack()

在这里插入图片描述

通过stack方法复原 s.unstack().stack()

在这里插入图片描述

DataFrame的层次化索引 设置行列索引 data=pd.DataFrame(np.arange(12).reshape(4,3),index=[['a','a','b','b'],[1,2,1,2]],columns=[['A','A','B'],['x','y','z']]) data

在这里插入图片描述

选取列 data['A']

在这里插入图片描述

data.columns.names=['col1','col2']#设置列索引名称 data.index.names=['row1','row2']#设置行索引名称 data

在这里插入图片描述

交换内外层索引 data.swaplevel('row1','row2')

在这里插入图片描述

尝试将电影数据处理成多层索引结构 df.index Int64Index([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ... 38152, 38153, 38154, 38155, 38156, 38157, 38158, 38159, 38160, 38161], dtype='int64', length=38162) 把产地和年代同时设为索引,产地为外层索引,年代为内层索引

set_index可以把列变为索引

df=df.set_index(['产地','年代']) df

在这里插入图片描述

reset_index将索引变成列

每个索引都是一个元组 df.index[0] ('美国', 1994)

获取所有的美国电影,因为产地已经成为索引,用.loc方法

df.loc['美国']

在这里插入图片描述

df=df.swaplevel('产地','年代') df

在这里插入图片描述 获取1994年的电影

df.loc[1994]

在这里插入图片描述

取消层次化索引

使用reset_index()函数

df=df.reset_index() df[:5]

在这里插入图片描述

数据旋转

行列转化:以前五部电影为例

data=df[:5] data

在这里插入图片描述 用.T操作可以使数据行列转换(类似于矩阵的转置)

data.T

在这里插入图片描述

dataframe可以使用stack和unstack,转化为层次化索引的series data.stack() 0 年代 1994 产地 美国 名字 肖申克的救赎 投票人数 692795 类型 剧情/犯罪 上映时间 1994-09-10 00:00:00 时长 142 评分 9.6 首映地点 多伦多电影节 1 年代 1957 产地 美国 名字 控方证人 投票人数 42995 类型 剧情/悬疑/犯罪 上映时间 1957-12-17 00:00:00 时长 116 评分 9.5 首映地点 美国 2 年代 1997 产地 意大利 名字 美丽人生 投票人数 327855 类型 剧情/喜剧/爱情 上映时间 1997-12-20 00:00:00 时长 116 评分 9.5 首映地点 意大利 3 年代 1994 产地 美国 名字 阿甘正传 投票人数 580897 类型 剧情/爱情 上映时间 1994-06-23 00:00:00 时长 142 评分 9.4 首映地点 洛杉矶首映 4 年代 1993 产地 中国大陆 名字 霸王别姬 投票人数 478523 类型 剧情/爱情/同性 上映时间 1993-01-01 00:00:00 时长 171 评分 9.4 首映地点 香港 dtype: object data.stack().unstack()

在这里插入图片描述

数据分组,分组运算

GroupBy技术:实现数据的分组,分组运算,作用类似于数据透视表

按照电影的产地进行分组 先定义一个分组变量group group=df.groupby(df['产地'])

查看类型:

type(group) pandas.core.groupby.generic.DataFrameGroupBy 可以计算分组后的各个统计量 计算平均值 group.mean()

在这里插入图片描述

求和 group.sum()

在这里插入图片描述

计算每年的平均评分 df['评分'].groupby(df['年代']).mean() 年代 1888 7.950000 1890 4.800000 1892 7.500000 1894 6.633333 1895 7.575000 ... 2013 6.375974 2014 6.249384 2015 6.121925 2016 5.834524 2018 6.935687 Name: 评分, Length: 127, dtype: float64

只会对数值变量进行分组运算!!!

df['年代']=df['年代'].astype('str') df.groupby(df['产地']).mean()

在这里插入图片描述 求中值

df.groupby(df['产地']).median()

在这里插入图片描述

传入多个分组变量 df.groupby([df['产地'],df['年代']]).mean()

在这里插入图片描述

获得每个地区,每一年的评分的均值 group=df['评分'].groupby([df['产地'],df['年代']]) means=group.mean() means

在这里插入图片描述

series通过unstack方法转化为DataFrame,没有数据会产生缺失值 means.unstack().T

在这里插入图片描述

离散化处理

在实际数据分析中,对某些数据我们往往并不关心数据的绝对取值,而只关心它所处的区间或等级。 比如可以把评分9分及以上的电影定义为A级,7—9分定义为B级等等

离散化也可以叫做分组,区间化,可以借助函数cut()实现

pd.cut()函数

pd.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)

参数解释:

x:需要离散化的对象,一般为数值,series,Dataframe对象 bins:分组的依据 right:左区间开闭情况 include_lowest:右区间开闭情况 labels:是否用标记替代分组取值 retbins:返回x对应的bins的列表 precision:设置精度

参考:pd.cut()参数详解

用评分等级将数据分组 labels=['E','D','C','B','A'] df['评分等级']=pd.cut(df['评分'],[0,3,5,7,9,10],labels=['E','D','C','B','A']) df

在这里插入图片描述

根据投票人数来刻画电影热门

同样可以根据投票人数来刻画电影热门,投票越多的热门程度越高

bins=np.percentile(df['投票人数'],[0,20,40,60,80,100]) df['热门程度']=pd.cut(df['投票人数'],bins,labels=['E','D','C','B','A']) df

在这里插入图片描述 关于np.percentile()函数看这里

离散化数据的应用: 找出大烂片!

大烂片:投票人数很多,但评分很低

df[(df['热门程度']=='A')&(df['评分等级']=='E')]

在这里插入图片描述

找出高分冷门电影! df[(df['热门程度']=='E')&(df['评分等级']=='A')]

在这里插入图片描述

数据保存 df.to_excel('movie_data3.xlsx') 合并数据集 1. append()方法

先把数据集拆分为多个,再进行合并

df_usa=df[df.产地=='美国'] df_china=df[df.产地=='中国大陆'] df_china.append(df_usa)

在这里插入图片描述

2. merge()方法

选6部热门电影

df1=df.loc[:5] df1

在这里插入图片描述

df2=df.loc[:5][['名字','产地']] df2['票房']=[123456,123545,486213,45684,1213546,15484] df2

在这里插入图片描述

df2=df2.sample(frac=1) df2

在这里插入图片描述

df2.index=range(len(df2)) df2

在这里插入图片描述

将df1和df2合并

pd.merge(df1,df2,on='名字')

在这里插入图片描述 因为两个集都存在产地,故合并后有两个产地信息

3. concat()方法

可将多个数据集进行批量合并

df1=df[:10] df2=df[100:110] df3=df[200:210] dff=pd.concat([df1,df2,df3])#axis默认为0,在行上进行修改,为1,在列上进行修改 dff

在这里插入图片描述 在这里插入图片描述

第五次课作业 (1)读取数据。读取之前作业保存的“酒店数据1.xlsx” df=pd.read_excel("酒店数据1.xlsx",index_col=0) df

在这里插入图片描述

(2)将“类型”和“名字”设置为层次化索引,并交换索引的位置。然后将层次化索引取消。 df=df.set_index(['类型','名字'])

在这里插入图片描述

df.swaplevel('类型','名字')

在这里插入图片描述

df=df.reset_index() df

在这里插入图片描述

(3)将数据集转置,获取转制后的index和columns。 df.T

在这里插入图片描述

df.T.index df.T.columns

在这里插入图片描述

(4)用Groupby方法来计算每个地区的评分人数的总和以及均值。 df['评分人数'].groupby(df['地区']).mean()

在这里插入图片描述

df['评分人数'].groupby(df['地区']).sum()

在这里插入图片描述

(5)用Grouby方法计算每个类型的平均价格,最高价和最低价。 df['价格'].groupby(df['类型']).mean()

在这里插入图片描述

df['价格'].groupby(df['类型']).min()

在这里插入图片描述

df['价格'].groupby(df['类型']).max()

在这里插入图片描述

(6)数据离散化,按照价格将酒店分为3个等级,0-500为C,500-1000为B,大于1000为A,列名设置为“价格等级”。 df['价格等级']=pd.cut(df['价格'],[0,500,1000,df['价格'].max()],labels=['C','B','A']) df

在这里插入图片描述

(7)获取评分均值最高和最低的地区的数据,分别使用append和concat方法将获取的两个数据集合并。 df['评分'].groupby(df['地区']).mean()

在这里插入图片描述

df_tm=df[df['地区']=='屯门'] df_kq=df[df['地区']=='葵青'] df_tm.append(df_kq)

在这里插入图片描述

df_tm=df[df['地区']=='屯门'] df_kq=df[df['地区']=='葵青'] dff=pd.concat([df_tm,df_kq]) dff (8)数据离散化,按照评分人数将酒店平均分为3个等级,三个等级的酒店数量尽量保持一致。评分人数最多的为A,最少的为C。列名设置为“热门等级”。 df['热门等级']=pd.cut(df['评分人数'],np.percentile(df['评分人数'],[0,33,66,100]),labels=['C','B','A']) df

在这里插入图片描述

(9)选出评分人数为A,价格也为A的酒店数据,计算其平均评分。 df[(df['热门等级']=='A')&(df['价格等级']=='A')]

在这里插入图片描述

df[(df['热门等级']=='A')&(df['价格等级']=='A')].mean()

在这里插入图片描述

(10)取价格最高的5个酒店的数据,使用stack和unstack方法实现dataframe和Series之间的转换。 df1=df.sort_values('价格',ascending=False)[:5] df1.stack()

在这里插入图片描述

df1.stack().unstack()

在这里插入图片描述

(11)纵向拆分数据集,分为df1和df2,df1包含名字,类型,城市,地区,df2包含名字,地点,评分,评分人数,价格,价格等级,热门等级。 df1=df.loc[:][['名字','类型','城市','地区']] df1

在这里插入图片描述

df2=df.loc[:][['名字','地点','评分','评分人数','价格','价格等级','热门等级']] df2

在这里插入图片描述

(12)将df2按照价格进行排序,重新设置df2的索引。索引值等于价格排名。 df2.sort_values('价格',ascending=False) df2.index=range(len(df2)) df2

在这里插入图片描述

(13)使用merge方法将df1和df2合并。 pd.merge(df1,df2,on='名字')

在这里插入图片描述

(14)将合并后的数据集保存数据到“酒店数据2.xlsx”。 df.to_excel('酒店数据22.xlsx')


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3