? 博主简介:
曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。
目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。
引言
在当今信息爆炸的时代,数据可视化成为了一种强有力的工具,能够帮助我们直观地理解和分析复杂的数据集。本文将利用Python的Pyecharts库,对国防科技大学2016年的录取分数数据进行可视化分析。通过图表展示,我们可以清晰地看到不同省份的录取分数分布情况,为考生和家长提供有价值的参考信息。
数据准备
首先,我们需要准备好国防科技大学2016年的录取分数数据。数据包含以下字段:省份、理科一本线、工程技术类最高分、工程技术类最低分、工程技术类平均分、学历教育合训类最高分、学历教育合训类最低分、学历教育合训类平均分。以下是部分数据示例:
省份
理科一本线
工程技术类最高分
工程技术类最低分
工程技术类平均分
学历教育合训类最高分
学历教育合训类最低分
学历教育合训类平均分
北京
548
662
607
629
613
570
592
天津
512
659
634
649
600
537
567
河北
525
682
654
667
669
640
649
山西
519
639
617
625
638
579
599
内蒙古
484
641
615
627
623
558
597
辽宁
498
660
624
637
641
607
621
吉林
530
658
639
649
634
599
615
黑龙江
486
667
623
641
628
580
600
详细数据参考国防科技大学招生官网https://www.nudt.edu.cn/bkzs/xxgk/lqfs/6a4ee15ca795454083ed233f502b262b.htm 或者联系我。
Pyecharts简介
Pyecharts是一个用于生成Echarts图表的Python库。Echarts是一个使用JavaScript实现的开源可视化库,能够生成丰富的交互式图表。Pyecharts通过将Echarts的图表转化为Python代码,使得在Python环境下也能方便地生成高质量的图表。
数据可视化分析
接下来,我们将使用Pyecharts库对国防科技大学2016年的录取分数数据进行可视化分析。
首先导入数据并对数据中的异常值进行清洗,具体代码如下:
import numpy as npimport pandas as pd data = pd.read_excel("data.xlsx" )def replace_mean (df,col='A' ) : "col列中的'/'用这一列的均值来替换" df[col] = df[col].replace('/' , np.nan) mean_A = df[col].mean(skipna=True ) df[col].fillna(mean_A, inplace=True )for col in ['学历教育合训类最高分' ,'学历教育合训类最低分' ,'学历教育合训类平均分' ]: replace_mean(data,col)
1. 省份理科一本线分布图
首先,我们绘制一个柱状图,展示不同省份的理科一本线分布情况。
from pyecharts import options as optsfrom pyecharts.charts import Bar c = ( Bar() .add_xaxis(data['省 份' ].tolist()) .add_yaxis("理科一本线" , data['理科一本线' ].tolist()) .set_global_opts(title_opts=opts.TitleOpts(title="国防科技大学2016年理科一本线录取分数" , subtitle="各省分数情况分布" )) .render("bar_base.html" ) )

生成的柱状图清晰地展示了不同省份的理科一本线分布情况。可以看到,海南的理科一本线最高,达到了602分,而江苏的理科一本线最低,为353分,但各个地方的总分不同,需要做具体分析,这里就是展示一组数据而已,具体结果不具有参考性。
2. 工程技术类录取分数分布图
接下来,我们绘制三个折线图,分别展示工程技术类的最高分、最低分和平均分的分布情况。
import pyecharts.options as optsfrom pyecharts.charts import Line x_data = data['省 份' ].tolist() ( Line() .add_xaxis(xaxis_data=x_data) .add_yaxis( series_name="'理科一本线'" , stack="总量" , y_axis=data['理科一本线' ].tolist(), label_opts=opts.LabelOpts(is_show=False ), ) .add_yaxis( series_name="工程技术类最高分" , stack="总量" , y_axis=data['工程技术类最高分' ].tolist(), label_opts=opts.LabelOpts(is_show=False ), ) .add_yaxis( series_name="工程技术类最低分" , stack="总量" , y_axis=data['工程技术类最低分' ].tolist(), label_opts=opts.LabelOpts(is_show=False ), ) .add_yaxis( series_name="工程技术类平均分" , stack="总量" , y_axis=data['工程技术类平均分' ].tolist(), label_opts=opts.LabelOpts(is_show=False ), ) .set_global_opts( title_opts=opts.TitleOpts(title="工程技术类招聘分数" ), tooltip_opts=opts.TooltipOpts(trigger="axis" ), yaxis_opts=opts.AxisOpts( type_="value" , axistick_opts=opts.AxisTickOpts(is_show=True ), splitline_opts=opts.SplitLineOpts(is_show=True ), ), xaxis_opts=opts.AxisOpts(type_="category" , boundary_gap=False ), ) .render("stacked_line_chart.html" ) )

生成的折线图展示了工程技术类在不同省份的最高分、最低分和平均分的分布情况。可以看到,工程技术类的最高分和平均分在海南最高,分别为829分和750分;而最低分在江苏最高,为404分。
3. 学历教育合训类录取分数分布图
类似地,我们绘制三个折线图,展示学历教育合训类的最高分、最低分和平均分的分布情况。
scores_edu_max = [613 , 600 , 669 , 638 , 623 , 641 , 634 , 628 ] scores_edu_min = [570 , 537 , 640 , 579 , 558 , 607 , 599 , 580 ] scores_edu_avg = [592 , 567 , 649 , 599 , 597 , 621 , 615 , 600 ] line = Line() line.add_xaxis(provinces) line.add_yaxis("学历教育合训类最高分" , scores_edu_max) line.add_yaxis("学历教育合训类最低分" , scores_edu_min) line.add_yaxis("学历教育合训类平均分" , scores_edu_avg) line.set_global_opts( title_opts=opts.TitleOpts(title="学历教育合训类录取分数分布图" ), yaxis_opts=opts.AxisOpts(name="分数" ), xaxis_opts=opts.AxisOpts(name="省份" ), legend_opts=opts.LegendOpts(pos_left="left" ) ) line.render("edu_scores_distribution_chart.html" )

生成的折线图展示了学历教育合训类在不同省份的最高分、最低分和平均分的分布情况。可以看到,学历教育合训类的最高分在海南最高;最低分在江苏,和上面的结果一致。
4. 分数结合地图的展示
4.1 地图热力图
首先对省份数据进行清洗
province_mapping = { '北京' :"北京市" ,'天津' :"天津市" , '河北' :"河北省" ,'山西' :"山西省" , '内蒙古' :"内蒙古自治区" ,'辽宁' :"辽宁省" , '吉林' :"吉林省" ,'黑龙江' :"黑龙江省" , '上海' :"上海市" ,'安徽' :"安徽省" ,... } data['prov' ] = data['省 份' ].map(province_mapping)
绘制基于地图的省份理科一本线的详细代码如下:
from pyecharts import options as optsfrom pyecharts.charts import Map c = ( Map() .add("学历教育合训类最高分" , [list(z) for z in zip(data['prov' ].tolist(), data['学历教育合训类最高分' ].tolist())], "china" ) .set_global_opts( title_opts=opts.TitleOpts(title="国防科技大学学历教育合训类最高分分布" ), visualmap_opts=opts.VisualMapOpts(max_=max(data['学历教育合训类最高分' ].tolist()), min_=min(data['学历教育合训类最高分' ].tolist())), ) .render("map_visualmap.html" ) )

4.2 3D地图+3D柱状图工程技术类录取最高分情况
首先对数据进行清洗,做成绘图需要的数据结构,具体的数据结构如下:
[('广东' , [113.27 , 23.13 , 641 ]), ('黑龙江' , [127.9688 , 45.368 , 667 ]), ('内蒙古' , [110.3467 , 41.4899 , 641 ]), ('吉林' , [125.8154 , 44.2584 , 658 ]), ('辽宁' , [123.1238 , 42.1216 , 660 ]), ('河北' , [114.4995 , 38.1006 , 682 ]), ('天津' , [117.4219 , 39.4189 , 659 ]), ('山西' , [112.3352 , 37.9413 , 639 ]), ('陕西' , [109.1162 , 34.2004 , 665 ]), ('甘肃' , [103.5901 , 36.3043 , 632 ]), ('宁夏' , [106.3586 , 38.1775 , 637 ]), ('青海' , [101.4038 , 36.8207 , 596 ]), ('新疆' , [87.9236 , 43.5883 , 673 ]), ('西藏' , [91.11 , 29.97 , 0 ]), ('四川' , [103.9526 , 30.7617 , 665 ]), ('重庆' , [108.384366 , 30.439702 , 671 ]), ('山东' , [117.1582 , 36.8701 , 679 ]), ('河南' , [113.4668 , 34.6234 , 665 ]), ('江苏' , [118.8062 , 31.9208 , 404 ]), ('安徽' , [117.29 , 32.0581 , 655 ]), ('湖北' , [114.3896 , 30.6628 , 665 ]), ('浙江' , [119.5313 , 29.8773 , 692 ]), ('福建' , [119.4543 , 25.9222 , 632 ]), ('江西' , [116.0046 , 28.6633 , 645 ]), ('湖南' , [113.0823 , 28.2568 , 662 ]), ('贵州' , [106.6992 , 26.7682 , 671 ]), ('广西' , [108.479 , 23.1152 , 642 ]), ('海南' , [110.3893 , 19.8516 , 829 ]), ('上海' , [121.4648 , 31.2891 , 489 ])]
以('广东', [113.27, 23.13, 641])为例,'广东'表示省份,[113.27, 23.13]表示广东的经纬度,而641表示国防科技大学在广东省工程技术类招聘的最高分为641分;
具体的绘图代码如下:
import pyecharts.options as optsfrom pyecharts.charts import Map3Dfrom pyecharts.globals import ChartType map3d = ( Map3D( init_opts=opts.InitOpts( theme='white' , width='99vw' , height='97vh' , ) ) .set_global_opts( title_opts=opts.TitleOpts( title="3D地图+柱状图" , ), visualmap_opts=opts.VisualMapOpts( is_show=True , max_=1000 , ), ) .set_series_opts( label_opts=opts.LabelOpts( is_show=True ) ) .add_schema( maptype='china' , itemstyle_opts=opts.ItemStyleOpts( color="#1661AB" , border_width=0.8 , border_color="rgb(62,215,213)" ), ) .add( series_name='人数' , data_pair=data_pair, type_=ChartType.BAR3D, bar_size=1 , ) ) map3d.render("3D_Map.html" )

结论
通过对国防科技大学2016年的录取分数数据进行可视化分析,我们可以得出以下结论:
不同省份的高考总分不同,具体结果不具有实际意义,但并不影响数据可视化分析的流程;