2024第五届华数杯数学建模竞赛A或C题完整模型+思路+代码+结果

数模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个城市”,我们需要建立一个多因素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微信公众号:数模0error

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值