數據分析社群第二關作業——遲遲未交出的作業
一、數據結構
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:數據分析 |