Julia 小白 Day 11 :快速學(xué)習(xí)DataFrames

前情提要:

前段時間把環(huán)境和各種版本情況理了一遍同蜻,應(yīng)該說該有的學(xué)習(xí)基礎(chǔ)設(shè)施都有了疾呻。

筆者關(guān)注的是機器學(xué)習(xí)方面的顺献,因此會側(cè)重去看這些方面的資料蜀涨。

說到機器學(xué)習(xí),首先得要有數(shù)據(jù)姐赡,不然學(xué)習(xí)個啥呢。有了數(shù)據(jù)之后柠掂,那么很多語言的第一步就是處理數(shù)據(jù)项滑。Julia也一樣,有專門的數(shù)據(jù)處理程序包涯贞。

今天就說一下DataFrames這個程序包枪狂。用過其他機器學(xué)習(xí)語言的都知道,DataFrames就是數(shù)據(jù)框宋渔,中文直譯州疾。

筆者自己學(xué)習(xí)程序語言的方式是不喜歡去看書的(程序書是用來查的),程序一定是一邊寫一邊看一邊用才會掌握的好和快皇拣,尤其是看牛人寫的程序严蓖。

記得前面有教程說過如何導(dǎo)入Github上的程序庫吧。

來审磁,先記得這個地址:https://github.com/scidom/StatsLearningByExample.jl.git

然后點開Juliabox上Git 這個按鈕

會出來一個對話框:

粘貼剛才那個地址到 Git Clone URL框里谈飒,然后點后面的+號(如果需要修改一下同步到Juliabox的文件夾名字的請按+號前修改)。然后按下[OK]态蒂。

很快Juliabox就會把https://github.com/scidom/StatsLearningByExample.jl.git里的內(nèi)容同步過來杭措。

然后你的Juliabox就會多出來這個文件夾(StatsLearningByExample):

接下來點進去02-DataFrames目錄:

點開第一個02-01-DataFramesBasics.ipynb,

然后點Cell下面的Run All:

這個命令就會把所有的代碼跑一遍。

這個就是今天的課程钾恢,因為已經(jīng)有代碼且作者已經(jīng)用英文講解了手素,所以接下來會倒序(按照程序代碼來說是倒序)重點總結(jié)一下:

(文末有筆者運行結(jié)果,方便暫時不能操作的同學(xué)看):

  • DataFrames是由DataArrays組成的

    • DataFrames本身的基本信息獲取
    • 可以對DataFrames內(nèi)數(shù)據(jù)進行簡單統(tǒng)計描述
    • 可以獲得DataFrames某行/某列數(shù)據(jù)
  • DataArrays可以進行矩陣運算

  • DataArrays里有個特殊成員NA(缺失值)

    • 所有數(shù)值和NA進行運算結(jié)果都是NA

    • NA(缺失值)和NaN(Not a Number: 不是數(shù)字)是兩個東西瘩蚪,數(shù)值類型也不一樣

有幾個注意的地方:

這個地方其實應(yīng)該是文檔的注釋部分泉懦,作者應(yīng)該沒注意弄,變成代碼運行報錯了疹瘦。

改成文檔格式即可崩哩,忽略也可以。

還有這里:

第8句寫了不可能通過DataArray([0.1, NA, -2.4])語句直接完成DataArray構(gòu)建言沐,這里應(yīng)該是個錯誤示范(應(yīng)該報錯)邓嘹。

作者希望提示大家用第9句的語法來完成構(gòu)建動作。

實際上险胰,作者寫的是2年前汹押,現(xiàn)在我們看到的是兩種語法都得出了正確結(jié)果。也就是目前兩種寫法都可以起便。

其他的就不多解釋了棚贾,大家要學(xué)習(xí)應(yīng)該能看懂窖维。

以下是筆者運行的結(jié)果,供參考:

Introduction to DataFrames

In [1]:

using DataArrays
using DataFrames

Missing values?

  • A missing value is represented by NA in Julia.
  • NA is not part of Base, it is provided by the DataArrays package.
  • NA poisons other values.

In [2]:

# NA poisons other values
1+NA

Out[2]:

missing

In [3]:

# Check if the evaluation of an expression results in NA
isna(1+NA)

Out[3]:

true

In [4]:

# Note the difference between NaN and NA
(isa(NaN, Float64), isa(NA, Float64))

Out[4]:

(true, false)

DataArrays

  • DataArray's are used for representing arrays that contain missing values
  • DataArray{T} allows storing T or NA
  • In other words, DataArray{T} adds NA's to Array{T}
  • PooledDataArray{T} is used for storing data efficiently.
  • PooledDataArray{T} compresses DataArray{T}.

Constructing DataArrays

In [5]:

# Call the DataArray() constructor by passing a Vector to it
DataArray([0.1, 0.5, -2.4])

Out[5]:

3-element DataArrays.DataArray{Float64,1}:
  0.1
  0.5
 -2.4

In [6]:

# Construct a DataArray by calling the @data() macro with a Vector input argument
@data([0.1, 0.5, -2.4])

Out[6]:

3-element DataArrays.DataArray{Float64,1}:
  0.1
  0.5
 -2.4

In [7]:

# Convert Vector to DataArray
convert(DataArray, [0.1, 0.5, -2.4])

Out[7]:

3-element DataArrays.DataArray{Float64,1}:
  0.1
  0.5
 -2.4

In [8]:

# It is not possible to call DataArray() with NA in its input argument
DataArray([0.1, NA, -2.4])

Out[8]:

3-element DataArrays.DataArray{Float64,1}:
  0.1     
   missing
 -2.4     

In [9]:

# However, it is possible to pass NA to the @data() macro
@data([0.1, NA, -2.4])

Out[9]:

3-element DataArrays.DataArray{Float64,1}:
  0.1     
   missing
 -2.4     

In [10]:

# The DataArray() constructor can be called with a Matrix input argument
DataArray([0.4 1.2; 3.5 7.2])

Out[10]:

2×2 DataArrays.DataArray{Float64,2}:
 0.4  1.2
 3.5  7.2

In [11]:

# The @data() macro can also be called with a Matrix input argument
@data([0.4 1.2; 3.5 7.2])

Out[11]:

2×2 DataArrays.DataArray{Float64,2}:
 0.4  1.2
 3.5  7.2

In [12]:

# Convert a Matrix to DataArray
convert(DataArray, [0.4 1.2; 3.5 7.2])

Out[12]:

2×2 DataArrays.DataArray{Float64,2}:
 0.4  1.2
 3.5  7.2

Numerical computing with DataArrays

In [13]:

# Numerical computing can be done with data vectors
x = @data([0.1, NA, -2.4])
y = @data([-9.9, 0.5, 6.7])
x+y

Out[13]:

3-element DataArrays.DataArray{Float64,1}:
 -9.8     
   missing
  4.3     

In [14]:

# To remove missing values (NA), call dropna()
x = @data([0.1, NA, -2.4])
dropna(x)

Out[14]:

2-element Array{Float64,1}:
  0.1
 -2.4

In [15]:

# Numerical computing can be done with data matrices and data vectors
A = @data([0.4 1.2 4.4; NA 7.2 3.9; 5.1 1.8 4.5])
y = @data([-9.9, 0.5, 6.7])
A*y

Out[15]:

3-element DataArrays.DataArray{Float64,1}:
  26.12    
    missing
 -19.44    

DataFrames

  • DataFrame's are used for representing data tables.
  • A DataFrame is a list of DataArray's.
  • So every DataArray of a DataFrame represents a column of the corresponding data table.
  • DataFrame's accommodate heterogeneous data that might contain missing values.
  • Every column (DataArray) of a DataFrame has its own type.

Example 02-01-01: NBA champions

Constructing DataFrames

In [16]:

# Call the DataFrame() constructor with keyword arguments (columns) of type Vector
DataFrame(
  player = ["Larry Bird", "Magic Johnson", "Michael Jordan", "Scottie Pippen"],
  champions = [3, 5, 6, 6]
)

Out[16]:

player champions
1 Larry Bird 3
2 Magic Johnson 5
3 Michael Jordan 6
4 Scottie Pippen 6

In [17]:

# Start with an empty DataFrame and populate it
ChampionsFrame = DataFrame()
ChampionsFrame[:player] = ["Larry Bird", "Magic Johnson", "Michael Jordan", "Scottie Pippen"]
ChampionsFrame[:champions] = [3, 5, 6, 6]
ChampionsFrame

Out[17]:

player champions
1 Larry Bird 3
2 Magic Johnson 5
3 Michael Jordan 6
4 Scottie Pippen 6

Provide CSV-like tabular data to construct a new DataFrame

In [19]:

# Call the DataFrame() constructor with keyword arguments (columns) of type DataArray
player = @data(["Larry Bird", "Magic Johnson", "Michael Jordan", "Scottie Pippen"])
champions = @data([3, 5, 6, 6])
ChampionsFrame = DataFrame(player=player, champions=champions)

Out[19]:

player champions
1 Larry Bird 3
2 Magic Johnson 5
3 Michael Jordan 6
4 Scottie Pippen 6

In [20]:

# Construct a DataFrame by joining two existing DataFrames
height = [2.06, 2.06, 1.98, 2.03]
HeightsFrame = DataFrame(player=player, height=height)
join(ChampionsFrame, HeightsFrame, on = :player)

Out[20]:

player champions height
1 Larry Bird 3 2.06
2 Magic Johnson 5 2.06
3 Michael Jordan 6 1.98
4 Scottie Pippen 6 2.03

Quering basic information about DataFrames

In [21]:

# Get number of rows of a DataFrame
size(ChampionsFrame, 1)

Out[21]:

4

In [22]:

# Get number of columns of a DataFrame
size(ChampionsFrame, 2)

Out[22]:

2

In [23]:

# Get a numeric summary of a DataFrame
describe(ChampionsFrame)

Out[23]:

variable mean min median max nunique nmissing eltype
1 player Larry Bird Scottie Pippen 4 0 String
2 champions 5.0 3 5.5 6 0 Int64

Indexing DataFrames

In [24]:

# Index DataFrame by column name to get a specific column
ChampionsFrame[:player]

Out[24]:

4-element DataArrays.DataArray{String,1}:
 "Larry Bird"    
 "Magic Johnson" 
 "Michael Jordan"
 "Scottie Pippen"

In [25]:

# Index DataFrame by row numbers to get specific rows
ChampionsFrame[2:3, :]

Out[25]:

player champions
1 Magic Johnson 5
2 Michael Jordan 6

KevinZhang
Aug 30, 2018

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妙痹,一起剝皮案震驚了整個濱河市铸史,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怯伊,老刑警劉巖沛贪,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異震贵,居然都是意外死亡,警方通過查閱死者的電腦和手機水评,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門猩系,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人中燥,你說我怎么就攤上這事寇甸。” “怎么了疗涉?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵拿霉,是天一觀的道長。 經(jīng)常有香客問我咱扣,道長绽淘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任闹伪,我火速辦了婚禮沪铭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偏瓤。我一直安慰自己杀怠,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布厅克。 她就那樣靜靜地躺著赔退,像睡著了一般。 火紅的嫁衣襯著肌膚如雪证舟。 梳的紋絲不亂的頭發(fā)上硕旗,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音褪储,去河邊找鬼卵渴。 笑死,一個胖子當(dāng)著我的面吹牛鲤竹,可吹牛的內(nèi)容都是我干的浪读。 我是一名探鬼主播昔榴,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碘橘!你這毒婦竟也來了互订?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤痘拆,失蹤者是張志新(化名)和其女友劉穎仰禽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纺蛆,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡吐葵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了桥氏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片温峭。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖字支,靈堂內(nèi)的尸體忽然破棺而出凤藏,到底是詐尸還是另有隱情,我是刑警寧澤堕伪,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布揖庄,位于F島的核電站,受9級特大地震影響欠雌,放射性物質(zhì)發(fā)生泄漏蹄梢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一富俄、第九天 我趴在偏房一處隱蔽的房頂上張望检号。 院中可真熱鬧,春花似錦蛙酪、人聲如沸齐苛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凹蜂。三九已至,卻和暖如春阁危,著一層夾襖步出監(jiān)牢的瞬間玛痊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工狂打, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留擂煞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓趴乡,卻偏偏與公主長得像对省,于是被迫代替她去往敵國和親蝗拿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容