Go PR

【Go言語】dataframe-goとGonumで行列演算や統計量算出をしてみる

dataframe-goとGonum
記事内に商品プロモーションを含む場合があります

こんにちは。

現役エンジニアの”はやぶさ”@Cpp_Learningです。仕事でもプライベートでも機械学習で色々やってます。また、最近Go言語入門しました。

今回は、データ分析などに使えそうな dataframe-goGonum を試してみます。

Go言語の環境構築

Go言語の環境構築については、以下の記事をご参照下さい。

Go言語(Golang)環境構築
【Go言語入門】ScoopとVSCodeで環境構築 -Windows編-こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。諸事情あってGo言語入門しました。 Windows...

Go言語で扱えるデータフレーム -Gotaとdataframe-go比較-

Go言語から扱える主なデータフレームは4つあります。どれを使うか悩むときは Gota を使うのが良いと感じました。

Gotaのススメ

ただ、今回は dataframe-go を使います。

dataframe-goのススメ
  • CSV, JSONL, MySQL, PostgreSQLのインポート/エクスポートをサポート
  • カスタムシリーズが作れる柔軟性
  • gonum との相互運用ができる
  • 実際に触ってみたけど、直感的に使える

pythonでデータ分析などをするとき、pandasnumpy を行ったり来たりすることが多いと思います。

同じ感覚でGo言語で dataframe-goGonum を相互運用できることに魅力を感じました。

まだ安定版ではないようですが、応援してます。

スポンサーリンク

dataframe-goの基本的な使い方

dataframe-goの基本的な使い方を紹介します。

dataframe-goとGonumをインストール

まずは以下のコマンドで dataframe-go をインストールします。

go get github.com/rocketlaunchr/dataframe-go

あとから gonum との連携もしたいので、以下のコマンドでインストールします。

go get -u gonum.org/v1/gonum/…

追記 -トラブルシューティング-

もしコンパイル時に以下のようなエラーが出たら…

cannot find package “github.com/rocketlaunchr/mysql-go”

以下のコマンドでインストールすれば解消できます。

go get github.com/rocketlaunchr/mysql-go

データフレームを作る

以下のコードで簡単にデータフレームの作成と表示ができます。

pandas-goでデータフレーム作成

Gonumで統計量(平均と標準偏差)を算出

データフレームを変換すれば、Gonumで統計量の算出ができます。

今回は統計量(平均と標準偏差)の算出にGonumを使いましたが、もっと色んな統計量を算出したい場合は stats 使うのがオススメです。

Gonumでベクトル演算

Gonumならベクトル演算も簡単です。

要素の参照だけなら pandas-go のみでも良いけど、Gonumとの連携によりベクトル演算が手軽にできるのが良いですね。

Gonumで行列演算

Gonumが威力を発揮するのは直感的な行列演算ですよね。

dataframe-goとGonumで行列演算

データフレーム(pandas-go)から行列演算(Gonum)までの流れがスマートで素敵ですね。

もっとGonumの練習をしたい人は、以下の記事が参考になりますよ。

dataflame-goの応用的な使い方

以降からは dataframe-go の応用的な使い方と注意点を説明します。

データフレームのソート

以下のコードで簡単にデータフレームのソートができます。

dataframe-goでソート

ただし、ソートが不安定なので、NaNがある場合などは失敗します

csvとjsonのデータフレーム化

以下のコードでcsvやjsonフォーマットをデータフレーム化できます

dataframe-goでcsvとjsonを読み込む

ただし、型がStringになるので、この状態ではGonumとの連携はできません

オプション機能

CSVLoadOptions を使えば、型の自動検出などのオプション機能が使えます。

dataframe-goのオプション

ただし、jsonだとオプション機能が使えません

Selectがない

Selectがないので、任意の列を抽出できません。なので”age”のみを抽出したい場合は、それ以外の列を削除する必要があります。

Selectほしいなー

dataflame-goとGonum連携でデータ分析したかった…

最後に iris.csv を読み込んでデータ分析を実践したかったけど、型変換が上手くできずGonumと連携できませんでした

くるる
くるる
色々試したんだけどねー

まとめ

pythonpandas と numpy と同じ感覚でGo言語dataframe-goGonum を相互運用できたら素敵だと感じたので、色々と試してみました。

Go言語を使ったデータ分析もしたかったけど…

まだdataframe-goが不安定なのと私のGo言語スキルが低いのもあり、Gonumとの連携が手軽にできませんでした。

くるる
くるる
スキルが…ほしい……
くるる

dataframe-goの安定版リリースに期待しつつ、Go言語スキルを磨きたいと思います。

はやぶさ
はやぶさ
めざせGo言語マスター

以下 Go言語の本紹介

 

PICK UP BOOKS

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