HoloView -- Tabular Datasets
原文地址HoloView – Tabular Datasets
表格數(shù)據(jù)集
正如我們已經發(fā)現(xiàn)的那樣,元素是圍繞數(shù)據(jù)的簡單包裝,提供了語義上有意義的視覺表示。HoloViews可以處理多種數(shù)據(jù)類型,但其中許多可以分類為:
- Tabular: 表格數(shù)據(jù)
- Gridded: 陣列數(shù)據(jù)
我們將分成兩個章節(jié)來描述上述的兩種結構,在本篇文章中描述表格數(shù)據(jù),包括下述的各種類型(包括NumPy array組成的字典類型,pandas的DataFrames, dask DataFrames, 和 xarray DataArrays ``Datasets`)。
表格化
Tabular data (also called columnar data) is one of the most common, general, and versatile data formats, corresponding to how data is laid out in a spreadsheet.
表格數(shù)據(jù)(也稱為柱狀數(shù)據(jù))是最常見、通用和通用的數(shù)據(jù)格式之一,對應于數(shù)據(jù)在電子表格中的布局方式。
有很多方法可以將數(shù)據(jù)轉化為表格形式,對于交互式分析,tidy data提供了簡單與靈活的方法。對于整齊的數(shù)據(jù),表格的列表示變量或維度,行表示觀察值。理解這種格式的最佳方法是查看這樣的數(shù)據(jù)集:
這個特殊的數(shù)據(jù)集是[華爾街日報]((http://graphics.wsj.com/infectious-diseases-and-vaccines/#b02g20t20w15)一篇優(yōu)秀的視覺新聞報道的主題。華爾街日報的主題詳細的訴說了各種疾病隨時間的發(fā)生率,該數(shù)據(jù)可以從匹茲堡大學的相應項目中下載University of Pittsburgh’s Project Tycho。我們可以看到,我們有5個數(shù)據(jù)列,每個數(shù)據(jù)列對應于指定特定測量值的自變量(“年”、“周”、“州”),或報告當時實際測量值/因變量(“麻疹”或“百日咳”發(fā)病率)。
了解變量之間的兩兩關系對于可視化是至關重要的,但是在表格中并沒有這些信息。顯然繪制“周”與“州”之間的關系圖沒有任何意義,而每個州下的麻疹率(在其他維度上求平均)的結果將很適合,但是并無法從表格格式中去推斷這些約束。因此我們會先創(chuàng)建一個Dataset這個HoloView對象,該Dataset聲明了自變量(kdims 這個維度)和因變量(vdims這個維度)。
這里,我們使用了可選的基于元組的語法**(name,label)**來為vdims這個維度制定了更有意思的描述,而對于kvdims,這里就是用了默認的字符。從上述可以看到,我們并沒有聲明如何去處理“Week”,因為我們這里只對"Year"和"State"感興趣。
ds = ds.aggregate(function=np.mean) ds
“repr”向我們顯示了“Dataset”的“kdims”(在方括號中)和“vdims”(在括號中)。因為“數(shù)據(jù)集”可以容納維度的任意組合,所以它不是立即可見的。從這四個維度到二維頁面沒有單一的清晰映射,因此上面顯示了文本表示。
為了使這些數(shù)據(jù)可視化,我們需要提供更多的元數(shù)據(jù),方法是選擇一個大型元素庫來幫助回答我們想要詢問的有關數(shù)據(jù)的問題。也許這個數(shù)據(jù)集最明顯的表現(xiàn)形式是一條“曲線”,顯示了每個州每年的發(fā)病率。我們可以從原始數(shù)據(jù)集中逐個拉出各個列,但現(xiàn)在我們已經聲明了有關維度的信息,最干凈的方法是使用將數(shù)據(jù)集的維度映射到元素的維度。到:
在這里,我們指定了兩個分別顯示麻疹和百日咳發(fā)病率的“曲線”元素(vdims),每年(kdim),并將其放置在垂直列中。您會注意到,盡管我們只為值維度指定了短名稱,但圖中顯示了我們在“數(shù)據(jù)集”上聲明的較長名稱(“麻疹發(fā)病率”、“百日咳發(fā)病率”)。
您還會注意到,我們自動收到一個下拉菜單,選擇要查看的“州”。每個“曲線”都忽略了未使用的值維度,因為額外的測量不會相互影響,但HoloViews必須對每個這樣的圖的每個關鍵維度做一些事情。如果“州”(或任何其他關鍵維度)沒有以某種方式繪制或聚合,則HoloViews必須讓用戶為其選擇一個值,因此選擇小部件。關于如何處理額外維度或只是額外數(shù)據(jù)范圍的其他選項如下所示。
selecting
我們經常想做的事情就是我們只選擇數(shù)據(jù)的一個子集。select方法使這個變得非常簡單,可以讓我們只選擇一個數(shù)據(jù),list或者tuple。這里我們使用select方法選擇四個州的麻疹發(fā)病率,當應用了這個selectH后,我們用 .to方法使其使用直方圖的形式展現(xiàn)出來,使用Year和State作為kdims,‘Measles Incidence’ 作為vdims
states = ['New York', 'New Jersey', 'California', 'Texas'] bars = ds.select(State=states, Year=(1980, 1990)).to(hv.Bars, ['Year', 'State'], 'measles').sort() bars.opts(opts.Bars(width=800, height=400, tools=['hover'], xrotation=90, show_legend=False))
編者注:
實話實說,自己直接用Bokeh也不一定能出來這個效果,但看到目前位置,總感覺能控制的東西相對少了些,不如直接寫bokeh來的踏實,但是畢竟希望能用它馴服大數(shù)據(jù)的繪圖,還是先都過一遍吧
Faceting(翻譯成鑲嵌?)
上面我們已經看到了我們沒有使用“to”方法顯式分配給元素的關鍵維度的情況:它們被分組,彈出一組小部件,以便用戶可以選擇要在任何時候顯示的值。然而,使用小部件并不總是查看數(shù)據(jù)的最有效方式,“數(shù)據(jù)集”允許您使用“數(shù)據(jù)集”指定其他替代方法。覆蓋,。網格和。布局``方法。例如,我們可以使用“.grid”分別布置每個狀態(tài):
grouped = ds.select(State=states, Year=(1930, 2005)).to(hv.Curve, 'Year', 'measles') gridspace = grouped.grid('State') gridspace.opts(opts.Curve(width=200, tools=['hover'], color='indianred'))
除了選擇數(shù)據(jù)子集,HoloViews支持的另一個常見操作是計算聚合。當我們首次加載此數(shù)據(jù)集時,我們在“周”列上進行聚合,以計算每年的平均發(fā)病率,從而顯著減少了我們的數(shù)據(jù)。因此,“聚合”方法對于根據(jù)我們的數(shù)據(jù)計算統(tǒng)計數(shù)據(jù)非常有用。
使用我們的數(shù)據(jù)集的一個簡單示例是按“年”計算麻疹發(fā)病率的平均值和標準差。我們可以簡單地通過傳遞關鍵維度來表示這一點(在本例中只是“年”),以及一個函數(shù)和可選的“spreadfn”來計算我們想要的統(tǒng)計數(shù)據(jù)。“spreadfn”將把函數(shù)名附加到維度名之后,這樣我們可以單獨引用計算值。計算完聚合后,我們可以簡單地將其轉換為“曲線”和“誤差條”:
通過這種方式,我們可以將多維數(shù)據(jù)集概括為可以直接可視化的數(shù)據(jù)集,同時允許我們沿維度計算任意統(tǒng)計信息。
最后
歡迎各種牛一起加入學習探討,關于python可視化的交流,剛新建的群,主要專注于bokeh與Holoview
可在QQ搜索群 python bokeh, 群號859297380,隨時交流,互通有無
總結
以上是生活随笔為你收集整理的HoloView -- Tabular Datasets的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中operator的主要用法
- 下一篇: 静态链接与动态链接的区别