分析1996~2015年人口数据特征间的关系并分析1996~2015年人口数据各个特征的分布分散状况

python数据分析与应用

实训1 分析1996~2015年人口数据特征间的关系

并分析1996~2015年人口数据各个特征的分布分散状况

运行环境:jupyter notebook
数据:populations.npz
链接:https://pan.baidu.com/s/123wS4QmhXAHGMUK5K-9evA
提取码:1uv9
1.需求说明:
人口数据总共有6个特征,分别为年份、年末总人口、男性人口、女性人口、城镇人口、乡村人口。查看各个特征随着时间推移发生的变化情况可以分析出未来男女人口比例、城乡人口变化的方向。
并绘制各年份男女人口数目及城乡人口数目的直方图,男女人口比例及城乡人口比例的饼图可以发现人口结构的变化。而绘制每个特征的箱线图则可以发现不同特征增长或者减少的速率是否变得缓慢。
2.实现步骤
(1)使用库:NumPy读取人口数据
(2)创建画布
(3)在两个子图上分别绘制散点图和折线图
(4)保存,显示图片
(5)分析未来人口变化趋势

1.首先导入数据,并查看数据,可以看到最后两行是缺失值

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
data = np.load('E://课程//数据挖掘建模//populations.npz',allow_pickle=True)
data.files,data['data'][0:-2,:],data['feature_names']#['data'][0:-2,:]删除最后两行缺失值

输出结果如下:
在这里插入图片描述
2.绘制’1996~2015年末与各类人口散点图’

plt.rcParams['font.sans-serif']='SimHei'
name=data['feature_names']
values=data['data']
p1=plt.figure(figsize=(11,11))
pip1=p1.add_subplot(2,1,1)
plt.scatter(values[0:20,0],values[0:20,1],marker='8',color='blue')
plt.xticks(range(0,20,1),values[range(0,20,1),0],rotation=45)
plt.ylabel('总人口(万人)')
plt.legend('年末')
plt.title('1996~2015年末与各类人口散点图')

输出结果如下:
在这里插入图片描述
3.绘制’1996~2015年末总与各类人口折线图’

pip2=p1.add_subplot(2,1,2)
plt2=plt.figure(figsize=(10,6))
plt.scatter(values[0:20,0],values[0:20,2],marker='o',color='black')
plt.scatter(values[0:20,0],values[0:20,3],marker='D',color='green')
plt.scatter(values[0:20,0],values[0:20,4],marker='p',color='orange')
plt.scatter(values[0:20,0],values[0:20,5],marker='s',color='purple')
plt.xlabel('时间')
plt.ylabel('总人口(万人)')
plt.xticks(values[0:20,0],rotation=45)
plt.legend(['男性','女性','城镇','乡村'])
#绘制折线图
p2=plt.figure(figsize=(12,12))
p1=p2.add_subplot(2,1,1)
plt.plot(values[0:20,0],values[0:20,1],color='r',linestyle='--',marker='8')
plt.ylabel('总人口(万人)')
plt.xticks(range(0,20,1),values[range(0,20,1),0],rotation=45)
plt.legend('年末')
plt.title('1996~2015年末总与各类人口折线图')

运行结果如下:
在这里插入图片描述
在这里插入图片描述
4.绘制’2015年城、乡人口数直方图’

import numpy as np
import matplotlib.pyplot as plt
data=np.load('E://课程//数据挖掘建模//populations.npz',allow_pickle=True)
name=data['feature_names'];values=data['data'];plt.rcParams['font.sans-serif']='SimHei'
label1=['男性','女性'];label2=['城镇','乡村'];ex=[0.01,0.01]
#1.直方图
p1=plt.figure(figsize=(12,12))
#子图1
a1=p1.add_subplot(2,2,1)
plt.bar(range(2),values[19,2:4],width=0.6,color='orange');plt.ylabel('人口(万人)');plt.ylim(0,80000)
plt.xticks(range(2),label1);plt.title('1996年男、女人口数直方图')
#子图2
b1=p1.add_subplot(2,2,2)
plt.bar(range(2),values[0,2:4],width=0.6,color='red')
plt.ylabel('人口(万人)');plt.ylim(0,80000)
plt.xticks(range(2),label1)
plt.title('2015年男、女人口数直方图')
#子图3
c1=p1.add_subplot(2,2,3)
plt.bar(range(2),values[19,4:6],width=0.6,color='green');plt.xlabel('类别')
plt.ylabel('人口(万人)');plt.ylim(0,90000);plt.xticks(range(2),label2)
plt.title('1996年城、乡人口数直方图')
#子图4
d1=p1.add_subplot(2,2,4)
plt.bar(range(2),values[0,4:6],width=0.6,color='blue')
plt.xlabel('类别')
plt.ylabel('人口(万人)')
plt.ylim(0,90000)
plt.xticks(range(2),label2)
plt.title('2015年城、乡人口数直方图')

输出结果如下:
在这里插入图片描述
5.绘制相关部分的饼图

#2.饼图
p2=plt.figure(figsize=(8,8))
#子图1
a2=p2.add_subplot(2,2,1)
plt.pie(values[19,2:4],explode=ex,labels=label1,colors=['pink','crimson'],autopct='%1.1f%%')
plt.title('1996年男、女人口数饼图')
#子图2
b2=p2.add_subplot(2,2,2)
plt.pie(values[0,2:4],explode=ex,labels=label1,colors=['PeachPuff','skyblue'],autopct='%1.1f%%')
plt.title('2015年男、女人口数饼图')
#子图3
c2=p2.add_subplot(2,2,3)
plt.pie(values[19,4:6],explode=ex,labels=label2,colors=['pink','crimson'],autopct='%1.1f%%')
plt.title('1996年城、乡人口数饼图') 
#子图4
d2=p2.add_subplot(2,2,4)
plt.pie(values[0,4:6],explode=ex,labels=label2,colors=['PeachPuff','skyblue'],autopct='%1.1f%%')
plt.title('2015年城、乡人口数饼图')

结果如下:
在这里插入图片描述
6.绘制箱线图

#3.箱线图
p3=plt.figure(figsize=(10,10))
plt.boxplot(values[0:20,1:6],notch=True,labels=['年末','男性','女性','城镇','乡村'],meanline=True)
plt.xlabel('类别')
plt.ylabel('人口(万人)')
plt.title('1996~2015年各特征人口箱线图')
plt.show()

在这里插入图片描述

  • 24
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
首先,需要导入所需的库和数据: ```python import pandas as pd import matplotlib.pyplot as plt # 读取数据 data = pd.read_csv('population.csv') ``` 接下来,可以先通过散点图来初步观察各特征关系: ```python # 散点图 plt.scatter(data['year'], data['births'], label='births') plt.scatter(data['year'], data['deaths'], label='deaths') plt.scatter(data['year'], data['migration'], label='migration') plt.scatter(data['year'], data['natural_increase'], label='natural increase') plt.legend() plt.xlabel('year') plt.ylabel('population') plt.title('Population Characteristics') plt.show() ``` 这段代码会生成一个散点图,横坐标是份,纵坐标是人口数量,四种颜色分别代表出生人口、死亡人口、迁移人口和自然增长人口。从图中可以看出,自然增长人口和出生人口呈现正相关关系,而死亡人口和迁移人口与自然增长人口和出生人口呈现负相关关系。 接下来,可以使用线性回归模型来更准确地分析特征关系。这里使用OLS(ordinary least squares)方法进行线性拟合: ```python import statsmodels.api as sm # 线性回归 x = data[['births', 'deaths', 'migration']] y = data['natural_increase'] x = sm.add_constant(x) model = sm.OLS(y, x).fit() print(model.summary()) ``` 这段代码会输出线性回归的统计结果。其中,R-squared(R方)的值可以表明模型的拟合程度,值越接近1越好。此外,t值和P值可以用来判断自变量对因变量的影响是否显著,一般认为P值小于0.05时,该自变量对因变量的影响是显著的。 最后,可以画出线性回归的拟合直线和残差图来进一步分析模型的拟合效果: ```python # 拟合直线 fig, ax = plt.subplots() ax.scatter(y, model.fittedvalues) ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4) ax.set_xlabel('natural increase') ax.set_ylabel('predicted natural increase') ax.set_title('Natural Increase Prediction') plt.show() # 残差图 fig, ax = plt.subplots() ax.scatter(model.fittedvalues, model.resid) ax.set_xlabel('predicted natural increase') ax.set_ylabel('residuals') ax.set_title('Natural Increase Residuals') plt.show() ``` 这段代码会生成两张图,第一张是拟合直线图,横坐标是实际自然增长人口,纵坐标是预测自然增长人口,黑色虚线为理论直线(即实际值等于预测值),拟合程度越好的点越靠近理论直线。第二张图是残差图,横坐标是预测自然增长人口,纵坐标是残差(即实际值与预测值之的差),理论上残差应该随机分布在0线附近,不应该呈现任何规律性。如果残差存在规律,说明模型存在欠拟合或过拟合的问题。 综上,通过matplotlib和statsmodels库,可以方便地进行数据分析和模型拟合,帮助我们更好地理解数据特征关系

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我真的不叫苏图

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值