上文介紹tablesaw的數據處理功能,本文向你展示其數據可視化功能,并通過幾個常用圖表示例進行說明。
Plot.ly包裝
可視化是數據分析的重要組成部分,無論你只是“查看”新數據集還是驗證機器學習算法的結果。Tablesaw是一個開源、高性能的Java“數據框架”,也是一個用于轉換數據以供分析的庫。Tablesaw的新繪圖框架提供了用Java為整個分析過程創建可視化的平臺,從最早的探索到最后的展示。
該框架提供了Java版本的Plot.ly開源JavaScript可視化庫封裝。Plot.ly基于出色的D3(數據驅動文檔)框架,Plot.ly非常好,事實上,它被廣泛用于JavaScript以外的語言,如Python和R,雖然這些語言已經有了可靠的可視化選項。與其他語言一樣,tablesaw提供的包裝器,可以很容易地用純Java構造圖形,并用HTML和JavaScript呈現它們。
加入依賴
<dependency><groupId>tech.tablesaw</groupId><artifactId>tablesaw-core</artifactId><version>0.43.1</version>
</dependency>
<!-- Tablesaw的繪圖擴展,用于數據可視化 -->
<!-- https://mvnrepository.com/artifact/tech.tablesaw/tablesaw-jsplot -->
<dependency><groupId>tech.tablesaw</groupId><artifactId>tablesaw-jsplot</artifactId><version>0.43.1</version>
</dependency>
時間序列圖示例
Table bush = Table.read().csv("bush.csv");foxOnly = bush.where(bush.stringColumn("who").equalsIgnoreCase("fox"));Plot.show(TimeSeriesPlot.create("Fox approval ratings for George W. Bush", foxOnly,"date", "approval"));
上面代碼,首先加載數據,然后過濾數據。接著創建時間序列圖,create()方法包括四個參數,分別為標題和數據,后面兩個參數分別指定x軸和有軸數據列。當然我們也可以分為兩步實現,首先創建圖,然后調用 Plot.show()方法顯示圖形:
Figure foxPlot =TimeSeriesPlot.create("George W. Bush approval ratings", foxOnly,"date", "approval");Plot.show(foxPlot);
散點圖示例
- 數據說明
Month,Record,Robberies
1966-01,1,41
1966-02,2,39
1966-03,3,50
1966-04,4,40
1966-05,5,43
1966-06,6,38
1966-07,7,44
1966-08,8,35
1966-09,9,39
1966-10,10,35
1966-11,11,29
1966-12,12,49
1967-01,13,50
第一列是年月,第二列是月份序號,第三列是搶劫案發生次數。我們希望采用折線圖方式展現數據。為了更好定義圖形,我們通過Layout 和 ScatterTrace兩個類實現:
Table robberies = Table.read().csv("boston-robberies.csv");Layout layout =Layout.builder("Boston Robberies by month: Jan 1966-Oct 1975","year", "robberies").build();ScatterTrace trace =ScatterTrace.builder(robberies.numberColumn("Record"),robberies.numberColumn("Robberies")).mode(ScatterTrace.Mode.LINE).marker(Marker.builder().color("#3D9970").build()).fill(ScatterTrace.Fill.TO_NEXT_Y).build();Plot.show(new Figure(layout, trace));
Layout
類的構建器模式來創建一個 Layout
實例。傳遞給構建器的參數 "Boston Robberies by month: Jan 1966-Oct 1975"
作為圖形的標題,"year"
和 "robberies"
這兩個參數指定布局中坐標軸等相關元素(比如橫坐標可能對應 year
,縱坐標對應 robberies
),最后調用 build()
方法來生成實際的 Layout
對象,該對象會定義可視化圖形整體的布局結構。
使用 ScatterTrace
類的構建器模式創建 ScatterTrace
對象(用于定義散點圖相關的配置和數據綁定)。在構建器的參數中,通過 robberies.numberColumn("Record")
和 robberies.numberColumn("Robberies")
來指定散點圖中數據對應的列(這里分別獲取名為 "Record"
和 "Robberies"
兩列的數據)。通過 .mode(ScatterTrace.Mode.LINE)
將散點圖的展示模式設置為折線模式,意味著這些散點會用線段依次連接起來形成折線圖。
.marker(Marker.builder().color("#3D9970").build())
這部分用于設置散點(或者說折線圖上數據點對應的標記)的樣式,這里指定了顏色為 "#3D9970"
,是通過先創建一個 Marker
構建器對象,設置顏色屬性后再生成實際的 Marker
對象傳遞給 ScatterTrace
構建器。.fill(ScatterTrace.Fill.TO_NEXT_Y)
是在折線和下一個 Y
軸坐標范圍之間進行填充操作),然后調用 build()
方法完成 ScatterTrace
對象的構建,這個對象包含了散點圖(折線模式下)具體的數據和樣式等配置信息。
k線圖示例
每個時間點展示開盤價、最高和最低價、收盤價。
Table priceTable = Table.read().csv("ohlcdata.csv");
Plot.show(OHLCPlot.create("Prices", priceTable, "date", "open", "high", "low", "close"));
總結
本文介紹tablsesaw數據可視化功能,包括引入依賴,幾個常用圖表示例。更多內容可參考官方示例。