This commit is contained in:
2025-09-11 21:34:02 +08:00
parent 9349d582b6
commit ec35818b13
6 changed files with 271 additions and 5 deletions

View File

@@ -20,6 +20,7 @@ class EducationDataModel:
TEACHER_COUNT_FILE = os.path.join(DATA_DIR, 'TeacherCount.json')
ENROLLMENT_COUNT_FILE = os.path.join(DATA_DIR, 'ZaiXiaoShengCount.json')
ADMISSION_COUNT_FILE = os.path.join(DATA_DIR, 'ZhaoShengCount.json')
POPULATION_FILE = os.path.join(DATA_DIR, 'RenKou.json') # 新增:人口数据文件路径
@staticmethod
def load_json_file(file_path):
@@ -247,6 +248,58 @@ class EducationDataModel:
return result
# 新增:人口数据相关方法
@staticmethod
def get_population_data_by_year(year):
"""获取指定年份的云南省人口数据"""
# 加载人口数据文件
population_data = EducationDataModel.load_json_file(EducationDataModel.POPULATION_FILE)
# 获取云南省数据
yunnan_data = EducationDataModel.get_province_data(population_data)
if not yunnan_data:
print(f"未获取到云南省{year}年的人口数据")
return None
year_str = str(year)
result = {
'year': year,
'total_population': yunnan_data.get('total_population', {}).get(year_str, 0), # 万人
'birth_population': yunnan_data.get('birth_population', {}).get(year_str, 0), # 原数据单位为个
'urban_population': yunnan_data.get('urban_population', {}).get(year_str, 0), # 万人
'rural_population': yunnan_data.get('rural_population', {}).get(year_str, 0), # 万人
'urbanization_rate': yunnan_data.get('urbanization_rate', {}).get(year_str, 0) # %
}
# 将新生人口转换为万人(如果是整数)
if isinstance(result['birth_population'], int):
result['birth_population'] = round(result['birth_population'] / 10000, 1)
return result
@staticmethod
def print_population_data(population_data):
"""打印人口数据"""
if not population_data:
print("没有可打印的人口数据")
return
year = population_data.get('year', '未知')
print(f"云南省 {year}年人口概览")
print("-------------------")
print(f"总人口 {population_data.get('total_population', 0):,} 万人")
print(f"新生人口 {population_data.get('birth_population', 0)} 万人")
print(f"城镇人口 {population_data.get('urban_population', 0):,} 万人")
print(f"乡村人口 {population_data.get('rural_population', 0):,} 万人")
print(f"城镇化率 {population_data.get('urbanization_rate', 0):.2f} %")
# 验证数据一致性
total = population_data.get('total_population', 0)
urban_rural_sum = population_data.get('urban_population', 0) + population_data.get('rural_population', 0)
if abs(total - urban_rural_sum) > 0.01:
print("\n注意:总人口与城镇人口+乡村人口存在差异")
print(f"差异值: {abs(total - urban_rural_sum):.2f} 万人")
@staticmethod
def print_education_data(data, year):
"""打印教育数据"""
@@ -268,20 +321,24 @@ class EducationDataModel:
for file_path in [EducationDataModel.SCHOOL_COUNT_FILE,
EducationDataModel.TEACHER_COUNT_FILE,
EducationDataModel.ENROLLMENT_COUNT_FILE,
EducationDataModel.ADMISSION_COUNT_FILE]:
EducationDataModel.ADMISSION_COUNT_FILE,
EducationDataModel.POPULATION_FILE]: # 新增:检查人口数据文件
if os.path.exists(file_path):
print(f"找到数据文件: {file_path}")
else:
print(f"警告:数据文件不存在: {file_path}")
# 获取数据
# 获取并打印教育数据
education_data = EducationDataModel.get_education_data_by_year(year)
# 打印数据
if education_data:
EducationDataModel.print_education_data(education_data, year)
else:
print("未获取到任何数据")
print("未获取到任何教育数据")
# 新增:获取并打印人口数据
print("\n" + "=" * 50)
population_data = EducationDataModel.get_population_data_by_year(year)
EducationDataModel.print_population_data(population_data)
except Exception as e:
print(f"获取数据时发生错误: {e}")