数模0error
原题背景
最近,“city 不 city”这一网络流行语在外国网红的推动下备受关注。随着我国过境免签政策的落实,越来越多外国游客来到中国,通过网络平台展示他们在华旅行的见闻,这不仅推动了中国旅游业的发展,更是在国际舞台上展现了一个 真实而生动的中国,一举多得。 假设外国游客入境后能在中国境内逗留 144 小时,且能从任一城市附近的机场出境。由于每个城市景点较多,为了便于外国游客能够游览到更多的城市,现假定“每个城市只选择一个评分最高的景点游玩”,称之为“城市最佳景点游览原 则”。 现有一个包含中国(不含港澳台)352 个城市的旅游景点的数据集,每个城 市的 csv 文件中有 100 个景点,每个景点的信息包含有景点名称、网址、地址、 景点介绍、开放时间、图片网址、景点评分、建议游玩时长、建议游玩季节、门票信息、小贴士等。
背景分析
提取关键信息:
(1)“城市最佳景点游览原则”:假设外国游客入境后能在中国境内逗留 144 小时,且能从任一城市附近的机场出境。由于每个城市景点较多,为了便于外国游客能够游览到更多的城市,现假定“每个城市只选择一个评分最高的景点游玩”,称之为“城市最佳景点游览原则”。
(2)数据说明:现有一个包含中国(不含港澳台)352 个城市的旅游景点的数据集,每个城 市的 csv 文件中有 100个景点,每个景点的信息包含有景点名称、网址、地址、 景点介绍、开放时间、图片网址、景点评分、建议游玩时长、建议游玩季节、门票信息、小贴士等。
分析题目背景:
本题为了帮助外国游客在有限的时间内游览中国的最佳景点,我们需要利用数据集中的信息进行一些分析和建模。
-
首先根据关键信息(1),我们需要从每个城市的数据集中提取评分最高的景点信息。假设我们已经有了包含352个城市旅游景点的CSV文件。对每个城市,找到评分最高的景点,并记录其信息。我们可以编写一个脚本来处理这些CSV文件,并提取所需的数据。
-
其次,考虑到游客在144小时内需要游览多个城市,并且可能需要在不同城市之间进行交通转换,我们可以使用以下几种数学模型进行优化:
-
旅行商问题 (TSP): 这个问题可以被看作是一个典型的旅行商问题,其中每个城市是一个节点,景点是游客需要访问的地方。目标是找到一个路径,使得总的旅行时间或距离最小,同时确保游客在每个城市的停留时间在合理范围内。
-
时变网络模型: 考虑到不同交通方式(如高铁、飞机)的时间和费用,我们可以构建一个时变网络模型来优化旅行路径和时间。
-
下面,我们将根据具体的问题进行分析和解答。
问题一
原题
请问 352 个城市中所有 35200 个景点评分的最高分(Best Score,简称 BS)是多少?全国有多少个景点获评了这个最高评分(BS)?获评了这个最高评分(BS)景点最多的城市有哪些?依据拥有最高评分(BS)景点数量的多少排序,列出前 10 个城市。
思路
Step1:数据读取与处理
首先,我们需要读取所有352个城市的CSV文件,并提取每个景点的评分数据。我们可以使用Python中的Pandas库来处理这些数据。 其次,因为数据中存在数据缺失和类型不匹配问题,我们需要将空值剔除或者用0来填补,并将str型数据转换成float型。
Step2:计算最高评分(Best Score, BS)
我们需要遍历所有景点的评分数据,找到最高评分(BS)。然后统计获得最高评分(BS)的景点数量以及这些景点所在的城市。
Step3:统计各城市的最高评分(BS)景点数量
我们需要统计每个城市中获得最高评分(BS)的景点数量,并按数量排序,列出前10个城市。
程序
读取数据
import pandas as pd
import os
# 假设所有城市的CSV文件都存储在 "cities_data" 目录下
directory = "./附件"
# 用于存储所有景点评分数据
all_sights = []
# 遍历每个城市的CSV文件
for filename in os.listdir(directory):
if filename.endswith(".csv"):
city = filename.split('.')[0]
df = pd.read_csv(os.path.join(directory, filename))
df['城市'] = city
all_sights.append(df)
# 合并所有城市的数据
all_sights_df = pd.concat(all_sights)
all_sights_df
数据预处理
处理空值,将空值替换为数字0
将数据中的评分列转为数值型
# ValueError: could not convert string to float: '--
all_sights_df['评分'] = pd.to_numeric(all_sights_df['评分'], errors='coerce')
# Convert '评分' column from object to float
all_sights_df['评分'] = all_sights_df['评分'].astype(float)
寻找最终答案并输出结果:
# 找到最高评分(BS)
best_score = all_sights_df['评分'].max()
# 统计获得最高评分(BS)的景点数量
best_sights = all_sights_df[all_sights_df['评分'] == best_score]
best_sights_count = best_sights.shape[0]
# 统计每个城市中获得最高评分(BS)的景点数量
city_best_sights_count = best_sights['城市'].value_counts()
# 找到拥有最高评分(BS)景点数量最多的前10个城市
top_10_cities = city_best_sights_count.head(10)
# 输出结果
print(f"最高评分(BS)为:{best_score}")
print(f"全国共有 {best_sights_count} 个景点获得最高评分(BS)")
print("拥有最高评分(BS)景点最多的前10个城市为:")
print(top_10_cities)
问题二
原题
假如外国游客遵循“城市最佳景点游览原则”,结合城市规模、环境环保、人文底蕴、交通便利,以及气候、美食等因素,请你对 352 个城市进行综合评价,选出“最令外国游客向往的 50 个城市”。
思路
要对352个城市进行综合评价,选出“最令外国游客向往的50个城市”,我们需要建立一个多因素