问题分析
问题2要求我们对352个城市进行综合评价,选出“最令外国游客向往的50个城市”。我们需要考虑多个因素,如城市规模、环境环保、人文底蕴、交通便利,以及气候、美食等。这些因素是多维度的,因此我们需要建立一个多指标综合评价模型。
已更新数据
通过百度网盘分享的文件:2024-8华数杯C题(1).zip
链接:https://pan.baidu.com/s/1iuIP_-bNnt-yI25iCU5unQ?pwd=b8ky
提取码:b8ky
分析思路
-
确定评价指标体系:
- 城市规模(人口、GDP等)
- 环境环保(空气质量、绿地覆盖率等)
- 人文底蕴(历史遗迹、文化活动等)
- 交通便利(机场数量、高铁站数量等)
- 气候(舒适度、季节性等)
- 美食(餐厅数量、特色美食等)
-
数据标准化:
- 不同指标的数据量纲不同,需要进行标准化处理,使其在同一量纲下进行比较。
- 标准化方法可以采用极差标准化、z-score标准化等。
-
指标权重确定:
- 采用层次分析法(AHP)等方法确定各个指标的权重。
- 也可以通过专家打分或主观赋权的方法确定。
-
综合评分计算:
- 计算每个城市的综合得分。
- 按综合得分进行排序,选出前50个城市。
-
模型验证和调整:
- 通过实际数据验证模型的合理性,并进行适当调整。
数学公式
-
数据标准化:
对于指标 ( x_i ) ,标准化后的值 ( x_i’ ) 计算公式为:
[
x_i’ = \frac{x_i - \min(x)}{\max(x) - \min(x)}
]
或者:
[
x_i’ = \frac{x_i - \mu(x)}{\sigma(x)}
]
其中, ( \mu(x) ) 是均值, ( \sigma(x) ) 是标准差。 -
综合评分计算:
假设有 ( n ) 个指标,每个指标的权重为 ( w_i ),标准化后的值为 ( x_i’ ),则城市 ( j ) 的综合评分 ( S_j ) 计算公式为:
[
S_j = \sum_{i=1}^n w_i \cdot x_{ij}’
]
解决思路
-
数据收集和预处理:
收集352个城市的相关数据,包括人口、GDP、空气质量、历史遗迹数量、机场数量、高铁站数量、餐厅数量等信息。对数据进行缺失值处理和标准化处理。 -
确定权重:
采用层次分析法(AHP)或专家打分的方法确定各个指标的权重。确保权重和为1。 -
计算综合评分:
使用标准化后的数据和确定的权重,计算每个城市的综合评分。具体步骤如下:- 将原始数据标准化,得到标准化后的数据矩阵。
- 根据权重计算每个城市的综合评分。
-
城市排序和选择:
按综合评分对352个城市进行排序,选择得分最高的前50个城市作为“最令外国游客向往的城市”。
具体实现步骤
-
数据标准化:
通过极差标准化或z-score标准化将数据转换到同一量纲下。 -
权重确定:
构建层次分析法(AHP)的判断矩阵,计算各指标的权重。也可以通过专家打分进行主观赋权。 -
综合评分计算:
根据标准化后的数据和确定的权重,计算每个城市的综合评分,并进行排序。
示例代码
以下是使用Python进行数据标准化和综合评分计算的示例代码:
import pandas as pd
import numpy as np
# 假设我们已经收集了352个城市的相关数据,并存储在一个DataFrame中
data = pd.DataFrame({
'city': [f'city_{i+1}' for i in range(352)],
'population': np.random.randint(1e5, 1e7, 352),
'GDP': np.random.randint(1e9, 1e12, 352),
'air_quality': np.random.uniform(0, 100, 352),
'cultural_sites': np.random.randint(1, 50, 352),
'airport_count': np.random.randint(1, 10, 352),
'highspeed_train_stations': np.random.randint(1, 10, 352),
'restaurants': np.random.randint(10, 500, 352)
})
# 标准化数据
def min_max_standardize(column):
return (column - column.min()) / (column.max() - column.min())
for col in data.columns[1:]:
data[col] = min_max_standardize(data[col])
# 设置权重(假设已通过AHP或专家打分确定)
weights = {
'population': 0.1,
'GDP': 0.2,
'air_quality': 0.2,
'cultural_sites': 0.2,
'airport_count': 0.1,
'highspeed_train_stations': 0.1,
'restaurants': 0.1
}
# 计算综合评分
data['score'] = sum(weights[col] * data[col] for col in weights)
# 按综合评分排序
sorted_data = data.sort_values(by='score', ascending=False)
# 选择前50个城市
top_50_cities = sorted_data.head(50)
print(top_50_cities[['city', 'score']])