- Julia機器學習核心編程:人人可用的高性能科學計算
- 朱紅慶
- 1416字
- 2020-07-28 11:01:34
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用作列。
- JavaScript百煉成仙
- Visual Basic程序開發(學習筆記)
- 騰訊iOS測試實踐
- Learning Spring 5.0
- Building Cross-Platform Desktop Applications with Electron
- C++新經典
- App Inventor創意趣味編程進階
- 大話Java:程序設計從入門到精通
- Kubernetes進階實戰
- Modernizing Legacy Applications in PHP
- 程序員的成長課
- Java程序設計實用教程(第2版)
- Applied Deep Learning with Python
- Learning ECMAScript 6
- JavaScript Unit Testing