木头MT 发表于 2021-8-3 15:52

基于logistic模型全国or各市人口预测

本帖最后由 木头MT 于 2021-8-3 15:59 编辑

这是之前的一次作业 针对于城市规划里面的一个内容
老师上课提的那种算法感觉很简单
就自己去查了一下可以用logistic模型预测人口
就有了这个程序人口
数据可以在统计年鉴里面拿
也可以在国家数据下载 https://data.stats.gov.cn/easyquery.htm?cn=C01
不知道会不会遇到同样学这门课的同学
做地区的数据还是需要用统计年鉴
不过在统计局的网站找起来焦头烂额的
推荐使用知网里面的统计年鉴可以直接下载电子表格!!!
#!/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
x=temp
x1=temp[:-1]
x2=temp[:-1]
dx=(x2-x1)/x2
a=polyfit(x2,dx,1)
r=a
xm=-r/a
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)

再贴一个省级各市的预测
做了循环
#基于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
    i=1
    m=0
    t=np.int64(temp)
    while i<=n:
      x=np.float64(temp)
      x1=np.float64(temp)
      x2=np.float64(temp)
      dx=(x2-x1)/x2
      a=polyfit(x2,dx,1)
      #r=abs(a)
      r=a
      xm=-r/a
      x0=x
      print('增长率%.2f'%r)
      #绘图
      title=temp
      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,future_predict,future_predict,color="red")
            m+=1
      plt.legend(loc=2)
      plt.title(title+"_predict 2020~2050")
      plt.xlabel('years')
      plt.ylabel('population')
      plt.show()
      i+=1
各市的图我就贴一个

yysyWang 发表于 2021-8-3 16:25

感觉这种也不靠谱,人口流入流出对拟合应该影响很大

木头MT 发表于 2021-8-3 16:36

yysyWang 发表于 2021-8-3 16:25
感觉这种也不靠谱,人口流入流出对拟合应该影响很大

其实这种不适合局部性的估计 只有全国总人口才比较符合,毕竟没有人口流动参数参与计算

Dengyuntao 发表于 2021-8-3 18:56

小伙子你的预测怎么还是向上的啊,人口增长是下滑的

wss0823 发表于 2021-8-4 09:58

Dengyuntao 发表于 2021-8-3 18:56
小伙子你的预测怎么还是向上的啊,人口增长是下滑的

人口增长是向上的,新生人口是下滑的

Dengyuntao 发表于 2021-8-4 15:41

wss0823 发表于 2021-8-4 09:58
人口增长是向上的,新生人口是下滑的

好的 我搞混了
页: [1]
查看完整版本: 基于logistic模型全国or各市人口预测