標籤:

李強「數據結構」學習實踐筆記(第二關)

學習人:李強

學習時間:2017年5月12號至6月16號

學習資源:<<R語言實戰>>、<<深入淺出的統計學》兩本書、大數據分析社群和戰友們一起學習,猴子的第二關live,預備下一關一定要加大在大數據分析社群的浸泡時間,還有戰友們提到網易上有同步的《R語言實戰>>這本書的視頻課程,考慮開始看。

學習筆記:

按照個人要求來創建含有研究信息的數據集,這是任何數據分析的第一步。在R中,這個任務包括以下兩步:

。選擇一種數據結構來存儲數據;

。將數據輸入或導入到這個數據結構中。

數據集的概念

數據集通常是由數據構成的一個矩形數組,行表示觀測,列表示變數。

不同的行業對於數據集的行和列的叫法不同。統計學家稱它們為觀測(observation)和變數(variable),資料庫分析師則稱其為記錄(record)和欄位(field),數據挖掘/機器學習學科的研究者則把他們叫做示例(example)和屬性(attribute)。

R中有許多用於存儲數據的結構,包括標量、向量、數組、數據框和列表。

R可以處理的數據類型(模式)包括數值型、字元型、邏輯型(TRUE/FALSE)、複數型(虛數)和原生型(位元組)。

數據結構

R擁有許多用於存儲數據的對象類型,包括標量、向量、矩陣、數組、數據框和列表。它們在存儲數據的類型、創建方式、結構複雜度,以及用於定位和訪問其中個別元素的標記等方面均有所不同。

一些定義

R中有一些術語較為獨特,需要事先理解,否則可能會對新用戶造成困擾

在R中,對象(object)是指可以賦值給變數的任何事物,包括常量、數據結構、函數,甚至圖形。對象都擁有某種模式,描述了此對象是如何存儲的,以及某個類。

與其他的標準統計軟體(如SAS、SPSS和Stata)中的數據集類似,數據框(data frame)是R中用於存儲數據的一種結構:列表示變數,行表示觀測。在同一數據框中可以存儲不同類型(如數值型、字元型)的變數。數據框將是你用來存儲數據集的主要數據結構。

因子(factor)是名義型變數或有序型變數。它們在R中被特殊的存儲和處理。

向量

向量是用於存儲數值型、字元型或邏輯型數據的一維數組。執行組合功能的函數c()可用來創建向量。

a是數值型向量,b是字元型向量,c是邏輯型向量。注意,單個向量中的數據必須擁有相同的類型或模式(數值型、字元型或邏輯型)。同一向量中無法混雜不同模式的數據。

注意 標量是只含有一個元素的向量,,它們用於保持常量。

通過方括弧中給定的元素所處位置的數值,我們可以訪問向量中的元素。例如,a[c(2,4)]用於訪問向量a中的第二個和第四個元素。

最後一個語句中使用的冒號用於生成一個數值序列。例如,a <- c(1:2)等價於a <- c(1, 2)

(live講座中的關於向量有多少個元素和訪問某個元素的代碼運行截圖)

矩陣

矩陣是一個二維數組,只是每個元素都擁有相同的模式(數值型、字元型或邏輯型)。可通過函數matrix創建矩陣。一般使用格式為:

mymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns,

byrow=logical_value,

dimnames=list(

char_vector_rownames,

char_vector_colnames))

其中vector包含了矩陣的元素,

nrow和ncol用以指定行和列的維數,dimnames包含了可選的、以字元型向量表示的行名和列名。選項byrow則表明矩陣應當按行填充(byrow=TRUE)還是按列填充(byrow=FALSE),默認情況下按列填充。

(r語言實戰關於矩陣代碼運行截圖)

(live中關於矩陣建立在Rstudio中代碼運行的截圖)

(live中關於矩陣有什麼用的代碼,第一次沒有對著代碼敲,而是自己嘗試這自己思考、模仿其他的例子寫出來,柱狀圖的代碼)

數組

數組(array)與矩陣類似,但是維度可以大於2.數組可通過array函數創建,形式如下:

myarray <- array(vector, dimensions, dinames)

vector數組中的元素

dimensions各維度元素個數

dimnames 各維度名稱

其中vector包含了數組中的數據,dimensions是一個數值型的向量,給出了各個維度下標的最大值,而dimnames是可選的、各維度名詞標籤的列表。

(r語言實戰書中的代碼)

(live中的代碼與r語言實戰書里的代碼一樣,但是每一步都用#添加註釋言語,相當於把思路寫出來,對我們這樣的初學者是個很好的習慣,以後我也要這樣做,而且代碼的思路不一樣,對代碼中c(2,3,4)我還是不太理解是什麼意思*,等回頭要再領悟下,先往前走吧)

數據框

不同的列可以包含不同的模式(數值型、字元型等)的數據,數據框的概念較矩陣來說更為一般。數據框將是在R中最常處理的數據結構。

數據框可通過函數data.frame()創建

mydata <- data.frame(col1, col2, col3, ......)

其中的列向量col1, col2, col3,......可為任何類型。每一列的名稱可由函數names指定。

(選取數據框中的元素,這是r語言實戰中的示例)

$是新出現的,它被用來選取一個給定數據框的某個特定變數。

(生成糖尿病變數diabetes和病情變數status的列聯表)

在每個變數名前都鍵入一次mydata$可能會讓人生厭,所以不妨走一些捷徑。可以使用聯合函數attach()和detach()或單獨使用函數with()來簡化代碼。

1,attach(),detach()和with()

函數attach()可將數據框添加到R的搜索路徑中。R在遇到一個變數名以後,將檢查搜索路徑中的數據框,以定位到這個變數。

(使用attach()函數不成功,出現上列的錯誤信息,谷歌無果,待回頭再來考慮)

當名稱相同的對象不止一個時,這種方法的局限性就很明顯了:考慮一下代碼:

函數attach()和detach()最好在你分析一個單獨的數據框,並且不太可能有多個同名對象時使用。任何情況下都要當心那些告之某個對象已被屏蔽(masked)的警告。

除此之外,另一種方式是使用函數with()

在這種情況下,大括弧{}之間的語句都針對數據框patienttdata執行,這樣就無需擔心名稱衝突了。

函數with()的局限在於,賦值僅在此函數的括弧內生效。

2,實例標識符

在病例數據中,病人編號(patientID)用於區分數據集中不同的個體。在R中,實例標識符(case identifier)可通過數據框操作函數中的rowname選項指定。

(live中的建立一個數據框的代碼截圖)

(這是live中關於數據框的建立,通過$和列名來選取數據框中的某一列,統計有多少個病人,患某種類型糖尿病的病人人數,新增加數據,其中可能增加數據那一頁ppt中少寫了name這個向量,我在裡面反反覆復得不到解決,各種鬱悶,各種懷疑自己,後面定下神來仔細看才發現這個問題,期間也想在社群里問,但是想想自己google了,但是還是想盡量不做伸手黨,直到後面解決這個問題,我真比撿到錢還開心(「-」),死命的拍桌子,嘴巴里喊耶,只要反反覆復很多次(看很多次書,反反覆復的看live,反反覆復的看代碼)相信自己,依靠自己,一定能解決問題,我愛上學習了,因為學習能給我帶來意外的驚喜)

因子

變數可歸結為名義型、有序型或連續型變數。名義型變數是沒有順序之分的類別變數。

類別(名義型)變數和有序類別(有序型)變數在R中稱為因子(factor)。因子在R中非常重要,因為它決定了數據的分析方式以及如何視覺呈現。

函數factor()以一個整數向量的形式存儲類別值,整數的取值範圍是[1......k],同時由一個字元串(原始值)組成的內部向量將映射到這些整數上。

要表示有序型變數,需要為函數factor()指定參數ordered=TRUE.

對於字元型變數,因子的水平默認依字母順序創建。(問題:r中有多少種類型的變數?)但是這樣按默認的字母順序排序的因子很少能夠讓人滿意。

可以通過指定levels選項來覆蓋默認排序。

列表

列表(List)是R的數據類型中最為複雜的一種。一般來說,列表就是一些對象(或成分,component)的有序集合。列表允許你整合若剛(可能無關的)對象到單個對象名下。使用函數list()創建列表:

mylist object1, object2, ......)

其中的對象可以是目前為止講到的任何結構。你還可以為列表中的對象命名:

mylist name1=object1, name2=object2, ...)

由於兩個原因,列表成為了R中的重要數據結構:

首先,列表允許以一種簡單的方式組織和重新調用不相干的信息。

其次,許多R函數的運行結果都是以列表的形式返回的。

提醒程序員注意的一些事項:

。對象名稱中的句點(.)沒有特殊意義。但美元符號($)卻有

著和其他語言中的句點類似的含義,即指定一個對象中的某些部分。

。R不提供多行注釋或塊注釋功能。你必須以#作為多行注釋每行的開始。

。將一個值賦給某個向量、矩陣、數組或列表中一個不存在的元素時,R將自動擴展這個數據結構以容納新值。

。R中沒有標量。標量以單元素向量的形式出現。

。R的下標不從0開始,而從1開始。

。變數無法被聲明。它們在首次被賦值時生成。

(R語言實戰中的list的建立,與一些R語言中應該注意的問題所敲的代碼)

(live中老師所講的kpi的代碼,一直沒太理解反反覆復敲了很久,今天先放在腦子裡,先往後走,回頭再來思考,或者在往後走的過程中就會解決了)

R語言導入excel數據的方法

1、如果你數據量不太大的話,現在EXCEL表格中進行剪切: ctrl+C

然後運行read.table("clipboard",header=TRUE,……) ,後面的參數你自己學著設置

2.最後是如果數據量比較大的情況,可能會有十幾萬條吧,反正我暫時還沒有碰到百萬條的EXCEL表單,保存成csv文件【這個其實與stata的數據提取基本上一樣】,

這裡我接前面的稍微提示一下,最好在D或者E盤專門開個以英文名字命名的文件夾,提取路勁 E:R 【R的路徑是 不是 】

然後就運行y<- read.csv("E:R123.CSV",header = FALSE)

結果如下:

作者:文華

鏈接:R語言如何導入Excel的數據? - 知乎

來源:知乎

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

(自己google來的導入excel文件的方法,並敲代碼運行)

學習總結:只有我自己知道裡面遭遇了多少困境,有多少次我想在社群里提問的時候,耳邊就想起李笑來老師的「絕不做伸手黨」,每一次對他人的無腦依賴都是對自己能力的進一步磨練的

棄絕,在數據框增加一行「王思聰」內容的時候,老師沒敲一行代碼name <- c("王思聰「),我就在哪兒反反覆復無法完成這部操作,系統在一遍一遍的報錯,後面」反反覆復重複了很多次「,

才發現自己是這個問題,現在回頭想想如果自己能靜下心來,在把live中關於這部分的在前後理解一遍,把報錯內容仔細一字不差的閱讀一遍解決的會更快樂,而不是一遇到報錯自己就很

鬱悶,甚至可以說是」恐懼「,腦子裡就會響起這樣的負面話語:你做什麼都做不好,註定一事無成,還想憑著自己沒人教就想學會一門編程語言,做夢吧,你學不好數學之類的東西的,像

是刻進了自己的大腦溝回一樣,讓自己想起小時候無法完成自己的數學題時反覆計算還是沒計算出來一樣,現在想來就是反覆的還遠遠不夠,自己因為從來沒有過一次學好數學的經驗,所

以從來看不到」希望",所以只是在試了幾次以後就放棄了,卻從來不知道每一個技能的學習都有一個周期,都必須且只有「反反覆復重複很多次」才可能熟練乃至精通一個技能,我更要做到的

是保持耐心,相信自己,人的任何東西都可以被剝奪,唯獨人性最後的自由,在任何境遇中選擇一己態度和生活方式的自由不能被剝奪,從此我要把這句話刻進自己的腦子,沒有什麼我做

不好的,只有我選擇做與不做的,踏踏實實的把書和代碼「反反覆復重複很多次」,相信自己一定能把大數據分析學習好,踏踏實實的踐行「慢就是快」,把學習中每一次遇到的問題,都當成

老天給我的禮物,在提醒我要注意什麼,打開心靈,歡迎問題的出現,不迴避問題,在反覆前後理解了很多遍以後,記錄下來,往前繼續學習,要學會看不懂也要先把書看完,然後在重複

很多次,不要在暫時無法理解的地方死磕(適當花費一定的時間),帶著問題學習和生活,很多之前無法理解的更多內容,說不定會在你讀到後面的時候就理解了,記住人在面對一個陌生

領域的時候更多的是恐懼,這是我們的天性(保護機制),告訴自己只要再多看一下,再多試一下就會慢慢適應。

這章的學習給了我太多之前從來沒有體會過的驚喜,意外的驚喜,之前我聽到有人可以做到熱愛學習,對學習有興趣我聽著就像「天方夜譚」,但是沒想到在每次百思不得其解然後通過自己

的一己之力把問題解決,讓代碼順利把結果運行出來的時候,那種喜悅讓我比「升官發財」還有感覺,我會覺得我自己行,只是憑著自己的努力,原來只要我認認真真的反反覆復重複很多次

我一定可以做到,我心理有多渴望成長,但是我缺少太少的克服困難一個人把一樣事做好的經驗了,」大數據分析「的課程讓我做到了,希望沒有行動的同學們迅速行動起來

學習的本質是」社交化「的,和一群優秀的」戰友在一起非常重要,大數據分析社群就是這樣,每當我看到戰友們在知乎上發表的文章,看到你們也會遇到和我同樣的問題,通過自己的努力解

決問題,我知道我自己並不孤獨,這徹徹底底的拯救了我,雖然我不認識你們,但是我知道自己和你們在並肩戰鬥,看到你們」解決問題「我知道只是憑著自己和google就可以做到,那我想

我為什麼不能做到,看見」活的人做到「真的是巨大的鼓勵,我以後會讓自己盡量讓自己泡在社群里,讓自己」耳濡目染「向大家學習,不斷進化

真誠鼓勵社群里的所有人,鼓勵是一個稀缺的資源,你不斷鼓勵他人別人會越來越喜歡你,更重要的是你在不斷鼓勵他人做成自己想做的事的同時,你也會成為一個無需他人鼓勵的人,開始指揮的鼓勵所有人吧!


推薦閱讀:

一些關於TI7隊伍的數據分析——Empire篇
相愛相殺的數據分析師與產品經理
Python數據分析及可視化實例之銀行信用卡違約預測(24)
1億收入,350w人次參與,大數據告訴你知乎 Live 這一年經歷了什麼

TAG:数据分析 |