数据可视化(十一):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 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()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习古琴律学的好东西,帮您从基因里学古琴

《从基因里学懂古琴》是一本关于古琴律学的著作&#xff0c;作者通过基因的角度来解读古琴音乐的奥秘和美妙。古琴作为我国传统文化的瑰宝之一&#xff0c;具有悠久的历史和独特的音乐风格&#xff0c;但其律学原理一直以来都是一个谜。本书从基因的角度探讨了古琴音乐的律学特…

postman 使用教程

1. get 请求 &#xff1f;号后为 get 请求的参数 参数之间用符号"&" 分隔。 假设url 为&#xff1a;http://10.71.7.101/cgi-bin/gw-config.cgi?methodgetway_param&t1715658871647 复制进来到postman的地址栏 后 &#xff1f;后面的参数会自动添加到参…

服务器利用率的神器脚本

在服务器管理的过程中&#xff0c;了解服务器的各项性能指标是至关重要的。无论是CPU的负载情况&#xff0c;内存使用情况&#xff0c;还是硬盘的存储空间以及TCP连接状态&#xff0c;这些都是我们判断服务器健康状态和性能的重要依据。然而&#xff0c;手动一项项去检查这些指…

OpenAI 深夜发布 GPT-4o,强到让人恐怖,这还是AI?!又一批人将面临失业...

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 看了 OpenAI 最新的…

祝贺誉天杨峰老师率先通过HCIE-openEuler认证!

热烈祝贺誉天教育杨峰老师4月29日成功通过HCIE-openEuler认证&#xff01; 杨峰老师HCIE-openEuler证书 作为HCIP-openEuler全国首位通过者&#xff0c;杨峰老师凭借他深厚的专业知识、丰富的实践经验和不懈的努力&#xff0c;成功通过了华为认证的HCIE-openEuler专家级认证&a…

Edge(微软)——一款充满创新精神的浏览器

随着科技的不断进步&#xff0c;互联网浏览器已经成为我们日常生活中不可或缺的工具。在这个领域&#xff0c;微软Edge作为一款新型的浏览器&#xff0c;凭借其独特的功能和优秀的性能&#xff0c;逐渐在市场上占据了一席之地。本文将深入探索微软Edge的特点、优势以及它如何改…

渗透神器:burpsuit教程

前言&#xff1a;释疑解惑 《BP使用教程一》发布后&#xff0c;后台收到了许多小伙伴的私信问BP是怎么汉化的&#xff0c;在这里统一为大家解答一下。 BP的汉化依赖于汉化jar包&#xff0c;在启动时引入汉化包即可&#xff0c;废话不多说&#xff0c;直接上命令&#xff1a; …

富锂锰基材料极具发展潜力 我国产业化进程加速

富锂锰基材料极具发展潜力 我国产业化进程加速 富锂锰基材料以锰元素为主&#xff0c;我国锰资源较丰富&#xff0c;相比于铁锂材料、高镍三元材料&#xff0c;富锂锰基材料具有一定的降本潜力。此外富锂锰基材料在能量密度、充放电倍率等方面也具有明显优势。富锂锰基材料是富…

【计算机毕业设计】ssm框架的购物网站

现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统 数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网上超市系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&#xff…

Fortran 最全介绍

省流&#xff1a; Fortran &#xff08;Formula Translator&#xff0c;“公式翻译器”&#xff09;&#xff0c;由John Backus发明。1954年在纽约正式发布&#xff0c;称为FORTRAN Ⅰ。1957年第一个FORTRAN编译器在IBM704计算机上实现&#xff0c;FORTRAN I在IBM704系统上运行…

nodejs里面的 http 模块介绍和使用

Node.js的HTTP模块是一个核心模块&#xff0c;它提供了很多功能来创建HTTP服务器和发送HTTP请求。 http.Server是一个基于事件的http服务器&#xff0c;内部是由c实现的&#xff0c;接口是由JavaScript封装。 http.request是一个http客户端工具。 用户向服务器发送数据。 创…

泰山众筹:创新电商模式引领共赢新潮流

一、泰山众筹模式创新解读 泰山众筹&#xff0c;这一电商领域的创新模式&#xff0c;通过巧妙地将产品销售与积分众筹相结合&#xff0c;为用户和平台带来了双赢的局面。在泰山众筹模式下&#xff0c;用户购买产品的同时能够积累积分&#xff0c;这些积分可以作为参与众筹的筹…

初探 JUC 并发编程:Java 中的并发队列 ConcurrentLinkedQueue 源码级解析

第七部分&#xff1a;Java 并发包中并发队列解析 7.1&#xff09;ConcurrentLinkedQueue 原理探究 7.1.1&#xff09;类图结构 ConcurrentLinkedQueue 底层通过单向链表的方式实现&#xff0c;其中有两个 volatile 类型的 Node 节点用来表示队列的首、尾节点。 public Concu…

市场对节能高效电机需求不断增长 变频器具有广阔发展空间

市场对节能高效电机需求不断增长 变频器具有广阔发展空间 变频器是利用变频技术与微电子技术&#xff0c;通过改变电机工作电源频率方式来控制交流电动机的电力控制设备&#xff0c;主要由制动单元、检测单元、微处理单元等部分构成。变频器能够根据需要调整电机的转速&#xf…

如何基于可靠事件模式实现最终一致性?

今天我们一起来探讨一个分布式环境下的常见问题,这个问题与数据的一致性有关。那么,什么是数据一致性呢?要回答这个问题,需要我们回顾一下单块系统和分布式系统中对于数据处理的不同需求。 我们知道,传统的单块系统通常都只与一个数据库进行交互,所有的数据处理过程都位于…

混淆矩阵实战

2.实战 1.加载数据 #加载数据 import pandas as pd import numpy as np data pd.read_csv(data_class_raw.csv) data.head()2.data.loc得到样本属性&#xff0c;并进行样本数据可视化 #可视化数据 %matplotlib inline from matplotlib import pyplot as plt#define X and y…

政安晨:【Keras机器学习示例演绎】(四十一)—— 使用预先训练的词嵌入

目录 设置 简介 下载新闻组 20 数据 让我们来看看这些数据 清洗数据并将数据分成训练集和验证集 创建词汇索引 加载预训练的词嵌入 建立模型 训练模型 导出端到端模型 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与…

【Unity】为小球添加爆发力往前移动的代码

代码里的几个变量都需要在场景中提前创建好并赋值 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Shotobjt : MonoBehaviour {// 点击按钮&#xff0c;克隆一个prefab&#xff0c;然后给这个克隆后的对象添加往前方的力publi…

TCP/UDP通信中的部分函数

UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;和TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是互联网协议套件中最常用的两种传输层协议&#xff0c;它们负责在互联网中端到端地传输数据。尽管它们服务…