用Python自動實現圖表可視化操作,提高工作效率,又能有更多的時間摸魚了~

来源:https://www.cnblogs.com/hahaa/archive/2022/09/23/16721036.html
-Advertisement-
Play Games

在數據分析過程中,一般提取資料庫裡面的數據時候,拿著表格數據反覆思索,希望能夠根據自己所想立馬生成一張數據可視化的圖表來更直觀的呈現數據。 但想要進行數據可視化的時候,往往需要調用很多的庫與函數,還需要數據轉換以及大量的代碼處理編寫。這都是十分繁瑣的工作,確實只為了數據可視化我們不需要實現數據可視化 ...


在數據分析過程中,一般提取資料庫裡面的數據時候,拿著表格數據反覆思索,希望能夠根據自己所想立馬生成一張數據可視化的圖表來更直觀的呈現數據。

但想要進行數據可視化的時候,往往需要調用很多的庫與函數,還需要數據轉換以及大量的代碼處理編寫。這都是十分繁瑣的工作,確實只為了數據可視化我們不需要實現數據可視化的工程編程,這都是數據分析師以及擁有專業的報表工具來做的事情,日常分析的話我們根據自己的需求直接進行快速出圖即可,而Pandas正好就帶有這個功能,當然還是依賴matplotlib庫的,只不過將代碼壓縮更容易實現。下麵就讓我們來瞭解一下如何快速出圖。

一、基礎繪圖:plot

Series和DataFrame上的plot方法只是plt.plot()的簡單包裝,這裡我們用一段實際數據來進行可視化展示:

這是一段真實地鐵通行量特征數據,我們用此數據進行展示:

 

df_flow['客流量'].plot()

# 小伙伴們在學習Python的過程中,有時候不知道怎麼學,從哪裡開始學。掌握了一些基本的知識或者做了一些案例後,不知道下一步怎麼走,不知道如何去學習更加高深的知識。
# 那麼對於這些大兄弟們,我準備了大量的免費視頻教程,PDF電子書籍,以及源代碼!
# 我都放在這個裙了 279199867  大家自取即可~ 

 

如果索引由日期組成,則調用gcf().autofmt_xdate()方法可以很好地格式化x軸。

在DataFrame上,plot()可以方便地用標簽繪製所有列:

df_flow_mark[['濕度','風級','降水量']].plot()

 

可以使用plot()中的x和y關鍵字繪製一列與另一列的對比,比如我們想要使用星期六的客流量和星期日的客流量作對比:

df_flow_7=df_flow[df_flow['日期']=='星期日'].iloc[:7,:]
df_flow_7.rename(columns={'客流量':'星期日客流量'},inplace=True)
df_flow_6=df_flow[df_flow['日期']=='星期六'].iloc[:7,:]
df_flow_6.rename(columns={'客流量':'星期六客流量'},inplace=True)
df_compare=pd.concat([columns_convert_df(df_flow_7['星期日客流量']),columns_convert_df(df_flow_6['星期六客流量'])],axis=1)
df_compare.plot(x='星期日客流量',y='星期六客流量')

 

二、底圖板塊

根據Pandas包裝後的kind關鍵字我們梳理一下底圖種類:

也可以使用DataFrame.plot方法創建這些其他繪圖而不是提供kind關鍵字參數。這使得更容易發現繪圖方法及其使用的特定參數:

df.plot.area     df.plot.barh     df.plot.density  df.plot.hist     df.plot.line     df.plot.scatter
df.plot.bar      df.plot.box      df.plot.hexbin   df.plot.kde      df.plot.pie

 

除了這些類型,還有DataFrame.hist()和DataFrame.boxplot()方法,它們使用單獨的介面。

最後,pandas中有幾個繪圖功能。以Series或DataFrame作為參數的繪圖。其中包括:

  • Scatter Matrix

  • Andrews Curves

  • Parallel Coordinates

  • Lag Plot

  • Autocorrelation Plot

  • Bootstrap Plot

  • RadViz

分別是:

  • 散射矩陣
  • 安德魯斯曲線
  • 平行坐標
  • 滯後圖
  • 自相關圖
  • 引導圖
  • 拉德維茲圖

繪圖也可以用錯誤條或表格進行裝飾。

1、條形圖

df_flow_mark['客流量'].plot(kind='bar')
df_flow_mark['客流量'].plot.bar()

 

多個標簽圖表也可以一齊繪出:

df_flow_mark[['風級','降水量']].plot.bar()

 

要生成堆疊條形圖,傳遞stacked=True:

df_flow_mark[['風級','降水量']].plot.bar(stacked=True)

 

長久看這個maatplotlib的預設地圖有點疲勞了,我這裡換個主題,還是一樣的效果不礙事。

要獲得水平條形圖可以使用barh方法:

df_flow_mark[['風級','降水量']].plot.barh(stacked=True)

 

2、直方圖

可以使用DataFrame.plo.hist()和Series.plot.hist()方法繪製直方圖.

df4 = pd.DataFrame(
    {
        "a": np.random.randn(1000) + 1,
        "b": np.random.randn(1000),
        "c": np.random.randn(1000) - 1,
    },
    columns=["a", "b", "c"],
)
plt.figure();
df4.plot.hist(alpha=0.5)

 

直方圖可以使用stacked=True進行疊加。可以使用bins關鍵字更改bin大小。

df4.plot.hist(stacked=True, bins=20);

 

可以傳遞matplotlib hist支持的其他關鍵字。例如,水平和累積直方圖可以通過orientation='horizontal’和cumulative=True繪製。

有關詳細信息,可以參閱hist方法和matplotlib hist文檔。
現有介面DataFrame.hist,但仍然可以使用hist繪製直方圖

plt.figure();
df_flow_mark['風級'].hist();

 

DataFrame.hist()可以在多個子地塊上繪製列的直方圖:

plt.figure();
df_flow_mark[['風級','降水量']].diff().hist(color="k", alpha=0.5, bins=50);

 

可以指定by關鍵字來繪製分組直方圖:

data = pd.Series(np.random.randn(1000))
 
data.hist(by=np.random.randint(0, 4, 1000), figsize=(6, 4));

 

此外,還可以在DataFrame.plot.hist()中指定by關鍵字:

data = pd.DataFrame(
    {
        "a": np.random.choice(["x", "y", "z"], 1000),
        "b": np.random.choice(["e", "f", "g"], 1000),
        "c": np.random.randn(1000),
        "d": np.random.randn(1000) - 1
    }
)
data.plot.hist(by=["a", "b"], figsize=(10, 5));

 

三、箱線圖

調用

  • Series.plot.box()
  • DataFrame.plot.box()
  • DataFrame.boxplot()

可以繪製箱線圖可視化每個列中的值分佈。

df_flow_mark[['風級','降水量']].plot.box()

 


可以通過傳遞color關鍵字對Boxplot進行著色。你可以傳遞一個字典dict,key關鍵字為boxes、whiskers,medians,caps。如果dict中缺少一些鍵,則會為相應的使用預設顏色。此外,箱線圖還有sym關鍵字來指定傳單樣式。

color = {
    "boxes": "DarkGreen",
    "whiskers": "DarkOrange",
    "medians": "DarkBlue",
    "caps": "Gray",
}
df_flow_mark[['風級','降水量']].plot.box(color=color, sym="r+")

 


創建一個數據集展示更加明顯:

df = pd.DataFrame(np.random.rand(10, 5), columns=["A", "B", "C", "D", "E"])
color = {
    "boxes": "DarkGreen",
    "whiskers": "DarkOrange",
    "medians": "DarkBlue",
    "caps": "Gray",
}
df.plot.box(color=color, sym="r+")

 


此外,還可以傳遞matplotlib箱線圖支持的其他關鍵字。例如,可以通過vert=False和positions關鍵字繪製水平和自定義定位箱線圖。

df.plot.box(vert=False, positions=[1, 4, 5, 6, 8])

 

現有介面仍然可以使用DataFrame.boxplot:

df.boxplot()

 

可以使用by關鍵字參數創建分層箱線圖來創建分組。

例如

df = pd.DataFrame(np.random.rand(10, 2), columns=["Col1", "Col2"])
df["X"] = pd.Series(["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"])
plt.figure();
bp = df.boxplot(by="X")

 



還可以傳遞要列印的列子集,以及按多個列分組:

df = pd.DataFrame(np.random.rand(10, 3), columns=["Col1", "Col2", "Col3"])
df["X"] = pd.Series(["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"])
df["Y"] = pd.Series(["A", "B", "A", "B", "A", "B", "A", "B", "A", "B"])
plt.figure();
bp = df.boxplot(column=["Col1", "Col2"], by=["X", "Y"])

 


用DataFrame.plot.box()也是一樣的:

df = pd.DataFrame(np.random.rand(10, 3), columns=["Col1", "Col2", "Col3"])
df["X"] = pd.Series(["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"])
plt.figure()
bp = df.plot.box(columns=["Col1", "Col2"], by="X")

 

在箱線圖中,返回類型可以由return_type,關鍵字控制。有效選項是{“axes”、“dict”、“both”、“None}。鑲嵌面,由DataFrame.boxplot創建by關鍵字的箱線圖也會影響輸出類型:

np.random.seed(1234)
df_box = pd.DataFrame(np.random.randn(50, 2))
df_box["g"] = np.random.choice(["A", "B"], size=50)
df_box.loc[df_box["g"] == "B", 1] += 3
bp = df_box.boxplot(by="g")

 


上面的子地塊首先由數字列分割,然後由g列的值分割。下麵的子地塊首先由g值分割,然後由數字列分割。

bp = df_box.groupby("g").boxplot()

 

四、面積填充圖

可以使用Series.plot.area()和DataFrame.plot.area()創建面積圖。預設情況下,面積圖是堆疊的。要生成堆疊面積圖,每列必須全部為正值或全部為負值。

當輸入數據包含NaN時,它將自動由0填充。如果要使用不同的值進行刪除或填充,調用plot之前可以使用DataFrame.dropna()或DataFrame.fillna()。

代碼如下(示例):

df = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"])
df.plot.area();

 


要生成未堆疊的繪圖,請傳遞stacked=False。Alpha值設置為0.5。

df.plot.area(stacked=False);

 

五、散點圖

可以使用DataFrame.plot.scatter()方法繪製散點圖,散點圖需要x軸和y軸的數字列。這些可以由x和y關鍵字指定。

df_flow_mark.plot.scatter(x='日期',y='客流量')

 


要在單個軸上繪製多個列組,可以重覆指定目標軸的列印方法。建議指定顏色(color)和標簽(label)關鍵字以區分每個組。

df = pd.DataFrame(np.random.rand(50, 4), columns=["a", "b", "c", "d"])
df["species"] = pd.Categorical(
    ["setosa"] * 20 + ["versicolor"] * 20 + ["virginica"] * 10
)
ax = df.plot.scatter(x="a", y="b", color="DarkBlue", label="Group 1")
df.plot.scatter(x="c", y="d", color="DarkGreen", label="Group 2", ax=ax);

 


關鍵字c可以作為列的名稱,為每個點提供顏色:

df.plot.scatter(x="a", y="b", c="c", s=50);

 


如果將分類列傳遞給c,則將生成一個離散的顏色條:

df.plot.scatter(x="a", y="b", c="species", cmap="viridis", s=50);

 


可以傳遞matplotlib.scatter支持的其他關鍵字。下麵的示例顯示了一個氣泡圖,它使用DataFrame的一列作為氣泡大小。

df_flow_mark.plot.scatter(x='日期',y='客流量',s=df_flow_mark['濕度']*200)

 

六、最後

最後給大家分享一套Python視頻:Python實戰100例

今天的分享就到這裡結束遼~

大家下次再見!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 多用戶即時通訊系統04 4.編碼實現03 4.6功能實現-發送文件功能實現 4.6.1思路分析 客戶端(發送者): 先把文件a.jpg讀取到客戶端的位元組數組 把文件對應的位元組數組封裝到message對象[包含文件內容,發送者,接收者] 將message對象發送到服務端 服務端: 接收到message ...
  • 在子類派生的新方法中如何重用父類的功能 方式一:指名道姓調用某一個類下的函數=》不依賴於繼承關係 class OldboyPeople: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def f1( ...
  • 多用戶即時通訊系統04 4.編碼實現03 4.5功能實現-群聊功能實現 4.5.1思路分析 群聊的實現思路和私聊的實現非常類似。 不同的是:私聊時,服務端接收到消息後,只需要找出接收方的socket併發送消息即可 群聊時,服務端在接收到消息後需要遍歷集合中所有的線程,找出除了發送方的所有客戶端的so ...
  • 一、聚合查詢 需要導入模塊:from django.db.models import Max, Min, Sum, Count, Avg 關鍵語法:aggregate(聚合結果別名 = 聚合函數(參數)) 查詢結果:使用聚合函數,從每一個組中獲取結果:字典 註意點: 1 聚合函數必須在分組之後才能使 ...
  • java基礎 以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 https://www.cnblogs.com/lyh1024/p/16720908.html Ø 冒泡排序原理: 比較數組中,兩個相鄰的元素,如果第一個數比第二個數大,我們就交換他們的位置; 每一次比較,都會產生出一個最大,或者最 ...
  • SSD實現思路 SSD具有如下主要特點: 從YOLO中繼承了將detection轉化為regression的思路,一次完成目標定位與分類 基於Faster RCNN中的Anchor,提出了相似的Prior box; 加入基於特征金字塔(Pyramidal Feature Hierarchy)的檢測方 ...
  • 本文按照mac講解protobuf的安裝,windows上比較好安裝按照mac的基本流程就可以安裝成功,mac上的安裝有的時候比較容易出現問題 一、通過brew的方式安裝(僅Mac) 需要mac中存在brew,輸入命令:brew --version 查看是否存在brew,如不存在就進行安裝,安裝方法 ...
  • 大家好,,這篇文章咱們聊下JVM性能優化的問題 這篇文章主要介紹下JVM的運行數據區相關的內容,包括: 程式計數器 虛擬機棧 本地方法棧 堆 方法區 案例 和總結 好了,開始乾貨環節~ 作為一個常識性的知識,大家都知道位元組碼只是一個二進位文件存放在那裡。要想在jvm里跑起來,先得有個運行的記憶體環境。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...