数据分析实战 - 1 农民工数据预测(线性回归模型的使用)

文章目录

    • 农民工总收入预测(回归模型的使用)
    • 农民工分四大区总收入预测(回归模型的使用)
    • 农民工分六大行业总收入预测(回归模型的使用)

import numpy as np
import pandas as pd

农民工总收入预测(回归模型的使用)

以下是农民工收入的统计数据,使用历史年份对总体农民工,外出农民工,本地农民工分别建立回归模型训练,并且对2023年的这几个维度的值进行预测;

统计局数据 2018年 2019年 2020年 2021年 2022年 2023年

农民工收入 全国 全国 全国 全国 全国 全国

总体农民工 3721 3962 4072 4432 4615
外出农民工 4107 4427 4549 5013 5240
本地农民工 3340 3500 3606 3878 4026

分别使用普通的线性模型,决策树回归模型,随机森林回归模型进行预测,顺便验证下不同模型输出的预测结果是否相同

### 数据准备
data = {'年份':[2018,2019,2020,2021,2022],
        '总体农民工收入':[3721, 3962, 4072, 4432, 4615],
        '外出农民工收入':[4107, 4427, 4549, 5013, 5240],
        '本地农民工收入':[3340, 3500, 3606, 3878, 4026]}
df = pd.DataFrame(data = data)
df
年份 总体农民工收入 外出农民工收入 本地农民工收入
0 2018 3721 4107 3340
1 2019 3962 4427 3500
2 2020 4072 4549 3606
3 2021 4432 5013 3878
4 2022 4615 5240 4026
### 线性模型预测
from sklearn.linear_model import LinearRegression

# 创建并拟合线性回归模型
LR_regression_total = LinearRegression()
LR_regression_total.fit(df['年份'].values.reshape(-1,1),df['总体农民工收入'])

LR_regression_outgoing = LinearRegression()
LR_regression_outgoing.fit(df['年份'].values.reshape(-1,1),df['外出农民工收入'])

LR_regression_local = LinearRegression()
LR_regression_local.fit(df['年份'].values.reshape(-1,1),df['本地农民工收入'])

# 预测
pre_total = LR_regression_total.predict([[2023]])
pre_outgoing = LR_regression_outgoing.predict([[2023]])
pre_local = LR_regression_local.predict([[2023]])

# 打印结果
print("预测2023年的总体农民工收入:", pre_total)
print("预测2023年的外出农民工收入:", pre_outgoing)
print("预测2023年的本地农民工收入:", pre_local)
预测2023年的总体农民工收入: [4837.8]
预测2023年的外出农民工收入: [5522.8]
预测2023年的本地农民工收入: [4195.]
### 决策树模型预测
from sklearn.tree import DecisionTreeRegressor

# 创建并拟合线性回归模型
decision_tree_total = DecisionTreeRegressor()
decision_tree_total.fit(df['年份'].values.reshape(-1,1),df['总体农民工收入'])

decision_tree_outgoing = DecisionTreeRegressor()
decision_tree_outgoing.fit(df['年份'].values.reshape(-1,1),df['外出农民工收入'])

decision_tree_local = DecisionTreeRegressor()
decision_tree_local.fit(df['年份'].values.reshape(-1,1),df['本地农民工收入'])

# 预测
pre_total_dt = decision_tree_total.predict([[2023]])
pre_outgoing_dt = decision_tree_outgoing.predict([[2023]])
pre_local_dt = decision_tree_local.predict([[2023]])

# 打印结果
print("预测2023年的总体农民工收入:", pre_total_dt)
print("预测2023年的外出农民工收入:", pre_outgoing_dt)
print("预测2023年的本地农民工收入:", pre_local_dt)
预测2023年的总体农民工收入: [4615.]
预测2023年的外出农民工收入: [5240.]
预测2023年的本地农民工收入: [4026.]
### 随机森林模型预测
from sklearn.ensemble import RandomForestRegressor

# 创建并拟合线性回归模型
random_forest_total = RandomForestRegressor()
random_forest_total.fit(df['年份'].values.reshape(-1,1),df['总体农民工收入'])

random_forest_outgoing = RandomForestRegressor()
random_forest_outgoing.fit(df['年份'].values.reshape(-1,1),df['外出农民工收入'])

random_forest_local = RandomForestRegressor()
random_forest_local.fit(df['年份'].values.reshape(-1,1),df['本地农民工收入'])

# 预测
pre_total_rf = random_forest_total.predict([[2023]])
pre_outgoing_rf = random_forest_outgoing.predict([[2023]])
pre_local_rf = random_forest_local.predict([[2023]])

# 打印结果
print("预测2023年的总体农民工收入:", pre_total_rf)
print("预测2023年的外出农民工收入:", pre_outgoing_rf)
print("预测2023年的本地农民工收入:", pre_local_rf)
预测2023年的总体农民工收入: [4547.59]
预测2023年的外出农民工收入: [5150.87]
预测2023年的本地农民工收入: [3961.2]

结论:即使条件相同,不同模型的预测结果一般并不相同,之前我有个预测季度外出农民工的得到了相同的结果,要不就是数据量太少,或者很可能是哪里使用错误了

农民工分四大区总收入预测(回归模型的使用)

以下是农民工收入的统计数据,使用历史年份对东部地区,中部地区,西部地区,东北地区收入分别建立回归模型训练,并且对2023年的这几个维度的值进行预测;

统计局数据 2018年 2019年 2020年 2021年 2022年

分四大区收入 全国 全国 全国 全国 全国

东部地区 3955 4222 4351 4787 5001

中部地区 3568 3794 3866 4205 4386

西部地区 3522 3723 3808 4078 4238

东北地区 3298 3469 3574 3813 3848

注意此处数据最好整理成一列是一个维度

### 数据准备
data2 = {
    2018:[3955, 3568, 3522, 3298],
    2019:[4222, 3794, 3723, 3469],
    2020:[4351, 3866, 3808, 3574],
    2021:[4787, 4205, 4078, 3813],
    2022:[5001, 4386, 4238, 3848]
}
df2 = pd.DataFrame(data = data2,index = ['东部地区','中部地区','西部地区','东北地区'])
df2
2018 2019 2020 2021 2022
东部地区 3955 4222 4351 4787 5001
中部地区 3568 3794 3866 4205 4386
西部地区 3522 3723 3808 4078 4238
东北地区 3298 3469 3574 3813 3848
### 遇到上述情况不好直接训练,灵活使用转置调整数据格式
df2 = df2.transpose()
df2
东部地区 中部地区 西部地区 东北地区
2018 3955 3568 3522 3298
2019 4222 3794 3723 3469
2020 4351 3866 3808 3574
2021 4787 4205 4078 3813
2022 5001 4386 4238 3848
df2.index.values
array([2018, 2019, 2020, 2021, 2022], dtype=int64)
### 使用线性模型进行预测
from sklearn.linear_model import LinearRegression

# 准备特征列与目标列,'.values'方法将各列数据提取为NumPy数组
years = df2.index.values 
east_income = df2['东部地区'].values
central_income = df2['中部地区'].values
west_income = df2['西部地区'].values
northeast_income = df2['东北地区'].values

# 创建并拟合线性回归模型
regression_east = LinearRegression()
regression_east.fit(years.reshape(-1, 1), east_income)

regression_central = LinearRegression()
regression_central.fit(years.reshape(-1, 1), central_income)

regression_west = LinearRegression()
regression_west.fit(years.reshape(-1, 1), west_income)

regression_northeast = LinearRegression()
regression_northeast.fit(years.reshape(-1, 1), northeast_income)

# 预测2023年的农民工收入
prediction_east = regression_east.predict([[2023]])
prediction_central = regression_central.predict([[2023]])
prediction_west = regression_west.predict([[2023]])
prediction_northeast = regression_northeast.predict([[2023]])

print("预测2023年的东部地区农民工收入:", prediction_east)
print("预测2023年的中部地区农民工收入:", prediction_central)
print("预测2023年的西部地区农民工收入:", prediction_west)
print("预测2023年的东北地区农民工收入:", prediction_northeast)
预测2023年的东部地区农民工收入: [5260.3]
预测2023年的中部地区农民工收入: [4577.9]
预测2023年的西部地区农民工收入: [4409.9]
预测2023年的东北地区农民工收入: [4033.6]

农民工分六大行业总收入预测(回归模型的使用)

以下是农民工收入的统计数据,使用历史年份对制造业,建筑业,批发和零售业,交通运输仓储和邮政业,住宿餐饮业,居民服务修理和其他服务业 收入分别建立回归模型训练,并且对2023年的这几个维度的值进行预测;
统计局数据 2018年 2019年 2020年 2021年 2022年

分六大行业收入 全国 全国 全国 全国 全国

制造业 3732 3958 4096 4508 4694

建筑业 4209 4567 4699 5141 5358

批发和零售业 3263 3472 3532 3796 3979

交通运输仓储和邮政业 4345 4667 4814 5151 5301

住宿餐饮业 3148 3289 3358 3638 3824

居民服务修理和其他服务业 3202 3337 3387 3710 3874

import numpy as np
from sklearn.linear_model import LinearRegression

# 历史数据
years = np.array([2018, 2019, 2020, 2021, 2022])
manufacturing_income = np.array([3732, 3958, 4096, 4508, 4694])
construction_income = np.array([4209, 4567, 4699, 5141, 5358])
wholesale_retail_income = np.array([3263, 3472, 3532, 3796, 3979])
transportation_income = np.array([4345, 4667, 4814, 5151, 5301])
accommodation_food_income = np.array([3148, 3289, 3358, 3638, 3824])
service_income = np.array([3202, 3337, 3387, 3710, 3874])

# 创建并拟合线性回归模型
regression_manufacturing = LinearRegression()
regression_manufacturing.fit(years.reshape(-1, 1), manufacturing_income)

regression_construction = LinearRegression()
regression_construction.fit(years.reshape(-1, 1), construction_income)

regression_wholesale_retail = LinearRegression()
regression_wholesale_retail.fit(years.reshape(-1, 1), wholesale_retail_income)

regression_transportation = LinearRegression()
regression_transportation.fit(years.reshape(-1, 1), transportation_income)

regression_accommodation_food = LinearRegression()
regression_accommodation_food.fit(years.reshape(-1, 1), accommodation_food_income)

regression_service = LinearRegression()
regression_service.fit(years.reshape(-1, 1), service_income)

# 预测2023年的农民工收入
prediction_manufacturing = regression_manufacturing.predict([[2023]])
prediction_construction = regression_construction.predict([[2023]])
prediction_wholesale_retail = regression_wholesale_retail.predict([[2023]])
prediction_transportation = regression_transportation.predict([[2023]])
prediction_accommodation_food = regression_accommodation_food.predict([[2023]])
prediction_service = regression_service.predict([[2023]])

print("预测2023年的制造业农民工收入:", prediction_manufacturing)
print("预测2023年的建筑业农民工收入:", prediction_construction)
print("预测2023年的批发和零售业农民工收入:", prediction_wholesale_retail)
print("预测2023年的交通运输仓储和邮政业农民工收入:", prediction_transportation)
print("预测2023年的住宿餐饮业农民工收入:", prediction_accommodation_food)
print("预测2023年的居民服务修理和其他服务业农民工收入:", prediction_service)

预测2023年的制造业农民工收入: [4939.8]
预测2023年的建筑业农民工收入: [5656.4]
预测2023年的批发和零售业农民工收入: [4135.2]
预测2023年的交通运输仓储和邮政业农民工收入: [5574.4]
预测2023年的住宿餐饮业农民工收入: [3961.7]
预测2023年的居民服务修理和其他服务业农民工收入: [4017.1]

你可能感兴趣的:(数据分析实战,数据分析,线性回归,python)