数据分析学习之路——(二)链家网部分城市新开楼盘分析

2023-12-30 21:40

本文主要是介绍数据分析学习之路——(二)链家网部分城市新开楼盘分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        近一个月一直在Udacity学习数据分析课程,因此很久没有更新博客。我根据自己的学习安排,已经完成提交了项目一——对Stroop现象用数理统计方法进行假设检验并得出结论。这次来分析一下链家网公开的部分城市新楼盘数据(2017.07获取的数据),主要对城市楼盘数量、价格进行分析。

数据读取

        为了操作方便,我从网上爬取的数据保存为csv格式,因此直接用pandas库的read_csv方法可以直接读取并赋值给DataFrame数据类型的变量。

data = pd.read_csv('C:/Users/Nekyo/HJQ/document/pyfile/lianjiaData1.csv')

数据预处理

        将爬取的数据我用excel打开,主要信息如下图。由于数据源的原因,获取的数据比较乱,处理起来需要兼顾很多东西。例如:建筑面积这一栏,有的是空数据,有的是固定一个值,有的是一个范围,有的城市是按照建筑面积算,有的城市是按照套内面积算;还有如均价一栏,大多是按照“元/平”来算,部分也按照“万/套”来算,另外也有空数据;地址这一栏数据比较统一,“-”符号将地址分割为城市下面的区县和楼盘具体的地址;居室这一栏由于数据太散乱意义不大,没有使用。因此我主要给出各城市,以及城市下面的区县新楼盘面积和均价的分析情况。

         202852_uYxQ_3642529.png

 在分析过程中,为了统一我都把建筑面积按照套内面积来算;将特殊数据,如空值、价格待定等数据去除。

data = data.drop_duplicates(keep='first')  #去除重复数据,保留重复数据的第一行数据
data = data.reset_index()[['城市','地址','居室','建筑面积','均价']] #由于删去了部分数据,重置索引
data['居室'] = data['居室'].str.split('-',1)
data['建筑面积'] = data['建筑面积'].str.replace('建面','').str.replace('套内','').str.strip().fillna('0') #全部统一为同一单位的面积
data['均价'] = data['均价'].str.strip().str.replace('价格待定','').str.strip().fillna('0') #去除均价垃圾数据

数据处理

        经过以上步骤,我们将数据稍微规整了一下,但是数据格式仍然不统一,因此需要细化处理:1、地址一栏只保留“-”符号前面的区县;2、建筑面积一栏,去除空数据后,如果是一个面积范围则取平均值;3、均价一栏由于是两种维度的数据,因此通过正则匹配方式查找并只筛选出单位为“元/平”的数据。

addr=[]
area=[]
roomnum=[]
price=[]
pattern0=re.compile('万/套')
pattern=re.compile('<span class="num">(.*?)</span>')  #通过正则匹配均价的数值,需引入re库
llen = len(data)
for i in range(llen):addpos = data['地址'][i].find('-')addr.append(data['地址'][i][:addpos])areapos1 = data['建筑面积'][i].find('~')  #"~"所在的位置,如果找不到则返回-1
    areapos2 = data['建筑面积'][i].find('m')  #"m"所在的位置,如果找不到则返回-1
    if areapos2!=-1:if areapos1!=-1:area1=data['建筑面积'][i][:areapos1]area2=data['建筑面积'][i][areapos1+1:areapos2]areaavg = (float(area1)+float(area2))/2area.append(areaavg)else:area1=data['建筑面积'][i][:areapos2]areaavg=float(area1)area.append(areaavg)else:area.append(0.0) roomnum.append(data['居室'][i][0].strip())prices0 = re.findall(pattern0, data['均价'][i])prices = re.findall(pattern,data['均价'][i])if prices:if prices0:price.append(0.0)   # 因为有部分是按照 万/套来计算房价的,因此之后会清理掉       else:price.append(float(prices[0]))else:price.append(0.0)

将处理后的数据和原数据框拼接,这样就得到了比较统一规整的数据。

data['区县']=Series(addr)
data['房屋面积']=Series(area)
data['房间数']=Series(roomnum)
data['房价']=Series(price)
newdata = data[data['房价']>0][['城市','区县','房屋面积','房价']] 
newdata = newdata[newdata['房屋面积']>0][['城市','区县','房屋面积','房价']]

结果如下

               202212_vMPL_3642529.png

数据分析过程

 先来看看简单的统计描述,只截取了北京大连两个城市的数据供参考。

newdata.groupby('城市').describe()

              203438_8Rl2_3642529.png

各城市的新开楼盘信息(平均值),用条形图来展示

newdata.groupby('城市')[['房屋面积','房价']].mean()

              203943_EXrZ_3642529.png

data1=newdata.groupby('城市')[['房屋面积','房价']].mean()
mpl.rcParams["font.sans-serif"] = ["Microsoft YaHei"]
mpl.rcParams['axes.unicode_minus'] = False
fig = plt.figure(figsize=(10,5))  # 设置绘图区域大小及子图
ax1 = fig.add_subplot(121)
ax1.set_xlabel('城市')
ax1.set_ylabel('房屋面积(㎡)')
ax1.set_title("城市新楼盘平均面积比较")
data1['房屋面积'].plot(kind='bar')
ax2 = fig.add_subplot(122)
ax2.set_xlabel('城市')
ax2.set_ylabel('房价(元/平)')
ax2.set_title("城市新楼盘平均房价比较")
data1['房价'].plot(kind='bar')
plt.rcParams['font.sans-serif'] = ['SimHei']  # matplotlib画图坐标轴中文字体设置
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.show()

        214411_3Aj7_3642529.png

        从房价均价图可以看出,各城市的房价水平会比真实情况略高,这可能是楼盘信息挂在网络平台导致的虚高,但是各城市的分布对比是能够和现实情况对上的。

下面再从每个城市下辖的区县维度展示云图效果,需要安装使用wordcloud库。

toawnavgarea={}   #按区县楼盘面积
toawnavgprice={}  #按区县楼盘均价
toawncounts={}    #按区县楼盘数量toawn_avg = newdata.groupby('区县').apply(lambda x:x.mean()).reset_index()   # 使用匿名函数计算平均值
toawn_counts = newdata.groupby('区县')['城市'].apply(lambda x:x.count()).reset_index()
for i in range(len(toawn_avg)):toawnavgarea[toawn_avg.ix[i]['区县'].decode('utf-8')] = float(toawn_avg.ix[i]['房屋面积'])toawnavgprice[toawn_avg.ix[i]['区县'].decode('utf-8')] = float(toawn_avg.ix[i]['房价'])
for j in range(len(toawn_counts)):toawncounts[toawn_counts.ix[j]['区县'].decode('utf-8')] = float(toawn_counts.ix[j]['城市'])
wordcloud=WordCloud(font_path='C:/Users/Nekyo/tools/SOFTWARE/Anaconda2/Library/lib/fonts/songti.ttf', width=1000,height=600,background_color='white')        # 云图使用的汉字字体,自带的字体库没有需要下载
f=plt.figure(figsize=(10,5))
ax1 = f.add_subplot(121)
wordcloud.fit_words(toawncounts)
axs1=plt.imshow(wordcloud)
ax1.set_title("2017年7月区县新楼盘数量云图")
plt.axis('off')  # 不显示坐标轴
ax2 = f.add_subplot(122)
wordcloud.fit_words(toawnavgprice)
axs2=plt.imshow(wordcloud)
ax2.set_title("2017年7月区县新楼盘均价云图")
plt.axis('off')
plt.show()

      220027_Vthi_3642529.png

        可以看到,成都高新区、大连甘井子区、广州顺德等地新开楼盘数量居前列;平均房价较高的几个地区:东城、西城、朝阳、海淀等,都在北京!!再仔细看一下我们才会看到位于深圳的福田、南山和罗湖区房价也紧随其后,由此我们有理由感慨:北京的房价是真高啊!!深圳也不差!

最后将数据大幅度调整一下,把每个城市的房价数据拿出来构造一个新的DataFrame,由于每个城市数据量不一样,因此数据量较少的城市在构造过程中会产生空值(NaN表示),不过对分析过程无影响。

newdata_bj = newdata[['房价','城市']][newdata['城市']=='北京'].reset_index()
newdata_cq = newdata[['房价','城市']][newdata['城市']=='重庆'].reset_index()
newdata_cd = newdata[['房价','城市']][newdata['城市']=='成都'].reset_index()
newdata_sh = newdata[['房价','城市']][newdata['城市']=='上海'].reset_index()
newdata_hz = newdata[['房价','城市']][newdata['城市']=='杭州'].reset_index()
newdata_gz = newdata[['房价','城市']][newdata['城市']=='广州'].reset_index()
newdata_sz = newdata[['房价','城市']][newdata['城市']=='深圳'].reset_index()
newdata_dl = newdata[['房价','城市']][newdata['城市']=='大连'].reset_index()
newdata_wh = newdata[['房价','城市']][newdata['城市']=='武汉'].reset_index()
newdata_xa = newdata[['房价','城市']][newdata['城市']=='西安'].reset_index()
newdata_cs = newdata[['房价','城市']][newdata['城市']=='长沙'].reset_index()
data_bycity = pd.concat([newdata_bj,newdata_cd,newdata_cq,newdata_hz,newdata_gz,newdata_sz,newdata_dl,newdata_wh,newdata_xa,newdata_cs],axis=1)  # concat拼接函数
data_bycity = data_bycity.drop(['index','城市'],axis=1)  # 去掉索引
data_bycity.columns=['北京','成都','重庆','杭州','广州','深圳','大连','武汉','西安','长沙']  # 设置列名

新构造的数据集

          222037_kIjn_3642529.png

用箱线图对比展示各城市的房价

           222451_U3Qk_3642529.png

        很明显,无论是从中位数还是最大值来看,北京的房价一骑绝尘,深圳紧随其后;再根据四分位距的对比情况,北京深圳也令其它城市难以望其项背,两个城市的房价分布比较分散,会大概率出现某一楼盘开出特别高的房价,也会大概率出现某一楼盘开出相对城市均价来说比较低的房价。

再找一个城市分析其下辖区域的情况,以成都市为例

datacd=newdata[newdata['城市']=='成都']
datacd=datacd.groupby('区县')[['房屋面积','房价']].mean()
fig = plt.figure(figsize=(10,5))  # 设置绘图区域大小及子图
ax1 = fig.add_subplot(121)
ax1.set_xlabel('成都市各区县')
ax1.set_ylabel('房屋面积(㎡)')
ax1.set_title("2017年7月成都市各区县新楼盘平均面积比较")
datacd['房屋面积'].plot(kind='bar')
ax2 = fig.add_subplot(122)
ax2.set_xlabel('城市')
ax2.set_ylabel('房价(元/平)')
ax2.set_title("2017年7月成都市各区县新楼盘平均房价比较")
datacd['房价'].plot(kind='bar')
plt.show()

    224005_Ae5u_3642529.png

        可以看到,新津、高新西区、天府三个区域新建楼盘面积居前列;房价比较高的区域都在诸如高新、青羊、锦江这样的热门市区,而且均价居然都达到了2w,而像蒲江、仁寿、彭州这样离市区稍远的县连5k都不到,跟省内一个地级市房价差不多,放在全国来看,甚至不如一个发达地区的县城的房价。

总结

        由于数据源的因素,本次分析可能会与现实情况略有出入,但是大致方向,大致比较分布是没有问题的,也通过这些数据和图形展示对自己感兴趣的城市房价有了一个直观印象。由于是第一次通过博文展示,因此为了加深自己的理解,尽可能的描述了很多细节,显得比较啰嗦,之后的分析案例会尽量简洁,不会每个步骤每段代码都进行说明。

转载于:https://my.oschina.net/nekyo/blog/1538823

这篇关于数据分析学习之路——(二)链家网部分城市新开楼盘分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/554088

相关文章

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性