深圳二手房房源市场研究(上)

PartⅠ:数据获取和数据清洗

写在前面

很早就有写博客的想法,一直对自己不自信所以没敢尝试,每次看其他大神的博客都很羡慕和崇拜,希望自己在未来的某一天也能给其他人给予一些力所能及的帮助。目前的我还是个小小小小白,很多东西都只懂些皮毛,这是我的第一篇博客,分享一下我在学校的一篇期末论文(轻点喷呜呜呜...
如果有疑问或者分享,欢迎私信我或者留言啊!一起进步吧!请各位大神多多指教啦~

研究背景

随着近年来经济的飞速发展,北上广深这四大都市全方位均有突出的表现,工作机会多,生活质量高,发展前景可观。但是要在这些城市定居不是一件容易的事,所以二手房便成为了大部分来大城市打拼人们的选择。通过Python爬取房天下网站中深圳十个区的的房源相关信息,对爬取的数据集进行清洗,并对各维度的数据进行可视化,探索深圳二手房的整体情况,分析房价的影响因素,最终得出深圳购买二手房的策略和方向。

数据获取

本研究选择了房天下网站(http://sz.esf.fang,com/)作为爬取对象,爬取步骤大概分成了四步,分别是:首先是指定网站的url,然后发起get请求,其次是通过利用xpath语句进行相关信息点的定位并获取数据,最后把数据保存到本地。

爬取页面

深圳一共十个地区,每个区每页房源为100 个,每个房源爬取三个数据,即每页大约为300个数据。每个地区爬取10页,且开5个线程同时爬取以提高爬取效率。(另外一篇博客再来讲讲线程哈哈哈)由于该网页是通过异步加载的,所以在爬取时选用selenium模拟浏览器登陆网站。【友情提示:房天下网站在爬取一定的数据量后会需要输入验证码,所以可能爬取过程会有点麻烦,建议换个网站或者爬取数据量不要太多(俺的能力还不能解决验证码/(ㄒoㄒ)/~~)】

数据清洗

爬取后总共获得了11416条房源数据。首先对其进行重复值检查:

数据集中的重复值
#导入数据
data = pd.read_csv(r"C:\\Users\\Administrator\\OneDrive\\桌面\\数据清洗\\深圳二手房数据.csv")
#data.head()
#取前5列有效数据进行分析
data = pd.DataFrame(data.loc[:,['区名','地址','基本信息','总价','单价']])
#重复值检查
data = data.drop_duplicates()#清除重复值

通过Python代码删除重复值,删除掉了394行重复值,得到一个11021行5列的新数据。
然后进行缺失值检查:

数据集中的缺失值
#缺失值检查
data.isnull().any()#有4列存在缺失值
#清除上述4列含缺失值的行
newdata = data.dropna(subset=['基本信息','地址','总价','单价'])
newdata.shape
#再次进行缺失值检查
newdata.isnull().any()#无缺失值

通过删除缺失值,删除掉了10列含有缺失值的行,得到一个11011行5列的新数据。
通过上述重复值和缺失值处理,新数据需要更新一下索引,否则后面进一步处理数据时会因为上述对部分数据进行删除后索引缺失而报错,对新数据进行更新索引。其中,在基本信息列中,因为原网站保存数据的缘故,存在多条信息整合在一起的情况,并且用|号分开,所以需要对其进行分列操作。

数据集未分列
#对新数据进行更新索引(否则后面处理会因为上面对部分数据删除后索引缺失而报错)
newdata.reset_index(inplace=True)
#把基本信息列分成下面5列
for i in range(len(newdata['基本信息'])):
    s=newdata['基本信息'][i]
    lis_s=s.split("|")
    fenlie("楼层",0)
    fenlie("建楼时间",1)
    fenlie("布局",2)
    fenlie("面积",3)
    fenlie("朝向",4)
#查看分列后存在空值的数据
newdata[newdata.T.isnull().any()]
#把原始基本信息数据列剔除
newdata = newdata.drop(columns=['基本信息'])
#把新数据中存在缺失值的行进行删除
newdata1 = newdata.dropna(subset=['面积','朝向'])
#查看数据类型
newdata1.dtypes

通过Python的split函数把基本信息分成五列。然而,经过分列后的数据会存在有空值的情况,同样利用Python代码去除掉含有空值的行,删除掉了318行,得到一个10693行10列的新数据。
通过查看数据类型,得知二手房的面积、单价、布局、建楼时间均为object,可以通过replace函数对其进行清洗工作,让其成为数字float,方便下面的可视化分析。

分列后的数据集

同时,对二手房的楼层进行简化处理,分为低楼层、中楼层和高楼层三个等级。对于二手房的朝向会存在多个朝向的情况,在分析时会引起歧义,所以本文只选取了每个房源朝向的第一个值来作为研究对象,其余进行删除。

有歧义的部分
#对部分数据列进行清洗工作(去除掉多余字符并将其转成float方便下面对其进行分析)
newdata1['面积'] = newdata1['面积'].map(lambda x: x.replace('平米\n','')).astype('float')
newdata1['单价'] = newdata1['单价'].map(lambda x: x.replace('元/平米',''))
newdata1['单价'] = newdata1['单价'].map(lambda x: x.replace('单价','')).astype('float')
newdata1['布局'] = newdata1['布局'].map(lambda x: x.replace('\n',''))
newdata1['建楼时间'] = newdata1['建楼时间'].map(lambda x: x.replace('年建','')).astype('float')
#对楼层进行简化处理(分低、中、高三个等级)
def floor(f):
    if f is not None:
        f = str(f)[:3]
    return f
#floor = {'低楼层': '低','中楼层': '中','高楼层': '高'}
newdata1['楼层'] = newdata1['楼层'].map(floor)
#对朝向列每行进行只取第一个值操作,大部分数据有多个朝向分析时会引起歧义
def fangxiang(fx):
    if fx is not None:
        fx = str(fx)[:3]
    return fx
newdata1['朝向'] = newdata1['朝向'].map(fangxiang)

通过上述清洗处理后的数据集大致如下:

清洗后的数据

最后对数据集进行异常值检查,通过Python软件中的describe函数对数据集进行描述性分析,发现存在最高的二手房单价为每平方米20 多万,证明存在异常值。

存在异常值

利用箱线图进一步分析,二手房最小面积为14平米,最大面积为754.05平米,最便宜的25万,最贵的8000 万;面积大概集中在63-113平米,价格大概集中在319-730万,本文将总价和面积高于上限的当作异常值进行删除处理,考虑大多数人可购买的情况,并把单价与建楼时间过久远等不符合客观事实的删除。

数据集箱线图

(代码和数据集我就不放了~有兴趣的小伙伴可以私信我哈哈哈)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容