Найти тему
Golang

Основы анализа данных на Go с использованием пакета Gota.

Оглавление

Анализ данных — это процесс фильтрации, манипулирования и обработки необработанных данных и наборов данных для получения из них информации.

GitHub - go-gota/gota: Gota: DataFrames and data wrangling in Go (Golang)

Python и R обычно являются языками для анализа данных. Но в наши дни Go становится все более популярным для этой цели.

В этом уроке мы рассмотрим Gota, пакет анализа данных в Go, а также его основные функции и способы использования.

Необходимые знания:

Знание функционального программирования на Golang.

Golang IDE с установленным Go (я использую Goland и Go 1.18 но вы можете использовать любой другой)

Что такое Gota?

Gota — это модуль данных и обработки данных для языка программирования Go.

Gota похожа на библиотеку Pandas в Python и предназначена для взаимодействия с Gonum, пакетом научных вычислений в Golang, точно так же, как Pandas и Numpy.

Модуль Gota упрощает работу с данными (преобразование и манипулирование) в Go. Он работает со встроенными типами данных Go и различными форматами файлов, такими как JSON, CSV и HTML.

Вот что мы рассмотрим:

Gota Series.

Gota Датафреймы.

Чтение данных

Операции с данными Gota.

Экспорт и сохранение файлов.

Как начать работу с t

Установить Gota очень просто.Ввеедите приведенную ниже команду в свой терминал:

go get -u https://github.com/go-gota/gota

После установки выйдет сообщение об успешной установке.

Основные понятия Gota

-2

Давайте немного узнаем об основах Gota, прежде чем погрузиться в них:

Фреймы данных — это структуры данных, которые организуют данные в двумерные (строки и столбцы) таблицы, обычно для целей анализа.

series — это набор одномерных данных, входящих во фрейм данных.

Обратите внимание, что DataFrame — это имя переменной объекта фрейма данных, используемого в качестве примера в этой статье.

Что такое серия Gota?

import "github.com/go-gota/gota/series"

Ряды Gota создаются с использованием метода series.New для составных типов данных, таких как slices и maps.

slices(http://series.New) принимает три аргумента: он принимает срез, тип серии (тип элементов, которые должны содержаться в серии) и имя столбца.

series.New([]string{"z", "y", "d", "e"}, series.String, "col")

Ряды также можно создавать из maps, инициализируя ключи как серии типов и используя метод Type для вставки типов серий.

a := map[string]series.Type{
"A": series.String,
"D": series.Bool,
}

Эти срезы могут быть переданы в фреймы данных для дальнейших манипуляций и операций.

Что такое Gota Dataframes?

Функции Dataframe содержатся в Gota в подмодуле dataframe.

import "github.com/go-gota/gota/dataframe"

Фреймы данных по сути, содержат данные в двумерных таблицах, которые удобны для манипуляции.

В этом руководстве мы будем читать серии, структуры, файлы JSON и CSV.

Как преобразовать Series в объект Dataframe

Вы можете преобразовать серию или набор серий в объект фрейма данных, используя метод [dataframe.New](http://dataframe.New). Принимает в сериале как аргументы.

Вывод:

alphas numbers alnums state
0: a 5 a1 true
1: b 4 b2 false
2: c 2 c3 true
3: d 3 d4 true
4: e 1 e5 false
<string> <int> <string> <bool>

Вы можете использовать структуры для создания фреймов данных.

Вывод:

Name Colour Height Vaccinated
0: buster black 56 false
1: jake white 61 false
2: bingo brown 50 true
3: gray cream 68 false
<string> <string> <int> <bool>

Как работать с фреймом данных в Gota

Когда у нас есть объект фрейма данных, мы можем вызвать у него информацию о составе фрейма данных, используя различные методы.

  • dataFrame.Dims() → Выводит размеры объекта dataframe.
  • dataFrame.Types() → Выводит типы данных, составляющие кадр данных.
  • dataFrame.Names() → Выводит имена столбцов фрейма данных.
  • dataFrame.Nrow() → Выводит количество строк.
  • dataFrame.Ncol() → Выводит количество столбцов.

Как запрашивать столбцы

Есть много методов, которые поставляются со столбцом фрейма данных Gota, которые помогают запрашивать значения столбца.

  • .IsNaN() → Проверяет, является ли столбец нулевым.
  • .Mean() → Возвращает среднее (среднее) значение столбца.
  • .Copy() → Создает новую копию столбца.
  • .HasNaN() → Проверяет, есть ли в столбце нулевое значение.
  • .Records() → возвращает значения в столбце.
aCol := dataFrame.Col("column_name") //selects a column
fmt.Println(aCol.HasNaN)

Как считывать файлы в объекты Dataframe

Строки JSON и CSV можно передавать в dataframe.ReadJSON и dataframe.ReadCSV соответственно.

Как читать строки JSON

Строковая переменная JSON передается в качестве аргумента в dataframe.ReadJSON с помощью strings.NewReader, который возвращает буферизованную строку JSON.

Вывод:

Name Age Colour Height(ft)
0: John 44 Red 6.700000
1: Mary 40 Blue 5.700000

Как читать CSV-файлы

Вот CSV:

Name,Age,Colour,Height(ft)
John,44,Red,6.7
Mary,40,Blue,5.7
Esther,35,Black,4.9
Jason,36,Green,5.2

Вы можете считывать файлы CSV, прочитав файл, используя [os.Open](http://os.Open), который принимает имя файла. defer file.Close() — это менеджер контекста, который помогает нам закрыть файл после запуска программы, чтобы предотвратить потерю данных.

Как читать файлы JSON

Чтение файлов JSON выполняется точно так же, как чтение файлов CSV.

Вот JSON:

[
{
"Name": "John",
"Age": 44,
"Colour": "Red",
"Height(ft)": 6.7
},
{
"Name": "Mary",
"Age": 40,
"Colour": "Blue",
"Height(ft)": 5.7
},
{
"Name": "Esther",
"Age": 35,
"Colour": "Black",
"Height(ft)": 4.9
},
{
"Name": "Mary",
"Age": 40,
"Colour": "Green",
"Height(ft)": 5.2
}
]

А вот как вы читаете файл:

Age Colour Height(ft) Name
0: 44 Red 6.700000 John
1: 40 Blue 5.700000 Mary
2: 35 Black 4.900000 Esther
3: 40 Green 5.200000 Mary
<int> <string> <float> <string>

Gota Dataframe Операции

Как выбрать строки в Gota

Вы можете выбрать строки, используя метод Subset объекта dataframe. dataFrame.Subset принимает срез из двух целых чисел, которые отображают количество строк, которые можно выбрать.

Gota предоставляет множество функций для манипулирования фреймами данных. Используя приведенный выше пример фрейма данных, давайте рассмотрим некоторые из этих операций:

row := dataFrame.Subset([]int{0, 2}
)

Это выбирает первые две строки фрейма данных.

Age Colour Height(ft) Name
0: 44 Red 6.700000 John
1: 35 Black 4.900000 Esther
<int> <string> <float> <string>

Как выбрать столбцы в Gota

Метод Select помогает нам выбирать столбцы фрейма данных. [df.Select](http://df.Select) принимает срез из двух целых чисел, которые показывают, сколько столбцов можно выбрать.

column := dataFrame.Select([]int{0, 2})

Мы также можем выбирать столбцы по индексу (именам столбцов), передавая фрагмент строк.

column := dataFrame.Select([]string{"Name", "Colour"})

Вывод:

Name Colour
0: John Red
1: Mary Blue
2: Esther Black
3: Mary Green
<string> <string>

Как обновить фрейм данных в Gota

Мы используем метод .Set объекта dataframe для обновления записей. dataFrame.Set принимает срез целых чисел, указывающий ограничение на количество обновляемых строк, и функцию dataframe.LoadRecords, которая принимает двумерный срез типа, который необходимо передать.

Вывод:

Name Age Colour Height(ft)
0: Jesse 34 indigo 3.500000
1: Mary 40 Blue 5.700000
2: Esther 35 Black 4.900000
3: Peter 33 violet 3.300000
<string> <int> <string> <float>

Как фильтровать значения в Gota

Для фильтрации значений мы используем .Filter для объекта dataframe. Это принимает dataframe.F, которому мы передаем литерал структуры.

Структура принимает имя столбца Colname, Comparator и значение Comparando, которое является значением, для которого мы хотим отфильтровать фрейм данных.

Comparators:

series.Eq→ Равно =.

series.Neq → Не равно ≠.

series.Greater → Больше >.

series.GreaterEq → Больше или равно ≥.

series.Less → Меньше, чем <.

series.LessEq → Меньше или равно ≤.

[series.In](http://series.In) → Содержится в In.

В этом примере мы используем объект фрейма данных из серии в разделе фрейма данных выше.

fil := dataFrame.Filter(
dataframe.F{Colname: "alphas", Comparator: series.Eq, Comparando: "b"},
)

alphas numbers alnums state
0: b 2 b2 false
<string> <int> <string> <bool>

Как отсортировать фрейм данных в Gota

Вы можете отсортировать фрейм данных, используя метод .Arrange объекта кадра данных. Он принимает dataframe.Sort или dataframe.RevSort, которые сортируются в порядке возрастания или убывания соответственно. Он также принимает имя столбца для сортировки в виде строки.

Сортировать по возрастанию:

sorted := dataFrame.Arrange(
dataframe.Sort("numbers")
)

Вывод:

alphas numbers alnums state
0: e 1 e5 false
1: c 2 c3 true
2: d 3 d4 true
3: b 4 b2 false
4: a 5 a1 true
<string> <int> <string> <bool>

Сортировать по убыванию:

sorted := dataFrame.Arrange(
dataframe.RevSort("numbers"),
)

Как использовать Groupby в Gota

Вы можете использовать groupby для выборки данных на основе определенных столбцов.

Чтобы сгруппировать столбцы с помощью Gota, мы используем метод Groupby и передаем имена столбцов.

categorise := dataFrame.GroupBy("Name", "Age")
fmt.Println(categorise)

Как соеденить датафреймы в Gota

Соединения представляют собой комбинацию фреймов данных. Объединение фреймов данных с Gota работает так же, как в SQL (язык структурированных запросов).

Типы соединений:

Inner Join → dataFrame.InnerJoin возвращает кадр данных совпадающих значений в обеих таблицах.

Left Join → dataFrame.LeftJoin сопоставляет сходство правого фрейма данных с Left Join данных.

Right Join → dataFrame.RightJoin сопоставляет сходства в левом фрейме данных с Right Join данных.

Outer Join → dataFrame.OuterJoin возвращает все значения фрейма данных.

Синтаксис для присоединения объектов dataframes:

joinVariableName := dataFrameObject.joinType(OtherDataframe, JoinKey)

Join key — это столбец объекта фрейма данных, в котором выполняется выполняться join соединение.

Пример Left Join

Вывод:

[12x7] DataFrame

state alphas_0 numbers_0 alnums_0 alphas_1 numbers_1 alnums_1
0: false b 4 b2 f 1 f6
1: false e 1 e5 f 1 f6
2: true a 5 a1 g 2 g7
3: true c 2 c3 g 2 g7
4: true d 3 d4 g 2 g7
5: false b 4 b2 h 3 h8
6: false e 1 e5 h 3 h8
7: false b 4 b2 i 4 i9
8: false e 1 e5 i 4 i9
9: true a 5 a1 j 5 j10
... ... ... ... ... ... ...
<bool> <string> <int> <string> <string> <int> <string>

Как применять функции к фрейму данных в Gota

Чтобы применить функции к столбцам и строкам фрейма данных, мы используем Capply и Rapply соответственно. Они принимают функцию, которая будет применена к столбцу или строке.

dataFrame.Capply(function)
dataFrame.Rapply(function)

Как использовать Describe для фрейма данных в Gota Использование Describe() для объекта фрейма данных возвращает описательную статистику по значениям фрейма данных.

description := dataFrame.Describe()

Вывод:

column alphas numbers alnums state
0: mean - 3.000000 - 0.600000
1: median - 3.000000 - NaN
2: stddev - 1.581139 - 0.547723
3: min a 1.000000 a1 0.000000
4: 25% - 2.000000 - 0.000000
5: 50% - 3.000000 - 1.000000
6: 75% - 4.000000 - 1.000000
7: max e 5.000000 e5 1.000000
<string> <string> <float> <string> <float>

Как экспортировать фреймы данных (запись файлов в Go)

Мы экспортируем обработанные данные, используя метод WriteCSV объекта dataframe. DataFrame.WriteCSV принимает имя файла, который он создает или который редактирует.

Для экспорта JSON мы используем dataFrame.WriteJSON таким же образом.

Вывод

В этом руководстве вы узнали, как выполнять анализ данных на Go. Вы также узнали о различных функциях пакета Gota.

По-прежнему рекомендуется в первую очередь использовать Python и R для анализа данных, поскольку они считаются отраслевым стандартом. Но Gota полезен для приложений, требующих скорости.

Ознакомьтесь с документацией Gota, чтобы узнать больше или внести свой вклад в проект.

Golang
Go tests