毕业刚工作没几个月,就有朋友建议我去买房。作为一个数据狗,对于这种比较大项的支出还是比较慎重的,所以我需要知道:(1)文山的平均房价是多少?(2)该在哪买房?。
为了分析文山市房价的基本情况,作者利用网络爬虫抓取了安居客、房天下和58同城这几个网站上房价的数据,运用统计相关知识来解答作者的疑虑。
前段时间和几个朋友讨论过关于买房的问题,主要讨论的就是该不该买、买不买得起和去哪买得问题。于是就产生了一个想法,分析一下作者工作城市的房价情况。
信息时代,只需要我们轻轻点击手机,就可以了解到与生活息息相关的信息。近几年,出现了很多平台方便用户发布和获取房产信息,通过查看站长之家其中比较具有代表性的是安居客、房天下和58同城。
在此次分析中,作者选择安居客、房天下和58同城的数据作为数据源。
分析过程中涉及到的技术主要包括:
- Python:数据分析领域的热门语言,主要完成网络爬虫功能抓取数据,以及数据清洗、转换等
- Excel:微软公司的代表性产品,数据分析中不可或缺的工具
- Tableau:数据可视化领域排名第一的产品,互联网独角兽公司的核心产品,用于数据探索
- Echarts:百度公司在数据可视化领域的开源项目,广泛用于各类数据平台
- 百度地图坐标抓取API:用于地址和坐标之间的相互转换
- 其他:正则表达式
技术只是手段,解决问题不同的人有不同的方式。不拘泥与技术的实现,解决问题才是关键!
分析的思路是比较简单,首先利用网络爬虫抓取58同城、安居客和城市房价网的相关数据,然后对数据进行清洗的转换,得到我们所需要的数据。最后选择适合的可视化方式对数据进行处理,对分析的结果进行直观的展示。
利用Python(urllib2、Beautiful)抓取网站的相应数据。核心代码如下:
import urllib2
import pandas as pd
from bs4 import BeautifulSoup
# 利用urllib2获取网页源码
def getSoup(url):
request = urllib2.Request(url)
reponse = urllib2.urlopen(request)
contents = reponse.read()
soup = BeautifulSoup(contents,from_encoding="utf-8")
return soup
#用BeautifulSoup解析数据
def getData(url):
#调用getSoup函数获取网页源码
soup = getSoup(url)
fangjia_row = []
for tag in soup.find('table',class_='tbimg').find_all('tr'):
Td_list = tag.find_all('td')
Title = Td_list[1].a.get_text()
Address = Td_list[1].find('div',class_='qj-listleft').a.next_sibling
Address = re.sub(r'\s','',Address)
DetailInfo = Td_list[1].find('div',class_='qj-listright').get_text()
DetailInfo = re.sub(r'\s','',DetailInfo)
fangjia_info = [Title,Address,DetailInfo]
fangjia_row.append(fangjia_info)
return ershoufang_row
if __name__ == '__main__':
datalist = []
#网站URL
url = 'XXXXXX'
datalist.extend(getData(url))
fangjia = pd.DataFrame(datalist)
#将数据写入csv文件中
fangjia.to_csv('data/fangjiadata.csv',encoding='utf-8')
这个过程就比较简单了,主要是用Excel对抓取下来的数据进行处理。主要涉及到的字符串提取的几个函数:
LEFT(text,num_chars)
RIGHT(text,num_chars)
第一个参数text,是文本,是你想要在那提取东西的文本,可以是一个字符串,或是一个单元格。第二个参数chars是想要提取的个数。
MID(text,start_num,num_chars)
第一个参数也是text,它的属性与前面两个是一样的。第二个参数,star_num,也就是要提取的开始字符,第三个参数num_chars是要提取的个数。
通过上面的两步,得到关于房价的相关数据。比较关键的一步是通过百度地图API将楼盘名转换为经纬度,得到了我们最终可视化需要的数据。
#获取文山市建设家园的经纬度
baiduAPI_url = 'http://api.map.baidu.com/geocoder/v2/?address=建设家园&city=文山市&output=json&pois=1&ak=“注:这里需要申请自己的百度开发者”'
楼盘 | 均价 (元/平米) | 经度 | 纬度 |
---|---|---|---|
建设家园 | 5778 | 23.38751484 | 104.228124 |
桂名园 | 5552 | 23.39578995 | 104.2380282 |
金家园小区 | 5332 | 23.38297917 | 104.2370217 |
盘龙苑 | 5073 | 23.35158038 | 104.2675461 |
… | … | … | … |
本文的的分析结果基于85个小区的平均房价和经纬度。
图示为文山房价最高的10个小区,最贵的小区盘龙谷的房价只需要7000元/平米,均价超过5000元/平米也仅有8个。可以看出文山的房价相对于其他的地级市还是相对比较低的。
从频率直方图可以看出,文山市的房价主要集中在3000-4500元/平米之间。也验证了朋友和我说的文山的房价差不多就3000元/平米。
文山市是一个依河所建的城市,住房主要集中在盘龙河的两侧,整体成条形。
简单说一下我的情况,16年7月份毕业,工资税后7000,公司供吃供住,每个月花销在2000左右。工作的这个小城市,房价在3000伤心,对于一个刚毕业的小孩来说,没太多的地方花钱,存起来也是折价,所以说买个房也算是一个比较不错的投资。