2020年2月6日木曜日

Goでもpandasっぽいことできる!

https://qiita.com/thimi0412/items/05cff32279973b0d5599
シェアしました。

関連情報:
DB接続編
https://neovisionconsulting.blogspot.com/2020/02/gopandas-db.html

Golangで扱えるデーターフレーム4種類
https://neovisionconsulting.blogspot.com/2020/02/go4.html

ことの発端

  • バッチ処理とかでDataFrameでcsvファイルを処理したい
  • DataFrameと言ったらpandas
  • でもPythonは遅いので他の言語で扱えるものはないものか?

そこでこいつ!

  • 使って人いたらどのように使っているか教えて欲しい
  • とりあえず今回は使えそうなものを紹介します

まずはgo get



DataFrameを作る

DataFrameの作り方は6つあります
使用できる型はIntFloatStringBoolです

DataFrameを作成する関数

型指定しなくても、ある程度自動で判定してくれます
ReadJsonはあんまり使えないので紹介しません(詳しくはGitHubのexampleを)

New(列から作成)

若干面倒そうだがまぁまぁ

LoadRecords(行から作成)

dataframe.WithTypesがなくてもDataFrameを作成してくれます(型は指定できませんが)

LoadStruct(Structから作成)

個人的におすすめ、おそらくファイルから読み取る方法以外ではこの方法が一番スマートな方法だと思います

LoadMaps(Mapから作成)

これはちょっとないかな

ReadCSV(CSVファイルから作成)

TSVやスペース区切りもオプションを使用すれば読み込めます

出力はこんな感じ


Goには標準でPrint関数がありますが、fmtパッケージのPrint関数でしか出力できないので注意

データ操作


Select(列を選択)



SubSet(指定した行を取得)



Mutate(列を追加)



列を追加する際、すでに存在するカラム名を指定すればカラムの更新になります

RBind(行を結合)



DataFrameの行を結合します。ただしカラム名とカラム数が一致していることが前提です

CBind(列を結合)



DataFrameの列を結合します。ただしレコード数が一致していることが前提です

Set(データの更新)




Arrange(ソート)

複数キー指定できる



Filter(条件に一致した行を取得)



dataframe.F

  • Colname: カラム名
  • Comparator: 比較
  • Comparando: 比較値
    省略も可能(私はvscodeで書いて、省略をすると警告が出ます)

注意点

Filter内にdataframe.Fは何個でも条件として指定できるがandではなくorなので注意


andしたい

andは現状このようにやるしかない

面倒臭い!(時間があればプルリクを投げたい)。

InnerJoin(内部結合)



割と簡単

LeftJoin(外部結合)

とりあえずLeftJoinだけ紹介
もちろんOuterJoinRightJoinもあります



番外 DataFrameを扱えるライブラリ

他にもあるなら教えて欲しい!
ハンズラボ Advent Calendar 2018 明日2日目は @watarukura です!

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。

0 コメント:

コメントを投稿