【python数模小作业】动手‘预习‘高数之 人口预测(线性拟合)

第一次发文章,不太会操作,也没啥文化,我就直接放代码了

对了问题描述

GitModel 公司对面试的实习生给出了这样一个问题 : 搜集 1950∼2020 年间美国人口数据,,猜测其满足的函数关系,,并综合数据预测美国 2030 年的人口数:

*根据找到的数据,假定1950∼2020年美国人口是一次函数的线性关系,应该只用最小二乘法就能解决。

*当然真实人口预测的话,还需要考虑很多方面,需要把人口分为男性和女性,还需要注意人口流入流出趋势、年龄分段等等。

#导入数据
import pandas
Renkou = pandas.read_excel('美国人口.xlsx', sheet_name='Sheet1')
Renkou

#处理数据,绘制图像
import matplotlib.pyplot as plt
import scipy.optimize as opt
import numpy as np
from sympy import *

year = Renkou['年份']
people_num = Renkou['人口']
plt.plot(year, people_num,'b')
plt.xlabel('year')
plt.ylabel('number')
plt.title('American population of 1950-2020')
plt.show()



# 方法一:【暴力无脑】直线拟合与绘制

def f(x, A, B ):
    return A * x + B
A1, B1 = opt.curve_fit(f, year, people_num)[0]

y1 = A1 * year + B1
plt.plot(year, people_num,'b',year, y1, "r-.")


x=symbols('x')
y1=A1 * x + B1
print('y1=',y1)
print("预计2030年有 %d 人" % y1.evalf(subs = {x:2030}))
#绘图
plt.xlabel('year')
plt.ylabel('number')
plt.title('Population fitting line')
plt.show()


# 方法二:【同样暴力无脑】二次函数的最小二乘法 曲线拟合与绘制
x = np.array(year)
y = np.array(people_num)

def residual(p):
  a,b,c = p
  return y-(a*x**2+b*x+c)
#使用opt的最小二乘法拟合函数
a,b,c  = opt.leastsq(residual,[1,1,0])[0]

#绘图对比
y2=(a*x**2+b*x+c)
plt.plot(year, people_num,'b',year, y2, "r-.")
x=symbols('x')
y2=a * x**2 + b*x+c
print('y2=',y2)
print("预计2030年有 %d 人" % y2.evalf(subs = {x:2030}))

plt.xlabel('year')
plt.ylabel('number')
plt.title('Population fitting curve')
plt.show()
  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值