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


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

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

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

    1. import pandas as pd
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. data = pd.read_excel("旅游景点.xlsx")
    5. pd.set_option("display.max_columns",100)
    6. # print(data.head())
    7. print(data.info())
    8. print(data.isnull().sum())

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

    # 问题(先大概分析一下)
    # 1、全国景点分布 (我们分析城市的分布即可)
    # 2、国民出游分析 (我们可以分析评分,城市,销量之间的关系 )
    # 3、景区价格分析 (我们分析价格因素)
    # 问题看完之后,我们开始对数据进行预处理
    # 由于星级对我们问题的分析帮助很大,所以我们无法用删除,或者众数等方式填充,因此我们用无来填充,将其划分为一个新的类别
    1. data["星级"] = data["星级"].fillna("无")
    2. print(data["星级"].isnull().sum())
    至于简介和地址,缺失数据无关紧要,这里我们可以选择用无来填充,也可以用删除来处理,为了不破坏数据的完整性,这里我选择用无来填充
    1. data = data.fillna("无")
    2. # print(data.isnull().sum())
    3. # 这样我们的数据就没有了缺失值
    4. # print(data.info())
    # 1、全国景点分布 (我们分析城市的分布即可)
    1. scenic = data['城市'].value_counts().sort_values(ascending=False)
    2. plt.figure()
    3. scenic.plot(kind='bar',stacked=False,colormap='viridis',figsize=(10,6))
    4. plt.title("各个城市景点数量分布图")
    5. plt.xlabel('城市')
    6. plt.ylabel('景点个数')
    7. # plt.show()
    # 2、国民出游分析 (我们可以分析评分,城市,销量之间的关系 )
    1. # data['销量'] = data['销量'].astype(int) 这种转换类型的方法,如果有无法转换的值,则无法转换
    2. data['评分'] = pd.to_numeric(data['评分'], errors='coerce')
    3. data['销量'] = pd.to_numeric(data['销量'],errors='coerce')
    4. data['价格'] = pd.to_numeric(data['价格'],errors='coerce')
    5. city_sales = data.groupby('城市')['销量'].sum()
    6. city_sales = city_sales.sort_values(ascending=False)
    7. plt.figure()
    8. city_sales.plot(kind='bar',stacked=True,colormap='plasma',figsize=(10,6))
    9. plt.title('各个城市景点门票销量')
    10. plt.xlabel('城市')
    11. plt.ylabel('销量')
    # 从销量可以看出北京,上海,江苏,四川,陕西,广东的销量较高,因此,我们着重分析这六个地方的景点评分
    1. shanghai = data[data['城市'].str.contains('上海')]
    2. beijing = data[data['城市'].str.contains('北京')]
    3. jiangsu = data[data['城市'].str.contains('江苏')]
    4. sichuan = data[data['城市'].str.contains('四川')]
    5. shanxi = data[data['城市'].str.contains('陕西')]
    6. guangdong = data[data['城市'].str.contains('广东')]
    7. shanghai_group = shanghai.groupby('名称')['销量'].sum().reset_index()
    8. beijing_group = beijing.groupby('名称')['销量'].sum().reset_index()
    9. jiangsu_group = jiangsu.groupby('名称')['销量'].sum().reset_index()
    10. sichuan_group = sichuan.groupby('名称')['销量'].sum().reset_index()
    11. shanxi_group = shanxi.groupby('名称')['销量'].sum().reset_index()
    12. guangdong_group = guangdong.groupby('名称')['销量'].sum().reset_index()
    13. shanghai_sort = shanghai_group.merge(shanghai[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
    14. beijing_sort = beijing_group.merge(beijing[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
    15. jiangsu_sort = jiangsu_group.merge(jiangsu[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
    16. sichuan_sort = sichuan_group.merge(sichuan[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
    17. shanxi_sort = shanxi_group.merge(shanxi[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
    18. guangdong_sort = guangdong_group.merge(guangdong[['名称','评分']].drop_duplicates(),on='名称').sort_values(by='销量', ascending=False).head(10)
    19. shanghai_sort.reset_index(drop=True,inplace=True)
    20. beijing_sort.reset_index(drop=True,inplace=True)
    21. jiangsu_sort.reset_index(drop=True,inplace=True)
    22. sichuan_sort.reset_index(drop=True,inplace=True)
    23. shanxi_sort.reset_index(drop=True,inplace=True)
    24. guangdong_sort.reset_index(drop=True,inplace=True)
    25. plt.figure()
    26. plt.bar(shanghai_sort['名称'],shanghai_sort['销量'])
    27. for i, v in enumerate(shanghai_sort['评分']):
    28. plt.text(i, shanghai_sort['销量'][i] + 0.2, str(v), ha='center')
    29. plt.xlabel('名称')
    30. plt.ylabel('销量')
    31. plt.title('上海市销量排名前十的景点')
    32. plt.xticks(rotation=45)
    33. plt.figure()
    34. plt.bar(beijing_sort['名称'], beijing_sort['销量'])
    35. for i, v in enumerate(beijing_sort['评分']):
    36. plt.text(i, beijing_sort['销量'][i] + 0.2, str(v), ha='center')
    37. plt.xlabel('名称')
    38. plt.ylabel('销量')
    39. plt.title('北京市销量排名前十的景点')
    40. plt.xticks(rotation=45)
    41. plt.figure()
    42. plt.bar(jiangsu_sort['名称'], jiangsu_sort['销量'])
    43. for i, v in enumerate(jiangsu_sort['评分']):
    44. plt.text(i, jiangsu_sort['销量'][i] + 0.2, str(v), ha='center')
    45. plt.xlabel('名称')
    46. plt.ylabel('销量')
    47. plt.title('江苏省销量排名前十的景点')
    48. plt.xticks(rotation='vertical')
    49. plt.figure()
    50. plt.bar(sichuan_sort['名称'], sichuan_sort['销量'])
    51. for i, v in enumerate(sichuan_sort['评分']):
    52. plt.text(i, sichuan_sort['销量'][i] + 0.2, str(v), ha='center')
    53. plt.xlabel('名称')
    54. plt.ylabel('销量')
    55. plt.title('四川省销量排名前十的景点')
    56. plt.xticks(rotation=45)
    57. plt.figure()
    58. plt.bar(shanxi_sort['名称'], shanxi_sort['销量'])
    59. for i, v in enumerate(shanxi_sort['评分']):
    60. plt.text(i, shanxi_sort['销量'][i] + 0.2, str(v), ha='center')
    61. plt.xlabel('名称')
    62. plt.ylabel('销量')
    63. plt.title('陕西省销量排名前十的景点')
    64. plt.xticks(rotation=45)
    65. plt.figure(figsize=(10,6))
    66. plt.bar(guangdong_sort['名称'], guangdong_sort['销量'])
    67. for i, v in enumerate(guangdong_sort['评分']):
    68. plt.text(i, guangdong_sort['销量'][i] + 0.2, str(v), ha='center')
    69. plt.xlabel('名称')
    70. plt.ylabel('销量')
    71. plt.title('广东省销量排名前十的景点')
    72. plt.xticks(rotation=45)

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

  • 相关阅读:
    Spring Boot通过企业邮箱发邮件被Gmail退回的问题解决方法
    eladmin 如何实现文件的上传
    Linux——MySQL 的 MGR 集群和Redis的编译安装
    Xmind 2022精彩体验---什么叫流程图
    [李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】
    Django REST framework 简介
    STM32实战总结:HAL之GPIO
    js深浅拷贝:保证赋值后改变第二个变量的值,不影响第一个变量的值
    为什么反射慢?
    【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)
  • 原文地址:https://blog.csdn.net/qq_60688380/article/details/137182723