旅游数据可视化分析【完整代码分析运行】

-1

【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道! 10w+人浏览 1.6k人参与

代码:

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()

数据

下载地址:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员奇奇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值