久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Go 中的數據分析——如何使用 Gota 包

數據分析是過濾、操縱和處理原始數據和數據集以從中獲得洞察力的過程。

Python 和 R 通常是數據分析的首選語言。但是這些天,Go 正為此目的而變得越來越流行。

在本教程中,我們將介紹 Gota(Go 中的數據分析包)及其核心功能和用途。

先決條件

  • 了解 Golang 中的函數式編程。
  • 安裝了 Go 的 Golang IDE(我使用 Goland 和 Go 1.17.6,但您可以使用其他任何版本)

什么是戈塔?

Gota 是 Go 編程語言的數據框和數據整理模塊。

Gota 類似于 Python 中的 Pandas 庫,并且是為與 Gonum 接口而構建的?Gonum 是 Golang 中的一個科學計算包,就像 Pandas 和 Numpy 一樣。

Gota 模塊使 Go 中的數據整理(轉換和操作)操作變得非常容易。它適用于 Go 內置數據類型和各種文件格式,如 JSON、CSV 和 HTML。

以下是我們將介紹的內容:

  • 哥達系列。
  • 得到數據框。
  • 將文件作為數據框讀取。
  • Gota 數據幀上的操作。
  • 導出和保存文件。

如何開始使用 Gota

安裝 Gota 很容易。將以下命令粘貼到您的終端中:

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

這應該會輸出成功的安裝消息。如果沒有,請將您的 Golang 更新到較新的版本并重試安裝。

基本的 Gota 概念

數據框

在深入研究之前,讓我們先了解一些 Gota 基礎知識:

數據集是數據的集合,表格或其他形式。

數據框是將數據組織成二維(行和列)表的數據結構,通常用于分析目的。

系列是屬于數據框的一維數據的集合。

請注意,這DataFrame是本文中用作示例的數據框對象的變量名稱。

什么是戈塔系列?

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

Gota 系列是使用series.New復合數據類型(如切片和地圖)的方法創建的。

對于切片,[series.New](http://series.New)接受三個參數:切片、系列類型(要包含在系列中的元素的類型)和列名。

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

系列也可以通過將鍵初始化為類型series并使用 Type 方法插入系列類型來從映射中創建。

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

這些切片可以傳遞到數據幀中以進行進一步的操作和操作。

什么是 Gota 數據框?

Dataframe 函數包含在 Gota 中的 dataframe 子模塊中。

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

數據幀是其他數據結構的數據結構。本質上,它們將數據格式化為二維表,以便您可以操作這些數據。因此,要使用數據幀,我們需要讀取其他數據結構和數據類型。

我們將在本教程中閱讀系列、結構、JSON 和 CSV 文件。

如何將系列轉換為數據框對象

您可以使用該方法將一個系列或一組系列轉換為數據框對象[dataframe.New](http://dataframe.New)。它以系列作為參數。

dataFrame := dataframe.New(
		series.New([]string{"a", "b", "c", "d", "e"}, series.String, "alphas"),
		series.New([]int{5, 4, 2, 3, 1}, series.Int, "numbers"),
		series.New([]string{"a1", "b2", "c3", "d4", "e5"}, series.String, "alnums"),
		series.New([]bool{true, false, true, true, false}, series.Bool, "state"),
	)

fmt.Println(dataFrame)

輸出

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>

結構類型的數據框

您可以使用結構來創建數據框。

type Dog struct {
	Name     string
	Colour      string
	Height  int
  Vaccinated  bool
}

dogs := []Dog{
	{"buster", "black", 56, false},
	{"jake", "white", 61, false},
	{"bingo", "brown", 50, true},
	{"gray", "cream", 68, false},
}

dogsDf := dataframe.LoadStructs(dogs) 
fmt.Println(dogsDf)

您可以通過創建 struct 類型的實例切片并使用dataframe.Loadstructs接收切片的方法創建數據幀來做到這一點。

輸出

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.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)

如何將文件讀入數據框對象

JSON 和 CSV 字符串可以分別傳遞給dataframe.ReadJSONdataframe.ReadCSV

如何讀取 JSON 字符串

JSON 字符串變量作為參數傳遞給dataframe.ReadJSONusingstrings.NewReader返回緩沖的 JSON 字符串。

	jsonString := `[
  {
    "Name": "John",
    "Age": 44,
    "Colour": "Red",
    "Height(ft)": 6.7
  },
  {
    "Name": "Mary",
    "Age": 40,
    "Colour": "Blue",
    "Height(ft)": 5.7
  }
]`

	dataRead := dataframe.ReadJSON(strings.NewReader(jsonString))
	fmt.Println(dataRead)
}

如何讀取 CSV 字符串

在這里,我們有 CSV 格式的相同字符串:

import (
	"fmt"
	"github.com/go-gota/gota/dataframe"
	"strings"
)

	csvString := `
	Name, Age, Colour, Height(ft)
	John,44,Red,6.7
	Mary,40,Blue,5.7`

	dataRead := dataframe.ReadCSV(strings.NewReader(csvString))
	fmt.Println(dataRead)

輸出

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

您可以通過讀取包含[os.Open](http://os.Open)文件名的文件來讀取 CSV 文件。defer file.Close()是一個上下文管理器,它可以幫助我們在程序運行后關閉文件以防止數據丟失。

	file, err := os.Open("example.csv")
	defer file.Close()
	if err != nil {
		log.Fatal(err)
	}
	dataFrame := dataframe.ReadCSV(file)

	fmt.Println(dataFrame)

如何讀取 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
  }
]

以下是您閱讀文件的方式:

	file, err := os.Open("example.json")
	defer file.Close()
	if err != nil {
		log.Fatal(err)
	}
	dataFrame := dataframe.ReadJSON(file)

	fmt.Println(dataFrame)

輸出:

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 數據框操作

如何在 Gota 中選擇行

Subset您可以使用數據框對象的方法選擇行。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.Set接收指定要更新的行數限制的整數切片,以及dataframe.LoadRecords接收要傳入類型的二維切片的函數。

	dataFrame2 := dataFrame.Set(
		    []int{0, 3},
		    dataframe.LoadRecords(
			  [][]string{
				[]string{"Jenny", "23", "purple", "2.2"},
				[]string{"Jesse", "34", "indigo", "3.5"},
				[]string{"Peter", "33", "violet", "3.3"},
			},
		),
	)

輸出

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.F我們將結構文字傳遞給。

struct 文字包含一個列名Colname、一個比較器Comparator和一個值Comparando,該值是我們要過濾數據幀的值。

比較器:

  • series.Eq→ 等于 =。
  • series.Neq→ 不等于≠。
  • series.Greater→ 大于 >。
  • series.GreaterEq→ 大于或等于 ≥。
  • series.Less→ 小于 <。
  • series.LessEq→ 小于或等于 ≤。
  • [series.In](http://series.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.Sortdataframe.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"),
)

如何在 Gota 中使用 Groupby

您可以使用 groupby 根據特定列對數據進行分類。

要使用 Gota 對列進行分組,我們使用該Groupby方法并傳入列名。

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

如何在 Gota 中加入數據框

連接是數據框的組合。使用 Gota 連接數據幀就像在 SQL(結構化查詢語言)中一樣。

連接類型:

  • 內連接 →dataFrame.InnerJoin返回兩個表中匹配值的數據框。
  • Left Join →dataFrame.LeftJoin匹配右數據幀與左數據幀的相似性。
  • Right Join →dataFrame.RightJoin將左側數據幀中的相似性與右側數據幀匹配。
  • Outer Join → dataFrame.OuterJoin返回數據框的所有值。

加入數據框對象的語法是:

joinVariableName := dataFrameObject.joinType(OtherDataframe, JoinKey)

Join 鍵是要執行連接的數據框對象的列。

左連接示例

 df := dataframe.New(
		series.New([]string{"a", "b", "c", "d", "e"}, series.String, "alphas"),
		series.New([]int{5, 4, 2, 3, 1}, series.Int, "numbers"),
		series.New([]string{"a1", "b2", "c3", "d4", "e5"}, series.String, "alnums"),
		series.New([]bool{true, false, true, true, false}, series.Bool, "state"),
	)
	df2 := dataframe.New(
		series.New([]string{"f", "g", "h", "i", "j"}, series.String, "alphas"),
		series.New([]int{1, 2, 3, 4, 5}, series.Int, "numbers"),
		series.New([]string{"f6", "g7", "h8", "i9", "j10"}, series.String, "alnums"),
		series.New([]bool{false, true, false, false, true}, series.Bool, "state"),
	)
  
	join := df.RightJoin(df2, "state")
  
	fmt.Println(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 中將函數應用于數據框

要將函數應用于數據框的列和行,我們分別使用CapplyRapply。這些接受要應用于列或行的函數。

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

如何在 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.WriteCSV接受它創建或插入的文件名。

file, err := os.Create("output.csv")
	if err != nil {
		log.Fatal(err)
	}

	dataFrame.WriteCSV(file.extension)

要導出 JSON,我們dataFrame.WriteJSON以相同的方式使用。

結論

在本教程中,您學習了如何在 Go 中執行數據分析。您還了解了 Gota 包的各種功能。

主要使用 Python 和 R 進行數據分析仍然是一個好主意,因為它們被認為是行業標準。但是 Gota 對于需要速度和同質性的應用程序很有用。

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 文登市| 绥阳县| 建平县| 南澳县| 石柱| 桦川县| 武城县| 南雄市| 衡南县| 尤溪县| 富裕县| 银川市| 成都市| 文登市| 桓仁| 海丰县| 鄯善县| 泰宁县| 龙陵县| 定边县| 柳林县| 明光市| 信阳市| 阳朔县| 洪雅县| 隆昌县| 江津市| 浏阳市| 宜州市| 青田县| 大城县| 吴旗县| 仲巴县| 六安市| 清徐县| 桐城市| 钦州市| 绥宁县| 威远县| 宜宾县| 天全县|