Files
YunNanProject/Model/RuYuanZaiYuanCount.py
2025-09-10 16:27:38 +08:00

118 lines
4.2 KiB
Python

import json
from pyecharts import options as opts
from pyecharts.charts import Bar, Line
from pyecharts.globals import CurrentConfig
from Config.Config import ONLINE_HOST
CurrentConfig.ONLINE_HOST = ONLINE_HOST
class RuYuanZaiYuanModel:
@staticmethod
def load_student_data():
try:
# 加载招生数据(入园人数)
with open("./Data/ZhaoShengCount.json", "r", encoding="utf-8") as f:
enrollment_data = json.load(f)
# 加载在校生数据(在园人数)
with open("./Data/ZaiXiaoShengCount.json", "r", encoding="utf-8") as f:
in_school_data = json.load(f)
return enrollment_data, in_school_data
except Exception as e:
print(f"读取学生数据出错: {e}")
return [], []
@staticmethod
def generate_preschool_education_config():
# 获取学前教育相关数据
enrollment_data, in_school_data = RuYuanZaiYuanModel.load_student_data()
# 提取云南省级数据
yunnan_enroll = next((item for item in enrollment_data if item["area_name"] == "云南省"), None)
yunnan_in_school = next((item for item in in_school_data if item["area_name"] == "云南省"), None)
if not yunnan_enroll or not yunnan_in_school:
return {}
# 提取年份数据(2015-2024)
years = [str(year) for year in range(2015, 2025)]
# 构建学前教育数据
enroll_total = [] # 入园总数
in_school_total = [] # 在园总数
for year in years:
# 入园总数(招生数据)
enroll_data = yunnan_enroll["education_data"]["preschool"].get(year, {})
enroll_total.append(enroll_data.get("total", 0))
# 在园总数(在校生数据)
in_school_data = yunnan_in_school["student_data"]["preschool"].get(year, {})
in_school_total.append(in_school_data.get("total", 0))
# 构建ECharts配置
option = {
"title": {
"text": "云南省学前教育人数统计",
"left": "center",
"textStyle": {"color": "#333"}
},
"tooltip": {
"trigger": "axis",
"axisPointer": {"type": "shadow"}
},
"legend": {
"data": ["入园总数", "在园总数"],
"top": 30,
"textStyle": {"color": "#333"}
},
"xAxis": {
"type": "category",
"data": years,
"axisLabel": {"color": "#333"},
"axisLine": {"lineStyle": {"color": "#333"}}
},
"yAxis": {
"type": "value",
"name": "人数",
"min": 0,
"max": 100,
"interval": 30,
"axisLabel": {
"formatter": "{value} 万人",
"color": "#333"
},
"axisLine": {"lineStyle": {"color": "#333"}},
"splitLine": {"lineStyle": {"color": "rgba(0,0,0,0.1)"}}
},
"series": [
{
"name": "入园总数",
"type": "bar",
"data": enroll_total,
"itemStyle": {
"color": "#5470c6",
"borderRadius": [4, 4, 0, 0]
},
"barWidth": "40%"
},
{
"name": "在园总数",
"type": "line",
"data": in_school_total,
"lineStyle": {"color": "#91cc75", "width": 3},
"symbol": "circle",
"symbolSize": 8,
"itemStyle": {"color": "#91cc75"}
}
],
"grid": {
"left": "3%",
"right": "4%",
"bottom": "3%",
"containLabel": True
}
}
return option