Python数据分析与应用-从数据获取到可视化(第2版)课件 第10章 实战演练-租房数据统计分析_第1页
Python数据分析与应用-从数据获取到可视化(第2版)课件 第10章 实战演练-租房数据统计分析_第2页
Python数据分析与应用-从数据获取到可视化(第2版)课件 第10章 实战演练-租房数据统计分析_第3页
Python数据分析与应用-从数据获取到可视化(第2版)课件 第10章 实战演练-租房数据统计分析_第4页
Python数据分析与应用-从数据获取到可视化(第2版)课件 第10章 实战演练-租房数据统计分析_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第10章实战演练——租房数据统计分析《Python数据分析与应用:从数据获取到可视化(第2版)》学习目标/Target

掌握Pandas读写功能,能够熟练地从文件中读取数据

掌握重复值的检测与处理方式,能够检测与删除重复值

掌握数据类型的转换方式,能够根据需要转换数据的类型

掌握Matplotlib的基本使用,能够绘制柱形图、折线图和饼图章节概述/Summary随着中国经济的快速发展,北京市的资源和就业机会吸引了很多外来人口,使北京市逐渐成为中国人口密集的城市之一。本章将以北京市某年的租房数据为例,运用前面章节所学知识完整呈现数据处理、分析及可视化的过程。目录/Contents01数据收集02数据处理03数据分析与展现数据收集10.110.1

数据收集目前网络上有很多的租房平台,比如自如、爱屋吉屋、房天下、链家等,其中链家是目前市场占有率最高的公司,给用户提供了可靠的房源信息。10.1

数据收集我们采集了链家网站发布的租房信息,并将数据保存在lianjia_houses.csv文件中。链家官网上并没有提供平谷、怀柔、密云、延庆等偏远地区的租房数据,所以本案例的分析不会涉及到这四个区。数据来源10.1

数据收集读取房源数据使用read_csv()函数从lianjia_houses.csv文件读取房源数据。importnumpyasnpimportpandasaspdfile_data=

pd.read_csv(r'C:\Users\itcast\Desktop\lianjia_houses.csv',

encoding='gbk')file_data.head()10.1

数据收集查看摘要信息使用info()方法查看file_data对象的摘要信息。file_()数据处理10.210.2.1

重复值检测与处理尽管租房数据整体是比较规整的,但或多或少会存在一些问题,不能直接用做数据分析。为此,在进行分析前我们需要对租房数据进行一系列的检测与处理,提高数据的质量。10.2.1

重复值检测与处理检测重复值如果希望知道租房数据中是否存在重复值,则可以通过duplicated()方法检测。使用duplicated()方法对租房数据进行检测,只要有重复值,就会把它所在行的值映射为True。dup_value=file_data.duplicated()file_data[dup_value==True]10.2.1

重复值检测与处理删除重复值使用drop_duplicates()方法删除租房数据中的重复值,并重置行索引。file_data=file_data.drop_duplicates(ignore_index=True)file_data10.2.2

数据类型转换在这套租房数据中,“面积(㎡)”一列的数据里面有中文字符“平米”,不能直接参与计算。为了方便后续对“面积(㎡)”一列的数据进行数学运算,我们需要将“面积(㎡)”一列数据的类型转换为数字类型。10.2.2

数据类型转换转换面积列数据的类型获取“面积(㎡)”一列的数据,将这列数据末尾的中文字符“平米”去掉,并通过astype()方法将去掉后的数据转换为float64类型。new_arr=np.array([])area_data=file_data['面积(㎡)'].valuesforiinarea_data:new_arr=np.append(new_arr,i[:-2])new_arr=new_arr.astype(np.float64)file_data.loc[:,'面积(㎡)']=new_arrfile_data.tail()10.2.2

数据类型转换“户型”一列数据显示的格式不是十分统一,大部分数据显示的是“*室*厅”“*室*卫”,个别数据显示的是“*房间*卫”。为了方便用户后期统计户型的数量,这里会将“房间”替换成“室”,以保证数据的一致性。10.2.2

数据类型转换统一户型列数据的格式获取“户型”一列的数据,遍历每个数据,使用replace()方法将数据的“房间”替换为“室”。housetype_data=file_data['户型']temp_list=[]foriinhousetype_data:new_info=i.replace('房间','室')temp_list.append(new_info)file_data.loc[:,'户型']=temp_listfile_data.tail()数据分析与展现10.310.3.1

房源数量分析实现思路如果希望统计北京市各区(平谷、怀柔、密云、延庆等偏远地区除外)在租房源的数量,则需要先将租房数据按照“区域”一列进行分组,再统计每个分组包含数据的总数量。10.3.1

房源数量分析创建保存数量的对象为了便于用户只查看跟“区域”与“数量”有关的数据,这里创建一个DataFrame对象

,通过该对象保存后面计算的各区的总数量。new_df=pd.DataFrame({'区域':file_data['区域'].unique(),

'数量':[0]*13})new_df此时数量一列的值都是010.3.1

房源数量分析按区域分组统计数量通过groupby()方法将file_data对象按照“区域”一列进行分组,使用count()方法统计每个分组包含数据的总数量,并将数量按照从大到小的顺序进行排列。#按“区域”列分组,并统计每个分组的数量groupy_area=file_data.groupby(by='区域').count()new_df['数量']=groupy_area.valuesnew_df=new_df.sort_values(by=['数量'],ascending=False)new_df10.3.1

房源数量分析绘制柱形图使用Matplotlib绘制一张柱形图,通过柱形图反映北京市各区在租房源的数量。importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']house_region=new_df['区域']house_count=new_df['数量']x=np.arange(house_region.values.size)bar_rect=plt.bar(x,house_count,

tick_label=house_region.values.tolist(),

width=0.5,color='lightcoral')...plt.show()10.3.2

户型数量分析实现思路如果希望统计北京市各种户型在租房源的数量,则需要先将租房数据按照“户型”一列进行分组,再统计每个分组包含数据的总数量。10.3.2

户型数量分析统计户型数量定义一个函数来计算各种户型房源的数量,获取“户型”一列的数据,并通过该函数得到户型以及该户型房源的数量。defall_house(arr):arr=np.array(arr)key=np.unique(arr)result={}forkinkey:mask=(arr==k)arr_new=arr[mask]v=arr_new.sizeresult[k]=vreturnresulthouse_array=file_data['户型']house_info=all_house(house_array)10.3.2

户型数量分析筛选户型由于个别户型的房源需求量比较少,所以这里可以筛选出数量大于50的房源。使用字典推导式将户型数量大于50的元素筛选出来,并将筛选后的结果转换成DataFrame类的对象。house_type=dict((key,value)forkey,valuein

house_info.items()ifvalue>50)show_houses=pd.DataFrame({'户型':[xforxinhouse_type.keys()],

'数量':[xforxinhouse_type.values()]})10.3.2

户型数量分析绘制条形图为了能够直观地看到不同户型之间的数量差异,这里可以使用条形图进行展示,其中条形图的纵轴坐标代表户型种类,横轴坐标代表数量。importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']house_type=show_houses['户型']house_type_num=show_houses['数量']y=np.arange(house_type.values.size)plt.barh(y,house_type_num,height=0.7,

color='darkcyan',alpha=0.8)

plt.yticks(y,house_type)...plt.show()10.3.3

房源平均租金分析实现思路这里说的平均租金是各区房租的总金额(按月计算)除以房屋的总面积。如果希望统计北京市各区在房源的平均租金,则需要先将“价格(元/月)”和“面积(㎡)”这两列数据分别按照“区域”一列进行分组,再统计每个分组包含房源的总数量。10.3.3

房源平均租金分析创建保存租金的对象创建一个DataFrame类的对象,该对象有“房租总金额”“总面积(㎡)”这两列,每列的初始值均为0。df_all=pd.DataFrame({'区域':file_data['区域'].unique(),

'房租总金额':[0]*13,'总面积(㎡)':[0]*13})df_all10.3.3

房源平均租金分析按区域分组统计总金额和总面积按照“区域”一列分别对“价格(元/月)”一列和“面积(㎡)”一列的数据进行分组,使用sum()方法计算每个分组的和,得到房租总金额和房屋总面积,之后将它们赋值给df_all对象的相应列。sum_price=file_data['价格(元/月)'].groupby(file_data['区域']).sum()sum_area=file_data['面积(㎡)'].groupby(file_data['区域']).sum()df_all['房租总金额']=sum_price.valuesdf_all['总面积(㎡)']=sum_area.valuesdf_all10.3.3

房源平均租金分析增加“每平米租金(元)”一列在df_all对象的基础上增加“每平米租金(元)”一列,用于保存计算的平均租金。df_all['每平米租金(元)']=round(df_all['房租总金额']/

df_all['总面积(㎡)'],2)df_all10.3.3

房源平均租金分析合并对象将之前创建的new_df对象与df_all对象进行合并,由于这两个对象中都包含“区域”一列,所以这里可以采用主键的方式进行合并。df_merge=pd.merge(new_df,df_all)df_merge10.3.3

房源平均租金分析绘制柱形图+折线图借用图表直观地展示各区房源的具体情况,其中房源数量可以用柱状图进行展示,平均租金可以用折线图进行展示。fig=plt.figure()ax1=fig.add_subplot(111)ax1.plot(l,price,marker='o',ms=5,color='r',label='价格')fori,(_x,_y)inenumerate(zip(l,price)):plt.text(_x,_y,price[i],color='black',fontsize=10)ax2=ax1.twinx()ax2.bar(l,num,alpha=0.3,color='green',label='数量')10.3.4

房源面积区间分析实现思路如果希望了解各面积区间的占比情况,则需要先获取租房数据中的最大面积和最小面积,根据具体情况划分几个面积分组,再统计每个分组的数量,之后使用饼图展示各面积区间的占比情况。10.3.4

房源面积区间分析计算最大面积和最小面积使用max()与min()方法分别计算出房屋面积的最大值和最小值。print('房屋最大面积是%d平米'%(file_data['面积(㎡)'].max()))print('房屋最小面积是%d平米'%(file_data['面积(㎡)'].min()))10.3.4

房源面积区间分析划分面积区间我们参照链家官网的面积区间将房屋面积划分为8个区间,使用describe()方法描述各个区间出现的次数(counts)以及频率(

温馨提示

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

评论

0/150

提交评论