You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
from pyecharts.charts import Bar
|
|
|
|
|
from pyecharts import options as opts
|
|
|
|
|
import pandas as pd
|
|
|
|
|
|
|
|
|
|
def process_data(raw_data):
|
|
|
|
|
"""
|
|
|
|
|
数据处理流程:
|
|
|
|
|
1. 转换为DataFrame
|
|
|
|
|
2. 过滤无效行政区
|
|
|
|
|
3. 按上传量降序排序
|
|
|
|
|
4. 取前10条记录
|
|
|
|
|
"""
|
|
|
|
|
df = pd.DataFrame(raw_data)
|
|
|
|
|
# 过滤空值(包括NaN和空字符串)
|
|
|
|
|
df = df[(df['行政区划名称'].notna()) & (df['行政区划名称'] != '')]
|
|
|
|
|
# 按上传量排序并保留前10
|
|
|
|
|
return df.sort_values('上传课程数量', ascending=False).head(10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_horizontal_barchart(data):
|
|
|
|
|
# 提取数据
|
|
|
|
|
schools = data['学校名称'].tolist()
|
|
|
|
|
counts = data['上传课程数量'].tolist()
|
|
|
|
|
|
|
|
|
|
# 创建图表对象
|
|
|
|
|
bar = Bar(init_opts=opts.InitOpts(width='1200px', height='600px'))
|
|
|
|
|
|
|
|
|
|
# 添加数据(横向柱状图需要反转坐标系)
|
|
|
|
|
bar.add_xaxis(counts)
|
|
|
|
|
bar.add_yaxis(
|
|
|
|
|
series_name="上传数量",
|
|
|
|
|
y_axis=schools,
|
|
|
|
|
itemstyle_opts=opts.ItemStyleOpts(color="#5470c6"),
|
|
|
|
|
label_opts=opts.LabelOpts(
|
|
|
|
|
position="right",
|
|
|
|
|
formatter="{b}: {c}"
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# 配置图表选项
|
|
|
|
|
bar.set_global_opts(
|
|
|
|
|
title_opts=opts.TitleOpts(
|
|
|
|
|
title="课程资源上传量TOP10学校排名"
|
|
|
|
|
#subtitle="数据来源:课程资源管理系统"
|
|
|
|
|
),
|
|
|
|
|
tooltip_opts=opts.TooltipOpts(
|
|
|
|
|
formatter=opts.TooltipItemOptsFormatter(
|
|
|
|
|
# 显示学校、行政区和数量
|
|
|
|
|
"行政区:{a}<br/>"
|
|
|
|
|
"上传量:<b>{c}</b>"
|
|
|
|
|
)
|
|
|
|
|
),
|
|
|
|
|
yaxis_opts=opts.AxisOpts(
|
|
|
|
|
name="学校名称",
|
|
|
|
|
axislabel_opts=opts.LabelOpts(
|
|
|
|
|
font_size=12,
|
|
|
|
|
formatter=lambda name: name[:6] + "..." if len(name) > 6 else name
|
|
|
|
|
)
|
|
|
|
|
),
|
|
|
|
|
xaxis_opts=opts.AxisOpts(name="上传数量(件)"),
|
|
|
|
|
datazoom_opts=[opts.DataZoomOpts(type_="inside")],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# 反转坐标系实现横向显示
|
|
|
|
|
# bar.reversal_axis()
|
|
|
|
|
|
|
|
|
|
return bar
|