上海餐饮数据分析与可视化

数据下载入口:Pandas+Pyecharts | 上海市餐饮数据分析可视化 - Heywhale.com

数据介绍

  • 类别:餐饮类别的名称(如烧烤、美食、粤菜等)
  • 行政区:餐厅所在行政区的名称(如浦东新区、闵行区等)
  • 点评数:该餐厅的点评数量
  • 口味环境服务:餐厅在这三个方面的评分
  • 人均消费:餐厅的人均消费
  • 城市:餐厅所在的城市(上海市)
  • LngLat:餐厅的经纬度

首先先读取数据:

import pandas as pd# 尝试的编码格式列表
encodings_tried = ['utf-8', 'gbk', 'ISO-8859-1', 'latin1']# 文件路径
file_path = '上海餐饮数据.csv'# 尝试使用不同的编码格式读取文件
for encoding in encodings_tried:try:df = pd.read_csv(file_path, encoding=encoding)print(f"成功使用编码格式 {encoding} 读取文件")break  # 如果成功读取,则跳出循环except UnicodeDecodeError:print(f"编码格式 {encoding} 读取文件时发生错误")continue  # 如果发生错误,则尝试下一个编码df

由于下载的csv文件不是utf-8编码,所以需要用其他编码读取方式进行读取,数据概览如下:

一:数据预处理

# 获取每一列的不同元素
for col in df.columns:unique_elements = df[col].unique()print(f"{col}列的不同元素: {unique_elements}")

首先观察每一列含有的元素如下:

可以发现“类别”,“行政区”列含有空值,且“口味”,“环境”,“服务”,“人均消费”列同时含有数字与文本。

# 删除“点评数”和“人均消费”列中含有 0 的行
df = df[(df['点评数']!= '0') & (df['人均消费']!= '0')]
# 去除每一列的空值
df = df.dropna(subset=['类别', '行政区', '点评数', '口味', '环境', '服务', '人均消费', '城市', 'Lng', 'Lat'])

首先去除数据的空值,然后只保留“口味”,“环境”,“服务”,“人均消费”列中的数字行。

# 定义一个函数来判断元素是否为数字
def is_numeric(value):try:float(value)return Trueexcept ValueError:return False# 选择需要检查的列
columns_to_check = ['口味', '环境', '服务', '人均消费', 'Lng', 'Lat']# 删除含有文本的行
df = df[df[columns_to_check].applymap(is_numeric).all(axis=1)]

二:数据可视化

1:各类别餐厅数量分布图

import matplotlib.pyplot as plt
# 设置Matplotlib的字体以支持中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False#  各类别餐厅的数量分布
category_counts = df['类别'].value_counts()# 绘制柱状图
plt.figure(figsize=(10, 6))
category_counts.plot(kind='bar', color='skyblue')
plt.title('各类别餐厅数量分布')
plt.xlabel('类别')
plt.ylabel('数量')
plt.xticks(rotation=45)
plt.show()

首先绘制各类别餐厅数量分布图:

可以观测“甜点”,“快餐”,“咖厅”等快餐类餐厅数量较多。

2:各行政区餐厅数量分布

import matplotlib.pyplot as plt# 设置 Matplotlib 的字体以支持中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 各行政区餐厅的数量分布
category_counts = df['行政区'].value_counts()# 绘制饼形图
plt.figure(figsize=(10, 6))
plt.pie(category_counts, labels=category_counts.index, autopct='%1.1f%%')
plt.title('各行政区餐厅数量分布')
plt.show()

再绘制各行政区餐厅的数量分布图:

可以观测出浦东新区,闵行区,徐汇区,松江区,宝山区的数量相对多。

3:类别与行政区之间的相关性

from scipy.stats import chi2_contingency# 创建交叉表
cross_tab = pd.crosstab(df['类别'], df['行政区'])# 进行卡方检验
chi2, p, dof, expected = chi2_contingency(cross_tab)print(f"卡方值:{chi2}")
print(f"p 值:{p}")if p < 0.05:print("类别与行政区之间存在相关性")
else:print("类别与行政区之间不存在相关性")

根据结果求出卡方值较大,p值小于0.05,说明类别与行政区之间存在相关性。然后具体展示类别与行政区相关性的体现:

import seaborn as sns# 创建交叉表
cross_tab = pd.crosstab(df['类别'], df['行政区'])# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(cross_tab, annot=True, fmt='d', cmap='YlGnBu')
plt.title('类别与行政区的相关性热力图')
plt.xlabel('行政区')
plt.ylabel('类别')
plt.show()

体现相关性的热力图如下:

4:不同类别的平均综合评分比较

import numpy as np# 将"口味","服务","环境","人均消费"列的数据类型转换为数值型
df['口味'] = pd.to_numeric(df['口味'], errors='coerce')
df['服务'] = pd.to_numeric(df['服务'], errors='coerce')
df['环境'] = pd.to_numeric(df['环境'], errors='coerce')
df['人均消费'] = pd.to_numeric(df['人均消费'], errors='coerce')# 提取相关列的数据
columns = ['口味', '服务', '环境', '人均消费']
data = df[columns].values# 数据标准化
normalized_data = (data - np.min(data, axis=0)) / (np.max(data, axis=0) - np.min(data, axis=0))# 计算熵值
k = 1 / np.log(data.shape[0])
entropy = -k * np.sum(normalized_data * np.log(normalized_data + 1e-5), axis=0)# 计算权重
weight = (1 - entropy) / np.sum(1 - entropy)# 计算综合评分
composite_score = np.dot(normalized_data, weight)# 将综合评分添加到数据框中
df['综合评分'] = composite_score

首先使用熵权法得出每行数据的综合评分一列,然后整合得出不同类别的平均综合评分:

# 创建DataFrame
df1 = pd.DataFrame(data)# 按照“类别”分组并计算综合评分平均值
category_avg_score = df.groupby('类别')['综合评分'].mean()# 将结果从大到小排序并转换为DataFrame
sorted_df = category_avg_score.sort_values(ascending=False).reset_index()sorted_df

排序后的前10类别的平均综合评分如下:

可以看出南菜,午茶,素菜的评分相对较高。

5:不同行政区的平均综合评分比较

# 创建DataFrame
df2 = pd.DataFrame(data)# 按照“行政区”分组并计算综合评分平均值
category_avg_score = df.groupby('行政区')['综合评分'].mean()# 将结果从大到小排序并转换为DataFrame
sorted_df2 = category_avg_score.sort_values(ascending=False).reset_index()sorted_df2

同理得到排序后的前10行政区的平均综合评分如下:

可以看出静安区,卢湾区,徐汇区,浦东新区的餐厅平均综合评分较高。

想要探索多元化的数据分析视角,可以关注之前发布的相关内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1537034.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring框架精讲】进阶指南:企业级Java应用的核心框架(Spring5)

文章目录 【Spring框架精讲】进阶指南&#xff1a;企业级Java应用的核心框架(Spring5)1.Spring框架快速入门1.1七大核心模块1.1.1 Spring Core1.1.2 Spring-Beans1.1.3 Spring Context1.1.4 Spring-Expression1.1.5 Spring AOP1.1.6 JDBC和DAO模块&#xff08;Spring DAO&#…

C语言 | Leetcode C语言题解之第412题Fizz Buzz

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ char ** fizzBuzz(int n, int* returnSize) {/*定义字符串数组*/char **answer (char**)malloc(sizeof(char*)*n);for(int i 1;i<n;i){/*分配单个字符串…

visual prompt tuning和visual instruction tuning

visual prompt tuning&#xff1a;作为一种微调手段&#xff0c;其目的是节省参数量&#xff0c;训练时需要优化的参数量小。 输入&#xff1a;视觉信息image token可学习的prompt token 处理任务&#xff1a;比如常见的分类任务 visual prompt tuning visual instruction tu…

Microsoft 365 Copilot: Wave 2

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Python3将Excel数据转换为文本文件

文章目录 python3安装使用Python将Excel数据转换为文本文件&#xff1a;逐步指南openpyxl库简介前提条件脚本解析代码详细解析实际应用场景使用示例 结论 python3安装 centos安装python3 Python3基础知识 使用Python将Excel数据转换为文本文件&#xff1a;逐步指南 在数据处理…

闯关leetcode——27. Remove Element

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/remove-element/description/ 内容 Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The order of the elements may be changed. Then retur…

Docker 消息队列RabbitMQ 安装延迟消息插件

介绍 RabbitMQ的官方推出了一个插件&#xff0c;原生支持延迟消息功能。该插件的原理是设计了一种支持延迟消息功能的交换机。当消息投递到交换机后可以暂存一定时间&#xff0c;到期后再投递到队列。 查看版本号 docker exec rabbit名字 rabbitmqctl version根据版本下载 插…

Java | Leetcode Java题解之第412题Fizz Buzz

题目&#xff1a; 题解&#xff1a; class Solution {public List<String> fizzBuzz(int n) {List<String> answer new ArrayList<String>();for (int i 1; i < n; i) {StringBuffer sb new StringBuffer();if (i % 3 0) {sb.append("Fizz"…

启动windows更新/停止windows更新,在配置更新中关闭自动更新的方法

在Windows操作系统中&#xff0c;启动或停止Windows更新&#xff0c;以及调整“配置更新”的关闭方法&#xff0c;涉及多种途径&#xff0c;这里将详细阐述几种常用的专业方法。 启动Windows更新 1.通过Windows服务管理器&#xff1a; -打开“运行”对话框&#xff08;…

《小迪安全》学习笔记04

这一块主要讲信息收集——渗透测试第一步&#xff01;&#xff01; 1.首先看有无网站&#xff1a; 存在CDN就用上次说的方法找到真实IP&#xff0c;然后转上↑ 收集四类信息&#xff1a;程序源码&#xff08;CMS&#xff09;等等 2.看有无APP&#xff0c;如涉及到WEB&#xf…

opencv学习:图像掩码处理和直方图分析及完整代码

图像掩码是一种二值图像&#xff0c;用于控制图像处理操作的应用区域。通过将掩码与原图像进行按位与操作&#xff0c;可以提取或屏蔽图像的特定部分。直方图是图像处理中的一个重要工具&#xff0c;用于分析图像的灰度分布。 实验步骤 使用OpenCV读取图像文件“phone.png”为…

JS基础之【对象详解 -- 对象的属性与方法、遍历对象与内置对象】

&#x1f680; 个人简介&#xff1a;某大型国企高级前端开发工程师&#xff0c;7年研发经验&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径&#xff1a; http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…

Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )

一&#xff1a;Linux 背景知识 1.1. Linux 是什么 Linux 是一个操作系统. 和 Windows 是 “并列” 的关系&#xff0c;经过这么多年的发展, Linux 已经成为世界第一大操作系统&#xff0c;安卓系统本质上就是 Linux. 1.2 Linux 发行版 Linux 严格意义来说只是一个 “操作系…

Parallels Desktop 20 搭载内置 AI 包正式发布

近期 Parallels 官方发布 Parallels Desktop 20 For Mac&#xff0c;这是一款流行的Mac虚拟化软件。 该版本引入了 Parallels AI 工具包&#xff0c;这将主要惠及需要新工具在 Mac 上使用人工智能的开发人员。 配合即将发布的 macOs sequoia 和 Windows 11 24H2&#xff0c;P…

Android源码集成 Google Play

1、 The Open GApps Project 下载 对应系统和平台的gms压缩包&#xff0c;压缩包文件如下&#xff1a; Core和Optional目录下为谷歌服务核心文件和应用&#xff0c;需要预置到源码中。解压Core 和 Optional 目录所有文件&#xff0c;得到如下文件夹&#xff1a; 其中 etc 和 li…

C++ | Leetcode C++题解之第412题Fizz Buzz

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<string> fizzBuzz(int n) {vector<string> answer;for (int i 1; i < n; i) {string curr;if (i % 3 0) {curr  "Fizz";}if (i % 5 0) {curr "Buzz";}if (curr.si…

Django学习实战篇五(适合略有基础的新手小白学习)(从0开发项目)

前言&#xff1a; 本章中&#xff0c;我们开始引入前端框架Bootstrap 来美化界面。在前面的章节中&#xff0c;我们通过编写后端代码来处理数据。数据之于网站&#xff0c;就相当于灵魂之于人类。而网站的前端就相当于人的形体外貌。其中HTML是骨架&#xff0c;而CSS是皮肤&…

创造增强叙事的互动:Allison Crank的沉浸式体验设计理念

在沉浸式技术日新月异的今天,如何通过用户交互增强叙事,而非分散注意力,成为了设计师们共同面临的挑战。作为用户体验设计师和研究员,Allison Crank以其独特的视角和丰富的经验,为我们揭示了这一领域的核心原则与实践方法。 叙事与互动的和谐共生 Allison Crank强调,互…

STM32使用ESP-01S连接WiFi通过云平台与手机APP联动

ESP-01S测试 我们买回来ESP-01S模块之后&#xff0c;首先要对模块的好坏进行测试&#xff0c;是否能正常通过串口通信&#xff0c;是否能正常连接手机热点或WiFi&#xff0c;一般模块买回来默认出厂烧录了AT固件&#xff0c;如果我们需要使用一些特殊的协议&#xff08;如MQTT协…