数据可视化之中国大学综合排名实战(二)

中国大学综合排名

1、导包

from pyecharts.charts import Map, Bar, Pie
from pyecharts import options as opts
from pyecharts.render import make_snapshot
import pandas as pd
from snapshot_selenium import snapshot

2、数据清洗

#  读取数据
df = pd.read_excel("./xlsx/中国大学综合排名2021.xlsx")
# 打印前5条数据
print(df.head())
# 查看表格数据类型
print(df.dtypes)
# 查看表格数据描述
print(df.describe())
# 查看表格缺失数据
print(df.isnull().sum())
#  填充某一列缺失数据
# 填充升/降数据,以填充0为例:
df["升/降"].fillna(0, inplace=True)
# 再次查看表格缺失数据
print(df.isnull().sum())
# 一次性填充所有缺失数据
df.fillna(0, inplace=True)
# 把数据的统计信息给打印出来
print(df.describe())

# 统计所有排名未改变的学校
print(df[df["升/降"] == 0])
# 统计前50名中排名下降的学校
print(df.loc[(df["排名"] < 50) & (df["升/降"] < 0), :])

3、数据可视化

1. 各省市大学数量和平均分柱状图(横向)

# 统计各省市大学数量
df_counts = df.groupby('省市')['学校名称'].agg("count")
# 各省市大学平均分排序
df_means0 = df.groupby('省市')['总分'].agg("mean")
df_means = df_means0.round(2)  # 保留两位小数点
df1 = pd.concat([df_counts, df_means], axis=1)  # 重点concat数据连接axis=1按列
df1.columns = ['数量', '平均分']  # 重点设置groupby里面的行标题
df1.sort_values(by=['平均分'], ascending=False, inplace=True)  # 使用平均分进行排序

# 把数据转为list类型,做图形
d1 = df1.index.tolist()
d2 = df1["数量"].values.tolist()
d3 = df1["平均分"].values.tolist()

# 各省市大学数量和平均分柱状图(横向)
bar = (
    Bar(init_opts=opts.InitOpts(bg_color="white"))
        .add_xaxis(d1)
        .add_yaxis("数量", d2)
        .add_yaxis("平均分数", d3)
        .set_global_opts(title_opts=opts.TitleOpts(title="中国大学排名"),
                         yaxis_opts=opts.AxisOpts(name="量"),
                         xaxis_opts=opts.AxisOpts(name="省份"))
)

make_snapshot(snapshot, bar.render("./html/ChinaBarX.html"), "./img/ChinaBarX.png")

2. 各省市大学数量和平均分柱状图(纵向)

df1.sort_values(by=['平均分'], ascending=True, inplace=True)  # 使用平均分进行排序

d1 = df1.index.tolist()
d2 = df1["数量"].values.tolist()
d3 = df1["平均分"].values.tolist()

bar = (
    Bar(init_opts=opts.InitOpts(bg_color="white"))
        .add_xaxis(d1)
        .add_yaxis("数量", d2)
        .add_yaxis("平均分数", d3)
        .reversal_axis()
        .set_series_opts(label_opts=opts.LabelOpts(position='right'))
        .set_global_opts(title_opts=opts.TitleOpts(title="中国大学排名"),
                         yaxis_opts=opts.AxisOpts(name="量"),
                         xaxis_opts=opts.AxisOpts(name="省份"))
)

make_snapshot(snapshot, bar.render("./html/ChinaBarY.html"), "./img/ChinaBarY.png")

3. 各省市大学数量玫瑰图

city = df_counts.index.tolist()
num = df_counts.values.tolist()
# radius=["20%", "60%"] 饼图的半径,数组的第一项是内半径,第二项是外半径
# center=["50%", "55%"] 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
# rosetype="radius" 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。

pie = (
    Pie(init_opts=opts.InitOpts(bg_color="white"))
        .add("", [list(z) for z in zip(city, num)], radius=["20%", "60%"], center=["50%", "55%"], rosetype="radius")
        .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{d}%'))
)
#
make_snapshot(snapshot, pie.render("./html/meiguiPie.html"), "./img/meiguiPie.png")

4. 各省市大学数量南丁格尔玫瑰图

df_counts.sort_values(ascending=False, inplace=True)
pro = df_counts.index.tolist()
nums = df_counts.values.tolist()

piendge = (
    Pie(init_opts=opts.InitOpts(bg_color="white"))
        .add("", [list(z) for z in zip(pro, nums)], radius=["30%", "105%"], center=["50%", "60%"], rosetype="area")
        .set_global_opts(title_opts=opts.TitleOpts(title="中国大学排名"), legend_opts=opts.LegendOpts(is_show=False))
        .set_series_opts(
        label_opts=opts.LabelOpts(is_show=True, position="inside", formatter='{b}:{c}', font_weight="bold",
                                  font_size=15))
)
make_snapshot(snapshot, piendge.render("./html/NdgePie.html"), "./img/NdgePie.png")

5. 中国大学排名地图

citys = df_counts.index.tolist()
res = df_counts.values.tolist()

map = (
    Map(init_opts=opts.InitOpts(bg_color="white"))
        .add("", [list(z) for z in zip(citys, res)], "china")
        .set_global_opts(title_opts=opts.TitleOpts(title="中国大学排名"),
                         visualmap_opts=opts.VisualMapOpts(is_show=True, max_=40, split_number=8, is_piecewise=True))
)
make_snapshot(snapshot, map.render("./html/ChinaMap.html"), "./img/ChinaMap.png")

posted @   你的铁铁  阅读(336)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示