網(wǎng)站建設(shè)找星火龍佛山seo培訓(xùn)機(jī)構(gòu)
上文介紹tablesaw的數(shù)據(jù)處理功能,本文向你展示其數(shù)據(jù)可視化功能,并通過(guò)幾個(gè)常用圖表示例進(jìn)行說(shuō)明。
Plot.ly包裝
可視化是數(shù)據(jù)分析的重要組成部分,無(wú)論你只是“查看”新數(shù)據(jù)集還是驗(yàn)證機(jī)器學(xué)習(xí)算法的結(jié)果。Tablesaw是一個(gè)開(kāi)源、高性能的Java“數(shù)據(jù)框架”,也是一個(gè)用于轉(zhuǎn)換數(shù)據(jù)以供分析的庫(kù)。Tablesaw的新繪圖框架提供了用Java為整個(gè)分析過(guò)程創(chuàng)建可視化的平臺(tái),從最早的探索到最后的展示。
該框架提供了Java版本的Plot.ly開(kāi)源JavaScript可視化庫(kù)封裝。Plot.ly基于出色的D3(數(shù)據(jù)驅(qū)動(dòng)文檔)框架,Plot.ly非常好,事實(shí)上,它被廣泛用于JavaScript以外的語(yǔ)言,如Python和R,雖然這些語(yǔ)言已經(jīng)有了可靠的可視化選項(xiàng)。與其他語(yǔ)言一樣,tablesaw提供的包裝器,可以很容易地用純Java構(gòu)造圖形,并用HTML和JavaScript呈現(xiàn)它們。
加入依賴
<dependency><groupId>tech.tablesaw</groupId><artifactId>tablesaw-core</artifactId><version>0.43.1</version>
</dependency>
<!-- Tablesaw的繪圖擴(kuò)展,用于數(shù)據(jù)可視化 -->
<!-- https://mvnrepository.com/artifact/tech.tablesaw/tablesaw-jsplot -->
<dependency><groupId>tech.tablesaw</groupId><artifactId>tablesaw-jsplot</artifactId><version>0.43.1</version>
</dependency>
時(shí)間序列圖示例
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"));
上面代碼,首先加載數(shù)據(jù),然后過(guò)濾數(shù)據(jù)。接著創(chuàng)建時(shí)間序列圖,create()方法包括四個(gè)參數(shù),分別為標(biāo)題和數(shù)據(jù),后面兩個(gè)參數(shù)分別指定x軸和有軸數(shù)據(jù)列。當(dāng)然我們也可以分為兩步實(shí)現(xiàn),首先創(chuàng)建圖,然后調(diào)用 Plot.show()方法顯示圖形:
Figure foxPlot =TimeSeriesPlot.create("George W. Bush approval ratings", foxOnly,"date", "approval");Plot.show(foxPlot);
散點(diǎn)圖示例
- 數(shù)據(jù)說(shuō)明
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
第一列是年月,第二列是月份序號(hào),第三列是搶劫案發(fā)生次數(shù)。我們希望采用折線圖方式展現(xiàn)數(shù)據(jù)。為了更好定義圖形,我們通過(guò)Layout 和 ScatterTrace兩個(gè)類實(shí)現(xiàn):
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
類的構(gòu)建器模式來(lái)創(chuàng)建一個(gè) Layout
實(shí)例。傳遞給構(gòu)建器的參數(shù) "Boston Robberies by month: Jan 1966-Oct 1975"
作為圖形的標(biāo)題,"year"
和 "robberies"
這兩個(gè)參數(shù)指定布局中坐標(biāo)軸等相關(guān)元素(比如橫坐標(biāo)可能對(duì)應(yīng) year
,縱坐標(biāo)對(duì)應(yīng) robberies
),最后調(diào)用 build()
方法來(lái)生成實(shí)際的 Layout
對(duì)象,該對(duì)象會(huì)定義可視化圖形整體的布局結(jié)構(gòu)。
使用 ScatterTrace
類的構(gòu)建器模式創(chuàng)建 ScatterTrace
對(duì)象(用于定義散點(diǎn)圖相關(guān)的配置和數(shù)據(jù)綁定)。在構(gòu)建器的參數(shù)中,通過(guò) robberies.numberColumn("Record")
和 robberies.numberColumn("Robberies")
來(lái)指定散點(diǎn)圖中數(shù)據(jù)對(duì)應(yīng)的列(這里分別獲取名為 "Record"
和 "Robberies"
兩列的數(shù)據(jù))。通過(guò) .mode(ScatterTrace.Mode.LINE)
將散點(diǎn)圖的展示模式設(shè)置為折線模式,意味著這些散點(diǎn)會(huì)用線段依次連接起來(lái)形成折線圖。
.marker(Marker.builder().color("#3D9970").build())
這部分用于設(shè)置散點(diǎn)(或者說(shuō)折線圖上數(shù)據(jù)點(diǎn)對(duì)應(yīng)的標(biāo)記)的樣式,這里指定了顏色為 "#3D9970"
,是通過(guò)先創(chuàng)建一個(gè) Marker
構(gòu)建器對(duì)象,設(shè)置顏色屬性后再生成實(shí)際的 Marker
對(duì)象傳遞給 ScatterTrace
構(gòu)建器。.fill(ScatterTrace.Fill.TO_NEXT_Y)
是在折線和下一個(gè) Y
軸坐標(biāo)范圍之間進(jìn)行填充操作),然后調(diào)用 build()
方法完成 ScatterTrace
對(duì)象的構(gòu)建,這個(gè)對(duì)象包含了散點(diǎn)圖(折線模式下)具體的數(shù)據(jù)和樣式等配置信息。
k線圖示例
每個(gè)時(shí)間點(diǎn)展示開(kāi)盤價(jià)、最高和最低價(jià)、收盤價(jià)。
Table priceTable = Table.read().csv("ohlcdata.csv");
Plot.show(OHLCPlot.create("Prices", priceTable, "date", "open", "high", "low", "close"));
總結(jié)
本文介紹tablsesaw數(shù)據(jù)可視化功能,包括引入依賴,幾個(gè)常用圖表示例。更多內(nèi)容可參考官方示例。