机器学习每周挑战——旅游景点数据分析

数据的截图,数据的说明:

复制代码
# 字段    数据类型
# 城市    string
# 名称    string
# 星级    string
# 评分    float
# 价格    float
# 销量    int
# 省/市/区 string
# 坐标    string
# 简介    string
# 是否免费  bool
# 具体地址  string

拿到数据第一步我们先导入数据,查看一下数据的分布,类型等

复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt



data = pd.read_excel("旅游景点.xlsx")
pd.set_option("display.max_columns",100)
# print(data.head())

print(data.info())
print(data.isnull().sum())

接下来我们来看具体的问题:

复制代码
# 问题(先大概分析一下)
# 1、全国景点分布 (我们分析城市的分布即可)
# 2、国民出游分析 (我们可以分析评分,城市,销量之间的关系 )
# 3、景区价格分析 (我们分析价格因素)
复制代码
# 问题看完之后,我们开始对数据进行预处理
# 由于星级对我们问题的分析帮助很大,所以我们无法用删除,或者众数等方式填充,因此我们用无来填充,将其划分为一个新的类别
复制代码
data["星级"] = data["星级"].fillna("无")
print(data["星级"].isnull().sum())
复制代码
至于简介和地址,缺失数据无关紧要,这里我们可以选择用无来填充,也可以用删除来处理,为了不破坏数据的完整性,这里我选择用无来填充
复制代码
data = data.fillna("无")
# print(data.isnull().sum())
# 这样我们的数据就没有了缺失值
# print(data.info())
复制代码
# 1、全国景点分布 (我们分析城市的分布即可)
复制代码
scenic = data['城市'].value_counts().sort_values(ascending=False)
plt.figure()
scenic.plot(kind='bar',stacked=False,colormap='viridis',figsize=(10,6))
plt.title("各个城市景点数量分布图")
plt.xlabel('城市')
plt.ylabel('景点个数')
# plt.show()
复制代码
# 2、国民出游分析 (我们可以分析评分,城市,销量之间的关系 )
复制代码
# data['销量'] = data['销量'].astype(int)   这种转换类型的方法,如果有无法转换的值,则无法转换
data['评分'] = pd.to_numeric(data['评分'], errors='coerce')
data['销量'] = pd.to_numeric(data['销量'],errors='coerce')
data['价格'] = pd.to_numeric(data['价格'],errors='coerce')

city_sales = data.groupby('城市')['销量'].sum()
city_sales = city_sales.sort_values(ascending=False)

plt.figure()
city_sales.plot(kind='bar',stacked=True,colormap='plasma',figsize=(10,6))
plt.title('各个城市景点门票销量')
plt.xlabel('城市')
plt.ylabel('销量')
复制代码
# 从销量可以看出北京,上海,江苏,四川,陕西,广东的销量较高,因此,我们着重分析这六个地方的景点评分
复制代码
shanghai = data[data['城市'].str.contains('上海')]
beijing = data[data['城市'].str.contains('北京')]
jiangsu = data[data['城市'].str.contains('江苏')]
sichuan = data[data['城市'].str.contains('四川')]
shanxi = data[data['城市'].str.contains('陕西')]
guangdong = data[data['城市'].str.contains('广东')]

shanghai_group = shanghai.groupby('名称')['销量'].sum().reset_index()
beijing_group = beijing.groupby('名称')['销量'].sum().reset_index()
jiangsu_group = jiangsu.groupby('名称')['销量'].sum().reset_index()
sichuan_group = sichuan.groupby('名称')['销量'].sum().reset_index()
shanxi_group = shanxi.groupby('名称')['销量'].sum().reset_index()
guangdong_group = guangdong.groupby('名称')['销量'].sum().reset_index()

shanghai_sort = shanghai_group.merge(shanghai[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
beijing_sort = beijing_group.merge(beijing[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
jiangsu_sort = jiangsu_group.merge(jiangsu[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
sichuan_sort = sichuan_group.merge(sichuan[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
shanxi_sort = shanxi_group.merge(shanxi[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
guangdong_sort = guangdong_group.merge(guangdong[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)

shanghai_sort.reset_index(drop=True,inplace=True)
beijing_sort.reset_index(drop=True,inplace=True)
jiangsu_sort.reset_index(drop=True,inplace=True)
sichuan_sort.reset_index(drop=True,inplace=True)
shanxi_sort.reset_index(drop=True,inplace=True)
guangdong_sort.reset_index(drop=True,inplace=True)


plt.figure()
plt.bar(shanghai_sort['名称'],shanghai_sort['销量'])
for i, v in enumerate(shanghai_sort['评分']):
    plt.text(i, shanghai_sort['销量'][i] + 0.2, str(v), ha='center')

plt.xlabel('名称')
plt.ylabel('销量')
plt.title('上海市销量排名前十的景点')
plt.xticks(rotation=45)


plt.figure()
plt.bar(beijing_sort['名称'], beijing_sort['销量'])
for i, v in enumerate(beijing_sort['评分']):
    plt.text(i, beijing_sort['销量'][i] + 0.2, str(v), ha='center')

plt.xlabel('名称')
plt.ylabel('销量')
plt.title('北京市销量排名前十的景点')
plt.xticks(rotation=45)


plt.figure()
plt.bar(jiangsu_sort['名称'], jiangsu_sort['销量'])
for i, v in enumerate(jiangsu_sort['评分']):
    plt.text(i, jiangsu_sort['销量'][i] + 0.2, str(v), ha='center')

plt.xlabel('名称')
plt.ylabel('销量')
plt.title('江苏省销量排名前十的景点')
plt.xticks(rotation='vertical')


plt.figure()
plt.bar(sichuan_sort['名称'], sichuan_sort['销量'])
for i, v in enumerate(sichuan_sort['评分']):
    plt.text(i, sichuan_sort['销量'][i] + 0.2, str(v), ha='center')

plt.xlabel('名称')
plt.ylabel('销量')
plt.title('四川省销量排名前十的景点')
plt.xticks(rotation=45)


plt.figure()
plt.bar(shanxi_sort['名称'], shanxi_sort['销量'])
for i, v in enumerate(shanxi_sort['评分']):
    plt.text(i, shanxi_sort['销量'][i] + 0.2, str(v), ha='center')

plt.xlabel('名称')
plt.ylabel('销量')
plt.title('陕西省销量排名前十的景点')
plt.xticks(rotation=45)


plt.figure(figsize=(10,6))
plt.bar(guangdong_sort['名称'], guangdong_sort['销量'])
for i, v in enumerate(guangdong_sort['评分']):
    plt.text(i, guangdong_sort['销量'][i] + 0.2, str(v), ha='center')

plt.xlabel('名称')
plt.ylabel('销量')
plt.title('广东省销量排名前十的景点')
plt.xticks(rotation=45)

由此,我们结合这几个分析来回答这几个问题:

相关推荐
一抓掉一大把1 分钟前
秒杀-StackExchangeRedisHelper连接单例
java·开发语言·jvm
升鲜宝供应链及收银系统源代码服务1 分钟前
升鲜宝生鲜配送供应链管理系统--- 《多语言商品查询优化方案(Redis + 翻译表 + 模糊匹配)》
java·数据库·redis·bootstrap·供应链系统·生鲜配送·生鲜配送源代码
青山的青衫10 分钟前
【JavaWeb】Tlias后台管理系统
java·web
蒟蒻的工具人16 分钟前
SSE实时推送订单状态
java·eventsource·sse协议
小蒜学长21 分钟前
springboot基于Java的校园导航微信小程序的设计与实现(代码+数据库+LW)
java·spring boot·后端·微信小程序
王元_SmallA44 分钟前
IDEA + Spring Boot 的三种热加载方案
java·后端
小苏兮1 小时前
【把Linux“聊”明白】编译器gcc/g++与调试器gdb/cgdb:从编译原理到高效调试
java·linux·运维·学习·1024程序员节
Java天梯之路1 小时前
04 数据类型转换
java
Acrelhuang1 小时前
小小电能表,如何撬动家庭能源革命?
java·大数据·开发语言·人工智能·物联网
jyd01242 小时前
MongoDB 与 Java 实体类型 LocalTime 时区转换问题解决方案
java·数据库·mongodb