Pandas+Pyecharts | 山东省高考考生数据分析可视化

简介: Pandas+Pyecharts | 山东省高考考生数据分析可视化

大家好,我是欧K~

本期我们通过分析山东省高考考生考试成绩分布数据以及双一流大学(985/211)录取山东省考生数据,看看:

  • 山东省考生高考成绩主要集中在哪些区间
  • 本科上线率有多少
  • 双一流大学录取最低分各是多少
  • 考生报考比较多的专业有哪些
  • ...

希望对小伙伴们有所帮助,如有疑问或者需要改进的地方可以私信小编。

涉及到的库:

  • Pandas — 数据处理
  • Pyecharts — 数据可视化

可视化部分:

  • 柱状图 — Bar
  • 折线图 — Line
  • 饼图 — Pie
  • 组合组件 — Grid


1. 导入模块


import re
import os
import pandas as pd
from pyecharts.charts import Bar
from pyecharts.charts import Line
from pyecharts.charts import Grid
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode


2. Pandas数据处理

2.1 读取数据


df = pd.read_excel('./data/2020年夏季高考和普通高中学业水平等级模拟考试文化成绩一分一段表.xlsx',header=None,skiprows=[0])
df.head(10)

结果:


2.2 行数据填充,重置列索引,去除前2行


df.loc[0] = df.loc[0].fillna(method = 'ffill')
df.iloc[:,0] = df.iloc[:,0].fillna('')
df.columns = df.loc[0] + df.loc[1]
df = df[2:]
df.head(10)

结果:



3. Pyecharts可视化

3.1 所有考生及各学科总分分布图

colors = ["#00BCD4","#ea1d5d", "#ffb900", "#4FC3F7"]
L1 = (
    Line()
    .add_xaxis(df['分数段'])
    .add_yaxis("所有考生本段人数",df['所有考生本段人数'],symbol_size=0.5,)
    .set_series_opts(
        areastyle_opts=opts.AreaStyleOpts(opacity=1, color=colors[0]),
        label_opts=opts.LabelOpts(is_show=False),
        markarea_opts=opts.MarkAreaOpts(
            data=[
                opts.MarkAreaItem(
                    name="本科线", x=(435, 437),y=(0,2000),
                    label_opts=opts.LabelOpts(color=colors[1]),
                    itemstyle_opts=opts.ItemStyleOpts(color=colors[1])
                )
            ]
        )
    )
    .set_global_opts(
        legend_opts=opts.LegendOpts(is_show=False),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        title_opts=opts.TitleOpts(title="所有考生总分分布",pos_bottom="93%",pos_left="center",
                                  title_textstyle_opts=opts.TextStyleOpts(color=colors[2], font_size=18),
        ),
        xaxis_opts=opts.AxisOpts(min_=df['分数段'].min(),
                                axislabel_opts=opts.LabelOpts(font_size=12, color=colors[3]),
                                axisline_opts=opts.AxisLineOpts(
                                     is_show=False,linestyle_opts=opts.LineStyleOpts(width=2, color=colors[3]))
                                ),
        yaxis_opts=opts.AxisOpts(
            axislabel_opts=opts.LabelOpts(font_size=12, color=colors[3]),
            axisline_opts=opts.AxisLineOpts(
                is_show=False,
                linestyle_opts=opts.LineStyleOpts(width=2, color=colors[3])
            ),)
    )
)
grid = Grid(init_opts=opts.InitOpts(width='1000px', height='1200px',bg_color='#0d0735'))
grid.add(L1,  grid_opts=opts.GridOpts(pos_bottom="75%", pos_top="5%"))

效果:

  • 所有考生的成绩基本呈正太分布,本科线附近考生数量基本靠近最大值
  • 理科(物理/化学/生物)考生的成绩分布与所有考生的成绩分布基本一致
  • 文科(政治/历史/地理)考生的成绩分布呈非正太分布,存在本科线以下的小波峰,过线率要偏低

3.2 本科上线人数比例


b1 = (
     Bar()
     .add_xaxis(df_rate_data.index.tolist()[::-1])
     .add_yaxis('', df_rate_data[0].values.tolist()[::-1], category_gap='40%')
     .set_series_opts(
         label_opts=opts.LabelOpts(
            position='insideRight',
            vertical_align='middle',
            font_size=14,
            font_weight='bold',                                                
            formatter='{c} %')
      )
      .set_global_opts(
           xaxis_opts=opts.AxisOpts(
               position='top', 
                axislabel_opts=opts.LabelOpts(font_size=16, color=colors[3]),
                axisline_opts=opts.AxisLineOpts(
                     is_show=False,linestyle_opts=opts.LineStyleOpts(width=2, color=colors[3]))
                ),
            yaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(font_size=16, color=colors[3]),
                axisline_opts=opts.AxisLineOpts(
                    is_show=False,
                    linestyle_opts=opts.LineStyleOpts(width=2, color=colors[3])
                ),),          
          title_opts=opts.TitleOpts(title="本科上线人数比例", pos_top="3%", pos_right="center",
                                 title_textstyle_opts=opts.TextStyleOpts(color=colors[2], font_size=20),),         
)
      .reversal_axis()
)

效果:

  • 本科上线考生占比 51.22%,基本一半以上的考生是过了本科线的
  • 可以看出理科考生本科上线占比要明显高于文科考生

3.3 各学科考生比例

color_series = ['#C9DA36','#37B44E','#1E91CA','#6A368B','#D5225B','#CF7B25']
df1=df.iloc[-1,[i%2==0 and i!=0 for i in range(len(df.columns))]]
subj_data = [round(i/df1.values.tolist()[-1]*100,2) for i in df1.values.tolist()][:-1]
subj_name = ['物理','化学','生物','历史','地理','政治']
df_subj = pd.DataFrame(subj_data,index=subj_name,columns=['比例'])
df_subj.sort_values('比例',ascending=False,inplace=True)
P = (
    Pie(init_opts=opts.InitOpts(width='1000px', height='600px',bg_color='#0d0735'))
    .add(
        "",
        [list(z) for z in zip(df_subj.index, df_subj['比例'])],
        radius=["30%", "70%"],
        center=["50%", "50%"],
        rosetype="radius",
        label_opts=opts.LabelOpts(is_show=False),
    )
    .set_colors(color_series)
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}%",font_size=16))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="各学科\n考生比例", pos_top="46%", pos_right="center",
                                 title_textstyle_opts=opts.TextStyleOpts(color=colors[2], font_size=28),),   
        legend_opts=opts.LegendOpts(is_show=False),
    )
)

效果:

所有考生中选考政治科目的人数最多,占比超过2/3,达到了63.6%,选考历史的人数最少,占比为34.31%。

3.4 985/211大学(理工类)录取最低平均分数

line1 = (
    Line()
    .add_xaxis(y_score_mean)
    .add_yaxis(
        series_name = '最低平均分', 
        y_axis = x_data,
        symbol ="diamond",
        symbol_size=14,
        z=10,
        linestyle_opts=opts.LineStyleOpts(color="#FFEB3B", width=3),
        itemstyle_opts=opts.ItemStyleOpts(border_width=2, border_color="#C62828", color="#FFEB3B"),
        label_opts=opts.LabelOpts(color='#FFEB3B',position='right'),      
    )
)
bar1 = (
    Bar()
    .add_xaxis(x_data)
    .add_yaxis("2017年", y_score_2017, color='#EC407A')
    .add_yaxis("2018年", y_score_2018, color='#26A69A')
    .add_yaxis("2019年", y_score_2019, color='#3F51B5')
    .set_series_opts(
         label_opts=opts.LabelOpts(
            position='inside',
            vertical_align='middle',
         ),
      )
    .set_global_opts(
        tooltip_opts=opts.TooltipOpts(is_show=True, trigger='axis', axis_pointer_type='cross'),        
        datazoom_opts=opts.DataZoomOpts(orient="vertical",range_start=70,range_end=100),
        title_opts=opts.TitleOpts(
            title='985/211大学(理工类)录取最低分数',
            subtitle='<制图@公众号:Python当打之年>',
            pos_left='center',
            pos_top='1%',
            title_textstyle_opts=opts.TextStyleOpts(color='#ffb900', font_size=18),
        ),
        legend_opts=opts.LegendOpts(pos_left="center", pos_top='7%'),
        xaxis_opts=opts.AxisOpts(
            min_=400,
            axislabel_opts=opts.LabelOpts(font_size=14, color='#c2ff00'),
            axisline_opts=opts.AxisLineOpts(
                is_show=False,
                linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093'))),
        yaxis_opts=opts.AxisOpts(
            axislabel_opts=opts.LabelOpts(font_size=14, color='#c2ff00'),
            axisline_opts=opts.AxisLineOpts(
                is_show=False,
                linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093')
            ),
        )
    )
    .reversal_axis()    
)

效果:

  • 985/211大学(理工类)录取平均最低分数最高的前三甲学校:北京大学(689),复旦大学(681),上海交通大学(673)
  • 中国科学技术大学(671),浙江大学(670),中国人民大学(668),南京大学(668)次之

3.5 985/211大学(理工类)录取最低平均位次

  • 985/211大学(理工类)录取平均最低位次最高的前三甲学校:清华大学(20),北京大学(77),复旦大学(223),上海交通大学(473)
  • 中国科学技术大学(554), 浙江大学(572),南京大学(687)紧随其后

3.6 985/211大学(文史类)录取最低平均分数

  • 985/211大学(文史类)录取平均最低分数最高的前三甲学校:清华大学(664),北京大学(653),复旦大学(645),
  • 中国人民大学(642),上海交通大学(641),浙江大学(639)次之

3.7 985/211大学(文史类)录取最低平均位次

  • 985/211大学(文史类)录取平均最低位次最高的前三甲学校:清华大学(20),北京大学(29),复旦大学(91)
  • 中华人民大学(118),上海交通大学(144),浙江大学(172)紧随其后

3.8 985/211大学录取数量前15的理工类专业

P1 = (
    Pie(init_opts=opts.InitOpts(width='1000px', height='600px',bg_color='#0d0735'))
    .add(
        "",
        [list(z) for z in zip(df_subj_top10['专业名称'].values.tolist(), df_subj_top10['数量'].values.tolist())],
        radius=["40%", "70%"],
        center=["50%", "50%"],
        label_opts=opts.LabelOpts(is_show=False),
    )
    .set_colors(color_series)
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}",font_size=16))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="录取数量前15的\n理工类专业", pos_top="46%", pos_right="center",
                                 title_textstyle_opts=opts.TextStyleOpts(color=colors[2], font_size=28),),   
        legend_opts=opts.LegendOpts(is_show=False),
    )
)

效果:


3.9 985/211大学录取数量前15的文史类专业


4. 项目在线运行地址


篇幅原因,部分代码未展示,在线运行地址(含源码)https://www.heywhale.com/mw/project/62a037c3744a8f77ab3c0450END


以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、点在看也可以分享让更多人知道

相关文章
|
11天前
|
数据采集 数据可视化 数据挖掘
利用Python和Pandas库优化数据分析流程
在当今数据驱动的时代,数据分析已成为企业和个人决策的重要依据。Python作为一种强大且易于上手的编程语言,配合Pandas这一功能丰富的数据处理库,极大地简化了数据分析的流程。本文将探讨如何利用Python和Pandas库进行高效的数据清洗、转换、聚合以及可视化,从而优化数据分析的流程,提高数据分析的效率和准确性。
|
11天前
|
SQL 数据采集 数据挖掘
构建高效的Python数据处理流水线:使用Pandas和NumPy优化数据分析任务
在数据科学和分析领域,Python一直是最受欢迎的编程语言之一。本文将介绍如何通过使用Pandas和NumPy库构建高效的数据处理流水线,从而加速数据分析任务的执行。我们将讨论如何优化数据加载、清洗、转换和分析的过程,以及如何利用这些库中的强大功能来提高代码的性能和可维护性。
|
11天前
|
数据可视化 数据挖掘 BI
【Python】—— pandas 数据分析
【Python】—— pandas 数据分析
|
11天前
|
数据采集 数据可视化 数据挖掘
如何利用Python中的Pandas库进行数据分析和可视化
Python的Pandas库是一种功能强大的工具,可以用于数据分析和处理。本文将介绍如何使用Pandas库进行数据分析和可视化,包括数据导入、清洗、转换以及基本的统计分析和图表绘制。通过学习本文,读者将能够掌握利用Python中的Pandas库进行高效数据处理和可视化的技能。
|
11天前
|
机器学习/深度学习 数据采集 数据可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
|
11天前
|
前端开发 数据可视化 数据挖掘
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享(下)
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享
|
11天前
|
SQL 数据采集 数据可视化
使用Python Pandas实现两表对应列相加(即使表头不同)
使用Python Pandas实现两表对应列相加(即使表头不同)
34 3
|
5天前
|
数据采集 数据可视化 数据处理
利用Python和Pandas库实现高效的数据处理与分析
在大数据和人工智能时代,数据处理与分析已成为不可或缺的一环。Python作为一门强大的编程语言,结合Pandas库,为数据科学家和开发者提供了高效、灵活的数据处理工具。本文将介绍Pandas库的基本功能、优势,并通过实际案例展示如何使用Pandas进行数据清洗、转换、聚合等操作,以及如何利用Pandas进行数据可视化,旨在帮助读者深入理解并掌握Pandas在数据处理与分析中的应用。
|
6天前
|
架构师 数据挖掘 Python
最全pandas库(Python),2024年最新阿里云架构师面试
最全pandas库(Python),2024年最新阿里云架构师面试
最全pandas库(Python),2024年最新阿里云架构师面试
|
7天前
|
数据挖掘 数据处理 Python
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧
【5月更文挑战第19天】在 Python 数据分析中,pandas DataFrame 是核心工具。本文介绍了几个高级技巧:1) 横向合并 DataFrame;2) 数据分组与聚合;3) 处理缺失值;4) 数据重塑;5) 条件筛选;6) 使用函数处理数据。掌握这些技巧能提升数据处理效率和分析深度,助你更好地发掘数据价值。
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧