はじめに
データの可視化とは、データや情報をチャートやグラフなどの視覚的な形式で表現することです。様々なデータの変数間の関係性を、画像を用いて表現します。
データが視覚的に要約されていれば、表計算ソフトで何十行、何百行、何千行、何百万行ものデータを検索するよりも、誰でも簡単に傾向やパターンを把握することができます。それが人間の脳の仕組みなのです。
データ分析の目的は、データからインサイトを抽出することであり、データは可視化されることで価値が高まります。データアナリストがデータを可視化せずにデータからインサイトを抽出することは可能ですが、可視化せずにトレンドやパターンを伝えることは難しいでしょう。
この記事では、JFreeChartとGridDBを使ってJavaでデータを可視化する方法について説明します。
JFreeChartを理解する
JFreeChartは、チャートを作成するためのJavaライブラリです。JFreeChartでは、インタラクティブなものからそうでないものまで、様々な種類のチャートを作成することができます。JFreeChartでは、棒グラフ、折れ線グラフ、散布図、エリアチャート、ガントチャート、円グラフ、バブルチャートやウィンドチャートなどの特殊なチャートを作成することができます。
JFreeChartはカスタマイズ可能なライブラリです。グラフアイテムのペイントやカラー、マーカーやラインのスタイル、レジェンドなどを簡単に変更することができます。JFreeChartは、凡例や軸の目盛りを自動的に作成します。JFreeChartで作成したチャートは、マウスでズームインできます。JFreeChartで作成したチャートは、SVG、JPEG、PDF、PNGなど、さまざまな形式で保存できます。
JFreeChartを使ってデータを可視化する
JFreeChartに慣れてきたところで、データの可視化に使ってみましょう。ここでは、さまざまな製品の販売によって得られた収益の額を視覚化するヒストグラムを作成します。データは以下のようにCSV(Comma Separated Values)形式で保存されています。
まず、CSVファイル(data.csv)からGridDBにデータを移し、その後、GridDBからデータを取り出して可視化します。
JFreeChart をプロジェクトに追加する
データを可視化するには JFreeChart が必要です。JFreeChartは以下のURLからダウンロードできます。
https://www.jfree.org/jfreechart/download/
JFreeChart の最新版をダウンロードします。ダウンロードが完了したら、ダウンロードしたファイルを解凍します。
プロジェクトに2つのjarファイルを追加する必要があります。
Eclipseで、以下の手順を行います。
ステップ1: Project Explorer上でプロジェクト名を右クリックし、ポップアップメニューから「Properties..」を選択します。
ステップ2: プロパティダイアログで以下の操作を行います。
-
左側のリストからJavaビルドパスを選択します。
-
「Libraries」タブをクリックします。
-
「Add external JARS…」ボタンをクリックし、JFreeChartファイルを解凍した場所に移動します。「lib」フォルダを開きます。私の場合は、以下のディレクトリにあります。
jfreechart-1.0.19\jfreechart-1.0.19\lib
-
ファイル「jcommon- …」と「jfreechart- …」を選択し、「Open」ボタンをクリックします。
ステップ3: 「OK」ボタンをクリックして、ダイアログボックスを閉じます。
JFreeChartライブラリの2つのjarファイルがJavaプロジェクトに追加されました。
なお、これらのjarファイルは、お使いのOSのターミナルからも使用することができます。これについては後ほど説明します。
パッケージのインポート
プロジェクトにファイルを追加したので、いくつかのパッケージをプロジェクトにインポートしてみましょう。
import org.jfree.chart.*;
import org.jfree.data.*;
import org.jfree.data.xy.*;
import org.jfree.chart.plot.*;
import org.jfree.data.category.*;
import org.jfree.chart.renderer.category.*;
import org.jfree.data.general.DefaultPieDataset;
import java.awt.*;
次に、JavaからGridDBへの接続を確立し、そこに.csvデータを書き込む方法をご紹介します。
データベースへの接続
GridDB データベースへの接続を確立する必要があります。まず、GridDB を利用するためのパッケージをインポートします。
import com.toshiba.mwcloud.gs.Collection;
import com.toshiba.mwcloud.gs.GSException;
import com.toshiba.mwcloud.gs.GridStore;
import com.toshiba.mwcloud.gs.GridStoreFactory;
import com.toshiba.mwcloud.gs.Query;
import com.toshiba.mwcloud.gs.RowKey;
import com.toshiba.mwcloud.gs.RowSet;
import java.util.Properties;
import java.util.Collection;
次に、コンテナ「Sales」をスタティックなJavaクラスとして定義してみましょう。
static class Sales {
@RowKey char product;
int revenue;
}
コンテナSales
には,product
とrevenue
という2つの列があります.これらの列は,上記のスタティッククラスでは,変数の形で表現されています.
いよいよ、GridDBへの接続を確立します。Propertiesインスタンスを作成し、GridDBインストールの詳細を指定する必要があります。
Properties props = new Properties();
props.setProperty("notificationAddress", "239.0.0.1");
props.setProperty("notificationPort", "31999");
props.setProperty("clusterName", "defaultCluster");
props.setProperty("user", "admin");
props.setProperty("password", "admin");
GridStore store = GridStoreFactory.getInstance().getGridStore(props);
上記のコードでは、クラスタ名、ユーザ名、パスワードなど、私がインストールしたGridDBの詳細を指定しています。GridDBのインストール内容に合わせて変更することができます。
データベースに対してクエリを実行するためには,まずコンテナを取得する必要があります。つまり,Sales
コンテナです。以下のコードでこれを実現することができます。
Collection<String, Sales> coll = store.putCollection("col01", Sales.class);
コンテナのインスタンスが作成され、coll
という名前が付けられました。したがって、コンテナにアクセスするときは、常に coll
という名前を使うことになります。
データの読み込みとGridDBへの格納
「data.csv」ファイルからデータを読み込んで、GridDBに格納しましょう。
以下のコードを使用します。
File myfile = new File("data.csv");
Scanner sc = new Scanner(myfile);
String data = sc.next();
while (sc.hasNext()){
String scData = sc.next();
String dataList[] = scData.split(",");
String product = dataList[0];
String revenue = dataList[1];
Sales sales = new Sales();
sales.product = product;
sales.revenue = Integer.parseInt(revenue);
coll.append(sales);
}
上記のコードでは、”data.csv “ファイルからデータを読み込み、sales
オブジェクトを作成しています。このコードは、”sales “オブジェクトをGridDBデータベースに追加しています。なお、.csvデータセットのデリミタにはカンマ(,)を設定しています。
GridDBからデータを取得する
データを可視化するために、GridDB からデータを取得します。以下のコードを使用します。
Query<sales> query = coll.query("select *");
RowSet<sales> rs = query.fetch(false);
while (rs.hasNext()) {
RowSet res = query.fetch();
}
Select
ステートメントを使って、GridDBコンテナからすべてのデータを取得しました。次に、このデータからヒストグラムを作成してみましょう。
データの可視化
JFreeChartを使って、データを視覚化するヒストグラムを作成してみましょう。JFreeChartにはcreateBarChart()
という関数が用意されており、ヒストグラムを作成するのに利用できます。可視化したいデータセットの名前を、以下のようにパラメータとして関数に渡す必要があります。
JFreeChart histogram = ChartFactory.createBarChart("GridDB and JFreeChart","Product", "Revenue", res, PlotOrientation.VERTICAL, false, true, false);
histogram.setBackgroundPaint(Color.white);
histogram.getTitle().setPaint(Color.red);
CategoryPlot cp = histogram.getCategoryPlot();
cp.setRangeGridlinePaint(Color.blue);
ChartFrame frame=new ChartFrame("Bar Chart",histogram);
frame.setVisible(true);
frame.setSize(600,400);
グラフのX軸とY軸につける名前と、タイトルを指定しました。ヒストグラムを描くためのデータセットは res
です。また,グラフに色を付けました.
コードのコンパイルと実行
まず、gsadm
ユーザでログインします。作成した .java
ファイルと JFreeChart 用の .jar
ファイルを、以下のパスにある GridDB の bin
フォルダに移動します。
/griddb_4.6.0-1_amd64/usr/griddb-4.6.0/bin
これらの .jar
ファイルは JFreeChart の “lib” フォルダの下にあります。
次に、Linuxのターミナルで以下のコマンドを実行し、gridstore.jarファイルのパスを設定します。
export CLASSPATH=$CLASSPATH:/home/osboxes/Downloads/griddb_4.6.0-1_amd64/usr/griddb-4.6.0/bin/gridstore.jar
また、JFreeChartの.jar
ファイルのパスを設定します。
export CLASSPATH=$CLASSPATH:/home/osboxes/Downloads/griddb_4.6.0-1_amd64/usr/griddb-4.6.0/bin/jfreechart-1.0.1.jar
次に、上記のディレクトリに移動し、以下のコマンドを実行して、DataVisualization.java
ファイルをコンパイルします。
javac -cp jfreechart-1.0.1.jar -cp jcommon-1.0.0.jar DataVisualization.java
以下のコマンドを実行して生成された.classファイルを実行します。
java DataVisualization
このコードでは、以下のチャートが生成されるはずです。
おめでとうございます。
JFreeChartとGridDBを使って、Javaでデータを可視化する方法を紹介しました。
ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb