Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

实验背景

房价是中国老百姓最关注的话题,中国丈母娘10大择婿标准排首位的就是有房,其次是有车有存款

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

和大家一起撸一撸中国各个城市的房价情况。要结婚的亲们看过来

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

实验器材Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

●python

● AR

● LSTM

● 房价网

● scrapy

● pyecharts

● Manner-Kendall(M-K)非参数检验法

 

实验内容

数据获取

本实验用于分析的数据来自于房价网(https://sz.fangjia.com/zoushi),房价网的房价均值走势数据并没有对外公开,每个城市只提供图片形式的下载。

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

通过观察客户端的请求信息,可以通过url

https://sz.fangjia.com/trend/yearData?defaultCityName=深圳&districtName=&region=&block=&keyword=

请求服务端,获取返回的json数据即可。

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

 

还有一个问题,我们要获取全国的各城市的数据,可以看出不同城市,上面的url前缀是不一样的,比如深圳是

【sz.fangjia.com】,厦门是【xm.fangjia.com】

在页面上找到这个,通过分析html代码,城市和城市的url都在div里。

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

 

好了,我们来总结一下我们要获取历史房价的步骤:

  1. 从页面抓取城市和城市的url
  2. 通过不同的城市url请求历史房价的json数据

 

本实验采用流行的爬虫框架scrapy来获取数据。scrapy简单例子可参见wedo创客实验以往文章:

简要代码如下

  • 获取城市的url,存入本地文件里
class FjSpider(scrapy.Spider):
 name = 'fjspider'
 allowed_domains = ['gz.fangjia.com']
 start_urls = []
 start_urls.append("http://gz.fangjia.com/zoushi?cityName=广州&__s=1&keyword=")
 def parse(self, response):
 items = []
 headings = response.xpath('//*[@id="moreCity"]')
 for content in headings:
 for i in range(0, 23):
 print(i)
 cnname = content.xpath('./div['+str(i)
 +']/a//text()').extract()
 enname = content.xpath('./div['+str(i)
 +']/a/@name').extract()
 url = content.xpath('./div[' + str(i)
 + ']/a/@href').extract()
 for j in range(len(cnname)):
 item = HeadingItem()
 item['cnname'] = cnname[j]
 item['enname'] = enname[j]
 item['url'] = url[j]
 items.append(item)
 return items

 

  • 请求历史房价信息,由于房价网会对过于集中频繁请求的情况做限制,增加验证码输入。所以需要分多次下载,代码中存储了哪些城市已经下载,同时增加了每个城市下载的间隔时间,避免出现需要输入验证码的情况。
class FjSpider2(scrapy.Spider):
 name = 'fjspider2'
 allowed_domains = []
 start_urls = []
 city = []
 base_dir = os.getcwd()
 # check if download
 num = 0
 is_download = {}
 download_file = base_dir + '/download.txt'
 with open(download_file, "r") as f:
 for line in f:
 is_download[line] = 1
 num = num + 1
 filename = base_dir + '/fjspider.txt'
 index = 0
 with open(filename, "r") as f:
 for line in f:
 if not line in is_download:
 info = line.split("|")
 http = info[2].replace("/zoushi", "")
 .replace("
", "")
 url = http+"/trend/year2Data?defaultCityName="
+info[0]+"&districtName=&region=&block=&keyword="
 start_urls.append(url)
 city.append(info[0])
 with open(download_file, 'a') as ff:
 ff.write("%s" % (line))
 index = index + 1
 if index > num + 50:
 break
 def parse(self, response):
 items = []
 values = json.loads(response.body_as_unicode())
 city = values['series'][0]['name']
 array = values['series'][0]['data']
 for i in range(len(array)):
 item = HeadingItem()
 item['time'] = int(array[i][0]/1000)
 item['value'] = array[i][1]
 item['city'] = city
 items.append(item)
 return items

好了,让我们看看下载的数据(为了需要我们加了省份信息)

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

 

数据信息为:

  • 数据为周粒度的
  • 数据周期为最近两年
  • 房价取的整个城市的房价均价

 

房价数据分析

1

当前房价分布分析

我们获取的房价数据为时间序列的数据,为了反映当前房价情况。我们选取每个城市最近的时间的房价(由于各个城市最近的房价采集点并不一样)为代表当前房价。

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

思路:

  • 先获取每个城市的最近时间点
  • 再获取最近时间点的房价

结论:

  • 最高房价: 56944
  • 最低房价:2437
  • 75%城市的房价在7520下面

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

房价前十(囊括北上广深),福建有2个,多为沿海城市

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 


 
  • 房价倒十: 集中在新疆和黑龙江

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  
  • 房价全国分布,高房价都集中沿海地带

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  • 单价1万以上房价分布,广东和浙江最多,其他为省会城市;福建有三个:福州,厦门,漳州

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

 

  • 单价在2万以上的城市分布,福建有两个,广东有三个

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

2

房价趋势分析

对于房价,我们更希望能知道未来房价的走势和机会点。

本实验采用 Manner-Kendall(M-K)非参数检验法来检测房价的上升和下降趋势。本实验判断趋势的数据不采用最近两年的数据,只采用最近6个月的数据

  • MK检测法说明:

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  • python实现
import math
import numpy as np
def mk_test(x):
 s=0
 length=len(x)
 for m in range(0,length-1):
 for n in range(m+1,length):
 if x[n]>x[m]:
 s=s+1
 elif x[n]==x[m]:
 s=s+0
 else:
 s=s-1
 #计算vars
 vars=length*(length-1)*(2*length+5)/18
 #计算zc
 if s>0:
 zc=(s-1)/math.sqrt(vars)
 elif s==0:
 zc=0
 else:
 zc=(s+1)/math.sqrt(vars)
 #计算za
 zc1=abs(zc)
 #计算倾斜度
 ndash=int(length*(length-1)/2)
 slope1=np.zeros(ndash)
 m=0
 for k in range(0,length-1):
 for j in range(k+1,length):
 slope1[m]=(x[j]-x[k])/(j-k)
 m=m+1
 slope=np.median(slope1)
 return (slope,zc1)
  • 结论1:房价较高的城市有下降趋势的

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

下降的城市并不是很多,而且下降趋势并不是很明显

  • 结论2:房价较高的城市有上降趋势的

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  • 结论3:房价较低的城市有上降趋势的

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  

虽然有在增长,但可以看出增长的幅度不大

3

房价简单预测

这里我们用AR(自回归模型)和LSTM做下简单的房价预测,都采用tensorflow里模块。预测未来12周(3个月)

  • 厦门
  • AR

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  
  • LSTM

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  
  • 预测价格保持平稳均价在4.8万
  • 金华lstm

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  
  • 预测价格保持增长,均价将达到1.8万
  • 深圳lstm

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  
  • 预测效果好像不好
  • 漳州

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  
  • 预测价格保持平稳均价在1.2万
  • 泉州lstm

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  
  • 预测价格小幅下降均价在0.88万
  • 莆田lstm

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  
  • 预测价格保持平稳均价在0.96万
  • 西安 lstm

Python分析房价,你很好奇哪里的房价最贵?然而我哪里都买不起!-LMLPHP

 

  •  
  • 预测价格保持增长,均价将突破1万

实验结语

本实验和大家一个分析了中国房价的现状。简单做下总结

  • 75%的城市房价在7500 一下, 1万以上城市42个(12%),2万以上的城市有11个(3%),福建,广东比例最多。
  • 19个城市有叫小幅度的下降,厦门,深圳高房价的城市在列
  • 51个城市有一定程度的上升
  • MK趋势分析检测,值在30以上的上升趋势明显,值在-20以下的下降趋势明显
  • lstm效果好于AR
10-07 13:51