好友
阅读权限10
听众
最后登录1970-1-1
|
木头MT
发表于 2021-8-3 15:52
本帖最后由 木头MT 于 2021-8-3 15:59 编辑
这是之前的一次作业 针对于城市规划里面的一个内容
老师上课提的那种算法感觉很简单
就自己去查了一下可以用logistic模型预测人口
就有了这个程序人口
数据可以在统计年鉴里面拿
也可以在国家数据下载 https://data.stats.gov.cn/easyquery.htm?cn=C01
不知道会不会遇到同样学这门课的同学
做地区的数据还是需要用统计年鉴
不过在统计局的网站找起来焦头烂额的
推荐使用知网里面的统计年鉴可以直接下载电子表格!!!
[Python] 纯文本查看 复制代码 #!/usr/bin/python
# -*- coding: UTF-8 -*-
#基于logistic模型全国人口预测
import numpy as np
import matplotlib.pyplot as plt
import math
import pandas as pd
from numpy import polyfit, poly1d
temp=pd.read_csv(r"testdata/population.csv",header=None)
t=temp[0]
x=temp[1]
x1=temp[2][:-1]
x2=temp[3][:-1]
dx=(x2-x1)/x2
a=polyfit(x2,dx,1)
r=a[1]
xm=-r/a[0]
x0=55196
def p(xm,r,x0,t):
f=xm/(1+(xm/x0-1)*np.exp(-r*(t-1949)))
return f
future=np.arange(2020, 2055, 5)
future_predict=p(xm,r,x0,future)
plot1 = plt.plot(t, x, '-',label="data")
plot2 = plt.plot(t,p(xm,r,x0,t),'r',label='theory_data')
plot3 = plt.plot(future, future_predict, '*',label='predict_data')
plt.xlabel('years')
plt.ylabel('population')
plt.legend(loc=0)
plt.show()
p(xm,r,x0,2020)
再贴一个省级各市的预测
做了循环
[Python] 纯文本查看 复制代码 #基于logistic模型某省各市人口预测
temp=pd.read_csv(r"testdata/gx.csv",header=None)
def p(xm,r,x0,t):
f=xm/(1+(xm/x0-1)*np.exp(-r*(t-2003)))
return f
def predict_population():
n=np.shape(temp)[1]-1
i=1
m=0
t=np.int64(temp[0][1:])
while i<=n:
x=np.float64(temp[i][1:])
x1=np.float64(temp[i][1:-1])
x2=np.float64(temp[i][2:])
dx=(x2-x1)/x2
a=polyfit(x2,dx,1)
#r=abs(a[1])
r=a[1]
xm=-r/a[0]
x0=x[1]
print('增长率%.2f'%r)
#绘图
title=temp[i][0]
future=np.arange(2020, 2055, 5)
future_predict=p(xm,r,x0,future)
plot1 = plt.plot(t, x, 'k^-',label="data")
plot2 = plt.plot(t,p(xm,r,x0,t),'-r',label='theory_data')
plt.title(title)
plt.xlabel('years')
plt.ylabel('population')
plt.legend(loc=0)
plt.show()
plot3 = plt.plot(future, future_predict, '*',label='predict_data')
for m in range (len(future_predict)):
plt.text(future[m],future_predict[m],future_predict[m],color="red")
m+=1
plt.legend(loc=2)
plt.title(title+"_predict 2020~2050")
plt.xlabel('years')
plt.ylabel('population')
plt.show()
i+=1
各市的图我就贴一个
|
免费评分
-
参与人数 1 | 吾爱币 +7 |
热心值 +1 |
收起
理由
|
苏紫方璇
| + 7 |
+ 1 |
欢迎分析讨论交流,吾爱破解论坛有你更精彩! |
查看全部评分
|