







代码:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import font_manager
# 设置字体以确保中文正常显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 或者其他支持中文的字体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 加载数据
file_path = '携程游记【列表+详情】.xlsx' # 请替换为您的文件路径
data = pd.read_excel(file_path, sheet_name='Sheet1')
# 数据清洗:去除缺失值和重复值
data_cleaned = data.dropna(subset=['关键词', '人均', '天数', '时间']) # 去除关键列的缺失值
data_cleaned = data_cleaned.drop_duplicates() # 去除重复行
# 转换天数列为数值类型
data_cleaned['天数'] = data_cleaned['天数'].str.extract('(\d+)').astype(float)
# 转换人均消费列为数值类型
data_cleaned['人均'] = data_cleaned['人均'].str.replace('元', '').astype(float)
# 关键词列转换为城市名称
data_cleaned['城市'] = data_cleaned['关键词'].apply(lambda x: x.split('游记')[0])
# 1. 热门目的地分布
city_counts = data_cleaned['城市'].value_counts()
plt.figure(figsize=(12, 6))
sns.barplot(x=city_counts.index, y=city_counts.values, palette='viridis')
plt.xticks(rotation=90)
plt.xlabel('城市')
plt.ylabel('游记数量')
plt.title('热门旅游目的地分布')
plt.tight_layout()
plt.show()
from wordcloud import WordCloud
# 1. 对'作者去了这些地方'列的数据进行词频统计
places_text = data_cleaned['作者去了这些地方'].dropna().str.cat(sep=' ') # 将所有文本连接成一个字符串
# 创建一个词云对象
wordcloud = WordCloud(font_path='msyh.ttc', width=800, height=400, background_color='white', max_words=200, min_font_size=10).generate(places_text)
# 2. 绘制词云
plt.figure(figsize=(10, 6))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('作者去过的地方词云', fontsize=16)
plt.tight_layout()
plt.show()
# 3. 统计词频并绘制前10个最常见的词
from collections import Counter
# 对文本进行分词,统计每个词出现的频率
word_counts = Counter(places_text.split())
# 获取出现次数最多的前10个词
top_words = word_counts.most_common(10)
# 绘制词频柱状图
top_words_df = pd.DataFrame(top_words, columns=['词语', '频率'])
plt.figure(figsize=(10, 6))
sns.barplot(x='频率', y='词语', data=top_words_df, palette='viridis')
plt.title('最常见的旅游目的地/相关词汇')
plt.xlabel('频率')
plt.ylabel('词语')
plt.tight_layout()
plt.show()
# 2. 人均消费分布
plt.figure(figsize=(10, 6))
sns.histplot(data_cleaned['人均'], kde=True, color='blue', bins=20)
plt.title('游客人均消费分布')
plt.xlabel('人均消费(元)')
plt.ylabel('频率')
plt.tight_layout()
plt.show()
# 3. 天数分布
plt.figure(figsize=(10, 6))
sns.histplot(data_cleaned['天数'], kde=True, color='green', bins=10)
plt.title('游客旅行天数分布')
plt.xlabel('旅行天数')
plt.ylabel('频率')
plt.tight_layout()
plt.show()
# 4. 时间分布(月份)
time_counts = data_cleaned['时间'].value_counts().sort_index()
plt.figure(figsize=(10, 6))
sns.barplot(x=time_counts.index, y=time_counts.values, palette='plasma')
plt.xlabel('月份')
plt.ylabel('游记数量')
plt.title('旅行时间分布')
plt.tight_layout()
plt.show()
# 5. 旅游方式分布
play_style_counts = data_cleaned['玩法'].value_counts()
plt.figure(figsize=(12, 6))
sns.barplot(x=play_style_counts.index, y=play_style_counts.values, palette='Set2')
plt.xticks(rotation=90)
plt.xlabel('旅游方式')
plt.ylabel('数量')
plt.title('游客旅游方式分布')
plt.tight_layout()
plt.show()
# 6. 游客类型分析
visitor_type_counts = data_cleaned['和谁'].value_counts()
plt.figure(figsize=(10, 6))
sns.barplot(x=visitor_type_counts.index, y=visitor_type_counts.values, palette='coolwarm')
plt.xticks(rotation=90)
plt.xlabel('游客类型')
plt.ylabel('数量')
plt.title('游客类型分布')
plt.tight_layout()
plt.show()
# 7. 热门旅游城市排名
top_cities = city_counts.head(10)
plt.figure(figsize=(12, 6))
sns.barplot(x=top_cities.index, y=top_cities.values, palette='magma')
plt.xticks(rotation=90)
plt.xlabel('城市')
plt.ylabel('游记数量')
plt.title('最受欢迎的旅游城市')
plt.tight_layout()
plt.show()
# 8. 人均消费与天数关系
plt.figure(figsize=(10, 6))
sns.scatterplot(x=data_cleaned['天数'], y=data_cleaned['人均'], color='purple')
plt.xlabel('旅行天数')
plt.ylabel('人均消费(元)')
plt.title('人均消费与旅行天数关系')
plt.tight_layout()
plt.show()
# 9. 旅行天数与游客类型的关系
plt.figure(figsize=(10, 6))
sns.boxplot(x=data_cleaned['和谁'], y=data_cleaned['天数'], palette='Set1')
plt.xticks(rotation=90)
plt.xlabel('游客类型')
plt.ylabel('旅行天数')
plt.title('旅行天数与游客类型的关系')
plt.tight_layout()
plt.show()
# 10. 旅行时间与城市的关系
city_time_counts = data_cleaned.groupby(['时间', '城市']).size().unstack(fill_value=0)
city_time_counts.plot(kind='bar', stacked=True, figsize=(12, 6))
plt.title('旅行时间与城市的关系')
plt.xlabel('月份')
plt.ylabel('游记数量')
plt.tight_layout()
plt.show()
数据

下载地址:
携程游记【列表+详情】数据集资源-优快云下载