數據可視化(十一):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.pswp.cn/web/11867.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11867.shtml
英文地址,請注明出處:http://en.pswp.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…