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

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 inlineplt.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].indexdisplay( 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 WordCloudwordcloud = 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.mzph.cn/web/11867.shtml

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

相关文章

golang创建式设计模式------单例模式

目录导航 1.单例模式1)什么是单例模式 2)使用场景3)实现方式1.懒汉式单例模式2.饿汉式3.双重检查式4.sysc.Once式 4)实践案例5)优缺点分析 1.单例模式 1)什么是单例模式 单例模式(Singleton Pattern)是一种常用的设计模式。单例模式的类提供了一种访问其唯一对象的方法&#…

RAG系列论文

检索增强模型&#xff1a; 提出Atlas &#xff1a;预训练检索增强模型 Few-shot Learning with Retrieval Augmented Language Models 链接 根据输入问题的不同&#xff0c;挑选合适的提示词 Learning To Retrieve Prompts for In-Context Learning 链接 RAG&#xff1a; M…

【数据结构】线性表--顺序表(二)

文章目录 1、什么是线性表2、线性表的基本操作3、顺序表3.1、顺序表的定义3.2、顺序表的实现方式&#xff1a;静态分配3.3、顺序表的实现方式&#xff1a;动态分配3.4、顺序表的特点3.5、顺序表的初始化与插入操作3.6、顺序表的删除与查询 1、什么是线性表 ​ 线性表是具有相同…

【Python快速上手(二十二)】

目录 Python快速上手&#xff08;二十二&#xff09;Python3 使用数据库-pymysql1. 创建数据库连接2. 创建数据表3. 插入数据4. 查询数据5. 使用 WHERE 条件语句6. 排序7. 删除记录8. 更新表数据9. 删除表10.异常处理总结 Python快速上手&#xff08;二十二&#xff09; Pytho…

通过EXCEL控制PLC启停电机的一种方法

概述 本例将介绍用微软EXCEL电子表格控制西门子S7-1200 PLC实现电机启停的一种方法。 第1步&#xff1a; 添加PLC设备&#xff0c;选择西门子S7-1214C CPU&#xff0c;设置IP地址&#xff1a;192.168.18.18&#xff0c;子网掩码&#xff1a;255.255.255.0。 第2步&#xff1a…

vue3中通过自定义指令实现loading加载效果

前言 在现代Web开发中&#xff0c;提升用户体验一直是开发者们追求的目标之一。其中&#xff0c;一个常见的场景就是在用户与应用程序进行交互时&#xff0c;特别是当进行异步操作时&#xff08;如网络请求&#xff09;&#xff0c;为用户提供即时的反馈&#xff0c;避免用户因…

Flet初体验:Python跨平台开发新选择

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 初识Flet 📒📝 安装与配置📝 构建第一个Flet应用📝 Flet打包:跨平台的魔法📝 Flet与FastAPI的结合🎈 总结⚓️ 相关链接 ⚓️📖 介绍 📖 “探索未知,拥抱创新,Flet让我在应用开发的世界中找到了新的航标。”…

02 | 该如何选择消息队列?

RabbitMQ RabbitMQ 一个比较有特色的功能是支持非常灵活的路由配置&#xff0c;和其他消息队列不同的是&#xff0c;它在生产者&#xff08;Producer&#xff09;和队列&#xff08;Queue&#xff09;之间增加了一个 Exchange 模块&#xff0c;你可以理解为交换机。 问题 Ra…

【循环程序设计-谭浩强适配】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a;纯干货、纯干货、纯干货&#xff01;&#xff01;…

浅谈电动汽车充电站的电气安全

1 引言 1月14日日上午10点左右&#xff0c;青岛市市北区辽宁路63号公交停车场内&#xff0c;一辆报废公交车突然起火&#xff0c;由于大风天气&#xff0c;大火很快引燃了停在旁边的几辆报废车。消防人员快速赶到&#xff0c;迅速控制住火势。11时30分&#xff0c;停车场内的…

鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main

阅读之前的说明 先说明&#xff0c;本篇很长&#xff0c;也很枯燥&#xff0c;若不是绝对的技术偏执狂是看不下去的.将通过一段简单代码去跟踪编译成ELF格式后的内容.看看ELF究竟长了怎样的一副花花肠子&#xff0c;用readelf命令去窥视ELF的全貌&#xff0c;最后用objdump命令…

Image to Music V2 :只需上传一张照片,自动转换成与图片内容匹配的音频!

前言 我们之前肯定已经见过了很多文本生成图片、文本生成声音以及AI翻唱歌曲 等多种AI产品&#xff08;模型&#xff09;。 其实音乐和图片从某种意义上来说都是艺术创作的一种形式&#xff0c;它们可以相互配合&#xff0c;共同呈现出一种更加丰富、感性的表达方式。 将图片…

弘君资本:人形机器人概念走强,盛通股份涨停,怡合达、鼎智科技等拉升

人形机器人概念14日盘中拉升走高&#xff0c;到发稿&#xff0c;盛通股份涨停&#xff0c;怡合达、鼎智科技涨约6%&#xff0c;索辰科技、伟创电气、丰立智能等涨超4%。 音讯面上&#xff0c;5月13日&#xff0c;宇树发布人形智能体Unitree G1&#xff0c;身高127cm,体重35kg&…

[240514] OpenAI 发布 GPT-4o,人机交互的历史性时刻 | 苹果芯片进军服务器剑指AI​ | 谷歌大会以AI为主

目录 OpenAI 发布 GPT-4o&#xff0c;人机交互的历史时刻苹果芯片进军服务器&#xff0c;剑指生成式 AI2024年谷歌开发者大会将围绕 AI 展开 OpenAI 发布 GPT-4o&#xff0c;人机交互的历史时刻 OpenAI 发布了 GPT-4o&#xff0c;大家一直都想要现在终于等到的语音助手 : 勿需…

618值得入手的数码产品怎么选?2024 买过不后悔的数码好物分享

在数字时代的浪潮中&#xff0c;每一次的购物狂欢节都如同一场科技盛宴&#xff0c;让我们有机会接触到最前沿、最实用的数码产品&#xff0c;而“618”无疑是这场盛宴中最为引人瞩目的日子之一。面对琳琅满目的商品&#xff0c;如何选择那些真正值得入手的数码好物&#xff0c…

易宝OA-ExecuteQueryForDataSetBinary处sql注入

免责声明&#xff1a; 本文内容为学习笔记分享&#xff0c;仅供技术学习参考&#xff0c;请勿用作违法用途&#xff0c;任何个人和组织利用此文所提供的信息而造成的直接或间接后果和损失&#xff0c;均由使用者本人负责&#xff0c;与作者无关&#xff01;&#xff01;&#…

Centos 安装jenkins 多分支流水线部署前后端项目

1、安装jenkins 1.1 安装jdk 要求&#xff1a;11及以上版本 yum install yum install java-11-openjdk 1.2 安装jenkins 导入镜像 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo出现以下错误 执行以下命令 sudo yum …

前端使用原生JS怎么上传本地路径的文件到后端【附源码】

本文不使用<input type"file">等前端上传组件 一、为什么不能使用本地文件路径上传&#xff1f; 前端不能直接根据本地文件路径&#xff08;例如 C:\Users\Username\Documents\image.jpg&#xff09;上传文件到后端服务器&#xff0c;原因主要在于浏览器的安全…

使用java远程提交flink任务到yarn集群

使用java远程提交flink任务到yarn集群 背景 由于业务需要&#xff0c;使用命令行的方式提交flink任务比较麻烦&#xff0c;要么将后端任务部署到大数据集群&#xff0c;要么弄一个提交机&#xff0c;感觉都不是很离线。经过一些调研&#xff0c;发现可以实现远程的任务发布。…

LOTO示波器软件PC缓存(波形录制与回放)功能

当打开PC缓存功能后, 软件将采用先进先出的原则排队对示波器采集的每一帧数据, 进行帧缓存。 当发现屏幕中有感兴趣的波形掠过时, 鼠标点击软件的(暂停)按钮, 可以选择回看某一帧的波形。一帧数据的量 是 当前用户选择时基档位缓冲区总数据大小。不同时基档位缓冲区大小不同&am…