太陽圖、平行坐標……5種動態、交互可視化讓數據講出更動聽的故事

2020-12-05 機器之心Pro

選自TowardsDataScience

作者:Liana Mehrabyan

機器之心編譯

參與:Panda

數據可以幫助我們描述這個世界、闡釋自己的想法和展示自己的成果,但如果只有單調乏味的文本和數字,我們卻往往能難抓住觀眾的眼球。而很多時候,一張漂亮的可視化圖表就足以勝過千言萬語。本文將介紹 5 種基於 Plotly 的可視化方法,你會發現,原來可視化不僅可用直方圖和箱形圖,還能做得如此動態好看甚至可交互。

對數據科學家來說,講故事是一個至關重要的技能。為了表達我們的思想並且說服別人,我們需要有效的溝通。而漂漂亮亮的可視化是完成這一任務的絕佳工具。本文將介紹 5 種非傳統的可視化技術,可讓你的數據故事更漂亮和更有效。這裡將使用 Python 的 Plotly 圖形庫(也可通過 R 使用),讓你可以毫不費力地生成動畫圖表和交互式圖表。

那麼,Plotly 有哪些好處?Plotly 的整合能力很強:可與 Jupyter Notebook 一起使用,可嵌入網站,並且完整集成了 Dash——一種用於構建儀錶盤和分析應用的出色工具。

啟動

如果你還沒安裝 Plotly,只需在你的終端運行以下命令即可完成安裝:

pip install plotly

安裝完成後,就開始使用吧!

動畫

在研究這個或那個指標的演變時,我們常涉及到時間數據。Plotly 動畫工具僅需一行代碼就能讓人觀看數據隨時間的變化情況,如下圖所示:

代碼如下:

import plotly.express as px

from vega_datasets import data

df = data.disasters()

df = df[df.Year > 1990]

fig = px.bar(df,

y="Entity",

x="Deaths",

animation_frame="Year",

orientation='h',

range_x=[0, df.Deaths.max()],

color="Entity")

# improve aesthetics (size, grids etc.)

fig.update_layout(width=1000,

height=800,

xaxis_showgrid=False,

yaxis_showgrid=False,

paper_bgcolor='rgba(0,0,0,0)',

plot_bgcolor='rgba(0,0,0,0)',

title_text='Evolution of Natural Disasters',

showlegend=False)

fig.update_xaxes(title_text='Number of Deaths')

fig.update_yaxes(title_text='')

fig.show()

只要你有一個時間變量來過濾,那麼幾乎任何圖表都可以做成動畫。下面是一個製作散點圖動畫的例子:

import plotly.express as px

df = px.data.gapminder()

fig = px.scatter(

df,

x="gdpPercap",

y="lifeExp",

animation_frame="year",

size="pop",

color="continent",

hover_name="country",

log_x=True,

size_max=55,

range_x=[100, 100000],

range_y=[25, 90],

# color_continuous_scale=px.colors.sequential.Emrld

)

fig.update_layout(width=1000,

height=800,

xaxis_showgrid=False,

yaxis_showgrid=False,

paper_bgcolor='rgba(0,0,0,0)',

plot_bgcolor='rgba(0,0,0,0)')

太陽圖

太陽圖(sunburst chart)是一種可視化 group by 語句的好方法。如果你想通過一個或多個類別變量來分解一個給定的量,那就用太陽圖吧。

假設我們想根據性別和每天的時間分解平均小費數據,那麼相較於表格,這種雙重 group by 語句可以通過可視化來更有效地展示。

這個圖表是交互式的,讓你可以自己點擊並探索各個類別。你只需要定義你的所有類別,並聲明它們之間的層次結構(見以下代碼中的 parents 參數)並分配對應的值即可,這在我們案例中即為 group by 語句的輸出。

import plotly.graph_objects as go

import plotly.express as px

import numpy as np

import pandas as pd

df = px.data.tips()

fig = go.Figure(go.Sunburst(

labels=["Female", "Male", "Dinner", "Lunch", 'Dinner ', 'Lunch '],

parents=["", "", "Female", "Female", 'Male', 'Male'],

values=np.append(

df.groupby('sex').tip.mean().values,

df.groupby(['sex', 'time']).tip.mean().values),

marker=dict(colors=px.colors.sequential.Emrld)),

layout=go.Layout(paper_bgcolor='rgba(0,0,0,0)',

plot_bgcolor='rgba(0,0,0,0)'))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),

title_text='Tipping Habbits Per Gender, Time and Day')

fig.show()

現在我們向這個層次結構再添加一層:

為此,我們再添加另一個涉及三個類別變量的 group by 語句的值。

import plotly.graph_objects as go

import plotly.express as px

import pandas as pd

import numpy as np

df = px.data.tips()

fig = go.Figure(go.Sunburst(labels=[

"Female", "Male", "Dinner", "Lunch", 'Dinner ', 'Lunch ', 'Fri', 'Sat',

'Sun', 'Thu', 'Fri ', 'Thu ', 'Fri ', 'Sat ', 'Sun ', 'Fri ', 'Thu '

],

parents=[

"", "", "Female", "Female", 'Male', 'Male',

'Dinner', 'Dinner', 'Dinner', 'Dinner',

'Lunch', 'Lunch', 'Dinner ', 'Dinner ',

'Dinner ', 'Lunch ', 'Lunch '

],

values=np.append(

np.append(

df.groupby('sex').tip.mean().values,

df.groupby(['sex',

'time']).tip.mean().values,

),

df.groupby(['sex', 'time',

'day']).tip.mean().values),

marker=dict(colors=px.colors.sequential.Emrld)),

layout=go.Layout(paper_bgcolor='rgba(0,0,0,0)',

plot_bgcolor='rgba(0,0,0,0)'))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),

title_text='Tipping Habbits Per Gender, Time and Day')

fig.show()

平行類別

另一種探索類別變量之間關係的方法是以下這種流程圖。你可以隨時拖放、高亮和瀏覽值,非常適合演示時使用。

代碼如下:

import plotly.express as px

from vega_datasets import data

import pandas as pd

df = data.movies()

df = df.dropna()

df['Genre_id'] = df.Major_Genre.factorize()[0]

fig = px.parallel_categories(

df,

dimensions=['MPAA_Rating', 'Creative_Type', 'Major_Genre'],

color="Genre_id",

color_continuous_scale=px.colors.sequential.Emrld,

)

fig.show()

平行坐標圖

平行坐標圖是上面的圖表的連續版本。這裡,每一根弦都代表單個觀察。這是一種可用於識別離群值(遠離其它數據的單條線)、聚類、趨勢和冗餘變量(比如如果兩個變量在每個觀察上的值都相近,那麼它們將位於同一水平線上,表示存在冗餘)的好用工具。

代碼如下:

import plotly.express as px

from vega_datasets import data

import pandas as pd

df = data.movies()

df = df.dropna()

df['Genre_id'] = df.Major_Genre.factorize()[0]

fig = px.parallel_coordinates(

df,

dimensions=[

'IMDB_Rating', 'IMDB_Votes', 'Production_Budget', 'Running_Time_min',

'US_Gross', 'Worldwide_Gross', 'US_DVD_Sales'

],

color='IMDB_Rating',

color_continuous_scale=px.colors.sequential.Emrld)

fig.show()

量表圖和指示器

量表圖僅僅是為了好看。在報告 KPI 等成功指標並展示其與你的目標的距離時,可以使用這種圖表。

指示器在業務和諮詢中非常有用。它們可以通過文字記號來補充視覺效果,吸引觀眾的注意力並展現你的增長指標。

import plotly.graph_objects as go

fig = go.Figure(go.Indicator(

domain = {'x': [0, 1], 'y': [0, 1]},

value = 4.3,

mode = "gauge+number+delta",

title = {'text': "Success Metric"},

delta = {'reference': 3.9},

gauge = {'bar': {'color': "lightgreen"},

'axis': {'range': [None, 5]},

'steps' : [

{'range': [0, 2.5], 'color': "lightgray"},

{'range': [2.5, 4], 'color': "gray"}],

}))

fig.show()

原文連結:https://towardsdatascience.com/5-visualisations-to-level-up-your-data-story-e131759c2f41

相關焦點

  • 數據可視化之平行坐標圖的製作與分析
    平行坐標圖是信息可視化的一種重要技術。為了克服傳統的笛卡爾直角坐標系容易耗盡空間、 難以表達三維以上數據的問題, 平行坐標圖將高維數據的各個變量用一系列相互平行的坐標軸表示, 變量值對應軸上位置。為了反映變化趨勢和各個變量間相互關係,往往將描述不同變量的各點連接成折線。
  • 淺談數據可視化
    數據可視化,是利用計算機圖形學和圖像處理技術,將數據轉換為圖形或者圖像在屏幕上顯示出來進行交互處理的理論方法和技術。(2)坐標系編碼數據的時候,總得把物體放到一定的位置。有一個結構化的空間,還有指定圖形和顏色畫在哪裡的規則,這就是坐標系,它賦予 XY 坐標或經緯度以意義。有幾種不同的坐標系,一下三種坐標系幾乎可以覆蓋所有的需求,它們分別為直角坐標系(也稱為笛卡爾坐標系)、極坐標系和地理坐標系。
  • 兩步搞定數據可視化
    它使您能夠以不同方式查看數據,以通過以下方式發現新的答案和見解:用數據講述故事圍繞您的數據構建敘述,以便清晰地傳達其相關性並易於理解。不僅僅是簡單地呈現數字和闡述事實,而是通過可視化圖表將洞察力轉化為視覺故事。
  • 《數據可視化基礎》第二章:坐標軸
    這種兩個位置標度再加上一個相對位置就構成了一個坐標軸。直角坐標軸(笛卡爾坐標系)在數據可視化方面用的最廣的就是直角坐標系,這個坐標軸系統由於是數學家笛卡爾發明的,所以也就叫笛卡爾坐標系了。常規的坐標軸就是這個圖的樣子。
  • Material Design設計語言-數據可視化
    數據可視化:主要是藉助於圖形化手段,清晰有效地傳達與溝通信息。一、原則數據可視化,是將數據信息以直觀的圖標、圖形展示出來的一種表現形式。旨在讓用戶更容易看懂和理解數據,以及傳達的信息更明確。因為這能夠讓用戶快速分析,並迅速做出判斷和決策。數據可視化可以表達不同類型和大小的數據:從幾個數據點到大型多變量數據集。
  • 基於WebGL的三維數據可視化大屏開發流 ThingJS
    三維數據大屏可視化系統包含多源數據連接、生成二維/三維視圖、構建可視化大屏、大屏功能應用等一體化服務,基於多年可視化項目經驗,ThingJS平臺得出從數據源上傳到可視化大屏應用的完整流程,供參考。界面側邊欄提供應有盡有的可視化視圖列表,包含了太陽圖、柱狀圖、餅圖、玫瑰圖、折線圖、雷達圖、靜態和動態地圖、環狀圖、文本標籤雲等常用圖形。用戶點擊可視化視圖選項後,系統會進行視圖類型與數據結構匹配。
  • 大數據可視化技術的挑戰及應對措施
    本文統稱為「數據可視化」。   在傳統數據可視化基礎上,論文嘗試給出大數據可視化的內涵:大數據可視化是指有效處理大規模、多類型和快速變化數據的圖形化交互式探索與顯示技術。   數據可視化生產方式   編程方式根據語言類型可以分為函數式編程與聲明式編程。函數式編程可以根據圖表元素封裝層級分為更基礎的圖形編程接口,聲明式編程出現時間相對較晚,其中採用圖形語法思想的可視化語法。
  • 數據可視化系列:那些被你忽略的坐標軸設計細節
    坐標系是能夠使每個數組在維度空間內找到映射關係的定位系統,更偏向數學/物理概念。在數據可視化中,最常用的坐標西分為笛卡爾坐標系和極坐標系,本文介紹的坐標軸設計主要也是圍繞直角坐標系展開,enjoy~什麼是坐標軸在說坐標軸之前先來介紹下什麼是坐標系。
  • B端互動設計——數據可視化圖表
    在B端設計中,數據可視化是必不可少而且非常重要,越來越多的設計師需要和數據打交道,但是很多設計師不懂可視化當中不同用途的圖表規範,只是單純設計出好看的數據圖表,卻不能給用戶帶來更多的信息和價值。什麼是數據可視化  將不可見的數據轉化為可見的圖形和符號,從中發現規律和特徵,以獲取更多的信息和價值。  在當前網際網路的時代下,一頁圖可能對標一個龐大且複雜的數據表格,按照人類本身對圖的記憶遠大於對抽象文字的記憶,所以我們要學會讓數據說話,數據可視化除了「簡潔直觀」,還可有容易理解和記憶、傳遞信息更豐富的特點。
  • 網際網路人要了解的數據可視化 —— 基礎篇
    但是日常工作中,我們往往用不到這麼多的圖表種類,這個「圖表選擇器」更適合我們作為學習圖表概念的工具。日常工作中,有六種基本圖表已經可以覆蓋我們大部分的使用場景,也是做數據可視化最常用的六種圖表類型。7)控制字體的數量圖表中的字體數量以及字體大小的種類加起來不要超過3種(標題和副標題除外)。通常來說,我們在製作時會把注釋和坐標軸標籤設置為兩種字體樣式,所以只需要確保將這兩者統一起來,那麼就可以保證我們的圖表不超過3種字體樣式。
  • 提高數據科學家講故事能力的5個小技巧
    學習如何利用正確的工具成為一個有效的講故事者 講故事已經存在很久了。它幫助人們更好地理解發生在他們周圍和之前的事情。 人們不僅用它來吸引面前的觀眾的注意力,也吸引追隨他們的人。 講故事是一門藝術。
  • 這16個數據可視化案例,驚豔了全球數據行業
    通過下面的16個有趣的例子獲得啟發,它們是既注重風格和也注重內容的數據可視化案例。  什麼是數據可視化?  數據可視化是指將數據以視覺形式來呈現,如圖表或地圖,以幫助人們了解這些數據的意義。  文本形式的數據很混亂(更別提有多空洞了),而可視化的數據可以幫助人們快速、輕鬆地提取數據中的含義。
  • 5個可以幫助pandas進行數據預處理的可視化圖表
    數據科學和機器學習項目的結構化方法從項目目標開始。同一組數據點可以推斷出一些有意義的信息。基於我們所尋找的,我們需要關注數據的另一個方面。一旦我們明確了目標,我們就應該開始考慮我們需要的數據點。這將使我們能夠專注於最相關的信息集,而忽略可能不重要的數據集。
  • 信息可視化在新媒體時代的實踐思考 | 網際網路數據資訊網-199IT |...
    狹義上的數據可視化指的是講數據用統計圖表方式呈現,而信息圖形(信息可視化)則是將非數字的信息進行可視化。前者用於傳遞信息,後者用於表現抽象或複雜的概念、技術和信息。然而,當下信息可視化的手段比較單一,人們使用比較多的是信息圖表或動態圖形短片來表現信息與信息之間的關係。
  • 活用這幾種統計圖,你的數據可視化逆天了
    數據可視化,顧名思義就是將相對於隱晦的數據使用可視的、交互的圖表方式展示出來,進而形象的、直觀的將數據背後隱藏的信息和規律表示出來。步入大數據時代後,各行各業對數據越來越重視,隨之而來的就是對數據進行一系列的整合、挖掘、可視化分析,這為數據可視化注入了無限的活力,也就導致視覺的元素越來越多樣,從簡單的柱狀圖、線形圖、折線圖,擴展到了氣泡圖、男女圖、地圖、餅圖、散點圖、雷達圖等各種各樣的豐富的圖形。那麼活用了以下的幾種統計圖,你的數據可視化就逆天了。
  • 盤點55個最實用的大數據可視化分析工具
    一款好的工具可以讓你事半功倍,尤其是在大數據時代,更需要強有力的工具通過使數據有意義的方式實現數據可視化,還有數據的可交互性;我們還需要跨學科的團隊,而不是單個數據科學家、設計師或數據分析員;我們更需要重新思考我們所知道的數據可視化,圖表和圖形還只能在一個或兩個維度上傳遞信息, 那麼他們怎樣才能與其他維度融合到一起深入挖掘大數據呢?
  • 企業為什麼要做數據可視化系統
    數據可視化,先要理解數據,再去掌握可視化的方法,這樣才能實現高效的數據可視化。在設計時,你可能會遇到以下幾種常見的數據類型: 散點圖也叫 X-Y 圖,它將所有的數據以點的形式展現在直角坐標繫上,以顯示變量之間的相互影響程度,點的位置由變量的數值決定 佔比類餅圖 佔比類圖表顯示同一維度上的佔比關係。餅圖廣泛應用在各個領域,用於表示不同分類的佔比情況,通過弧度大小來對比各個分類。
  • 數據可視化的一些思考丨從三個問題看數據可視化的商業前景
    數據可視化的需求場景是什麼?一種場景是「看」,數據可視化的主要作用是展示匯報,是信息的獲取。比如前不久RayData團隊為央視頻打造的生態可視化交互管理系統,以及在央視現場的工作區,利用RayData Web做出來的環形可視化大屏,都是為了讓管理者、運營者、業務人員更好地獲取相關信息。另一種場景是「用」,數據可視化的主要目的是交互管理,是數據的應用。
  • 可視化工具不知道怎麼選?深度評測5大Python數據可視化工具
    指標說明為了更清晰的了解這幾款用於可視化的Python在作圖時的異同,本文將使用同一組數據分別製作多系列條形圖來對比,主要將通過以下幾個指標來進行評測:數據說明本文使用的數據為Pyecharts中的faker數據frompyecharts.fakerimportFakerx = Faker.choose()y1 = Faker.values
  • 你見過,這8個好玩的數據可視化的網站嗎?
    隨著大數據的普及,數據可視化逐漸成為一種傳遞數據信息的有效方式。數據可視化主要旨在藉助於圖形化手段,清晰有效地傳達與溝通信息。但似乎用戶體驗比較好而且又比較好玩有趣的數據可視化的網站設計或產品並不多見,為此,整理了前期個人積累的覺得挺有意思的幾個數據可視化的網站給大家分享一下。