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

2020-12-24 機器之心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

相關焦點

  • 快到年底了,聊聊數據可視化
    後者是名詞,表達「使某物、某事可見的動作或事實」;從我們比較熟悉的角度來說,可視化是利用人眼的感知能力對數據進行交互的可視表達以增強認知的技術,也就是對某個原本不可見的事物中(如大量堆疊的數據)形成可感知的可視信息(如圖形、符號、顏色、紋理)的過程或能力。
  • 數聚易視重磅推出,助力企業級數據大屏可視化
    數位化轉型趨勢下,以大屏為主要載體的數據可視化需求日益增加。大屏給人以震撼的視覺衝擊,呈現直觀豐富的信息,有效幫助管理或業務人員決策、判斷、發現問題、診斷問題,已經成為數位化管理中不可或缺的場景之一。很多企業通過大屏對外展示實力,對內暴露問題;政府機構也常以大屏展示工作進展,強化內部管理,提升對外信息透明度。
  • 這16個數據可視化案例,驚豔了全球數據行業
    數據可視化可以幫你更容易的解釋趨勢和統計數據。  數據是非常強大的。當然,如果你能真正理解它想告訴你的內容,那它的強大之處就更能體現出來了。  通過觀察數字和統計數據的轉換以獲得清晰的結論並不是一件容易的事。必須用一個合乎邏輯的、易於理解的方式來呈現數據。  談談數據可視化。
  • 19款實用「數據可視化工具」
    大數據時代,數據分析已經成為一種常態。調查數據顯示,53%的企業員工都需要經常查看分析數據。由於數據數量多且雜,人們在做數據分析時需要藉助可視化工具將數據更直觀地展示出來以幫助理解。為此,站長之家本周為大家整理了一些好用的可視化工具,幫助大家提高效率。
  • 打通數據價值最後一公裡:一文讓你全面了解數據可視化
    圖形和地圖是近年來的熱點技術,尤其大數據興起後,以圖形和地圖為核心的數據可視化得到長足的發展。從數據可視化的應用角度,圖形和地圖可以梳理出如下四大類應用場景:比較、序列、構成、描述。其中「比較」場景細分為進度vs目標、項目vs項目、地域vs地域。
  • 火爆抖音、B站的數據可視化動態視頻都是如何製作的?
    最近世界疫情越來越嚴重,小編在關注疫情的發展情況過程中,再一次拜倒在數據可視化的石榴裙下,話不多說,請看以下動畫。類似的視頻最近在抖音、B站上非常火爆!短短兩分鐘數據可視化的動態視頻可以讓我們非常清楚的了解疫情隨時間的變化趨勢,比如各個國家感染人數情況,還可以對比每個國家疫情的嚴重程度等等.......你是不是也在感嘆數據可視化的神奇力量。
  • 幕後 | 異世界冒險的實時可視化——時光坐標《刺殺小說家》虛擬拍攝特輯
    :設計團隊繪製超過2000張概念設計圖;「分鏡」做了4個月多,分鏡故事板有2095張;整個場景搭建耗時5個月;建了20多個攝影棚,搭建面積17萬平方米;全片2003個特效鏡頭,總參與特效製作人員800人左右。
  • 完全免費,簡化版Plotly推出,秒繪各類可視化圖表
    作者 | Peter來源 | Python編程時光今天給大家推薦一個可視化神器 - Plotly_express ,上手非常的簡單,基本所有的圖都只要一行代碼就能繪出一張非常酷炫的可視化圖。px是對Plotly.py的一種高級封裝,其內置了很多實用且現代的繪圖模板,用戶只需要調用簡單的API函數即可實用,從而快速繪製出漂亮且動態的可視化圖表。px是完全免費的,用戶可以任意使用它。最重要的是,px和plotly生態系統的其他部分是完全兼容的。
  • 嘉迅SuperShow-C分布式拼接顯示系統 大數據可視化雲平臺
    SuperShow-C是一種革命性的系統架構,將文字、圖片、網頁、數字視頻、音頻、網絡碼流、應用程式和電腦桌面等可視化數據作為信號源在拼接的顯示單元進行高清晰度可視化渲染、交互和控制。
  • 用數據做雕塑:他畫出機器的腦內世界
    所以在他的作品裡你能看到多維度的視覺整合,不僅是平面上的美感,更有空間和時間的深度。而他對未來世界的「幻想」和熱愛更是讓他的作品充滿浪漫。對Refik來說,他的畫筆是人工智慧算法,顏料是大數據,而畫布則是建築空間。與一些注重視覺體驗的多媒體藝術家不同,Refik 更加著眼於在藝術與數據的尋找動態平衡。
  • 數據可視化最有價值的50個圖表 | 網際網路數據資訊網-199IT | 中文...
    在數據分析和可視化中最有用的 50 個 Matplotlib 圖表。 這些圖表列表允許您使用 python 的 matplotlib 和 seaborn 庫選擇要顯示的可視化對象。這些圖表根據可視化目標的7個不同情景進行分組。 例如,如果要想像兩個變量之間的關係,請查看「關聯」部分下的圖表。 或者,如果您想要顯示值如何隨時間變化,請查看「變化」部分,依此類推。
  • 可視化腦洞十五個數據可視化的奇妙例子
    、財新數據可視化實驗室創始人黃志敏老師,從本期開始擔任可視化專欄特約欄目主編。那必定意味著數據可視化比得上千言萬語,對不對?無論如何,是時候讓我們收羅一些最具視覺衝擊力的複雜數據集了。以下是我最喜歡的15個例子。
  • 30行Python代碼實現3D數據可視化
    # 圖形數據構造# MOVETO表示將繪製起點移動到指定坐標# CURVE4表示使用4個控制點繪製3次貝塞爾曲線# CURVE3表示使用3個控制點繪製2次貝塞爾曲線# LINETO表示從當前位置繪製直線到指定位置# CLOSEPOLY表示從當前位置繪製直線到指定位置,並閉合多邊形path_data = [    (Path.MOVETO
  • 看電視無需換臺 海爾電視TVnow開啟可視化交互體驗
    有數據統計,人們每天大約花費3-4小時用來看電視,時間集中在晚上7點-11點,除了在一兩個節目上停留觀看,其他時間基本上都在反覆換臺。經常會出現這樣的情況,換到喜歡的節目精彩的橋段錯過了,或者終於想起昨天熱播劇的頻道,換過去卻是難熬的廣告時間。
  • 在模仿中精進數據可視化05:疫情期間市值增長top25公司
    前段時間我看到圖1所示的數據可視化作品,針對2020年1月1日到6月16日之間,世界範圍內市值增大最多的25家公司進行可視化:圖1這樣一張典型的商業圖表,看起來形式巧妙,且表現出很多數據信息。而今天的文章,我就將帶大家學習如何利用matplotlib來條理清楚地製作出這種類型的可視化作品。
  • pandas數據可視化原來也這麼厲害
    作者:小伍哥 來源:AI入門學習(公眾號)在python中,常見的數據可視化庫有3個:matplotlib:最常用的庫,可以算作可視化的必備技能庫,比較底層,api多,學起來不太容易。seaborn:是建構於matplotlib基礎上,能滿足絕大多數可視化需求,更特殊的需求還是需要學習matplotlib。pyecharts:上面的兩個庫都是靜態的可視化庫,而pyecharts有很好的web兼容性,可以做到可視化的動態效果。並且種類也比較豐富。
  • 嵌入式BI應用案例:金麒麟數據可視化分析平臺(集成ERP、MES)
    嵌入式BI應用案例:金麒麟數據可視化分析平臺(集成ERP、MES) 嵌入式BI應用案例:金麒麟數據可視化分析平臺(集成ERP、MES) 2020-12-02 15:16:45  來源:網際網路
  • 中國數據內容大會聚焦數據內容與可視化
    新華社杭州12月20日電 19日,「行業與前瞻——2020中國數據內容大會」在浙江杭州舉行。本屆大會以「融合中的數據可視化:科學敘事與數據開放」為主題,聚焦數據內容與可視化這一流行敘事模式,以期進一步帶動可視化技術的國內推廣和國際交流,並激發數據開放及其公共價值。
  • 如何全面解析數據並創造數據故事
    對於一個 「常見的導致駕駛分心的原因」 的案例,我們以性別分類,可以有2種方式去講述它:第一種方式,給出如下的統計數據:6%的男性認為發簡訊是一種幹擾,而女性有4.2%這樣認為;兒童在車裡可能導致9.8%的男性分心,而女性分心的有26.3%。
  • 百度智能雲數據可視化平臺Sugar重磅發布AI問答功能
    近日,百度智能雲BI與數據可視化平臺Sugar重磅發布AI問答功能,用戶只需將想知道的數據問題輸入至提問框,AI問答這個數據管家就可以實時地用圖形化的方式給出答案。AI問答接入了百度強大的自然語言處理(NLP)技術,依託智能對話定製與服務平臺UNIT的表格問答能力,使得用戶能像使用搜尋引擎一樣便攜靈活地查詢與分析分散於各系統的數據,成為應用即問即答的數據管家。