数据可视化(十一):Pandas餐饮信息表分析——交叉表、离群点分析,多维分析等高级操作

news2025/1/23 7:11:05

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊!

喜欢我的博客的话,记得点个红心❤️和小关小注哦!您的支持是我创作的动力!数据源存放在我的资源下载区啦!

数据可视化(十一):Pandas餐饮信息表分析——交叉表、离群点分析,多维分析等高级操作

目录

  • 数据可视化(十一):Pandas餐饮信息表分析——交叉表、离群点分析,多维分析等高级操作
    • 案例三:餐饮信息表分析
      • 问题1:按类型聚合餐饮店数量并画出水平直方图
      • 问题2:按城市聚合餐饮店数量,画出垂直柱状图
      • 问题3:交叉表查看不同城市不同餐饮店的餐饮数量
      • 问题4:找出点评最多的10个餐饮店
      • 问题5:找出 人均 离群点(过大的数),并删除
      • 问题6:按 类型 分组, 计算 人均 最高 最低 均值,画成对比水平直方图
      • 问题7:以 服务 为横坐标,口味 为纵坐标,画出散点图
      • 问题8:以 人均 为横坐标,服务 口味 环境 为纵坐标,以不同颜色画出散点图
      • 问题9:一线城市北上广深,一个画幅小4个饼图,画出'川菜', '湘菜', '江浙菜', '东北菜', '粤菜', '徽菜', '客家菜', '赣菜', '湖北菜'的餐饮店占比
      • 问题10:跟上相似,一线城市北上广深,一个画幅小4个饼图,画出每个城市餐饮店最多的10种类型的占比图
      • 问题11:采用jieba分词,对所有店名进行分词,找出出现频率最高10个词,词长度要大于1
      • 问题12:将上面分词结果绘制成词云

案例三:餐饮信息表分析

# 准备数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] 
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

import warnings
warnings.filterwarnings('ignore')

# 导入数据

df = pd.read_csv('data/catering.csv',encoding='gb2312')
df.sample(5)
# 查看数据信息

df.info()

在这里插入图片描述

# 查看每个列的不同值数量

df.nunique()
# 查看  类型 有哪些类型

df['类型'].unique()

在这里插入图片描述

问题1:按类型聚合餐饮店数量并画出水平直方图

# 按类型聚合餐饮店数量并画出水平直方图

s = df.类型.value_counts(ascending=True)
display(s)
fig = plt.figure(figsize=(8,20))
plt.barh(s.index, s.values, height=1)
plt.title('不同类型餐饮店数量对比')
plt.xlabel('店数量')
plt.ylabel('餐饮类型')
plt.grid()

plt.show()

在这里插入图片描述

问题2:按城市聚合餐饮店数量,画出垂直柱状图

# 按城市聚合餐饮店数量,画出垂直柱状图

s = df.城市.value_counts()
display(s)
fig = plt.figure(figsize=(20, 10))
plt.bar(s.index, s.values, width=0.8, color='green', alpha=0.7)
plt.title('不同城市餐饮店数量对比')
plt.xticks(rotation=90)
plt.xlabel('店数量')
plt.ylabel('城市')
plt.grid()

plt.show()

在这里插入图片描述
在这里插入图片描述

问题3:交叉表查看不同城市不同餐饮店的餐饮数量

# 交叉表查看不同城市不同餐饮店的餐饮数量

pd.crosstab(df.城市, df.类型, margins=True).sort_values(by='All', ascending=False)
# 拷贝一份表格,用于删除缺失值

df_ = df.copy()

# 删除 点评 为空的行

df_.dropna(subset=['点评'], inplace=True)

# 查看点评数据的统计信息

display( df_.点评.describe() )

在这里插入图片描述
在这里插入图片描述

问题4:找出点评最多的10个餐饮店

# 找出点评最多的10个餐饮店

df_.sort_values(by='点评', ascending=False)[:10]
# 拷贝一份表格,用于删除缺失值
df_ = df.copy()
# 删除 人均 为空的行
df_.dropna(subset=['人均'], inplace=True)

在这里插入图片描述

问题5:找出 人均 离群点(过大的数),并删除

# 找出 人均 离群点(过大的数)
# 不去除利群点,画直方图时会出现图形缩小在一个小范围

def out_range(s:pd.Series, a:int):
    bool_inds = (s<s.mean()-a*s.std())|(s>s.mean()+a*s.std())
    return s[bool_inds].index

display( out_range(df_['人均'], 3) )
df_.drop(out_range(df_['人均'], 3), axis=0, inplace=True)

在这里插入图片描述

问题6:按 类型 分组, 计算 人均 最高 最低 均值,画成对比水平直方图

# 按 类型 分组, 计算 人均 最高 最低 均值
df_1 = np.round(df_.groupby(by='类型')['人均'].agg([np.mean, np.max, np.min]))
df_1

# 把上面DataFrame画成对比水平直方图

df_1.plot.barh(figsize=(8,25))

plt.show()

在这里插入图片描述

问题7:以 服务 为横坐标,口味 为纵坐标,画出散点图

# 以 服务 为横坐标,口味 为纵坐标,画出散点图

plt.figure(figsize=(10,10))
plt.scatter(x=df_.服务, y=df_.口味)
plt.xlabel('服务')
plt.ylabel('口味')
plt.grid()

plt.show()
# 可以看出两者基本正相关
# 改善服务可以增加顾客对口感的好评

在这里插入图片描述

问题8:以 人均 为横坐标,服务 口味 环境 为纵坐标,以不同颜色画出散点图

# 以 人均 为横坐标,服务 口味 环境 为纵坐标,以不同颜色画出散点图

plt.figure(figsize=(10,10))
plt.scatter(df_.人均, df_.服务, color='r', label='服务', alpha=0.3, edgecolors='none')
plt.scatter(df_.人均, df_.口味, color='g', label='口味', alpha=0.3, edgecolors='none')
plt.scatter(df_.人均, df_.环境, color='b', label='环境', alpha=0.3, edgecolors='none')
plt.xlim(0, 300) # 防止点过于聚集
plt.ylim(5.5, 9.5) # 防止点过于聚集
plt.legend()

plt.show()
# 可以看出餐饮店的指标基本集中在:人均100元以下,三种评价都在6.5~8.5

在这里插入图片描述

问题9:一线城市北上广深,一个画幅小4个饼图,画出’川菜’, ‘湘菜’, ‘江浙菜’, ‘东北菜’, ‘粤菜’, ‘徽菜’, ‘客家菜’, ‘赣菜’, '湖北菜’的餐饮店占比

# 一线城市北上广深,一个画幅小4个饼图,
# 画出'川菜', '湘菜', '江浙菜', '东北菜', '粤菜', '徽菜', '客家菜', '赣菜', '湖北菜'的餐饮店占比

types = ['川菜', '湘菜', '江浙菜', '东北菜', '粤菜', '徽菜', '客家菜', '赣菜', '湖北菜']

bj = df_[ df_['城市']=='北京' ][ df_['类型'].isin(types) ]['类型'].value_counts()
sh = df_[ df_['城市']=='上海' ][ df_['类型'].isin(types) ]['类型'].value_counts()
gz = df_[ df_['城市']=='广州' ][ df_['类型'].isin(types) ]['类型'].value_counts()
sz = df_[ df_['城市']=='深圳' ][ df_['类型'].isin(types) ]['类型'].value_counts()

fig = plt.figure(figsize=(12,12))

ax1 = fig.add_subplot(2,2,1)
ax1.pie(bj.values, labels=bj.index, explode=np.ones(len(bj.index))*0.1, autopct='%.2f%%')
ax1.set_title('北京')
ax2 = fig.add_subplot(2,2,2)
ax2.pie(sh.values, labels=sh.index, explode=np.ones(len(sh.index))*0.1, autopct='%.2f%%')
ax2.set_title('上海')
ax3 = fig.add_subplot(2,2,3)
ax3.pie(gz.values, labels=gz.index, explode=np.ones(len(gz.index))*0.1, autopct='%.2f%%')
ax3.set_title('广州')
ax4 = fig.add_subplot(2,2,4)
ax4.pie(sz.values, labels=sz.index, explode=np.ones(len(sz.index))*0.1, autopct='%.2f%%')
ax4.set_title('深圳')

plt.show()

在这里插入图片描述

问题10:跟上相似,一线城市北上广深,一个画幅小4个饼图,画出每个城市餐饮店最多的10种类型的占比图

# 跟上相似,一线城市北上广深,一个画幅小4个饼图,
# 画出每个城市餐饮店最多的10种类型的占比图

bj = df_[ df_['城市']=='北京' ]['类型'].value_counts()[:10]
sh = df_[ df_['城市']=='上海' ]['类型'].value_counts()[:10]
gz = df_[ df_['城市']=='广州' ]['类型'].value_counts()[:10]
sz = df_[ df_['城市']=='深圳' ]['类型'].value_counts()[:10]

fig = plt.figure(figsize=(12,12))

ax1 = fig.add_subplot(2,2,1)
ax1.pie(bj.values, labels=bj.index, explode=np.ones(10)*0.1, autopct='%.2f%%')
ax1.set_title('北京')
ax2 = fig.add_subplot(2,2,2)
ax2.pie(sh.values, labels=sh.index, explode=np.ones(10)*0.1, autopct='%.2f%%')
ax2.set_title('上海')
ax3 = fig.add_subplot(2,2,3)
ax3.pie(gz.values, labels=gz.index, explode=np.ones(10)*0.1, autopct='%.2f%%')
ax3.set_title('广州')
ax4 = fig.add_subplot(2,2,4)
ax4.pie(sz.values, labels=sz.index, explode=np.ones(10)*0.1, autopct='%.2f%%')
ax4.set_title('深圳')

plt.show()

在这里插入图片描述

问题11:采用jieba分词,对所有店名进行分词,找出出现频率最高10个词,词长度要大于1

# 采用jieba分词,对所有店名进行分词,找出出现频率最高10个词,词长度要大于1

# 这次采用字符串相加
import jieba
ss = df['店名'].sum()
ss = ss.replace('.', "")
lt = jieba.lcut(ss)
results = {}
for word in lt:
    if len(word)>1 and '店' not in word: # 词里有‘店’也不要
        results[word] = results.get(word, 0) + 1
words = list(results.items())
words.sort(key=lambda x:x[1], reverse=True)
words[:10]

在这里插入图片描述

问题12:将上面分词结果绘制成词云

# 将上面分词结果绘制成词云
from wordcloud import WordCloud

wordcloud = WordCloud(font_path='./SimHei.ttf', width=1000,height=1000,background_color='white')
wordcloud.fit_words(results)
plt.figure(figsize=(15,15))
axs = plt.imshow(wordcloud)#正常显示词云
plt.axis('off')#关闭坐标轴

plt.show()

在这里插入图片描述

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

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

相关文章

简述RocketMQ系统架构及其相关概念

一、概述 RocketMQ是一款高性能、高吞吐量的分布式消息队列系统&#xff0c;它采用了分布式架构&#xff0c;支持多生产者和消费者并发读写&#xff0c;具有高可用性、高吞吐量、低延迟等特点。本文将对RocketMQ的系统架构进行详细解析。 二、架构设计 RocketMQ采用了分布式架…

AI如何改变PPT制作流程?推荐四款ai生成ppt工具

提起PPT&#xff0c;大家的第一反应就是痛苦。经常接触PPT的学生党和打工人&#xff0c;光看到这3个字母&#xff0c;就已经开始头痛了&#xff1a; 1、PPT内容框架与文案挑战重重&#xff0c;任务艰巨&#xff0c;耗费大量精力。 2、PPT的排版技能要求高&#xff0c;并非易事…

ATA-4315高压功率放大器在高频理疗仪驱动中的应用

现代社会&#xff0c;面对生活压力、工作压力&#xff0c;再加上不良的生活习惯&#xff0c;难免身体会出现这样或那样的问题&#xff0c;随着科技的发展&#xff0c;我们除了来到医院进行具体的治疗&#xff0c;一些可以用来辅助医生进行治疗的仪器设备也越来越多的应用到了临…

JavaScript 对象入门:基础用法全解析

目录 对象 语法 属性和访问 方法和调用 this关键字 null 遍历对象 内置对象 Math 属性 方法 Date 创建日期对象 获取和设置日期 ⭐对象 对象是 JavaScript 数据类型的一种&#xff0c;数据类型也包括数值类型、字符串类型、布尔类型、undefined。对象数据类型可…

Apache访问控制与虚拟主机

目录 一. Web服务简介 以下是一些 Web 服务的基本概念和特征 以下是一些主流的 Web 服务器 WEB 服务协议 二. Apache 服务的搭建与配置 2.1 Apache 介绍 2.2 Apache安装 2.3 Apache目录介绍 三. 访问控制 四. 修改默认网站发布目录 五. 虚拟主机 5.1 基于域名的虚拟…

Java入门——继承和多态(下)

抽象类 语法规则 在上一篇文章刚才的打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由 Shape 的各种子类的 draw 方法来完成的. 像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法 包含抽象方法的类我们称为 抽象…

试试这四款高效AI论文写作工具和降重技术

在科研领域&#xff0c;AI写作工具如同新一代的科研利器&#xff0c;它们能够极大提高文献查阅、思路整理和表达优化的效率&#xff0c;本质上促进了科研工作的进步。AI写作工具不仅快速获取并整理海量信息&#xff0c;还帮助我们精确提炼中心思想&#xff0c;显著提升论文写作…

花趣短视频源码淘宝客系统全开源版带直播带货带自营商城流量主小游戏功能介绍

1、首页仿抖音短视频 &#xff0c;关注 &#xff0c;我的 本地 直播 可发布短视频 可录制上传 2、商城页面 广告位、淘口令识别、微信登录、淘宝登录、淘宝返佣、拼多多返佣、京东返佣、唯品会返佣、热销榜、聚划算、天猫超市、9.9包邮、品牌特卖、新人攻略 、小米有品、优惠加…

【JavaEE网络】HTTPS详解:从对称与非对称加密到证书认证

目录 HTTPSHTTPS 是什么“加密” 是什么HTTTPS 的工作过程引入对称加密引入非对称加密引入证书完整流程总结 HTTPS HTTPS 是什么 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现…

openGemini v1.2.0版本正式发布,IoT 场景性能大幅提升!

在openGemini v1.2.0版本中&#xff0c;我们为您带来了一系列令人振奋的内核优化&#xff0c;将您的体验提升到新的高度&#xff0c;这包括 针对IoT场景的性能优化&#xff0c;查询效率有极大的提升。针对数据存储的优化&#xff0c;进一步节约磁盘空间&#xff0c;降低数据存…

MySQL基础指南:从入门到精通

MySQL基础指南&#xff1a;从入门到精通 MySQL是一个流行的开源关系型数据库管理系统&#xff0c;被广泛用于Web应用程序和服务器端开发。本文将从MySQL的基本概念开始&#xff0c;逐步介绍MySQL的安装、常用操作、数据类型、查询语句等内容&#xff0c;帮助你快速入门MySQL数…

雇佣 K 位工人的总代价

题目链接 雇佣 K 位工人的总代价 题目描述 注意点 costs[i]是雇佣第 i 位工人的代价每一轮雇佣后&#xff0c;剩余工人的下标可能会发生变化一位工人只能被选择一次如果剩余员工数目不足 candidates 人&#xff0c;那么下一轮雇佣他们中代价最小的一人如果有多位代价相同且最…

排序-堆排序(Heap Sort)

堆排序&#xff08;Heap Sort&#xff09;是一种基于比较的排序算法&#xff0c;它利用了完全二叉树的特性&#xff0c;将待排序的序列构造成一个大顶堆&#xff08;每个父节点的值都大于或等于其子节点的值&#xff09;或小顶堆&#xff08;每个父节点的值都小于或等于其子节点…

哪个品牌led灯好?五大好用护眼台灯推荐

哪个品牌led灯好&#xff1f;目前LED护眼台灯当中做得比较好的有明基、松下、书客等品牌。在如今LED灯市场的海洋中&#xff0c;选择一款可靠的护眼台灯变得愈发重要。然而&#xff0c;众多品牌和产品的涌现也让消费者面临着选择困难。为了帮助大家找到最合适的LED台灯&#xf…

【亿事君】1688专业级知识库-阿里巴巴诚信通运营必修课程

01 课程介绍 课程来自亿事君老师的1688专业级知识库/白皮书/全攻略/阿里巴巴诚信通运营必修课程&#xff0c;价值1588元。这是一门系统的学习运营课程&#xff0c;干货满满&#xff0c;诚意十足。主要内容包括&#xff1a;基础、权重、活动玩法、付费流量玩法等&#xff0c;运…

中国196个城市边界

中国196个城市的城市边界形状文件是通过对Li等人&#xff08;2018&#xff09;的输出进行处理和过滤生成的。根据全球人工不可渗透区域 &#xff08;GAIA&#xff09; 数据绘制全球城市边界。 城市建成区边界是城市研究中的一个重要指标&#xff0c;在很多城市研究中都会涉及到…

一键同步用户信息和组织架构,简化用户管理,可道云teamOS插件化集成LDAP/AD的实战应用

随着企业规模的扩大和全球化布局的加深&#xff0c;管理分散在全球各地的员工和用户信息成为了企业IT部门的一大挑战&#xff0c;传统的手动添加用户和管理权限的方式已经无法满足需求。 有没有能自动同步用户信息和组织架构的企业网盘呢&#xff1f; teamOS插件化集成LDAP/AD…

CorelDRAW2024新特性全解析!

CorelDRAW2024是一款备受赞誉的图形设计软件&#xff0c;它以其强大的功能和用户友好性赢得了全球数百万设计师的青睐。该软件提供了丰富的绘图、排版、图像处理、矢量编辑以及网页设计工具&#xff0c;无论是初学者还是专业设计师&#xff0c;都能在这款软件中找到满足自己需求…

升级版ComfyUI InstantID 换脸:FaceDetailer + InstantID + IP-Adapter

在使用ComfyUI的InstantID进行人脸替换时&#xff0c;一个常见问题是该工具倾向于保留原始参考图的构图&#xff0c;即使用户的提示词与之不符。 例如&#xff0c;即使用户提供的是大头照并请求生成全身照&#xff0c;结果仍是大头照&#xff0c;没有显示出用户所期望的构图。…

JavaScript不仅有变量声明,还有变量提升

起因&#xff1a;&#x1f447; 一道面试题 最近&#xff0c;一位朋友参加面试时&#xff0c;遇到了这样一道笔试题&#xff0c;引起了我的兴趣&#xff1a; var foo 1; function fn() {foo 3;return;function foo() {// ...} } fn(); console.log(foo);这个例子中包含了变…