官术网_书友最值得收藏!

2.7 DataFrames

DataFrame是具有標記列的數據結構,可以單獨使用不同的數據類型。就像SQL表或電子表格一樣,它有兩個維度。DataFrame是統計分析推薦的數據結構。Julia提供了一個名為DataFrames的包,它具有使用DataFrames所需的所有功能。Julia的DataFrames包提供了三種數據類型。

? NA:Julia中的缺失值由特定數據類型NA表示。

? DataArray:標準Julia庫中定義的數組類型。雖然它具有很多功能,但并未提供任何特定的數據分析功能。而DataFrames包中的DataArray類型提供了這些功能(例如,可以在數組中存儲一些缺失值)。

? DataFrame:這是一個二維數據結構,其提供了很多功能來表示和分析數據。

2.7.1 DataFrames中的NA數據類型

在實際生活中,我們會遇到無值的數據。雖然Julia中的數組無法存儲這種類型的值,但DataFrames包中提供了這種數據類型,即NA數據類型。假設有一個帶有浮點數的數據集:

julia> x = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6]

這將創建一個具有6個元素的數組{Float64,1}。

現在,假設此數據集在位置x[1]處有缺失值。這意味著該數據沒有意義,而不是1.1。我們不能用Julia中的數組類型來表示。當嘗試分配NA值時,將發生錯誤,我們無法將NA值添加到數組中。

01  julia> x[1] = NA
02  Error: UndefVarError: NA not defined
03  while loading In[2], in expression starting on line 1

如果要將數據加載到具有NA值的數組中,則需要使用DataArrays包下的DataArray類型。

【范例2-38】DataArrays的使用

01  julia> using DataArrays
02  julia> x = DataArray([1.1, 2.2, 3.3, 4.4, 5.5, 6.6])

這將創建一個具有6個元素的數組DataArrays.DataArray{Float64,1}。下面的代碼將使用NA值進行測試

【范例2-39】NA值測試

以下代碼簡單測試了NA的性質。

01  julia> x[1] = NA
02  NA
03  julia> x
04  6-element DataArrays.DataArray{Float64,1}:
05  NA
06  2.2
07  3.3
08  4.4
09  5.5
10  6.6

代碼01行將NA賦值給x[1],因此使用DataArray可以處理丟失的數據。NA并不總是影響應用于特定數據集的函數。因此,不涉及NA值或不受其影響的方法可以應用于數據集;如果涉及NA值,那么DataArray將給出NA作為結果。在下面的代碼中,我們使用了mean()函數和true||x。mean()函數不起作用,因為它涉及NA值;而true||x則按預期工作。

01  julia> true || x
02  true
03  julia> true && x[1]
04  NA
05  julia> mean(x)
06  NA
07  julia> mean(x[2:6])
08  4.4

可以看到,使用mean()函數時返回的值為NA。代碼07行不涉及NA值,因此返回正常的數值。

除此之外,還有其他類似于Julia的Array類型的功能。比如,Vector(一維數組類型)和Matrix(二維數組類型),它們在DataArray中的類型別名分別為DataVector和DataMatrix。

創建一維DataArray與創建Array類型相似。

【范例2-40】DataArray測試

01  julia> using DataArrays
02  julia> dvector = data([10,20,30,40,50])
03  5-element DataArrays.DataArray{Int64,1}:
04  10
05  20
06  30
07  40
08  50

代碼01行調用了DataArrays包,代碼02行創建了一個DataArray。

同理,可以創建一個二維DataMatrix陣列:

01  julia> dmatrix = data([10 20 30; 40 50 60])
02  2×3 DataArrays.DataArray{Int64,2}:
03  10 20 30
04  40 50 60
05  julia> dmatrix[2,3]
06  60

在前面的范例中,為了計算平均值,將數組中的NA值分離出來。這不是一個將NA值移出計算范圍的便利方法,更好的方法是使用dropna()函數。

01  julia> dropna(x)
02  5-element Array{Float64,1}:
03  2.2
04  3.3
05  4.4
06  5.5
07  6.6

上面代碼使用了dropna()函數,該函數能夠過濾掉NA值。

2.7.2 DataFrame表格

可以說,無論是R(data.frame)還是Python(Pandas)中的表格都是統計計算中最重要和最常用的數據類型。這是因為真實世界中的數據大多是表格式的,不能用簡單的DataArray來表示。

要使用DataFrame,請從Julia的已注冊包中添加DataFrames包,范例如下。

【范例2-41】使用表格

01  julia> Pkg.update()
02  julia> Pkg.add("DataFrames")
03  julia> using DataFrame

下面我們創建一個簡單的數據表。

對于這種類型的數據,無法使用DataArray來表示。這種數據具有以下功能:

? 在不同列中具有不同類型的數據。不能使用矩陣表示不同列中的不同數據類型,因為矩陣只能包含一種類型的值。

? 它是一個表格數據結構,其記錄與不同列的同一行中的其他記錄有關系。因此,所有列必須具有相同的長度。無法使用向量,因為無法使用相同長度的列強制執行。因此,DataFrame中的列由DataArray表示。

? 首列是標記的表頭。這種標記有助于我們熟悉數據并訪問數據,而無須記住其確切位置。因此,可以使用數字索引以及它們的標記訪問列。DataFrame包用于表示表格數據,并將DataArrays用作列。

主站蜘蛛池模板: 陕西省| 连平县| 宣城市| 比如县| 苍南县| 吐鲁番市| 阿拉尔市| 茶陵县| 闸北区| 屏东市| 诸城市| 保靖县| 尉犁县| 台中市| SHOW| 吉木萨尔县| 定结县| 汨罗市| 平度市| 安徽省| 博罗县| 卢氏县| 乾安县| 巴林左旗| 穆棱市| 秭归县| 淳化县| 萨迦县| 宝鸡市| 秦皇岛市| 海淀区| 章丘市| 四平市| 天水市| 武山县| 佛冈县| 安远县| 保康县| 威海市| 北安市| 长汀县|