
R語言炫技必備基本功
R語言主要用于統(tǒng)計(jì)分析和繪圖,可以理解為是一種數(shù)學(xué)計(jì)算軟件,可編程,有很多有用的函數(shù)庫和數(shù)據(jù)集,它強(qiáng)大的作圖工具是做數(shù)據(jù)分析的好幫手,在高手如云的大數(shù)據(jù)江湖中,不炫個(gè)技都不敢說自己是江湖中人,那么我們就看看想要炫技需要掌握哪些基本功吧
注意:本文中實(shí)際使用的樣本數(shù)據(jù)是根據(jù)具體命令任意挑選某組樣本數(shù)據(jù),不具有針對性,因此自己試驗(yàn)可以隨意找樣本嘗試
一個(gè)table引發(fā)的血案
table函數(shù)就是用來輸出指定字段的統(tǒng)計(jì)表格,可以用來分析數(shù)據(jù)比例情況,像下面的樣子:
> table(full$Title, full$Survived)
0 1
Master 17 23
Miss 55 130
Mr 436 81
Mrs 26 100
Rare Title 15 8
那么為了讓table夠直觀,各路大俠紛紛使出了洪荒之力,注意,下面開始炫技部分:
第一種作圖方式(用于觀察標(biāo)準(zhǔn)殘差的場景):
> mosaicplot(table(full$Title, full$Survived), shade=TRUE)
第二種作圖方式(用于觀察總數(shù)目的場景):
> barplot(table(full$Survived, full$Title), sub="Survival by Title", ylab="number of passengers", col=c("steelblue4","steelblue2"))
> le> barplot(table(full$Survived, full$Title), sub="Survival by Title", ylab="number of passengers", col=c("steelblue4","steelblue2"))
> legend("topleft",legend = c("Died","Survived"),fill=c("steelblue4","steelblue2"),inset = .05)
第三種作圖方式(用于觀察比例情況的場景):
> barplot(prop.table(table(full$Survived, full$Title),2), sub="Survival by Title", ylab="number of passengers", col=c("steelblue4","steelblue2"))
> legend("topleft",legend = c("Died","Survived"),fill=c("steelblue4","steelblue2"),inset = .05)
當(dāng)然還可以有第四種作圖方式(同樣是用于觀察比例情況的場景):
> library('ggthemes')
> ggplot(full, aes(x = Title, fill = factor(Survived))) + geom_bar(stat='count', position='fill') + theme_few()
不同風(fēng)格的決策樹
在上節(jié)數(shù)據(jù)缺失填補(bǔ)中我們見過這樣一棵決策樹:
> library("rpart")
> library("rpart.plot")
> my_tree <- rpart(Fare ~ Pclass + Fsize + Embarked, data = train, method = "class", control=rpart.control(cp=0.0001))
> prp(my_tree, type = 4, extra = 100)
如果我們想看到每個(gè)分支的比例關(guān)系還可以在枝干上下文章:
> prp(my_tree, type = 2, extra = 100,branch.type=1)
圖中根據(jù)不同的枝干粗細(xì)能看出樣本集中在那個(gè)分支上
數(shù)據(jù)總覽方式
第一種:按列總覽
優(yōu)點(diǎn):可以看到有哪些列,什么類型,每一列取值舉幾個(gè)例子,也能看到有多少行
> str(train)
'data.frame': 2197291 obs. of 15 variables:
$ people_id : chr "ppl_100" "ppl_100" "ppl_100" "ppl_100" ...
$ activity_id : chr "act2_1734928" "act2_2434093" "act2_3404049" "act2_3651215" ...
$ date : chr "2023-08-26" "2022-09-27" "2022-09-27" "2023-08-04" ...
$ activity_category: chr "type 4" "type 2" "type 2" "type 2" ...
$ char_1 : chr "" "" "" "" ...
$ char_2 : chr "" "" "" "" ...
$ char_3 : chr "" "" "" "" ...
$ char_4 : chr "" "" "" "" ...
$ char_5 : chr "" "" "" "" ...
$ char_6 : chr "" "" "" "" ...
$ char_7 : chr "" "" "" "" ...
$ char_8 : chr "" "" "" "" ...
$ char_9 : chr "" "" "" "" ...
$ char_10 : chr "type 76" "type 1" "type 1" "type 1" ...
$ outcome : int 0 0 0 0 0 0 1 1 1 1 ...
第二種:分布總覽
優(yōu)點(diǎn):能看出每一列的最大值、最小值、均值、中位數(shù)等分布數(shù)據(jù)
> summary(train)
comment_count sex has_free_course score
Min. : 0.0 Min. :0.0000 Min. :0.0000 Min. :0.00
1st Qu.: 0.0 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.00
Median : 9.0 Median :1.0000 Median :0.0000 Median :4.90
Mean : 397.6 Mean :0.6259 Mean :0.3786 Mean :2.92
3rd Qu.: 169.0 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:5.00
Max. :5409.0 Max. :2.0000 Max. :1.0000 Max. :5.00
第三種:采樣瀏覽
優(yōu)點(diǎn):可以抽出其中少數(shù)樣本看全部信息
> library(dplyr)
> sample_n(train, 4)
> sample_n(train, 4)
people_id activity_id date activity_category char_1 char_2
513235 ppl_184793 act2_3805654 2023-02-25 type 2
1127284 ppl_29203 act2_1960547 2022-09-16 type 5
1174958 ppl_294918 act2_3624924 2022-10-19 type 3
1794311 ppl_390987 act2_633897 2023-02-10 type 2
char_3 char_4 char_5 char_6 char_7 char_8 char_9 char_10 outcome
513235 type 1 0
1127284 type 1349 1
1174958 type 23 0
1794311 type 1 0
第四種:用戶友好的表格采樣瀏覽
優(yōu)點(diǎn):不自動(dòng)換行,按表格形式組織,直觀
> library(knitr)
> kable(sample_n(train, 4))
> kable(sample_n(train, 4))
| |people_id |activity_id |date |activity_category |char_1 |char_2 |char_3 |char_4 |char_5 |char_6 |char_7 |char_8 |char_9 |char_10 | outcome|
|:-------|:----------|:------------|:----------|:-----------------|:------|:------|:------|:------|:------|:------|:------|:------|:------|:---------|-------:|
|1784154 |ppl_389138 |act2_2793972 |2022-11-03 |type 5 | | | | | | | | | |type 649 | 1|
|1138360 |ppl_294144 |act2_149226 |2022-09-18 |type 5 | | | | | | | | | |type 1058 | 0|
|1698603 |ppl_373844 |act2_3579388 |2022-08-27 |type 4 | | | | | | | | | |type 230 | 0|
|1505324 |ppl_351017 |act2_2570186 |2022-09-30 |type 5 | | | | | | | | | |type 248 | 0|
請尊重原創(chuàng),轉(zhuǎn)載請注明來源網(wǎng)站www.shareditor.com以及原始鏈接地址
R語言中的管道
shell中管道非常方便,比如把一個(gè)文件中第二列按數(shù)字排序后去重可以寫成cat file | awk '{print $2}' | sort -n -k 1 | uniq,那么R語言中的管道怎么用呢?我們先來看一個(gè)例子:
> library(dplyr)
> ggplot(filter(train, char_5 != ""), aes(x = outcome, fill = char_5)) + geom_bar(width = 0.6, position = "fill")
這個(gè)例子中有以下處理步驟:
1. 拿出train數(shù)據(jù)
2. 對train數(shù)據(jù)做過濾,過濾掉char_5這一列為空的樣本
3. 用過濾好的數(shù)據(jù)執(zhí)行g(shù)gplot畫圖
這三部如果用一層層管道操作就方便多了,實(shí)際上R語言為我們提供了這樣的管道,即把函數(shù)的第一個(gè)參數(shù)單獨(dú)提出來作為管道輸入,管道操作符是%>%,也就是可以這樣執(zhí)行:
> train %>%
+ filter(char_5 != "") %>%
+ ggplot(aes(x=outcome, fill=char_10))+geom_bar(width=0.6, position="fill")
那么管道到底有什么好處呢?我們來追蹤一下實(shí)際的過程來體會
假設(shè)我們樣本長這個(gè)樣子:
> library(knitr)
> kable(sample_n(train, 4))
| |people_id |activity_id |date |activity_category |char_1 |char_2 |char_3 |char_4 |char_5 |char_6 |char_7 |char_8 |char_9 |char_10 | outcome|
|:-------|:----------|:------------|:----------|:-----------------|:------|:------|:------|:------|:------|:------|:------|:------|:------|:---------|-------:|
|567545 |ppl_194099 |act2_1420548 |2023-02-08 |type 2 | | | | | | | | | |type 1 | 0|
|115164 |ppl_112033 |act2_2209862 |2022-10-23 |type 5 | | | | | | | | | |type 481 | 1|
|1616290 |ppl_369463 |act2_2515098 |2023-07-11 |type 4 | | | | | | | | | |type 295 | 0|
|1714893 |ppl_376799 |act2_1464019 |2022-10-01 |type 5 | | | | | | | | | |type 1907 | 0|
這時(shí)我們發(fā)現(xiàn)有一些列是空值,如果我希望了解一下其中的char_5都有哪些取值以及比例情況,我們可以這樣來做:
> train %>%
+ count(char_5)
# A tibble: 8 × 2
char_5 n
<chr> <int>
1 2039676
2 type 1 49214
3 type 2 26982
4 type 3 6013
5 type 4 1995
6 type 5 5421
7 type 6 67989
8 type 7 1
現(xiàn)在我們看到了輸出了char_5和n兩列分別表示可能取值和頻次,但是還是不夠直觀,希望畫圖來看,那么我們繼續(xù):
> train %>%
+ count(char_5) %>%
+ ggplot(aes (x = reorder(char_5,n), y = n)) +
+ geom_bar(stat = "identity", fill = "light blue")
發(fā)現(xiàn)我們有很多空值,這時(shí)我們繼續(xù)調(diào)整:
> train %>%
+ filter(char_5!="") %>%
+ count(char_5) %>%
+ ggplot(aes (x = reorder(char_5,n), y = n)) +
+ geom_bar(stat = "identity", fill = "light blue")
這就是我們的管道的作用:一步一步調(diào)試,不需要總想著把參數(shù)插到函數(shù)的哪個(gè)位置
回到本源,最基本的作圖
有人會說,R語言怎么總是畫這么復(fù)雜的圖像,但是卻連最基本的散點(diǎn)圖和折線圖都不能畫嗎?下面回到本源,來展示一下R語言的最基本的作圖功能。
> a <- c(49, 26, 69, 19, 54, 67, 19, 33)
> plot(a)
如果希望看到變化趨勢,我們可以畫折線圖,加上type即可
> plot(a, type='b')
如果這是一個(gè)每日消費(fèi)金額,我們想看累積消費(fèi)怎么辦?我們可以利用累積函數(shù)cumsum,它的功能像這個(gè)樣子:
> a
[1] 49 26 69 19 54 67 19 33
> cumsum(a)
[1] 49 75 144 163 217 284 303 336
>
那么可以這樣作圖:
> plot(cumsum(a), type='b')
最后讓我們用一個(gè)完美的正弦曲線收筆:
> x1 <- 0:100
> x2 <- x1 * 2 * pi / 100
> Y = sin(x2)
> par(family='STXihei') # 這句是為了解決圖像中中文亂碼問題
> plot(x2, Y, type='l', main='正弦曲線', xlab='x軸', ylab='y軸')
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03