Golang DataFrames를 구현하는 Gota 라이브러리 알아보기
오늘은 Golang으로 2차원 테이블인 DataFrames, Series를 구현한 Gota 라이브러리를 알아보려 합니다.
Gota 설치
우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.
맥에서 brew로 쉽게 설치할 수 있습니다.
brew install go
우분투에서도 apt로 쉽게 설치할 수 있습니다.
sudo apt-get install golang-go
go get으로 Gota 패키지를 설치합니다.
go get github.com/go-gota/gota/dataframe
홈의 go 폴더에 Gota 소스코드와 패키지 파일이 생성됩니다.
예제
package main
해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.
import (
"fmt"
"strings"
"github.com/go-gota/gota/dataframe"
"github.com/go-gota/gota/series"
)
fmt, strings 그리고 gota의 dataframe, series를 가져옵니다.
func main() {
df := dataframe.New(
series.New([]string{"b", "a"}, series.String, "STRING"),
series.New([]int{1, 2}, series.Int, "INT"),
series.New([]float64{1.0, 2.0}, series.Float, "FLOAT"),
)
fmt.Println(df)
series를 만들고 dataframe 생성자로 DataFrame 객체를 생성합니다.
df2 := dataframe.LoadRecords(
[][]string{
[]string{"STRING", "INT", "FLOAT", "BOOL"},
[]string{"a", "1", "1.0", "true"},
[]string{"b", "2", "2.0", "false"},
},
)
fmt.Println(df2)
이미 만들어진 슬라이스 기반으로 DataFrame 객체를 생성합니다.
type User struct {
STRING string
INT int
FLOAT float64
}
users := []User{
{"a", 1, 1.0, true},
{"b", 2, 2.0, true},
}
df3 := dataframe.LoadStructs(users)
fmt.Println(df3)
구조체로 DataFrame 객체를 생성하면서 구조체 이름에 없는 데이터는 객체에 포함하지 못하게 할 수 있게 할 수 있습니다.
df4 := dataframe.LoadRecords(
[][]string{
[]string{"STRING", "INT", "FLOAT", "BOOL"},
[]string{"a", "1", "1.0", "true"},
[]string{"b", "2", "2.0", "false"},
},
dataframe.DetectTypes(false),
dataframe.DefaultType(series.Float),
dataframe.WithTypes(map[string]series.Type{
"STRING": series.String,
"BOOL": series.Bool,
}),
)
fmt.Println(df4)
변수 타입을 자동으로 할 수 있지만, 옵션으로 기본 타입을 설정하거나 특정 시리즈에 타입을 부여할 수 있습니다.
df5 := dataframe.LoadMaps(
[]map[string]interface{}{
map[string]interface{}{
"STRING": "a",
"INT": 1,
"FLOAT": 1.0,
"BOOL": true,
},
map[string]interface{}{
"STRING": "b",
"INT": 2,
"FLOAT": 2.0,
"BOOL": true,
},
},
)
fmt.Println(df5)
map 인터페이스로도 불러와서 DataFrame 객체를 생성할 수 있습니다.
csvStr := `
string,int,float,bool
"a",1,1.0,true
"b",2,2.0,false
`
df6 := dataframe.ReadCSV(strings.NewReader(csvStr))
fmt.Println(df6)
jsonStr := `[{"INT":1,"FLOAT":1.0},{"STRING":"b","INT":2,"FLOAT":2.0}]`
df7 := dataframe.ReadJSON(strings.NewReader(jsonStr))
fmt.Println(df7)
}
CSV, JSON 형식으로 이루어져 있는 문자열을 기반으로 DataFrame 객체를 생성할 수 있습니다.
Written on August 15, 2019