標籤:

數據分析社群第二關作業——遲遲未交出的作業

一、數據結構

1、對象的5種基本類型

字元(character)、數值(numeric)、整數(integer)、複數(complex):1+2i、邏輯(logical:TRUEFALSE)

2、屬性

名稱(name)、維度(dimensions:matrix,array)、類型(class)、長度(length)

二、向量(vector):

1、創建向量的方式

>x1<-vector(「character」,length=5) x1=chr[1:5] 「」 「」 「」 「」 「」

>x2<-1:4

>x3<-c(1,2,3,4)

> x4<-c("a","b","c","d")

2、改變向量的類型

> as.numeric(x)

[1] 1 2 3 4

> as.character(x)

[1] "1" "2" "3" "4"

> as.logical(x)

[1] NA NA NA NA

3、查詢向量的類型

> class(x)

[1] "numeric"

> class(x1)

[1] "character"

> class(x2)

[1] "integer"

> class(x3)

[1] "numeric"

4、給向量命名

> names(x2)<-c("a","b","c","d")

> x2

a b c d

1 2 3 4

5、總結

(1)向量只包含同一類型的對象

(2)創建向量的方式

A.vector

B.c()

C.[x:y]

(3)查詢向量類型 class()

(4)給向量命名names(x)<-c()

6、案例練習

(1)創建向量

> name<-c("猴子","李同","王五","張三")

> name

[1] "猴子" "李同" "王五" "張三"

> length(name)

[1] 4

(2)定位元素所處位置

> name[2] (#一定要用方括弧)

[1] "李同"

三、矩陣(matrix)

1、創建矩陣的方式

(1)x<-matrix(1:6,nrow=3,ncol=2) #填充時先列後行

(2)y<-1:6

dim(y)<-c(3,2)

2、查看矩陣的維度

dim(x)

[1] 3 2 (三行兩列)

3、查看矩陣的屬性

attributes(x)

$dim (矩陣的屬性是維度)

[1] 3 2

4、按行合併兩個矩陣(兩個矩陣必須有相同的列)

rbind(x,y)

5、按列合併兩個矩陣(兩個矩陣必須有相同的行)

cbind(x,y)

6、案例練習

> age<-c(29,34,28,52)

> rnames<-c("猴子","李同","王五","張三")

> cnames<-c("age")

> a<-matrix(age,nrow = 4,ncol = 1,byrow=TRUE,dimnames = list(rnames,cnames))

> a

age

猴子 29

李同 34

王五 28

張三 52

四、數組(array)

1、數組與矩陣類似,但是維度可以大於2

2、創建數組的方式

x<-array(1:24,dim=c(4,6))

x1<-array(1:24,dim=c(2,3,4))

X創建了一個4行6列的數組(與矩陣類似)

x1創建了4個2行三列的數組(能不能這樣理解?)

五、數據框

1、存儲表格數據

2、視為各元素長度相同的列表

(1)每個元素代表一列數據

(2)每個元素的長度代表行數

(3)元素類型可以不同

3、創建數據框

> df<-data.frame(id=c(1,2,3,4),name=c("a","b","c","d"),gender=c("male","male","female","male"))

> df

id name gender

1 1 a male

2 2 b male

3 3 c female

4 4 d male

4、統計數據框的行數

> nrow(df)

[1] 4

5、統計數據框的列數

> ncol(df)

[1] 3

6、案例練習

(1)創建病例數據框

> patientid<-c("1","2","3","4")

> name<-c("猴子","李同","王五","張三")

> age<-c(29,34,28,52)

> diabetes<-c("1型糖尿病","2型糖尿病","1型糖尿病","2型糖尿病")

> status<-c("較差","好轉","顯著好轉","較差")

> patientdata<-data.frame(patientid,name,age,diabetes,status,stringsAsFactors = FALSE)

> patientdata

patientid name age diabetes status

1 1 猴子 29 1型糖尿病 較差

2 2 李同 34 2型糖尿病 好轉

3 3 王五 28 1型糖尿病 顯著好轉

4 4 張三 52 2型糖尿病 較差

#為什麼要用stringsAsFactors = FALSE?

因為R會自動把字元串string的列辨認成因子

(2)選取數據框中的某一列($+列名,列名不需要加「」)

> age1<-patientdata$age

> age1

[1] 29 34 28 52

(3)選取數據框中的幾列(用c[]定位,列名要加「」)

> subdata<-patientdata[c("name","status")]

> subdata

name status

1 猴子 較差

2 李同 好轉

3 王五 顯著好轉

4 張三 較差

(4)統計有多少個病人(計算行數)

> patientnumber<-nrow(patientdata)

> patientnumber

[1] 4

(5)查找患「1型糖尿病」的有多少人(不用等號,要用雙等號,結尾要用,)

> type1<-patientdata[patientdata$diabetes=="1型糖尿病",]

> type1

patientid name age diabetes status

1 1 猴子 29 1型糖尿病 較差

3 3 王五 28 1型糖尿病 顯著好轉

(6)計算患「1型糖尿病」的病人人數

> type1number<-nrow(type1)

> type1number

[1] 2

#犯錯(用nrow函數時,對象必須是一個數據框,diabetes="1型糖尿病"不是一個獨立的數據框)

> type1number<-nrow(diabetes="1型糖尿病")

> type1number

Error in nrow(diabetes = "1型糖尿病") :

(7)數據框中增加新的病例

第一步:

> patientid<-c("5")

> name<-c("王思聰")

> age<-c(30)

> diabetes<-c("2型糖尿病")

> status<-c("好轉")

> newpatient<-data.frame(patientid,name,age,diabetes,status,stringsAsFactors = FALSE)

> newpatient

patientid name age diabetes status

1 5 王思聰 30 2型糖尿病 好轉

第二步:

> patientdata<-rbind(patientdata,newpatient)

> patientdata

patientid name age diabetes status

1 1 猴子 29 1型糖尿病 較差

2 2 李同 34 2型糖尿病 好轉

3 3 王五 28 1型糖尿病 顯著好轉

4 4 張三 52 2型糖尿病 較差

5 5 王思聰 30 2型糖尿病 好轉

(8)增加數據框中的新的列

第一步:

> intime<-c("2017-7-1","2017-6-25","2017-5-15","2017-3-19","2017-1-9")

第二步:

> patientdata<-cbind(patientdata,intime)

> patientdata

patientid name age diabetes status intime

1 1 猴子 29 1型糖尿病 較差 2017-7-1

2 2 李同 34 2型糖尿病 好轉 2017-6-25

3 3 王五 28 1型糖尿病 顯著好轉 2017-5-15

4 4 張三 52 2型糖尿病 較差 2017-3-19

5 5 王思聰 30 2型糖尿病 好轉 2017-1-9

六、列表(list)

1、l<-list("a",2,10L,3+4i,TRUE)

創建了名稱分別為"a",2,10L,3+4i,TRUEl2<-list(a=1,b=2,c=3)的5個列表

2、l2<-list(a=1,b=2,c=3)

創建了名稱分別為a,b,c的三個列表,列表值分別為1,2,3。

3、l3<-list(c(1,2,3),c(4,5,6,7))

創建了兩個列表,值分別為1,2,3和4,5,6,7

4、x<-matrix(1:6,nrow=2,ncol=3)

dimnames(x)<-list(c("a","b"),c("c","d","e"))

創建了一個2行3列的列表,行名分別為a,b,列名分別為c,d,e。

5、案例練習(#不理解這個練習)

(1)存儲kpi結果

業務指標1:有多少個病人

patientnumber<-nrow(patientdata)

業務指標2:「患1型糖尿病人」的信息

type1<-patientdata[patientdata$diabetes=="1型糖尿病",]

存儲kpi結果

kpi<-list(diabetesType1=type1,number=patientnumber)

Kpi

$diabetesType1

patientid name age diabetes status intime

1 1 猴子 29 1型糖尿病 較差 2017-7-1

3 3 王五 28 1型糖尿病 顯著好轉 2017-5-15

$number

[1] 5

獲取列表中的kpi:病人數目

> number<-kpi[["number"]]

> number[1] 5

七、復盤總結

2017年5月1日加入了數據分析社群,轉眼3個月過去才交出第二關的作業。今天復盤整個過程,分析自己當初走的彎路,揭露自己底層思維中存在的問題。

2017年5月1日到2017年6月20日左右,把時間花在看《深入淺出統計學》和《深入淺出SQL》上,《深入淺出SQL》看了三分之一,感覺自己停留在為了學而學的層次上,因為沒有實踐,覺得學不下去。上知乎找原因,吸取了別的同學的教訓,準備從《R語言實戰》重新開始。

2017年7月初,《R語言實戰》的書到了。可是工作崗位發生改變,自己被安排的前台,每天連續上班9個小時左右,當時已經懷二胎6個月,身體真的吃不消,每天下班回來就是睡覺,沒力氣帶大寶,沒精力學習,就這樣耽擱了1個月的時間。

2017年8月初,重新開始學習,花了半個月看《R語言實戰》這本書的第一二章,聽了猴子老師的live,著手到Rstudio實踐時,發現不知該從何開始。

2017年8月中旬,到慕課網找到《R語言基礎》,跟著老師開始學習。邊學習,便敲代碼,最後,再把猴子老師PPT中的案例演練了一遍。

2017年8月26日,總算完成了作業。

從第一關到第二關經歷了四個月時間,第一是因為遠沒有把學習數據分析當作自己的剛需,第二是因為貪多嚼不爛,參加了兩個社群,運營一個小社群,每天還要看書、學外語,目前已經暫停運營小社群,看書、學外語也是斷斷續續。第三,策略不正確,其實在自己精力不夠用的條件下,可以採取每天學一點的策略。

為自己終於完成了第二關作業而歡喜,為第三關的即將開始而興奮。加油,自己!


推薦閱讀:

大數據有哪些工作崗位,日常工作內容是什麼,需要掌握哪些工具和技能
再戰『沃+』,百萬孵化獎金等你來拿!
不同需求下可視化圖形選擇(翻譯)
Python數據分析之讓數據說話
Numpy和Pandas---數據分析的梯子

TAG:數據分析 |