预测今后的北京高考人数
2017-06-23 09:36
148 查看
# coding: utf-8 # 作者:Wizard <github.com/wizardforcel> # 预测今后的北京高考人数 # 假设 x 年的出生人数和 (x + 18) 年的高考人数是线性关系 import numpy as np from matplotlib import pyplot as plt def unary_linear_fit(x, y): assert(x.ndim == 1 and y.ndim == 1 and len(x) == len(y)) cov_x_y = np.mean((x - x.mean()) * (y - y.mean())) k = cov_x_y / x.var() b = y.mean() - k * x.mean() return k, b def r_square(y, y_hat): assert(y_hat.ndim == 1 and y.ndim == 1 and len(y_hat) == len(y)) return 1 - np.sum((y - y_hat) ** 2) / np.sum((y - y.mean()) ** 2) # 1988 ~ 2015 年的出生人数(万人)数据 x = np.asarray([15.3, 19, 14, 9.2, 8.3, 7.9, 8.5, 8.5, 7.8, 7.6, 6.7, 6.3, 7.2, 6, 6, 4.5, 6.6, 7.7, 7.7, 9.9, 10.6, 10.9, 10.2, 12.5, 14.5, 13.6, 17.2, 12.3]) # 考试人数从 2006 年开始统计 y_train = np.asarray([12.6, 12.5, 11.8, 10.1, 8.1, 7.6, 7.3, 7.27, 7.05, 6.8, 6.12, 6]) x_train = x[:len(y_train)] x_pred = x[len(y_train):] k, b = unary_linear_fit(x_train, y_train) y_train_hat = k * x_train + b rsq = r_square(y_train, y_train_hat) print rsq # 0.870773027191 # 拟合度相当高 y_pred = k * x_pred + b years = np.arange(1988, 2015 + 1) + 18 yr_train = years[:len(y_train)] yr_pred = years[len(y_train):] plt.plot(yr_train, y_train, 'b', label='history value') plt.plot(yr_pred, y_pred, 'r', label='prediction value') plt.title('Beijing people for CEE') plt.xlabel('year') plt.ylabel('population / 10e4') plt.legend(loc='best') plt.show() # http://upload-images.jianshu.io/upload_images/118142-c28a301820ce1704.png[/code]
相关文章推荐
- 高考 北京满分作文
- 对2014年北京卷高考《考试说明》的解读
- 山东2016年高考高校理工科录取人数统计
- 2007年北京高考作文,惊为天人
- 历年高考报考/录取人数
- 从2008高考人数想到的软件人才
- 区域内的人数预测算法对比实验分析
- 2017年18岁的北京文科状元父母都是外交官,关于高考,他说出了我们竭力回避的戳心真相
- 音频:2006年高考英语试题北京卷听力理解部分
- 美国IBM,预测今后5年能够改变人们生活的五大革新
- 高考志愿填报指南:未来十大热门专业预测
- 专家谈北京等地家长反对异地高考:把习惯当特权
- 从2008高考人数想到的软件人才
- 历年高考报考人数和录取人数
- 大数据谈高考分数线预测
- 历年高考报考人数和录取人数
- 2006年北京高考0分作文
- 全国历年参加高考人数和录取人数统计(1977-2009)
- 07年最牛北京高考作文
- 从2008高考人数想到的软件人才