資料科學:入門/資料定義

章節摘要
[edit | edit source]“資料”一詞是一個通用詞,表示測量值的集合。“資料點”指的是單個數據實例。“資料集”是一組結構良好的資料點。資料點可以是幾種“資料型別”,例如數字、文字或日期時間。當我們以類似的格式收集關於類似物件的資料時,我們將資料點捆綁到一個“變數”中。我們可以給一個變數一個像“年齡”這樣的名稱,它可以表示房間裡所有人的年齡列表。與變數關聯的資料點稱為變數的“值”。這些概念是理解資料科學的基礎。R 程式語言中變數的處理方式有一些古怪之處。
維基詞典將資料定義為 datum 的複數形式;作為資訊片段;以及作為彼此不同的物件單元的集合。
維基詞典將datum定義為在記錄者(人或裝置)和閱讀者(另一個人或裝置)雙方都理解的量表上對某事物的測量。該量表是任意定義的,例如從 1 到 10 按 1 個單位遞增,從 1 到 100 按 0.1 遞增,或者簡單地為真或假,開或關,是,否,也許等等;以及作為從直接觀察中得知的事實。
就我們的目的而言,這些定義的關鍵組成部分是資料是經過測量和以可供記錄者和閱讀者理解的方式進行通訊的觀察結果。所以,你作為一個人的不是資料,但是關於你的記錄觀察結果是資料。例如,你的姓名寫下來是資料;或者你說話的姓名的數字錄音是資料;或者你面部的數字照片或跳舞的影片是資料。
我們不會用正式的詞語“datum”來稱呼單個測量值,而是會使用維基百科稱之為資料點的內容。我們可能會談論一個數據點或多個數據點。請記住,當我們談論“資料”時,我們指的是一組聚合的資料點。
維基詞典不甚有用地將資料集定義為“一組資料”。我們將資料集定義為對類似物件觀察並以類似方式格式化的一組資料點。因此,對一個房間裡的人的書面姓名和書面年齡的彙編就是一個數據集。在計算中,資料集儲存在磁碟上的檔案中。將資料集儲存在檔案中使其可供分析。
如前所述,資料可以以多種形式存在,例如文字、數字、影像、音訊和影片。處理資料的人員非常謹慎地定義了不同的資料型別。他們這樣做是因為他們希望對資料執行各種操作,而這些操作只對特定資料型別有意義。例如,加法是我們可以在整數資料型別上執行的操作(2+2=4),但不能在文字資料型別上執行(“two”+“two”=???)。連線是我們可以在文字上執行的操作。連線意味著將事物組合在一起,因此:concatenate(two, two) = twotwo。為了便於介紹,我們將只關注簡單的數字和簡單的文字資料型別,並將更復雜的資料型別(如影像、音訊和影片)留給更高階的課程。資料科學家使用數學、統計和計算機科學中的各種資料型別來相互交流。
我們只介紹數學中最常用的資料型別。還有很多,但我們會在更高階的課程中學習它們。
- 整數 - 根據維基百科,整數是可以寫成沒有分數或小數部分的數字,並且落在集合 {..., −2, −1, 0, 1, 2, ...} 中。例如,21、4 和 −2048 是整數;9.75、5½ 和 √2 不是整數。
- 有理數 - 根據維基百科,有理數是可以表示為兩個整數的商或分數 p/q 的那些數,其中分母 q 不等於零。由於 q 可以等於 1,所以每個整數都是有理數。有理數的小數展開總是要麼在有限位數後終止,要麼開始重複相同的有限位數序列。例如,9.75 2/3 和 5.8144144144… 都是有理數。
- 實數 - 根據維基百科,實數包括所有有理數,例如整數 −5 和分數 4/3,以及所有無理數,例如 √2 (1.41421356... 二的平方根)、π (3.14159265...) 和 e (2.71828...)。
- 虛數 - 根據維基百科,虛數是那些平方小於或等於零的數。例如,√-25 是一個虛數,它的平方是 -25。虛數可以寫成一個實數乘以虛數單位 i,它由其性質 i 2 = −1 定義。因此,√-25 = 5i。
資料科學家瞭解到,他們可能執行的數學運算型別取決於資料中反映的資料型別。
我們只介紹維基百科中定義的統計學中最常用的資料型別。統計學中還有幾種資料型別,但我們將在更高階的課程中學習它們。
- 名義 - 名義資料以類別形式記錄。因此,名義資料也稱為分類資料。例如,岩石可以大致分類為火成岩、沉積岩和變質岩。
- 順序 - 順序資料以分數的等級順序記錄(第 1 名、第 2 名、第 3 名等)。順序資料的例子是賽馬的結果,它只說明哪些馬到達了第一、第二或第三,但沒有關於比賽時間的任何資訊。
- 間隔 - 間隔資料不僅記錄資料點的順序,還記錄資料點之間的間隔大小。攝氏溫標是一個非常熟悉的間隔量表測量例子。在這個特定的量表中,測量單位是水沸點和冰點之間溫差的 1/100。然而,零點是任意的。
- 比率 - 比率資料是在具有真實零點的間隔量表上記錄的。質量、長度、時間、平面角、能量和電荷是比率量表的物理測量示例。非正式地說,比率量表的顯著特徵是擁有一個零值。例如,開爾文溫標具有絕對零的非任意零點。
資料科學家知道,他們將執行的統計分析型別取決於他們將要分析的資料型別。
我們將介紹在計算機科學中最常用的資料型別,這些型別在維基百科中定義。還有很多其他型別,但我們會將其留到更高階的課程中討論。
- 位元 - 位元(二進位制數字的縮寫)是計算和通訊中資訊的最小單位;位元僅表示 1 或 0(一或零)。這種型別的資料有時也稱為二進位制資料。當 8 個位元組合在一起時,我們稱之為位元組。一個位元組的值可以是 0 到 255 之間的範圍(00000000-11111111)。例如,位元組 10110100 = 180。
- 十六進位制 - 位元組通常表示為 16 進位制數。 16 進位制被稱為十六進位制(通常縮寫為Hex)。Hex 使用十六個不同的符號,最常見的是使用 0–9 來表示 0 到 9 的值,以及 A, B, C, D, E, F(或使用 a–f)來表示 10 到 15 的值。每個十六進位制數字表示 4 個位元,因此兩個十六進位制數字完全表示一個位元組。正如我們提到的,位元組的值可以從 0 到 255(十進位制)不等,但可以更方便地表示為 00 到 FF 之間的兩個十六進位制數字。一個兩位元組數也被稱為一個 16 位數。與其用 16 個位元來表示一個數字(10101011110011),我們更傾向於用 2AF3(十六進位制)或 10995(十進位制)來表示它。透過練習,計算機科學家可以熟練地閱讀和理解十六進位制。資料科學家必須理解和識別十六進位制數。有很多網站可以將數字從二進位制轉換為十進位制到十六進位制,反之亦然。
- 布林 - 布林資料型別對邏輯資料進行編碼,邏輯資料只有兩個值(通常表示為 "true" 和 "false")。它的目的是表示邏輯和布林代數的真值。它用於儲存表示式邏輯真值的評估。通常,兩個值使用邏輯運算子進行比較,例如 .eq.(等於)、.gt.(大於)和 .le.(小於或等於)。例如,
b = (x .eq. y)將為 "b" 分配布林值 "true",如果 "x" 的值與 "y" 的值相同,否則它將為 "b" 分配邏輯值 "false"。 - 字母數字 - 這種資料型別在字串中儲存字元序列(a-z、A-Z、0-9、特殊數字)——來自字元集,例如西方語言的ASCII 或中東和亞洲語言的Unicode。由於大多數字符集都包含數字,因此可以包含像 "1234" 這樣的字串。但是,這仍然是一個字母數字的值,而不是整數 1234。
- 整數 - 這種資料型別的定義與數學中相同名稱的資料型別基本相同。然而,在計算機科學中,整數可以是帶符號的,也可以是無符號的。讓我們考慮一個 16 位(兩個位元組)整數。在無符號形式下,它可以取值從 0 到 65535(216-1)。但是,如果我們將一個位元保留為(負)符號,則範圍變為 -32767 到 +32768(十六進位制為 -7FFF 到 +8000)。
- 浮點數 - 這種資料型別是一種表示實數的方法,它可以支援廣泛的值範圍。術語浮點數是指小數點可以“浮動”;也就是說,它可以在數字的有效數字的任何位置。這個位置在內部表示中單獨表示,因此浮點數表示可以被認為是科學計數法的計算機實現。在科學計數法中,給定的數字按 10 的冪進行縮放,使其位於某個範圍內——通常在 1 和 10 之間,小數點出現在第一個數字的後面。然後,縮放因子(作為 10 的冪)在數字的末尾單獨表示。例如,木星衛星木衛一的公轉週期為 152853.5047 秒,該值在標準形式的科學計數法中表示為 1.528535047×105 秒。浮點數表示在概念上類似於科學計數法。數字的基數部分稱為尾數(或有時稱為尾數),數字的指數部分不出所料地稱為指數。
- 列表 - 這種資料型別用於表示複雜的資料結構。在最簡單的形式下,它具有鍵值對結構。例如,考慮一個待辦事項列表
| 鍵 | 值 |
|---|---|
| 1 | 理髮 |
| 2 | 購買雜貨 |
| 3 | 洗澡 |
- 列表可能會變得非常複雜,而且通常確實會變得很複雜。鍵不必是數字,可以是單詞,例如 "one"、"two" 和 "three"。值不必是單個數據點。值可以是一系列數字,也可以是數字矩陣,也可以是一段文字。例如,列表中的第一個鍵可以是 "羅密歐與朱麗葉",列表中的第一個值可以是整個羅密歐與朱麗葉劇本。列表中的第二個鍵可以是 "麥克白",列表中的第二個值可以是整個麥克白劇本。最後,列表中的值甚至可以是另一個列表。此時,不要陷入 "列表中包含列表,列表中包含列表..." 的死迴圈。我們會將這些留給計算機科學專業的學生。
資料科學家瞭解資料在計算機科學中的表示方式的重要性,因為它會影響他們生成的結果。當大量的小舍入誤差在大量迭代中累積時,尤其如此。
- 定量(數值)資料[1]
- 定性(非數值,即文字或圖形)
R 語言中至少有 24 種資料型別。[2] 我們只向您介紹 9 種最常用的資料型別。正如您將看到的,它們是數學、統計和計算機科學中資料型別的融合。這正是資料科學家所期望的。這九種分別是
- NULL - 用於表示空值
- logical - 用於表示真或假(開或關;1 或 0)
- character - 用於表示字母數字字串
- integer - 用於表示正數、負數和零整數(無小數點)
- double - 用於表示實數(帶小數點)
- complex - 用於表示同時具有實部和虛部的複數(例如,-1 的平方根)
- date - 用於表示日期
- POSIX - 用於表示日期和時間(日期在內部表示為自 1970-01-01 以來天數,較早的日期則為負值)
- list - 用於儲存複雜資料結構,包括大多數內建 R 函式的輸出
您可以使用typeof() 命令讓 R 告訴您特定資料物件的型別。如果您想知道特定資料物件在 S 語言[3] 的原始定義中叫什麼,您可以使用mode() 命令。如果您想知道特定資料物件在用於編寫 R 的C 程式語言 中屬於哪個物件類,您可以使用class() 命令。在這本書中,我們將主要使用typeof() 命令。
- 關於 R 中列表的說明。R 喜歡使用列表資料型別來儲存各種過程的輸出。我們通常不會對儲存在列表資料型別中的資料執行統計過程——只有一個例外。為了對列表進行統計分析,我們需要將它們轉換為具有行和列的表格。R 有許多函式可以將資料在表格結構和列表資料型別之間來回移動。我們提到的例外叫做data.frame 列表物件。類為data.frame 的列表物件以一種特定的方式儲存資料行和列,以便於進行統計分析。我們將在下面詳細解釋資料框。
資料科學家必須清楚地瞭解資料在分析包中的表示方式,以便應用正確的數學運算和統計分析。
讓我們首先注意到,變數的反面是常量。如果我們宣告符號“X”是常量,並將其賦值為 5,那麼 X=5。它不會改變;X 將始終等於 5。現在,如果我們宣告符號“Y”為變數,這意味著 Y 可以具有多個值(參見“variable”的維基詞典條目)。例如,在數學方程 Y^^2=4(Y 平方等於 4)中,變數 Y 可以取值為 2 或 -2,並且滿足該方程。
想象一下,我們拿一張紙,分成兩列。在第一列的頂部,我們放上標籤“姓名”,在第二列的頂部,我們放上標籤“年齡”。然後,我們要求一個房間裡 20 個人在紙上的相應列中寫下他們的姓名和年齡。最終,我們將得到一個包含 20 個姓名和 20 個年齡的列表。讓我們使用標籤“姓名”來表示 20 個姓名的整個列表,使用標籤“年齡”來表示 20 個年齡的整個列表。這就是我們使用“變數”一詞的含義。變數“姓名”有 20 個數據點(20 個姓名的列表),變數“年齡”有 20 個數據點(20 個年齡的列表)。變數是代表多個資料點的符號,我們也稱之為值。與“值”含義相似的其他詞語包括測量和觀察。資料科學家在相互交流時,會交替使用這四個詞語(資料點、值、測量和觀察)。
“變數”一詞是一個通用詞,在許多學科中使用。然而,不同的學科也使用一些意義大致相同的更專業的術語。在數學中,另一個近似於“變數”含義的詞語是向量。在計算機科學中,另一個近似於“變數”含義的詞語是陣列。在統計學中,另一個近似於“變數”含義的詞語是分佈。資料科學家在相互交流時,經常會交替使用這四個詞語(變數、向量、陣列和分佈)。
讓我們再次思考資料集合(如上所述)。資料集通常是兩個或多個變數(及其相關值)組合在一起。一旦我們的資料被組織成變數,組合成資料集,並存儲在磁碟上的檔案中,它就可以被分析。
R 程式語言在資料型別、變數和資料集方面有點怪異。在 R 中,我們有時使用“向量”代替“變數”。當我們將多個向量(變數)組合並存儲到 R 中的資料集中時,我們稱之為資料框。當 R 將向量儲存到資料框中時,它會分配一個角色來指示資料將在後續統計分析中如何使用。因此,在 R 資料框中,例如,“邏輯”、“日期/時間”和“字元”資料型別被分配了因子角色。“雙精度”資料型別被分配了num角色,“整數”被分配了int角色。(“複數”資料型別被分配了“cplx”角色,但現在不用擔心。)這些角色對應於以下統計資料型別:因子 = 名義,int = 序數,num = 區間。(我們通常在進行統計分析之前將比率資料型別轉換為區間資料型別。這通常透過對比率資料取對數來完成。在後面的章節中會詳細介紹。)我們可以使用 R 中的結構命令來發現每個變數在資料框中將扮演的角色:str()。我們在後面的章節中將解釋“因子”是什麼。
這項作業應該在 3 或 4 個學生的團隊中完成。這些團隊需要由前兩個家庭作業團隊中的不同人員組成。所有人都應該與 R 程式語言進行互動。團隊成員可以互相幫助學習概念,並找出如何使用 R。透過嘗試使用下面描述的命令的不同方法來練習 R。
使用typeof()命令來驗證資料型別。看看你是否可以在按下回車鍵之前猜測輸出會是什麼樣子。
> a <- as.integer(1)
> typeof(a)
> a
> b <- as.double(1)
> typeof(b)
> b
> d <- as.character(1)
> typeof(d)
> d
> e <- as.logical("true")
> typeof(e)
> e
> f <- as.complex(-25)
> typeof(f)
> f
> g <- as.null(0)
> typeof(g)
> g
> h <- as.Date("2012-07-04")
> typeof(h)
> class(h)
> h
> i <-as.POSIXct("2012/07/04 10:15:59")
> typeof(i)
> class(i)
> i
> j <-as.POSIXlt("2012/07/04 10:15:59")
> typeof(j)
> class(j)
> j
> k <- list("Get haircut", "Buy Groceries", "Take shower")
> typeof(k)
> k
如果你沒有透過 as.* 命令明確指定資料型別,R 會嘗試找出你想要的資料型別。它並不總是能正確地猜測你的想法。用 R 進行練習,將一些值賦給一些變數,然後使用typeof()命令檢視 R 為你自動分配的資料型別。然後看看你是否可以將一個值從一種資料型別轉換為另一種資料型別。
R 語言基於面向物件的程式語言。因此,R 中的東西被稱為物件。所以,當我們將一個值賦給字母“X”時,在 R 中我們會說我們已經將一個值賦給了物件“X”。R 中的物件可能具有不同的屬性,具體取決於它們的使用方式。對於此練習,我們將關注行為類似於變數的物件。這些型別的物件被稱為向量物件。因此,當我們用資料科學的語言談論變數“X”時,在 R 中我們可以稱之為向量“X”。如你所知,變數是可變的東西。讓我們在 R 中建立一個字元向量,併為它分配三個值。我們將使用 R 中的連線c()命令。讓我們也使用相同的連線命令建立一個整數向量。
> name <- c("Maria", "Fred", "Sakura")
> typeof(name)
> name
> age <- as.integer(c(24,19,21))
> typeof(age)
> age
這兩個向量現在都有三個值。字元字串“Maria”位於向量“name”的第一個位置,“Fred”位於第二個位置,“Sakura”位於第三個位置。類似地,整數 24 位於向量“age”的第一個位置,19 位於第二個位置,21 位於第三個位置。讓我們分別檢查一下這些值。
> name[1]
> name[2]
> name[3]
> age[1]
> age[2]
> age[3]
方括號中的數字被稱為索引或下標。
如果我們觀察了三個人的實際姓名和年齡,使得name[1]對應於age[1],我們將得到一個看起來像下面的資料集。
| 姓名 | 年齡 |
|---|---|
| Maria | 24 |
| Fred | 19 |
| Sakura | 21 |
讓我們將我們的資料集放入一個 R 資料框物件中。我們需要為我們的資料框物件想一個名字。讓我們稱它為“project”。將資料集放入資料框後,我們將使用 R 的“typeof”、“class”、“ls”和“structure”命令(str())來檢查它。記住,大小寫是有意義的。
> project <- data.frame(name, age)
> typeof(project)
> class(project)
> ls(project)
> str(project)
typeof() 函式告訴我們我們建立了一個列表物件。class() 函式告訴我們它是一種特殊型別的列表物件,稱為 data.frame。ls() 函式告訴我們我們的列表物件中存在哪些“鍵值”對。請不要過於擔心這些細節。重要的是 str() 函式告訴我們什麼。
結構命令告訴我們有三個觀察值和兩個變數。這很好。它告訴我們變數的名稱是$name和$age。這告訴我們,當我們將資料集放入 R 資料框列表物件中時,我們需要按如下方式引用資料框中的變數:project$name和project$age。結構命令還告訴我們project$name被分配了“因子”變數的角色,project$age被分配了“int”角色。這些對應於統計學家使用的“名義”和“序數”資料型別。R 需要知道變數在資料框中扮演的角色,以便對資料執行正確的統計函式。有人可能會說,年齡變數更像是統計區間資料型別,而不是統計序數資料型別。然後我們必須將 R 資料型別從整數更改為雙精度。這將更改它在資料框中的角色為“數字”。
與其更改project$age的資料型別,不如建立一個新的變數,這樣原始變數就不會丟失。我們將新變數稱為project$age.n,這樣我們就可以知道它是經過轉換的project$age變數。
> project$age.n <- as.double(project$age)
> str(project)
現在我們可以看到,project$age和project$age.n變數在資料框中扮演不同的角色,一個是“int”,一個是“num”。現在,透過顯示資料框物件來確認整個資料集是否已正確實現到 R 中。
> project
name age age.n
1 Maria 24 24
2 Fred 19 19
3 Sakura 21 21
現在讓我們再次檢查資料型別。
> typeof(project$name)
> typeof(project$age)
> typeof(project$age.n)
糟糕!我們看到了 R 的一些怪異之處。當我們建立變數“name”時,它的資料型別是“字元”。當我們把它放入資料框時,R 不僅為它分配了“因子”的角色,還將它的資料型別更改為了“整數”。這是怎麼回事?這比你現在想知道的要多。我們現在就解釋一下,但你真的不必在以後理解它。
- 因為所有統計計算都是基於數字進行的,R 對變數“name”的每個值都分配了一個任意的整數。它將這些任意數字稱為級別。然後它用原始值標記這些級別,這樣我們就能知道發生了什麼。因此在幕後,
project$name的值為:2(標記為“Maria”)、1(標記為“Fred”)和 3(標記為“Sakura”)。我們可以將project$name轉換回字元資料型別,但我們無法對其進行統計計算。
> project$name.c <- as.character(project$name)
> typeof(project$name.c)
> str(project)
'data.frame': 3 obs. of 4 variables:
$ name : Factor w/ 3 levels "Fred","Maria",..: 2 1 3
$ age : int 24 19 21
$ age.n : num 24 19 21
$ name.c: chr "Maria" "Fred" "Sakura"
現在我們可以看到project$name.c的資料型別為字元,並且被分配了“chr”的資料框角色。
- ↑ Nils Gehlenborg 和 Bang Wong 將定量資料對映到顏色。自然方法第 9 卷,第 769 頁(2012 年)
- ↑ "R 語言參考". 瑞士聯邦理工學院. 檢索於 2012 年 7 月 4 日.
- ↑ Becker, R.A. (1984). . 美國加利福尼亞州太平洋格羅夫:Wadsworth & Brooks/Cole. ISBN 0-534-03313-X.
{{cite book}}: 未知引數|coauthors=被忽略 (|author=建議) (幫助)
您可以
- 共享 - 複製、分發、展示和表演作品(來自此維基的頁面)
- 重新混合 - 改編或製作衍生作品
在以下條件下
- 署名 - 您必須將此作品歸功於華夏公益教科書。您不能暗示華夏公益教科書以任何方式認可您或您對本作品的使用。
- 相同方式共享 - 如果您更改、轉換或基於此作品進行創作,您只能在與本許可相同或相似的許可下分發結果作品。
- 放棄 - 如果您獲得版權持有者的許可,可以放棄上述任何條件。
- 公有領域 - 如果作品或其任何部分根據適用法律屬於公有領域,該狀態不會受到許可的影響。
- 其他權利 - 許可不影響以下任何權利
- 您的合理使用權或其他適用的版權例外和限制;
- 作者的道德權利;
- 其他人可能在作品本身或作品的使用方式中擁有的權利,例如公開權或隱私權。
- 通知 - 對於任何重新使用或分發,您必須向他人明確說明此作品的許可條款。最好的方法是連結到以下網頁。
