问题分析与解决思路
通过百度网盘分享的文件:2024-8华数杯C题(1).zip
链接:https://pan.baidu.com/s/1iuIP_-bNnt-yI25iCU5unQ?pwd=b8ky
提取码:b8ky
问题 1 分析
问题:请问352个城市中所有35200个景点评分的最高分(Best Score,简称BS)是多少?全国有多少个景点获评了这个最高评分(BS)?获评了这个最高评分(BS)景点最多的城市有哪些?依据拥有最高评分(BS)景点数量的多少排序,列出前10个城市。
分析:
-
数据量分析:
- 每个城市有100个景点,352个城市共计35200个景点。
- 每个景点有若干属性,其中景点评分是关键属性。
-
问题分解:
- 找出所有景点的评分,计算最高分BS。
- 统计获得最高评分BS的景点数量。
- 找出哪些城市拥有最多的最高评分BS的景点,并排序。
解决思路:
-
数据读取与预处理:
- 读取352个城市的csv文件,提取景点评分数据。
- 将评分数据存储在一个一维数组中便于处理。
-
计算最高评分BS:
- 遍历评分数组,找到最大值BS。
-
统计获得最高评分BS的景点数量:
- 遍历评分数组,统计等于BS的评分数量。
-
找到拥有最多BS评分景点的城市:
- 遍历每个城市的评分数据,统计每个城市中等于BS的景点数量。
- 将城市按景点数量排序,取前10名。
数学公式与计算
-
找到最高评分BS:
设评分数组为 ( S = {s_1, s_2, \ldots, s_{35200}} ),
则最高评分 ( BS = \max(S) )。 -
统计获得最高评分BS的景点数量:
设计数器 ( count = 0 ),
遍历评分数组 ( S ),
如果 ( s_i = BS ),则 ( count = count + 1 )。 -
统计每个城市中最高评分BS的景点数量:
设城市集合为 ( C = {c_1, c_2, \ldots, c_{352}} ),
每个城市 ( c_i ) 的景点评分集合为 ( S_i = {s_{i1}, s_{i2}, \ldots, s_{i100}} ),
设计数数组 ( count_{city} = {count_1, count_2, \ldots, count_{352}} ),
遍历每个城市 ( c_i ) 的评分集合 ( S_i ),
如果 ( s_{ij} = BS ),则 ( count_i = count_i + 1 )。 -
排序与选择前10名城市:
将 ( count_{city} ) 按降序排序,选择前10名对应的城市。
具体步骤
-
数据读取与预处理:
import pandas as pd import glob # 读取所有城市的csv文件 file_paths = glob.glob('path_to_csv_files/*.csv') all_scores = [] for file_path in file_paths: df = pd.read_csv(file_path) scores = df['景点评分'].tolist() all_scores.extend(scores)
-
计算最高评分BS:
BS = max(all_scores)
-
统计获得最高评分BS的景点数量:
BS_count = all_scores.count(BS)
-
统计每个城市中最高评分BS的景点数量:
city_BS_counts = [] for file_path in file_paths: df = pd.read_csv(file_path) scores = df['景点评分'].tolist() city_BS_count = scores.count(BS) city_BS_counts.append((file_path, city_BS_count)) city_BS_counts.sort(key=lambda x: x[1], reverse=True) top_10_cities = city_BS_counts[:10]
结果展示
- 最高评分BS:输出最高评分
- 获得最高评分BS的景点数量:输出数量
- 拥有最多BS评分景点的前10名城市:输出前10名城市及其对应的景点数量