數(shù)據(jù)可視化是將數(shù)據(jù)轉(zhuǎn)換為視覺格式(例如圖表、圖形、地圖和信息圖)以有效傳達見解、模式和趨勢的過程。 它是數(shù)據(jù)分析的一個重要方面,因為它可以幫助人們快速、輕松地理解復(fù)雜的信息。
數(shù)據(jù)可視化的主要好處之一是它使用戶能夠識別數(shù)據(jù)中的趨勢和模式,這些趨勢和模式在以表格或數(shù)字形式查看時可能不會立即顯現(xiàn)出來。 例如,折線圖可以顯示數(shù)據(jù)集隨時間的變化,便于識別趨勢和模式,而條形圖可用于比較不同類別之間的數(shù)據(jù)。
數(shù)據(jù)可視化還使用戶能夠更有效地與他人交流他們的發(fā)現(xiàn)。 當(dāng)數(shù)據(jù)以一種有吸引力且易于理解的格式呈現(xiàn)時,它更有可能被記住并據(jù)以采取行動。 此外,可視化有助于闡明數(shù)據(jù)的含義并突出關(guān)鍵見解,使其他人更容易理解和使用信息。 根據(jù) Ben Shneiderman 教授的說法:
“可視化的目的是洞察力,而不是圖片?!?/span>
Python 是一種流行的數(shù)據(jù)分析和數(shù)據(jù)可視化編程語言。 Python 中有幾個庫和工具可用于創(chuàng)建可視化,包括:
Matplotlib:這是 Python 中使用最廣泛的數(shù)據(jù)可視化庫,非常適合創(chuàng)建靜態(tài)、動畫和交互式可視化。
Seaborn:這個庫建立在 Matplotlib 之上,提供了一個高級接口來創(chuàng)建有吸引力的統(tǒng)計圖形。
Plotly:這個庫非常適合創(chuàng)建交互式和動態(tài)可視化。 它支持范圍廣泛的可視化,包括條形圖、折線圖、散點圖等。
Bokeh:這個庫專注于為網(wǎng)絡(luò)創(chuàng)建交互式可視化。 它提供了一個高級界面,用于創(chuàng)建可以輕松嵌入網(wǎng)頁的可視化效果。
Altair:這個庫是一個聲明式可視化庫,允許用戶以簡單、人類可讀的格式指定可視化。
ggplot:這個庫是流行的 R 庫 ggplot2 的 Python 實現(xiàn),并提供了一個高級接口來創(chuàng)建復(fù)雜且有吸引力的可視化。
Pygal:這個庫非常適合創(chuàng)建靜態(tài)的、基于 SVG 的可視化。 它支持范圍廣泛的可視化,包括條形圖、折線圖等。
在下一節(jié)中,我將比較每個庫并為每個庫繪制相同的箱線圖
優(yōu)點:
廣泛使用且有據(jù)可查
高度可定制,允許廣泛的可視化
非常適合創(chuàng)建靜態(tài)、動畫和交互式可視化
缺點:
具有低級 API,需要更多代碼來創(chuàng)建簡單的可視化
如果不進行額外的定制,一些可視化效果可能會沒有吸引力
安裝:pip install matplotlib
繪制箱線圖:
import matplotlib.pyplot as pltimport numpy as npdata = np.random.normal(100, 20, 200)plt.boxplot(data)plt.show()
輸出看起來很普通:
優(yōu)點:
建立在 Matplotlib 之上,并提供用于創(chuàng)建有吸引力的統(tǒng)計圖形的高級接口
為廣泛的統(tǒng)計分析創(chuàng)建可視化提供內(nèi)置支持
缺點:
與 Matplotlib 相比,在定制方面仍然受到限制
如果不進行額外的定制,一些可視化效果仍然沒有吸引力
安裝:pip install seaborn
繪制箱線圖:
import seaborn as snsimport numpy as npimport matplotlib.pyplot as pltdata = np.random.normal(100, 20, 200)sns.boxplot(data)plt.show()
它在視覺上也不是那么吸引人:
優(yōu)點:
非常適合創(chuàng)建交互式和動態(tài)可視化
提供范圍廣泛的可視化效果,包括條形圖、折線圖、散點圖等
易于嵌入網(wǎng)頁
缺點:
用于某些類型的可視化可能很復(fù)雜
某些可視化效果的渲染速度可能很慢,尤其是對于大型數(shù)據(jù)集
安裝: pip install plotly
繪制箱線圖:
import plotly.express as pximport pandas as pdimport numpy as npnp.random.seed(10)data = [np.random.normal(0, 1, 100), np.random.normal(2, 1, 100)]df = pd.DataFrame(data).transpose()df.columns = ['A', 'B']fig = px.box(df, y='A', points='all')fig.update_layout(title_text='Boxplot Example')fig.show()
有更多的數(shù)據(jù)注釋和小部件用于 plotly 輸出:
請注意,在 Plotly Express 中,您需要使用 px.box 函數(shù)以長格式傳遞數(shù)據(jù),而不是前面示例中使用的寬格式。 這允許 Plotly Express 正確處理數(shù)據(jù)而不會遇到任何錯誤。
優(yōu)點:
專注于為網(wǎng)絡(luò)創(chuàng)建交互式可視化
提供高級界面,用于創(chuàng)建可輕松嵌入網(wǎng)頁的可視化效果
缺點:
與其他庫相比,在定制方面可能會受到限制
某些可視化效果的渲染速度可能很慢,尤其是對于大型數(shù)據(jù)集
安裝:pip install bokeh
下面是參考 Bokeh 文檔繪制箱線圖的示例:
import pandas as pdfrom bokeh.models import ColumnDataSource, Whiskerfrom bokeh.plotting import figure, showfrom bokeh.sampledata.autompg2 import autompg2from bokeh.transform import factor_cmapdf = autompg2[['class', 'hwy']].rename(columns={'class': 'kind'})kinds = df.kind.unique()# compute quantilesqs = df.groupby('kind').hwy.quantile([0.25, 0.5, 0.75])qs = qs.unstack().reset_index()qs.columns = ['kind', 'q1', 'q2', 'q3']df = pd.merge(df, qs, on='kind', how='left')# compute IQR outlier boundsiqr = df.q3 - df.q1df['upper'] = df.q3 + 1.5*iqrdf['lower'] = df.q1 - 1.5*iqrsource = ColumnDataSource(df)p = figure(x_range=kinds, tools='', toolbar_location=None, title='Highway MPG distribution by vehicle class', background_fill_color='#eaefef', y_axis_label='MPG')# outlier rangewhisker = Whisker(base='kind', upper='upper', lower='lower', source=source)whisker.upper_head.size = whisker.lower_head.size = 20p.add_layout(whisker)# quantile boxescmap = factor_cmap('kind', 'TolRainbow7', kinds)p.vbar('kind', 0.7, 'q2', 'q3', source=source, color=cmap, line_color='black')p.vbar('kind', 0.7, 'q1', 'q2', source=source, color=cmap, line_color='black')# outliersoutliers = df[~df.hwy.between(df.lower, df.upper)]p.scatter('kind', 'hwy', source=outliers, size=6, color='black', alpha=0.3)p.xgrid.grid_line_color = Nonep.axis.major_label_text_font_size='14px'p.axis.axis_label_text_font_size='12px'show(p)
輸出將是:
優(yōu)點:
聲明式可視化庫,允許用戶以簡單、人類可讀的格式指定可視化
提供廣泛的可視化
易于使用以創(chuàng)建簡單的可視化
缺點:
與其他庫相比,在定制方面可能會受到限制
某些可視化效果的渲染速度可能很慢,尤其是對于大型數(shù)據(jù)集
安裝:pip install altair
繪制箱線圖:
import altair as altimport pandas as pdimport numpy as npdata = np.random.normal(100, 20, 200)df = pd.DataFrame(data, columns=['data'])alt.Chart(df).mark_boxplot().encode( y='data:Q').properties( width=400, height=300).interactive()
優(yōu)點:
流行的 R 庫 ggplot2 的 Python 實現(xiàn)
提供用于創(chuàng)建復(fù)雜且有吸引力的可視化的高級界面
缺點:
用于某些類型的可視化可能很復(fù)雜
某些可視化效果的渲染速度可能很慢,尤其是對于大型數(shù)據(jù)集
安裝:pip install ggplot
繪制箱線圖:
import ggplotimport pandas as pdimport numpy as npdata = np.random.normal(100, 20, 200)df = pd.DataFrame(data, columns=['data'])p = ggplot(df, aes(x='data'))p = p + geom_boxplot()p.show()
請注意,ggplot 和 pandas 存在一些兼容性問題。 如果使用最新的 pandas,它會產(chǎn)生 AttributeError: module 'pandas’ has no attribute 'tslib’。
出現(xiàn)此錯誤是因為從 0.25.0 版開始,“tslib”模塊已從 pandas 中刪除。
要解決此問題,您可以:
降級到 0.25.0 之前的 pandas 版本,例如 0.24.2。
刪除代碼中對“tslib”的任何引用。
優(yōu)點:
專注于創(chuàng)建簡單干凈的可視化
提供范圍廣泛的可視化效果,包括條形圖、折線圖、散點圖等
重量輕,易于安裝
缺點:
與其他庫相比,在定制方面可能會受到限制
如果不進行額外的定制,一些可視化效果可能會沒有吸引力
可能不適合更復(fù)雜的可視化
安裝:pip install pygal
不幸的是,Pygal 沒有對箱線圖的內(nèi)置支持。 在 Pygal 中創(chuàng)建條形圖的示例代碼:
import pygalbar_chart = pygal.Bar()bar_chart.title = 'Bar Chart Example'bar_chart.x_labels = ['Label 1', 'Label 2', 'Label 3']bar_chart.add('Series 1', [1, 2, 3])bar_chart.add('Series 2', [3, 2, 1])bar_chart.render_to_file('bar_chart.svg')
輸出將生成為 svg 圖表:
每個圖書館都有自己的長處和短處。 例如,Matplotlib 是一個低級庫,需要更多代碼來創(chuàng)建可視化,但可高度自定義。 Seaborn 建立在 Matplotlib 之上,并提供了一個高級接口來創(chuàng)建有吸引力的統(tǒng)計圖形。 Plotly 非常適合創(chuàng)建交互式和動態(tài)可視化,而 Bokeh 專注于為網(wǎng)絡(luò)創(chuàng)建交互式可視化。 ggplot 是流行的 R 庫 ggplot2 的 Python 實現(xiàn),并提供用于創(chuàng)建復(fù)雜且有吸引力的可視化的高級接口。 Altair 是一個聲明式可視化庫,允許用戶以簡單、人類可讀的格式指定可視化。 工具的選擇將取決于項目的具體要求,例如所分析數(shù)據(jù)的類型、可視化的復(fù)雜性以及交互性的需要。