【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
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中的最小二乘法线性拟合是一种统计分析方法,用于通过拟合一个线性模型来估计数据集中的关系。这种方法适用于当我们有一组自变量和对应的因变量时,想要找到一个最佳拟合线来描述两者之间的关系。 最小二乘法线性拟合的目标是找到一条直线,使得所有数据点到该直线的垂直距离之和最小。而这条直线可以用方程y = mx + b表示,其中m是斜率,b是y轴截距。 在Python中,可以通过使用Scipy库中的stats.linregress()函数来进行最小二乘法线性拟合。这个函数可以计算出相关系数、斜率、截距、标准误差等拟合结果。 下面是一个简单的示例,展示如何使用Python进行最小二乘法线性拟合: ```python import numpy as np from scipy import stats # 准备数据 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 3, 4, 5, 6]) # 进行最小二乘法线性拟合 slope, intercept, r_value, p_value, std_err = stats.linregress(x, y) # 打印拟合结果 print("斜率:", slope) print("截距:", intercept) print("相关系数:", r_value) print("p值:", p_value) print("标准误差:", std_err) ``` 这段代码中,我们首先准备了一组数据x和对应的因变量y。然后,使用stats.linregress()函数进行最小二乘法线性拟合,并将结果赋值给变量slope, intercept, r_value, p_value和std_err。最后,我们打印出了拟合结果。 最小二乘法线性拟合可用于数据分析、预测和回归问题。通过找到最佳拟合线,我们可以更好地理解数据的关系,并在之后的应用中进行预测和推断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值