1
0
mirror of https://github.com/sjwhitworth/golearn.git synced 2025-04-28 13:48:56 +08:00
golearn/data/csv.go
2014-04-30 08:57:13 +01:00

58 lines
1.2 KiB
Go

/* Data - consists of helper functions for parsing different data formats */
package data
import (
"encoding/csv"
"fmt"
"io"
"os"
"strconv"
)
//Parses a CSV file, returning the number of columns and rows, the headers, the labels associated with
//classification, and the data that will be used for training.
func ParseCsv(filepath string, label int, columns []int) (int, int, []string, []string, []float64) {
labels := make([]string, 0)
data := make([]float64, 0)
headers := make([]string, 0)
rows := 0
file, err := os.Open(filepath)
if err != nil {
fmt.Println("Error:", err)
}
defer file.Close()
reader := csv.NewReader(file)
headerrow, _ := reader.Read()
for _, col := range columns {
entry := headerrow[col]
headers = append(headers, entry)
}
for {
record, err := reader.Read()
if err == io.EOF {
break
} else if err != nil {
fmt.Println("Error:", err)
}
//
labels = append(labels, record[label])
//Iterate over our rows and append the values to a slice
for _, col := range columns {
entry := record[col]
number, _ := strconv.ParseFloat(entry, 64)
data = append(data, number)
}
rows += 1
}
cols := len(columns)
return cols, rows, headers, labels, data
}