一、选题的背景
中国自古就对学识渊博之人称赞不已,不论三教九流亦或九五之尊都对文化有一种敬仰。教育是经济增长的重要源泉。在建设社会主义创新型国家的社会背景之下,能够深刻意识到教育对经济发展的重要促进作用对于整个国家的综合国力的发展有着非常重要的意义。
通过数据分析来分析当下教育现状以及趋势。
二、大数据分析
该数据集由国家数据统计局中的开放数据集,其中主要采集了2020年之前我国在教育方面的相关数据集。因为近几年遭受疫情影响,没办法很正确的展示分析的结果。这个数据集试图从各级各地的学校数、师生数、升学率、教育经费、经济和科技发展等客观直接的数据中观察分析数据,通过绘制可视化图形,以来直观感受近年来我国在教育行业上的不断发展,从而更好的分析我国教育普及的广度。
三、数据分析步骤
1.数据清洗
(1)将数据中的“date”列的数据格式转化为“datetime64”
(2)删除对本次实验不需要的列
(3)删除重复数据
(4)空格处理
进一步数据清理:查询无用数据,,进一步数据清理:通过describe()函数查询异常值。
2.数据可视化
接下来按照各个数据表,进行绘制可视化图形。
如下图3.1为2012年—2019年教育事业经费开支情况,从图3.1中得到本图显示国家财政性教育经费在2012年时为231475698万元,各类学杂费在2012年时为66863024万元。在国家财政性教育经费逐年、大比例增长的同时,各类学校所收的学杂费却都在逐年下降,这份图表种的信息体现着国家层面对于教育事业越发的重视。
图3.1 2012年—2019年教育事业经费开支情况
如下图3.2为2012—2020年各级学校数量(所),从图中得到我国各级学校特别是学前教育这一块得到更大的重视,学校数量也在逐年增多。
图3.2 2012—2020年各级学校数量(所)
如下图3.3为每十万人口各级学校平均在校生数,本图有多个子图,从各个子图中的折线图可以看到我过每十万人口的在校生数在排除人口的干扰下基本上是呈现逐年递增的状况,这也预测未来的各级学校的在校生数也会增长。
图3.3 每十万人口各级学校平均在校生数
如下图3.4为各级学校生师比,从图中以教师数为单位1,各级学校学生比例均匀,本科院校师资力量有待加强,初中生师比则体现初中师资力量较丰富。
图3.4 各级学校生师比
如下图3.5为各阶段升学率,从图中得到我国各阶段升学率在2008年后基本趋近100%,也体现了我国各阶段学生有一颗保持学习的心态,能够继续升学,增长自身素养。
图3.5 各阶段升学率
如下图3.6为社会发展图,从图中得到我国随着教育水平不断完善在科技成果上、国民生成总值、第三产业增加值上保持平稳,且有上涨趋势。
图 3.6 社会发展
四、总结
通过前面各个图表的分析,教育在人口、经济、科技等各个方面都有着相当的社会功能,人民对于教育的重视性更高了,不论是从学校数量,还是从国家社会对这个教育行业的投入都是叹为观止的,这跟让我们意识到教育的重要性。
教育是提高人民综合素质、促进人的全面发展的重要途径,是民族振兴、社会进步的重要基石,是对中华民族伟大复兴具有决定性意义的事业。只有当受教育普及,人们就会在日常的生活里追求真正的技术与知识,得以在这个领域发展真正的知识和技能,来促进各个方面的全面发展。
五、附录
附完整程序源代码(以及输出结果)
# ----------数据清洗阶段-------------------------------
#将date格式转化为datetime
df['date'].astype('datetime64')
#将时间作为标签
#df = df.set_index('datetime64')#暂时不需要
df.drop('provinceCode',axis=1,inplace=True)#删除邮政编码列,对本次实验无用数据
df.drop('cityCode',axis=1,inplace=True)#删除城市编码列,对本次实验无用数据
df.drop('countryCode',axis=1,inplace=True)#删除城市简写列,对本次实验无用数据
...
#删除重复数据
df = df.drop_duplicates()
#空值处理:都是有意义的,所以不处理空值
#空格处理
df['date']=df['date'].map(str.strip)
df['country']=df['country'].map(str.strip)
#now列和region_class列是新增列,不用进行空格处理
df.head(10)
#数据清洗查询无用数据
df['confirmed'].isnull().value_counts()#查询是否为0的异常值
df['date'].isnull().value_counts()#查询是否有无日期的异常行数据
df['fare'].isnull().value_counts()#查询是否有无费用的异常行
...
#异常值处理
df.describe()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#处理中文编码
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# ----------数据处理阶段-------------------------------
df1= pd.read_excel(r'C: \数据.xls',sheet_name='教育经费')
# 获取到本文件的title值
df1.title=df1.iloc[:,0]
list1_title=df1.title.values.tolist()
# 获取到本文件的x值
x1=np.arange(8)
list1_x_label=df1.columns.values[1:]
# 获取到本文件的y值
df1.data=df1.iloc[:,1:]
list1_data=df1.data.values.tolist()
list1_data3=list1_data[2]
list1_data4=list1_data[3]
# ---------绘制条形图--------------------------------
# 分辨率参数-dpi,画布大小参数-figsize
ax1=plt.figure(dpi=50,figsize=(15,8)).add_subplot(111)
bar_width=0.3
ax11=ax1.bar(x1+2*bar_width, list1_data3, width=bar_width,tick_label=list1_x_label,edgecolor="black")
ax12=ax1.bar(x1+3*bar_width, list1_data4, width=bar_width,tick_label=list1_x_label,edgecolor="black")
# 添加图例
plt.legend(list1_title[2:], loc='best',fontsize=20)
# 添加参考线
plt.axhline(231475698, ls='--', linewidth=2.0, label='最低国家财政性教育经费')
plt.axhline(35075698, ls='--',color='r', linewidth=2.0, label='最低各类学校学杂费')
# 添加无指向型注释文本
def autolabel(rects):
""" 在每个矩形条的上方附加一个文本标签, 以显示其高度"""
for rect in rects:
height = rect.get_height() # 获取每个矩形条的高度
plt.text(rect.get_x()+ rect.get_width() / 2 , height+ 55500 , s='{}'.format(height),
ha='center', va='bottom',fontsize=20)
# 添加文本
autolabel(ax11)
autolabel(ax12)
plt.title("2012年—2019年教育事业经费开支情况")
plt.xlabel("年份",fontsize=22)
plt.ylabel("费用/万元",fontsize=22)
#调整坐标刻度值字体大小
plt.tick_params(labelsize=20)
plt.tight_layout()
plt.show()
# ----------数据处理阶段-------------------------------
df6= pd.read_excel(r'C:\数据.xls',sheet_name='学校数')
# 获取到本文件的图例标签
df6.title=df6.iloc[:,0]
list6_title=df6.title.values.tolist()
# 获取到本文件的y轴标签
list6_x_label=df6.columns.values[1:]
# 获取到本文件的x值
df6.data=df6.iloc[:,1:]
list6_data=df6.data.values.tolist()
list6_data1=list6_data[0]
list6_data2=list6_data[1]
list6_data3=list6_data[2]
list6_data4=list6_data[3]
left1=[]
for i in range(0,9):
a=list6_data1[i]+list6_data2[i]
left1.append(a)
left2=[]
for i in range(0,9):
a=list6_data1[i]+list6_data2[i]+list6_data3[i]
left2.append(a)
x=np.arange(9)
plt.barh(x,list6_data1,tick_label=list6_x_label, height=0.5,label=list6_title[0])
plt.barh(x,list6_data2,left=list6_data1, height=0.5,label=list6_title[1])
plt.barh(x,list6_data3,left=left1, height=0.5,label=list6_title[2])
plt.barh(x,list6_data4,left=left2,height=0.5,label=list6_title[3])
plt.title("2012-2020年各级学校数量(所)",fontsize=22)
plt.xlabel("数量(所)",fontsize=15)
plt.ylabel("年份(年)",fontsize=15)
plt.legend(loc='lower right')
plt.show()
# ----------数据处理阶段-------------------------------
df2= pd.read_excel(r'C:\数据.xls',sheet_name='各级学校生师比')
# 获取到本文件的x值
x2=np.arange(8)
list2_x_label=df2.columns.values[1:]
# 获取到本文件的y值
df2.data=df2.iloc[:,1:]
list2_data=df2.data.values.tolist()
list2_data1=list2_data[0]
labels=list2_x_label
data=list2_data1
position=[0,0.2,0,0,0.2,0,0,0]
plt.annotate("初中生师比",xy=(-0.7,0.6),xytext=(-2.1,0.1),color="orange",fontsize=15,
arrowprops=dict(arrowstyle="-|>",color= "orange"))
plt.annotate("本科院校生师比",xy=(0.5,-0.8),xytext=(1.5,-0.8),color="purple",fontsize=15,
arrowprops=dict(arrowstyle="-|>",color= "purple"))
plt.pie(data,explode=position,shadow=True,autopct='%0.2f%%',startangle=90,wedgeprops={'width': 0.7},)
plt.legend(labels,bbox_to_anchor=(1, 1), loc='best', borderaxespad=0)
plt.title('各级学校生师比',fontsize=23)
plt.tight_layout()
plt.show()
# ----------数据处理阶段-------------------------------
df3= pd.read_excel(r'C:\数据.xls',sheet_name='每十万人口各级学校平均在校生数')
# 获取到本文件的title值
df3.title=df3.iloc[:,0]
list3_title=df3.title.values.tolist()
# 获取到本文件的x值
x3=np.arange(11)
list3_x_label=df3.columns.values[1:]
# 获取到本文件的y值
df3.data=df3.iloc[:,1:]
list3_data=df3.data.values.tolist()
list3_data1=list3_data[0]
list3_data2=list3_data[1]
list3_data3=list3_data[2]
list3_data4=list3_data[3]
list3_data5=list3_data[4]
#-----------------绘制图---------------------
x = np.arange(11)
# 创建4个子图,3行2列
fig, axes = plt.subplots(3, 2,sharex='col',sharey='row',dpi=50,figsize=(20,15))
x1 = axes[0, 0]
x2 = axes[0, 1]
x3 = axes[1, 0]
x4 = axes[1, 1]
x5 = axes[2, 0]
x6 = axes[2, 1]
plt.suptitle('每十万人口各级学校平均在校生数',fontsize=35)
x3.set_ylabel("平均在校生数(人)",fontsize=25)
#子图1
x1.plot(x,list3_data1,'r-.8',label=list3_title[0],ms='10')
x1.legend(loc='best',fontsize=20)
x1.set_ylim(1750,8000)
for temp_x, temp_y in zip(x, list3_data1):
x1.text(temp_x, temp_y +200, s='{}'.format(temp_y), ha='left', va='bottom', fontsize=15,color='r')
#子图2
x2.plot(x,list3_data2,'g-.>',label=list3_title[1],ms='10')
x2.legend(loc='best',fontsize=20)
x2.set_ylim(1750,8000)
for temp_x, temp_y in zip(x, list3_data2):
x2.text(temp_x, temp_y -500, s='{}'.format(temp_y), ha='left', va='bottom', fontsize=15,color='g')
#子图3
x3.plot(x,list3_data3,'b-.*',label=list3_title[2],ms='10')
x3.legend(loc='best',fontsize=20)
x3.set_ylim(1750,8000)
for temp_x, temp_y in zip(x, list3_data3):
x3.text(temp_x, temp_y +200, s='{}'.format(temp_y), ha='left', va='bottom', fontsize=15,color='b')
#子图4
x4.plot(x,list3_data4,'c--d',label=list3_title[3],ms='10')
x4.legend(loc='best',fontsize=20)
x4.set_ylim(1750,8000)
for temp_x, temp_y in zip(x, list3_data4):
x4.text(temp_x, temp_y +200, s='{}'.format(temp_y), ha='left', va='bottom', fontsize=15,color='c')
#子图5
x5.plot(x,list3_data5,'y-.p',label=list3_title[4],ms='10')
x5.legend(loc='best',fontsize=20)
x5.set_ylim(1750,8000)
for temp_x, temp_y in zip(x, list3_data5):
x5.text(temp_x, temp_y +200, s='{}'.format(temp_y), ha='left', va='bottom', fontsize=15,color='y')
#子图6
x6.plot(x,list3_data1,'r-.8',label=list3_title[0],ms='10')
x6.plot(x,list3_data2,'g-.>',label=list3_title[1],ms='10')
x6.plot(x,list3_data3,'b-.*',label=list3_title[2],ms='10')
x6.plot(x,list3_data4,'c--d',label=list3_title[3],ms='10')
x6.plot(x,list3_data5,'y-.p',label=list3_title[4],ms='10')
x6.legend(loc='best',fontsize=15)
x1.tick_params(axis='y', labelsize=17)
x3.tick_params(axis='y', labelsize=17)
x5.tick_params(axis='y', labelsize=17)
x5.set_xticklabels(list3_x_label,fontsize=16)
x6.set_xticklabels(list3_x_label,fontsize=16)
plt.tight_layout()
plt.show()
# ----------数据处理阶段-------------------------------
df5= pd.read_excel(r'C:\数据.xls',sheet_name='教育与社会')
# 获取到本文件的title值
df5.title=df5.iloc[:,0]
list5_title=df5.title.values.tolist()
# 获取到本文件的x值
list5_x_label=df5.columns.values[1:]
# 获取到本文件的y值
df5.data=df5.iloc[:,1:]
list5_data=df5.data.values.tolist()
list5_data1=list5_data[0]
list5_data2=list5_data[1]
list5_data3=list5_data[2]
list5_data4=list5_data[3]
x=np.arange(9)
plt.plot(x,list5_data1,'r-.8',label=list5_title[0],ms='10')
plt.plot(x,list5_data2,'g-.>',label=list5_title[1],ms='10')
plt.plot(x,list5_data3,'b-.*',label=list5_title[2],ms='10')
plt.plot(x,list5_data4,'c--d',label=list5_title[3],ms='10')
plt.title("社会发展",fontsize=22)
plt.legend(loc='best',fontsize=10)
plt.xlabel("年份(年)",fontsize=15)
plt.show()
# ----------数据处理阶段-------------------------------
df4= pd.read_excel(r'C:\数据.xls',sheet_name='升学率')
df4.title=df4.iloc[:,0]
list4_title=df4.title.values.tolist()
x4=np.arange(19)
list4_x_label=df4.columns.values[1:]
df4.data=df4.iloc[:,1:]
list4_data=df4.data.values.tolist()
list4_data1=list4_data[0]
list4_data2=list4_data[1]
list4_data3=list4_data[2]
list4_data4=list4_data[3]
x=np.arange(19)
fit, axes = plt.subplots(2,2,sharex='col',figsize=(14,7))
x1 = axes[0, 0]
x2 = axes[0, 1]
x3 = axes[1, 0]
x4 = axes[1, 1]
plt.suptitle('各阶段升学率',fontfamily='kaiti',fontsize=35)
#子图1
x1.stem(x,list4_data1,linefmt='y--',use_line_collection=True)
x1.set_ylim(0,105)
x1.tick_params(axis='y', labelsize=17)
x1.set_ylabel(list4_title[0],fontsize=16)
#子图2
x2.stem(x,list4_data2,linefmt='c-.',use_line_collection=True)
x2.set_ylim(0,105)
x2.tick_params(axis='y', labelsize=17)
x2.set_ylabel(list4_title[1],fontsize=16)
#子图3
x3.stem(x,list4_data3,linefmt='r:',use_line_collection=True)
x3.set_ylim(0,105)
x3.tick_params(axis='y', labelsize=17)
x3.tick_params(axis='x', labelsize=17)
x3.set_xticklabels(list4_x_label,fontsize=15,color='r')
x3.set_ylabel(list4_title[2],fontsize=16)
#子图4
x4.stem(x,list4_data4,linefmt='g--',use_line_collection=True)
x4.set_ylim(0,105)
x4.tick_params(axis='y', labelsize=17)
x4.tick_params(axis='x', labelsize=17)
x4.set_xticklabels(list4_x_label,fontsize=15,color='g')
x4.set_ylabel(list4_title[3],fontsize=16)
plt.tight_layout()
plt.show()