このハウツーでは、gotaを使用してデータフレームからテンソルを作成する方法を説明します。
The goal is to read a csv file and create a *tensor.Dense with shape (2,2).
ゴールは、csvファイルを読み取り、(2,2) のシェイプの* tensor.Denseを作成することです。
以下のコンテンツのcsvファイルを考えます:
sepal_length,sepal_width,petal_length,petal_width,species
5.1 ,3.5 ,1.4 ,0.2 ,setosa
4.9 ,3.0 ,1.4 ,0.2 ,setosa
4.7 ,3.2 ,1.3 ,0.2 ,setosa
4.6 ,3.1 ,1.5 ,0.2 ,setosa
5.0 ,3.6 ,1.4 ,0.2 ,setosa
...これはIris flower data setからの抜粋です。 データセットのコピーはここから見つける事ができます。
種別以外のすべての値を含むテンソルを作成します。
gotaのデータフレームパッケージにはio.Readerを引数として取る関数ReadCSVがあります。
f, err := os.Open("iris.csv")
if err != nil {
log.Fatal(err)
}
defer f.Close()
df := dataframe.ReadCSV(f)dfがファイルに存在する全てのデータが含まれるDataFrameです。
gotaはデータフレームの列を参照する為にCSVの最初の行を使用します。
種別(species)カラムを削除しましょう:
xDF := df.Drop("species")物事を簡単にするために、データフレームをgonumで定義されているMatrixに変換します(matrixのgodocを参照)。
matrixはインタフェースです。gotaのデータフレームはMatrixインターフェイスを満たしません。gotaのドキュメントに記載されているように、
Matrixインターフェイスを満たすために、データフレームのラッパーを作成します。
type matrix struct {
dataframe.DataFrame
}
func (m matrix) At(i, j int) float64 {
return m.Elem(i, j).Float()
}
func (m matrix) T() mat.Matrix {
return mat.Transpose{Matrix: m}
}データフレームをmatrix構造体の中にラッピングすると関数tensor.FromMat64のおかげで*Denseテンソルを作成できるようになります。
xT := tensor.FromMat64(mat.DenseCopyOf(&matrix{xDF}))