赞
踩
最近,“city 不 city”这一网络流行语在外国网红的推动下备受关注。随着我国过境免签政策的落实,越来越多外国游客来到中国,通过网络平台展示他们在华旅行的见闻,这不仅推动了中国旅游业的发展,更是在国际舞台上展现了一个 真实而生动的中国,一举多得。
假设外国游客入境后能在中国境内逗留 144 小时,且能从任一城市附近的机场出境。由于每个城市景点较多,为了便于外国游客能够游览到更多的城市,现假定“每个城市只选择一个评分最高的景点游玩”,称之为“城市最佳景点游览原 则”。
现有一个包含中国(不含港澳台)352 个城市的旅游景点的数据集,每个城 市的 csv 文件中有 100
个景点,每个景点的信息包含有景点名称、网址、地址、 景点介绍、开放时间、图片网址、景点评分、建议游玩时长、建议游玩季节、门票信息、小贴士等。
提取关键信息:
(1)“城市最佳景点游览原则”:假设外国游客入境后能在中国境内逗留 144 小时,且能从任一城市附近的机场出境。由于每个城市景点较多,为了便于外国游客能够游览到更多的城市,现假定“每个城市只选择一个评分最高的景点游玩”,称之为“城市最佳景点游览原则”。
(2)数据说明:现有一个包含中国(不含港澳台)352 个城市的旅游景点的数据集,每个城 市的 csv 文件中有 100个景点,每个景点的信息包含有景点名称、网址、地址、 景点介绍、开放时间、图片网址、景点评分、建议游玩时长、建议游玩季节、门票信息、小贴士等。
分析题目背景:
本题为了帮助外国游客在有限的时间内游览中国的最佳景点,我们需要利用数据集中的信息进行一些分析和建模。
下面,我们将根据具体的问题进行分析和解答。
请问 352 个城市中所有 35200 个景点评分的最高分(Best Score,简称 BS)是多少?全国有多少个景点获评了这个最高评分(BS)?获评了这个最高评分(BS)景点最多的城市有哪些?依据拥有最高评分(BS)景点数量的多少排序,列出前 10 个城市。
首先,我们需要读取所有352个城市的CSV文件,并提取每个景点的评分数据。我们可以使用Python中的Pandas库来处理这些数据。
其次,因为数据中存在数据缺失和类型不匹配问题,我们需要将空值剔除或者用0来填补,并将str型数据转换成float型。
我们需要遍历所有景点的评分数据,找到最高评分(BS)。然后统计获得最高评分(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个城市”,我们需要建立一个多因素评价模型。这些因素包括城市规模、环境环保、人文底蕴、交通便利、气候、美食等。我们可以通过加权评分的方法来综合评估这些城市。
假设我们已经收集了上述指标的数据,可以用一个CSV文件来表示,其中每一列代表一个城市,每一列代表一个评价指标。
因为在原始的数据文件中指包含地点名称、网址、地址、景点介绍、开放时间、图片网址、评分、建议游玩时长、建议游玩季节、门票信息、小贴士等。并没有题目中的城市规模、环境保护、人文底蕴等信息,所以这部分数据需要我们自己补充。
由于各个指标的量纲不同,需要对数据进行标准化处理。
给每个指标分配权重,根据加权评分计算每个城市的综合评分。
根据综合评分进行排序,选出前50个城市。
import pandas as pd from sklearn.preprocessing import MinMaxScaler # 假设已经有一个包含所有城市及其各个评价指标的CSV文件 data = pd.read_csv('city_evaluation_data.csv') # 定义各个评价指标的权重 weights = { '城市规模': 0.2, '环境环保': 0.2, '人文底蕴': 0.2, '交通便利': 0.2, '气候': 0.1, '美食': 0.1 } # 对数据进行标准化处理 scaler = MinMaxScaler() normalized_data = pd.DataFrame(scaler.fit_transform(data[list(weights.keys())]), columns=list(weights.keys())) # 计算综合评分 normalized_data['综合评分'] = 0 for key in weights.keys(): normalized_data['综合评分'] += normalized_data[key] * weights[key] # 将综合评分添加回原始数据 data['综合评分'] = normalized_data['综合评分'] # 根据综合评分进行排序,选出前50个城市 top_50_cities = data.sort_values(by='综合评分', ascending=False).head(50) import ace_tools as tools; tools.display_dataframe_to_user(name="Top 50 Cities for Foreign Tourists", dataframe=top_50_cities) # 输出结果 print("最令外国游客向往的前50个城市为:") print(top_50_cities[['城市', '综合评分']])
现有一名外国游客从广州入境,他想在 144 小时以内游玩尽可能多的城市,同时要求综合游玩体验最好,请你规划他的游玩路线。需要结合游客的要求给出具体的游玩路线,包括总花费时间,门票和交通的总费用以及可以游玩的景点数量。他的要求有:
为了解决这个问题,我们需要建立一个优化模型,该模型考虑了游客的需求、时间限制以及交通方式。以下是具体步骤:
我们的目标是在144小时内最大化游客能够游玩的城市数量,同时保证综合游玩体验最佳。这可以通过以下步骤实现:
我们可以使用整数规划(Integer Programming)来解决这个优化问题。
为了建立问题3的模型,我们需要优化外国游客在144小时内游览尽可能多的城市,同时使综合游玩体验最好。这个问题可以通过整数规划(Integer Programming)来解决。以下是模型的详细步骤、公式和Python代码实现。
数据准备:
定义决策变量:
定义约束条件:
定义目标函数:
模型公式:
决策变量:
约束条件:
目标函数:
import pandas as pd from ortools.linear_solver import pywraplp # 读取数据 top_50_cities = pd.read_csv('top_50_cities.csv') # 包含最令外国游客向往的50个城市及其综合评分 high_speed_rail = pd.read_csv('high_speed_rail.csv') # 包含城市之间的高铁交通时间和费用 city_best_sights = pd.read_csv('city_best_sights.csv') # 包含每个城市最佳景点的游玩时间和门票费用 # 初始化模型 solver = pywraplp.Solver.CreateSolver('SCIP') # 定义变量 cities = top_50_cities['城市'].tolist() n = len(cities) x = {} for i in range(n): x[i] = solver.IntVar(0, 1, f'x[{i}]') # 时间和费用数据 travel_time = high_speed_rail.set_index('目的地')['时间'].to_dict() sight_time = city_best_sights.set_index('城市')['建议游玩时长'].to_dict() sight_cost = city_best_sights.set_index('城市')['门票费用'].to_dict() city_score = top_50_cities.set_index('城市')['综合评分'].to_dict() # 定义约束条件:时间限制 time_limit = 144 # 小时 time_constraints = solver.Constraint(0, time_limit) for i in range(n): city = cities[i] time_constraints.SetCoefficient(x[i], travel_time.get(city, 0) + sight_time.get(city, 0)) # 定义目标函数:最大化综合游玩体验(评分) objective = solver.Objective() for i in range(n): city = cities[i] objective.SetCoefficient(x[i], city_score[city]) objective.SetMaximization() # 求解模型 status = solver.Solve() if status == pywraplp.Solver.OPTIMAL: total_time = 0 total_cost = 0 total_sights = 0 visited_cities = [] for i in range(n): if x[i].solution_value() == 1: city = cities[i] total_time += travel_time.get(city, 0) + sight_time.get(city, 0) total_cost += sight_cost.get(city, 0) total_sights += 1 visited_cities.append(city) print("总游玩时间:", total_time, "小时") print("总费用:", total_cost, "元") print("总游玩景点数量:", total_sights, "个") print("游玩城市列表:", visited_cities) else: print("No optimal solution found.") # 显示数据框 import ace_tools as tools; tools.display_dataframe_to_user(name="Top 50 Cities for Foreign Tourists", dataframe=top_50_cities)
如果将问题 3 的游览目标改为:既要尽可能的游览更多的城市,又需要使门票和交通的总费用尽可能的少。请重新规划游玩路线,并给出门票和交通的总费用,总花费时间以及可以游玩的城市数量。
假设我们仍然有相同的数据集,包括“最令外国游客向往的50个城市”及其相关信息。
数据准备:
定义决策变量:
定义约束条件:
定义目标函数:
模型公式:
决策变量:
约束条件:
目标函数:
import pandas as pd from ortools.linear_solver import pywraplp # 读取数据 top_50_cities = pd.read_csv('top_50_cities.csv') # 包含最令外国游客向往的50个城市及其综合评分 high_speed_rail = pd.read_csv('high_speed_rail.csv') # 包含城市之间的高铁交通时间和费用 city_best_sights = pd.read_csv('city_best_sights.csv') # 包含每个城市最佳景点的游玩时间和门票费用 # 初始化模型 solver = pywraplp.Solver.CreateSolver('SCIP') # 定义变量 cities = top_50_cities['城市'].tolist() n = len(cities) x = {} for i in range(n): x[i] = solver.IntVar(0, 1, f'x[{i}]') # 时间和费用数据 travel_time = high_speed_rail.set_index('目的地')['时间'].to_dict() travel_cost = high_speed_rail.set_index('目的地')['费用'].to_dict() sight_time = city_best_sights.set_index('城市')['建议游玩时长'].to_dict() sight_cost = city_best_sights.set_index('城市')['门票费用'].to_dict() # 定义约束条件:时间限制 time_limit = 144 # 小时 time_constraints = solver.Constraint(0, time_limit) for i in range(n): city = cities[i] time_constraints.SetCoefficient(x[i], travel_time.get(city, 0) + sight_time.get(city, 0)) # 定义目标函数:最大化游览城市数量,并最小化费用 # 这里我们使用一个权重参数 lambda 来平衡两者 lambda_weight = 0.01 objective = solver.Objective() for i in range(n): objective.SetCoefficient(x[i], 1 - lambda_weight * (travel_cost.get(cities[i], 0) + sight_cost.get(cities[i], 0))) objective.SetMaximization() # 求解模型 status = solver.Solve() if status == pywraplp.Solver.OPTIMAL: total_time = 0 total_cost = 0 total_sights = 0 visited_cities = [] for i in range(n): if x[i].solution_value() == 1: city = cities[i] total_time += travel_time.get(city, 0) + sight_time.get(city, 0) total_cost += travel_cost.get(city, 0) + sight_cost.get(city, 0) total_sights += 1 visited_cities.append(city) print("总游玩时间:", total_time, "小时") print("总费用:", total_cost, "元") print("总游玩景点数量:", total_sights, "个") print("游玩城市列表:", visited_cities) else: print("No optimal solution found.") # 显示数据框 import ace_tools as tools; tools.display_dataframe_to_user(name="Top 50 Cities for Foreign Tourists", dataframe=top_50_cities)
现有一名外国游客只想游览中国的山景,他乘飞机入境中国的城市不限。请你为他选择入境的机场和城市,并个性化定制他的 144 小时旅游路线,既要尽可能的游览更多的山,又需要使门票和交通的总费用尽可能的少。需要结合游客的要求给出具体的游玩路线,包括总花费时间,门票和交通的总费用以及可以游玩的景点数量。他的要求有:
为了帮助这名外国游客在144小时内游览尽可能多的山景,并且在控制费用的情况下选择最佳路线,我们需要建立一个多目标优化模型。以下是具体步骤:
选择入境城市的策略可以基于入境城市到其他城市的高铁交通便利性和山景的分布情况。
我们同样可以使用整数规划(Integer Programming)来解决这个优化问题。
具体见我B站视频:B站
如果需要更多详细代码,请把上述思路复制粘贴到我的gpt网站生成代码 传送门
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。