Python中有很多方法计算相关性,scipy中有自带的分析工具,pandas里也有非常方便的多变量相关性分析工具。我们今天就以计算一线城市二手房价相关性为例,讲讲这两个工具的用法。
1.数据收集
本文北上广深的数据采集自东方财富网,以二手房价格指数为例:
https://data.eastmoney.com/cjsj/newhouse.html
数据从2011年1月1日开始,每个数据点是当时一个月的价格指数,采集方法是用开发者工具找到请求发回来的JSON数据,方法如下:
数据如下(2011/1/1-2019/10/1),数据量过大,略去部分,详见下方阅读原文:
# 北京:bj =[100.3,100.4,99.9,....,99.5,99.4]
1.# 广州:
2. gz =[101.2,100.6,99.5,....,99.7,99.9]
1.# 上海: 2. sh =[100.5,100.4,100.4,....,100.6,99.8]
# 深圳:sz =[100.6,102.6,100.6,....,101.3,101]
2.准备工作
首先,你要确保你的电脑安装了Python,如果没有可以看这篇文章:Python超详细安装指南。
然后,打开CMD(开始-运行-cmd),或者Terminal(macOS) 输入以下指令安装scipy和pandas.
pip install scipypip install pandas
3.编写代码
3.1 scipy计算相关性
scipy计算相关性其实非常简单,引入包的stats模块:
import scipy.stats as stats
然后调用函数进行计算:
# 计算广州和深圳二手房价格指数相关性print(stats.pearsonr(gz, sz))
结果如下:
F:\push\20191130>python 1.py(0.4673289851643741,4.4100775485723706e-07)
什么?!!广州和深圳的二手房价格指数相关性竟然才0.46?那其他一线城市和深圳对比呢?
不过,stats麻烦的地方就在于,它一次只能对比两个值,不能一次性两两对比四个一线城市,不过,有个模块可以——那就是pandas。
3.2 pandas一次性两两对比计算相关性
首先引入pandas:
import pandas as pd
创建DataFrame存放四个数据:
df = pd.DataFrame()df['北京'] = bjdf['上海'] = shdf['广州'] = gzdf['深圳'] = sz
最后相关性计算:
print(df.corr())
来看看结果:
wow,看来深圳的二手房价还真是与众不同,不过从下面这个图看,确实,深圳的二手房价格和北京的二手房价格已经出现了背离的情况。
个人认为,这个背离和最近的一系列政策及香港局势有关,但当前严峻的金融形势下,不会持续太久。
如果你喜欢今天的Python 教程,请持续关注Python实用宝典
Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典