4種更快更簡單實現Python數據可視化的方法

2021-02-20 機器之心

選自towardsdatascience

作者:George Seif

機器之心編譯

參與:Geek AI、劉曉坤

熱力圖、二維密度圖、蜘蛛網圖和樹狀圖,這些可視化方法你都用過嗎?

數據可視化是數據科學或機器學習項目中十分重要的一環。通常,你需要在項目初期進行探索性的數據分析(EDA),從而對數據有一定的了解,而且創建可視化確實可以使分析的任務更清晰、更容易理解,特別是對於大規模的高維數據集。在項目接近尾聲時,以一種清晰、簡潔而引人注目的方式展示最終結果也是非常重要的,讓你的受眾(通常是非技術人員的客戶)能夠理解。

讀者可能閱讀過我之前的文章「5 Quick and Easy Data Visualizations in Python with Code」,我通過那篇文章向大家介紹了 5 種基礎的數據可視化方法:散點圖、線圖、直方圖、條形圖和箱形圖。這些都是簡單而強大的可視化方法,通過它們你可以對數據集有深刻的認識。在本文中,我們將看到另外 4 個數據可視化方法!本文對這些方法的介紹會更詳細一些,可以在您閱讀了上一篇文章中的基本方法之後接著使用,從而從數據中提取出更深入的信息。

熱力圖

熱力圖(Heat Map)是數據的一種矩陣表示方法,其中每個矩陣元素的值通過一種顏色表示。不同的顏色代表不同的值,通過矩陣的索引將需要被對比的兩項或兩個特徵關聯在一起。熱力圖非常適合於展示多個特徵變量之間的關係,因為你可以直接通過顏色知道該位置上的矩陣元素的大小。通過查看熱力圖中的其他點,你還可以看到每種關係與數據集中的其它關係之間的比較。顏色是如此直觀,因此它為我們提供了一種非常簡單的數據解釋方式。

現在讓我們來看看實現代碼。與「matplotlib」相比,「seaborn」可以被用於繪製更加高級的圖形,它通常需要更多的組件,例如多種顏色、圖形或變量。「matplotlib」可以被用於顯示圖形,「NumPy」可被用於生成數據,「pandas」可以被用於處理數據!繪圖只是「seaborn」的一個簡單的功能。


import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


data = pd.DataFrame(np.random.random((10,6)), columns=["Iron Man","Captain America","Black Widow","Thor","Hulk", "Hawkeye"])

print(data)


heatmap_plot = sns.heatmap(data, center=0, cmap='gist_ncar')

plt.show()

二維密度圖

二維密度圖(2D Density Plot)是一維版本密度圖的直觀擴展,相對於一維版本,其優點是能夠看到關於兩個變量的概率分布。例如,在下面的二維密度圖中,右邊的刻度圖用顏色表示每個點的概率。我們的數據出現概率最大的地方(也就是數據點最集中的地方),似乎在 size=0.5,speed=1.4 左右。正如你現在所知道的,二維密度圖對於迅速找出我們的數據在兩個變量的情況下最集中的區域非常有用,而不是像一維密度圖那樣只有一個變量。當你有兩個對輸出非常重要的變量,並且希望了解它們如何共同作用於輸出的分布時,用二維密度圖觀察數據是十分有效的。

事實再次證明,使用「seaborn」編寫代碼是十分便捷的!這一次,我們將創建一個偏態分布,讓數據可視化結果更有趣。你可以對大多數可選參數進行調整,讓可視化看結果看起來更清楚。


import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import skewnorm


speed = skewnorm.rvs(4, size=50) 
size = skewnorm.rvs(4, size=50)


ax = sns.kdeplot(speed, size, cmap="Reds", shade=False, bw=.15, cbar=True)
ax.set(xlabel='speed', ylabel='size')
plt.show()

蜘蛛網圖

蜘蛛網圖(Spider Plot)是顯示一對多關係的最佳方法之一。換而言之,你可以繪製並查看多個與某個變量或類別相關的變量的值。在蜘蛛網圖中,一個變量相對於另一個變量的顯著性是清晰而明顯的,因為在特定的方向上,覆蓋的面積和距離中心的長度變得更大。如果你想看看利用這些變量描述的幾個不同類別的對象有何不同,可以將它們並排繪製。在下面的圖表中,我們很容易比較復仇者聯盟的不同屬性,並看到他們各自的優勢所在!(請注意,這些數據是隨機設置的,我對復仇者聯盟的成員們沒有偏見。)

在這裡,我們可以直接使用「matplotlib」而非「seaborn」來創建可視化結果。我們需要讓每個屬性沿圓周等距分布。我們將在每個角上設置標籤,然後將值繪製為一個點,它到中心的距離取決於它的值/大小。最後,為了顯示更清晰,我們將使用半透明的顏色來填充將屬性點連接起來得到的線條所包圍的區域。


import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt


df=pd.read_csv("avengers_data.csv")
print(df)

"""
   #             Name  Attack  Defense  Speed  Range  Health
0  1         Iron Man      83       80     75     70      70
1  2  Captain America      60       62     63     80      80
2  3             Thor      80       82     83    100     100
3  3             Hulk      80      100     67     44      92
4  4      Black Widow      52       43     60     50      65
5  5          Hawkeye      58       64     58     80      65

"""


labels=np.array(["Attack","Defense","Speed","Range","Health"])
stats=df.loc[0,labels].values


angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)
stats=np.concatenate((stats,[stats[0]]))
angles=np.concatenate((angles,[angles[0]]))


fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, stats, 'o-', linewidth=2)
ax.fill(angles, stats, alpha=0.25)
ax.set_thetagrids(angles * 180/np.pi, labels)
ax.set_title([df.loc[0,"Name"]])
ax.grid(True)

plt.show()

樹狀圖

我們從小學就開始使用樹狀圖(Tree Diagram)了!樹狀圖是自然而直觀的,這使它們容易被解釋。直接相連的節點關係密切,而具有多個連接的節點則不太相似。在下面的可視化結果中,我根據 Kaggle 的統計數據(生命值、攻擊力、防禦力、特殊攻擊、特殊防禦、速度)繪製了一小部分口袋妖怪遊戲的數據集的樹狀圖。

因此,統計意義上最匹配的口袋妖怪將被緊密地連接在一起。例如,在圖的頂部,阿柏怪 和尖嘴鳥是直接連接的,如果我們查看數據,阿柏怪的總分為 438,尖嘴鳥則為 442,二者非常接近!但是如果我們看看拉達,我們可以看到其總得分為 413,這和阿柏怪、尖嘴鳥就具有較大差別了,所以它們在樹狀圖中是被分開的!當我們沿著樹往上移動時,綠色組的口袋妖怪彼此之間比它們和紅色組中的任何口袋妖怪都更相似,即使這裡並沒有直接的綠色的連接。

對於樹狀圖,我們實際上需要使用「Scipy」來繪製!讀取數據集中的數據之後,我們將刪除字符串列。這麼做只是為了使可視化結果更加直觀、便於理解,但在實踐中,將這些字符串轉換為分類變量會得到更好的結果和對比效果。我們還設置了數據幀的索引,以便能夠恰當地將其用作引用每個節點的列。最後需要告訴大家的是,在「Scipy」中計算和繪製樹狀圖只需要一行簡單的代碼。


import pandas as pd
from matplotlib import pyplot as plt
from scipy.cluster import hierarchy
import numpy as np




df = pd.read_csv('Pokemon.csv')
df = df.set_index('Name')
del df.index.name
df = df.drop(["Type 1", "Type 2", "Legendary"], axis=1)
df = df.head(n=40)


Z = hierarchy.linkage(df, 'ward')


hierarchy.dendrogram(Z, orientation="left", labels=df.index)

plt.show()



原文連結:https://towardsdatascience.com/4-more-quick-and-easy-data-visualizations-in-python-with-code-da9030ab3429

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權

✄---

加入機器之心(全職記者 / 實習生):hr@jiqizhixin.com

投稿或尋求報導:content@jiqizhixin.com

廣告 & 商務合作:bd@jiqizhixin.com

相關焦點

  • 【Python教程】用Python進行數據可視化
    因此,我們的要求功能的實現,更是要多去思考不同的解決方案,評估不同方案的優劣,然後使用在該場景下最優雅的方式去實現。所以,我們列出的參考資料未必是實現需求所必須的。有的時候,實現題目的要求很簡單,甚至參考資料裡就有,但是背後的思考和親手去實踐卻是任務最關鍵的一部分。在學習這些資料時,要多思考,多提問,多質疑。相信通過和小夥伴們的交流,能讓你的學習事半功倍。
  • 數據統計可視化——python生成詞雲
    有的人會認為它是文本挖掘的可視化、有的人 會給一些用戶打上標籤、有的人則只是想玩玩這酷炫的詞彙……但詞雲產生的視覺效果才是讓人更著迷的地方。詞雲主要是對文本中出現頻率較高的「關鍵詞」進行視覺上的突出,讓人更直觀地看出文本的重點。本文針對上一篇文章
  • Python數據可視化教程之基礎篇
    經過學習之後,我總結了利用python實現可視化的三個步驟:確定問題,選擇圖形轉換數據,應用函數參數設置,一目了然python中最基本的作圖庫就是matplotlib,是一個最基礎的Python可視化庫,一般都是從matplotlib上手Python數據可視化,
  • 15種獨一無二的創新數據可視化方式
    本文總結了15種驚豔的可視化方式,涵蓋了各種各樣的主題。可以應用於選擇的任何工具中,但本文將以Python、R、Tableau和D3.js為例。 1. 用R進行數據可視化在選擇數據可視化工具時,R語言是創建ggplot2庫不二之選。只需幾行代碼就能實現有個性的可視化、獲取實時反饋、揭示數據模式。
  • 推薦: 一本「高顏值」的Python語言數據可視化圖書
    所以很有必要系統性地介紹python的繪圖語法系統,包括最基礎也最常用的matplotlib包、常用於統計分析的seaborn、最新出現類似R ggplot2語法的plotnine以及用於地理空間數據可視化的basemap包。在先介紹數據可視化基礎理論後,本書系統性地介紹了幾乎所有常見的二維和三維圖表的繪製方法,包括簡單的柱形圖系列、條形圖系列、折線圖系列,地圖系列等。
  • 利用Python畫中國地圖,實現各省數據可視化
    第一步:安裝pyecharts pyecharts是一款將python
  • 想用Python做數據可視化?先邁過這個「坎」
    用過python的人都會面臨一個問題,尤其是初學者:我應該選哪個來實現數據可視化? 這就是今天分享這篇文章的初衷,通過列舉一些使用頻率較高的工具,以及使用它們創建簡單的條形圖的方法,幫助各位進行簡單的梳理。
  • Python的數據可視化:對比7種工具包
    Python 的scientific stack(一個介紹Python科學計算包的網站)已經完全成熟,並且有各種各樣用例的庫,包括機器學習(連結:machine learning),數據分析(連結:data analysis)。數據可視化是探索數據和清晰的解釋結果很重要的一部分,但是Python在過去卻相對於其他工具比如R落後一點。
  • 用Python進行數據可視化的10種方法
    數據科學家並不遜色於藝術家。他們用數據可視化的方式繪畫,試圖展現數據內隱藏的模式或表達對數據的見解。更有趣的是,一旦接觸到任何可視化的內容、數據時,人類會有更強烈的知覺、認知和交流。 在數據科學中,有多種工具可以進行可視化。在本文中,我展示了使用Python來實現的各種可視化圖表。 怎樣才能在Python中實現可視化?
  • 讓Python代碼更快運行的 5 種方法
    選擇了腳本語言就要忍受其速度,這句話在某種程度上說明了Python作為腳本語言的不足之處,那就是執行效率和性能不夠亮。儘管Python從未如C和Java一般快速,但是不少Python項目都處於開發語言領先位置。Python很簡單易用,但大多數人使用Python都知道在處理密集型cpu工作時,它的數量級依然低於C、Java和JavaScript。
  • 8種用Python實現線性回歸的方法,究竟哪個方法最高效?
    沒錯,作為數據科學界元老級的模型,線性回歸幾乎是所有數據科學家的入門必修課。拋開涉及大量數統的模型分析和檢驗不說,你真的就能熟練應用線性回歸了麼?未必!在這篇文章中,文摘菌將介紹8種用Python實現線性回歸的方法。
  • Python可視化教程(上)-基礎篇
    經過學習之後,我總結了利用python實現可視化的三個步驟:確定問題,選擇圖形轉換數據,應用函數參數設置,一目了然python中最基本的作圖庫就是matplotlib,是一個最基礎的Python可視化庫,一般都是從matplotlib上手Python數據可視化,
  • Python數據可視化-seaborn Iris鳶尾花數據
    p=5261首先介紹一下Iris鳶尾花數據集,內容摘自百度百科:Iris數據集是常用的分類實驗數據集,由Fisher, 1936收集整理。「Iris也稱鳶尾花卉數據集,是一類多重變量分析的數據集。數據集包含150個數據集,分為3類,每類50個數據,每個數據包含4個屬性。
  • 成為數據分析師必會的數據可視化種類
    數據可視化是數據分析非常重要的一部分,他能夠幫助我們更好的展現數據分析結果,並能夠幫我們更好的從複雜的數據中提取出更直觀更有效的消息。今天主要介紹以下幾種: 1、二維散點圖 2、3D散點圖 3、配對圖 4、直方圖 5、箱形圖 我們從一個簡單的虹膜數據集來打比方,它具有4個特徵/獨立變量或預測變量——峰長,萼片寬度,瓣長
  • 用 Python 實現詞雲可視化
    今天不是說要怎麼用詞雲來做個人介紹,而是對工作中使用到比較多的詞雲計較做了一下總結,主要是包括三個方面:1、諸如上面的簡單形式矩形詞雲2、基於背景圖片數據來構建詞雲數據3、某些場景下不想使用類似上面的默認的字體顏色,這裡可以自定義詞雲的字體顏色接下來對上面三種類型的詞雲可視化方法進行demo實現與展示,具體如下,這裡我們使用到的測試數據如下
  • Python爬50W數據,BI做出可視化後,我有了答案
    一次完整的python數據分析流程是怎麼樣的?使用python從網站抓取數據,並將這些數據保存到SQLite資料庫中,然後對數據進行清洗,最後對數據進行數據可視化分析。可是熟悉的人應該知道,python爬取簡單,但是分析起來是很困難的,SQL語句、Pandas和Matplotlib這些十分繁瑣,一般人也不會。
  • 8種方法用Python實現線性回歸,為你解析最高效選擇
    本文為大家對比了8種用Python實現線性回歸的方法哪個更高效。沒錯,作為數據科學界元老級的模型,線性回歸幾乎是所有數據科學家的入門必修課。拋開涉及大量數統的模型分析和檢驗不說,你真的就能熟練應用線性回歸了麼?未必!在這篇文章中,小編將介紹8種用Python實現線性回歸的方法。了解了這8種方法,就能夠根據不同需求,靈活選取最為高效的方法實現線性回歸。
  • Python數據可視化—Seaborn
    今天為大家分享的小技巧是python的可視化畫圖庫Seaborn。相信很多小俠客用過matplotlib、pyecharts等可視化庫,可是為什麼還要介紹Seaborn呢?因為它修復了上述兩個庫的一些缺點,比如Seaborn提供了大量的高級接口和自定義主題,而matplotlib沒有這些接口使得很難確定哪些設置來自定義圖表。
  • 基於 Python 實現交互式數據可視化的工具(用於 Web)
    根據之前教授這門課的教授反饋來看,在這麼短的時間內教授D3是不可能的。 鑑於我自己對Python的熱愛和Python給學生帶來的舒適體驗,我決定向他們介紹Python中神奇的(我希望是的!)軟體包,它們可以實現所有我向學生展示的內容。
  • Python的可視化工具概述
    方法我相信,只要人們開始閱讀這一點,他們會指出更好的方式來使用這些工具。我的目標不是建立在每個例子完全相同的圖形.我想在搜索解決方案大致相同的時間以大致相同的方式可視化數據.按這個過程,最大的挑戰是格式化x和y軸,使得在給定一些大標籤時數據看起來合理.也許花一些時間弄清楚每個工具希望數據如何格式化.一旦弄明白這些部分,剩下的部分比較簡單的.