Go PR

Go言語(Golang)で散布図・ヒストグラム作成【Gota & Gonum Plot】

Golangでグラフ作成
記事内に商品プロモーションを含む場合があります

こんにちは。現役エンジニアの”はやぶさ”@Cpp_Learningです。Pythonでデータ分析して、業務改善に繋げる活動などをしています。

本記事ではPythonではなくGo言語によるデータ可視化について紹介します。

散布図
Goで散布図を作成
ヒストグラム
Goでヒストグラム作成

本記事を最後まで読めば、Goで上図のようなグラフ作成ができるようになります

Goでデータ可視化(グラフ作成)するモチベーション

はじめにPythonではなくGoを使う理由を説明します。

Pythonを使うメリット

Pythonにはデータ分析に活用できる優秀なライブラリが数多く存在します。例えば、matplotlib , seabornBokeh , Plotly などを活用すれば、手軽に多様なグラフを作成できます。

本サイトでも、データ可視化に関する記事をいくつか公開しています。

PythonプログラミングでGIFアニメーションをつくる
PythonでグラフのGifアニメーションをつくる -データ分析のための可視化-こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。最近ダイエットしてます。 ダイエット期間中の体重デ...
Bokehでデータ可視化
【Python】Bokehでインタラクティブなデータ可視化 -ソースコードあり-こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。仕事でもプライベートでも機械学習で色々やってます。 ...
相関関係をインタラクティブなグラフで可視化
【Python】相関関係をグラフ(ネットワーク)で可視化する【Pyvis】こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。最近は統計的因果推論を勉強中です。 https:/...

Goを使うメリット

Pythonだと書くのは簡単ですが、パフォーマンスが思ったほど出なかったり、実行環境のないPCに対し、手軽にアプリを配布できないなどの課題があります。

以下の要求を満すアプリケーションを開発したいなら、Pythonで頑張るより、コンパイラで最適化しつつ、バイナリファイルを手軽に生成・配布できるGoに乗り換える方が楽だと考えています。

要求
  • 収集したデータをすぐに可視化したい【高速化・最適化】
  • 現場にあるPC(OS不明)でも可視化したい【クロスプラットフォーム】

Webアプリを開発して、サーバーで処理するなら、クライアント(現場のPC)のリソースやOSに依存しないため、上記の要求を満たせると思います。

ただし、パフォーマンスを考慮すると、サーバーサイドの開発言語もPythonではなくGoを採用した方が良いかもしれません。

パフォーマンスだけでなく、学習コスト・チームの成熟度・納期なども考慮して、プログラミング言語を選定することが重要です

Goでデータ可視化するときにオススメのパッケージ

Pythonでデータ可視化するとき、以下のフローでコードを書く人が多いと思います。

  1. pandasで前処理(CSVファイルから任意データを抽出など)
  2. matplotlibでグラフ出力(散布図・ヒストグラムなどの作成と保存)

Goのpandasライクなパッケージは調査済みでしたが、matplotlibライクなパッケージについては調査中でした。

dataframe-goとGonum
【Go言語】dataframe-goとGonumで行列演算や統計量算出をしてみるこんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。仕事でもプライベートでも機械学習で色々やってます。また、...

ダメ元で Twitter に疑問を投げたところ、gonum/plot を教えて頂きました。感謝!

なので本記事では、以下のフローでデータ可視化を行います。

  1. gotaで前処理
  2. gonum/plotでグラフ出力
スポンサーリンク

実践 Gotaの基本的な使い方

まずはGotaの基本的な使い方を紹介します。

GotaでCSVファイルからデータフレーム生成

最初に iris.csv を読み込んで、データフレームを生成します。

Gotaで基本統計量を算出

データフレームはターミナルに出力でき、Describe() で基本統計量の算出も簡単です。

Gotaでデータ抽出 -SelectとDrop-

カラム名を指定してデータを抽出するときは Select を使います。あるいは Drop を使って、不要なデータを排除することもできます。

Gotaでデータ抽出

カラム数に応じて、SelectDrop を使い分ければ良いです。

Gotaでフィルタ処理 -Filter-

Filter を使えば、任意の行を抽出できます。例えば、以下のコードで”virginica”に関するレコードのみを抽出できます。

Gotaでフィルタ処理

150行のデータから”virginica”に関する50行のデータのみを抽出できています。Gotaで他にも様々な処理ができますので、気になる人は調べてみてください。

実践 Gonum Plot の基本的な使い方

続いてGonum Plotの基本的な使い方を紹介します。

Gonum Plotでグラフ作成

Example plotsにグラフ作成のサンプルコード集があるので、それをベースに自作すれば良いです。

どのグラフを作成する場合でも、基本的には以下のコードが雛形になります。

ソースコードp3のような「plotter用のデータを生成する関数」を自作する以外は雛形コードを使い回せばOKです。

実践 Gota と Gonum Plot でグラフ作成

最後に Gota と Gonum Plot を使ったグラフ作成を行います。

プロジェクトフォルダの構成

プロジェクトフォルダの構成は以下の通りです。

filesフォルダの中身が対象データ(iris.csv)です。imagesフォルダがグラフの保存先です。

go.mod -バージョン管理-

go.mod は以下の通りです。

main.go -データフレームからグラフを作成する-

今まで説明した内容を応用して作った main.go が以下です。

このコードを実行すると ScatterPlot.pngHistogram.png が生成されます。

ScatterPlot.png
Goで散布図を作成
Histogram.png
Goでヒストグラム作成
はやぶさ
はやぶさ
Goで私好みのグラフ作成できた!感動した!!

まとめ

Go言語によるデータ可視化についてソースコード付きで紹介しました。

本記事の要約
  • なぜPythonではなくGoを使うのか?
  • Gota と Gonum Plot の基本的な使い方
  • 実践 Goでグラフ作成

「Goでグラフ作成したい人」や「Pythonユーザーだけど、Goにも手を出してみたい人」の参考になれば嬉しいです。

はやぶさ
はやぶさ
Goに関する情報共有しながら一緒に成長できたら嬉しいです。よろしくお願いします

(Goらしいコードが書けてるか少し不安なので、優しく教えて頂けたら嬉しいです)

以下 Go言語の本紹介。最初の一冊は「みんなのGo言語」がオススメです。

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python