「R」分析之前的數據準備

2021-02-18 優雅R

數據分析項目中大多數的時間都用在了準備數據上,一個典型的項目80%的精力都花在分析而進行的發現、清洗和準備數據上。只有不到5%的精力用於分析(剩下的時間都耗在了寫報告上面)。

合併數據集

數據分析中最常見的一個障礙是將存儲在兩個不同地方的數據組合到一起。

粘貼數據結構

R提供了幾個函數可以將多個數據結構粘貼成一個數據結構。

paste

paste函數可以將多個字符型向量連接成一個向量,默認向量的值是用空格分隔的,我們可以通過sep參數指定分隔符號,而collapse參數可以用來指定這些值之間的連接符號。

x <- c("a", "b", "c", "d", "e")y <- c("A", "B", "C", "E", "F")
# 默認paste(x, y)## [1] "a A" "b B" "c C" "d E" "e F"
# 使用自定義分隔符
paste(x, y, sep = ",")## [1] "a,A" "b,B" "c,C" "d,E" "e,F"
# 指定連接符
paste(x, y, sep = "-", collapse = "#")## [1] "a-A#b-B#c-C#d-E#e-F"

另外,使用簡化版的paste0函數隻提供連接參數,沒有分隔。

paste0(x, y, collapse = "#")## [1] "aA#bB#cC#dE#eF"

rbind 和 cbind

rbind與cbind函數分別可以以增加行或列的形式將幾個對象(矩陣或者數據框)合併起來。你可以將它想像為以垂直或者水平地將兩張表拼在一起。

merge
merge(x, y, by = , by.x = , by.y = , ...)

x與y指定用於合併的數據框,by對應x和y共有的列名,後面by.x與by.y用於分別指定用於合併的列名。

數據轉換

數據框中常用的更改變量的函數是transform,它定義如下:

這個函數首先要指定一個數據框,跟著是一系列的表達式,表達式中的變量是數據框中的變量,transform函數會完成每個表達式中的計算,然後返回最終的數據框。

head(mtcars)##                    mpg cyl disp  hp drat   wt qsec vs am gear carb## Mazda RX4         21.0   6  160 110 3.90 2.62 16.5  0  1    4    4## Mazda RX4 Wag     21.0   6  160 110 3.90 2.88 17.0  0  1    4    4## Datsun 710        22.8   4  108  93 3.85 2.32 18.6  1  1    4    1## Hornet 4 Drive    21.4   6  258 110 3.08 3.21 19.4  1  0    3    1## Hornet Sportabout 18.7   8  360 175 3.15 3.44 17.0  0  0    3    2## Valiant           18.1   6  225 105 2.76 3.46 20.2  1  0    3    1mtcars.transformed <-  transform(mtcars, newVar = disp / hp)mtcars.transformed##                      mpg cyl  disp  hp drat   wt qsec vs am gear carb## Mazda RX4           21.0   6 160.0 110 3.90 2.62 16.5  0  1    4    4## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.88 17.0  0  1    4    4## Datsun 710          22.8   4 108.0  93 3.85 2.32 18.6  1  1    4    1## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.21 19.4  1  0    3    1## Hornet Sportabout   18.7   8 360.0 175 3.15 3.44 17.0  0  0    3    2## Valiant             18.1   6 225.0 105 2.76 3.46 20.2  1  0    3    1## Duster 360          14.3   8 360.0 245 3.21 3.57 15.8  0  0    3    4## Merc 240D           24.4   4 146.7  62 3.69 3.19 20.0  1  0    4    2## Merc 230            22.8   4 140.8  95 3.92 3.15 22.9  1  0    4    2## Merc 280            19.2   6 167.6 123 3.92 3.44 18.3  1  0    4    4## Merc 280C           17.8   6 167.6 123 3.92 3.44 18.9  1  0    4    4## Merc 450SE          16.4   8 275.8 180 3.07 4.07 17.4  0  0    3    3## Merc 450SL          17.3   8 275.8 180 3.07 3.73 17.6  0  0    3    3## Merc 450SLC         15.2   8 275.8 180 3.07 3.78 18.0  0  0    3    3## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.25 18.0  0  0    3    4## Lincoln Continental 10.4   8 460.0 215 3.00 5.42 17.8  0  0    3    4##                     newVar## Mazda RX4            1.455## Mazda RX4 Wag        1.455## Datsun 710           1.161## Hornet 4 Drive       2.345## Hornet Sportabout    2.057## Valiant              2.143## Duster 360           1.469## Merc 240D            2.366## Merc 230             1.482## Merc 280             1.363## Merc 280C            1.363## Merc 450SE           1.532## Merc 450SL           1.532## Merc 450SLC          1.532## Cadillac Fleetwood   2.302## Lincoln Continental  2.140## [到達getOption("max.print") -- 略過16行]]

對對象的每個元素進行函數運算apply函數簇

該內容參考【r<-高級|理論】apply,lapply,sapply用法探索[1]學習

plyr軟體包

apply函數眾多,參數也有些不同,幸運的是,我們可以使用plyr包來避免這些函數的細節。

plyr包包含了12個命名與其功能有邏輯關聯的函數,用於將某個函數運行在某個R對象上,並且返回結果。每個函數的輸入都是一個數組、數據框或者列表,輸出也都是一個數組、數據框或者列表,或者什麼都不輸出。

輸入輸出矩陣輸出數據框輸出列表不輸出數組aaplyadplyalplya_ply數據框daplyddplydlplyd_ply列表laplyldplyllplyl_ply

所有的函數都接受下面的參數。

參數描述默認值.data輸入的數據對象
.fun要運行的函數NULL.progress進度條類型(用create_progress構建);選項可包括「none」,「text」,「tk」和「win」「none」.expand若.data是一個數據框,則該參數控制輸出如何擴展;.expand=TRUE表示1維輸出,.expand=FALSE表示n維輸出TRUE.parallel指定是否並行地運行函數(通過foreach)FALSE…其他傳遞給.fun的參數

舉幾個例子:

library(plyr)d <- data.frame(x=1:5, y=6:10)# (1)輸入為列表,輸出也為列表lapply(d, function(x) 2 ^ x)## $x## [1]  2  4  8 16 32## ## $y## [1]   64  128  256  512 1024
# 等價命令是llplyllply(.data=d, .fun=function(x) 2^x)## $x## [1] 2 4 8 16 32## ## $y## [1] 64 128 256 512 1024
# (2) 輸入為矩陣,輸出為列表x = as.matrix(d)apply(X = x, MARGIN = 1, FUN=paste, collapse=",")## [1] "1,6" "2,7" "3,8" "4,9" "5,10"
# 等價命令aaply(.data = x, .margins = 1, .fun=paste, collapse=",")## 1 2 3 4 5 ## "1,6" "2,7" "3,8" "4,9" "5,10"
# (3)輸入為數據框,輸出為矩陣t(sapply(d, FUN=function(x) 2 ^ x))## [,1] [,2] [,3] [,4] [,5]## x 2 4 8 16 32## y 64 128 256 512 1024# 等價命令aaply(.data=as.matrix(d), .margins = 2, .fun=function(x) 2 ^ x)## ## X1 1 2 3 4 5## x 2 4 8 16 32## y 64 128 256 512 1024

數據分段shingle

Shingle對象是因子對象的連續性泛化,一個Shingle對象包括一個數字向量和一組間隔,各個間隔允許重疊,這種結構十分類似於屋簷上的瓦片結構。Shingle對象廣泛應用於lattice包,它允許我們輕鬆地把條件或者分組變量作為連續變量使用。

lattice::shingle(x, intervals = unique(x))## ## Data:##  [1]  1  2  3  4  5  6  7  8  9 10## ## Intervals:##   min max count## 1   1   6     6## 2   2   7     6## 3   3   8     6## 4   4   9     6## 5   5  10     6## ## Overlap between adjacent intervals:## [1] 5 5 5 5

intervals參數用來指定在什麼地方分割箱子,你可以用一個數值向量來指定分割的位置,也可以使用一個兩列的矩陣,每一列表示一個特定的間距。equal.count函數可以用來創建一個shingle,每個箱子有相同個數的觀測值:

lattice::equal.count(x)## ## Data:##  [1]  1  2  3  4  5  6  7  8  9 10## ## Intervals:##   min  max count## 1 0.5  3.5     3## 2 1.5  4.5     3## 3 3.5  6.5     3## 4 4.5  7.5     3## 5 6.5  9.5     3## 6 7.5 10.5     3## ## Overlap between adjacent intervals:## [1] 2 1 2 1 2

Cut

cut函數可以很方便地將一個連續性變量切割成很多個小片段。輸入是一個數值向量,輸出是一個因子,因子的每個水平對應輸入向量的每個區間範圍。

cut(x, breaks, labels = NULL, include.lowest = FALSE, right=TRUE, dig.lab=3,ordered_result = FALSE, ...)

例如,假設我們想要統計平均擊球數據在某個範圍內的選手的數量,可以使用cut函數與table函數:

# 讀入示例數據library(nutshell)## 載入需要的程輯包:nutshell.bbdb## 載入需要的程輯包:nutshell.audioscrobblerdata("batting.2008")# 首先在數據框中加入擊球平均值batting.2008.AB <- transform(batting.2008, AVG = H / AB)
# 選擇100 AB以上的球員(為了統計顯著性)batting.2008.over100AB <- subset(batting.2008.AB, subset = (AB > 100))
# 把結果分為10份battingavg.2008.bins <- cut(batting.2008.over100AB$AVG, breaks = 10)
table(battingavg.2008.bins)## battingavg.2008.bins## (0.137,0.163] (0.163,0.189] (0.189,0.215] (0.215,0.24] (0.24,0.266] ## 4 6 24 67 121 ## (0.266,0.292] (0.292,0.318] (0.318,0.344] (0.344,0.37] (0.37,0.396] ## 132 70 11 5 2

利用分組變量合併對象

有時候,我們可能想要將幾個相似的對象(向量或者數據框)合併成一個數據框,數據框中有一列用來表示數據的來源。lattice包中的make.groups函數可以實現這個功能:

library(lattice)make.groups(...)

例如我們將下面不同的向量合成一個數據框:

hat.sizes <- seq(from = 6.25, to = 7.75, by = .25)pants.sizes <- c(30:34, 36, 38, 40)shoe.sizes <- seq(from=7, to=12)lattice::make.groups(hat.sizes, pants.sizes, shoe.sizes)##               data       which## hat.sizes1    6.25   hat.sizes## hat.sizes2    6.50   hat.sizes## hat.sizes3    6.75   hat.sizes## hat.sizes4    7.00   hat.sizes## hat.sizes5    7.25   hat.sizes## hat.sizes6    7.50   hat.sizes## hat.sizes7    7.75   hat.sizes## pants.sizes1 30.00 pants.sizes## pants.sizes2 31.00 pants.sizes## pants.sizes3 32.00 pants.sizes## pants.sizes4 33.00 pants.sizes## pants.sizes5 34.00 pants.sizes## pants.sizes6 36.00 pants.sizes## pants.sizes7 38.00 pants.sizes## pants.sizes8 40.00 pants.sizes## shoe.sizes1   7.00  shoe.sizes## shoe.sizes2   8.00  shoe.sizes## shoe.sizes3   9.00  shoe.sizes## shoe.sizes4  10.00  shoe.sizes## shoe.sizes5  11.00  shoe.sizes## shoe.sizes6  12.00  shoe.sizes

隨機抽樣

有時候數據太多,或者出於統計或計算性能的原因,你想要將數據隨機分為幾部分構建模型(通常分為訓練集、測試集和評估集)。

最簡單地方法就是使用sample函數,它可以對一個向量做隨機抽樣。

sample(x, size, replace = FALSE, prob = NULL)

當對數據框做sample操作時,實際返回的是列的隨機抽樣結果,而不是行。因為數據框是向量的列表,sample實際抽樣的是這個列表的元素。所以要注意一下。

對於觀察結果做行的隨機抽樣,需要使用sample函數創建一組行號的抽樣結果,然後再使用索引選取這些行號所對應的行。比如我們隨機抽樣batting.2008數據集的5條記錄:

batting.2008[sample(1:nrow(batting.2008), 5), ]##       nameLast nameFirst weight height bats throws      debut birthYear## 478  Rodriguez Francisco    175     72    R      R 2002-09-18      1982## 350     Seanez      Rudy    185     70    R      R 1989-09-07      1968## 1019 Francisco       Ben    190     73    R      R 2007-05-01      1981## 1011    Musser      Neal    235     73    L      L 2007-04-21      1980## 327      Riske     David    180     74    R      R 1999-08-14      1976##       playerID yearID stint teamID lgID   G G_batting  AB  R   H 2B 3B HR## 478  rodrifr03   2008     1    LAA   AL  76         4   0  0   0  0  0  0## 350  seaneru01   2008     1    PHI   NL  42        41   0  0   0  0  0  0## 1019 francbe01   2008     1    CLE   AL 121       121 447 65 119 32  0 15## 1011 mussene01   2008     1    KCA   AL   1         0   0  0   0  0  0  0## 327  riskeda01   2008     1    MIL   NL  45        44   1  0   0  0  0  0##      RBI SB CS BB SO IBB HBP SH SF GIDP G_old## 478    0  0  0  0  0   0   0  0  0    0     4## 350    0  0  0  0  0   0   0  0  0    0    41## 1019  54  4  3 40 86   0   6  2  4   10   121## 1011   0  0  0  0  0   0   0  0  0    0     1## 327    0  0  0  0  0   0   0  0  0    0    44

還可以使用這種技術做更複雜的隨機抽樣,比如你想要隨機統計3個對的情況,可以這樣:

batting.2008$teamID <- as.factor(batting.2008$teamID)levels(batting.2008$teamID)##  [1] "ARI" "ATL" "BAL" "BOS" "CHA" "CHN" "CIN" "CLE" "COL" "DET" "FLO"## [12] "HOU" "KCA" "LAA" "LAN" "MIL" "MIN" "NYA" "NYN" "OAK" "PHI" "PIT"## [23] "SDN" "SEA" "SFN" "SLN" "TBA" "TEX" "TOR" "WAS"
# 抽樣例子sample(levels(batting.2008$teamID), 3)## [1] "BAL" "SLN" "SEA"# 使用例子batting.2008.3teams <- batting.2008[is.element(batting.2008$teamID, sample(levels(batting.2008$teamID),3)), ]batting.2008.3teams## nameLast nameFirst weight height bats throws debut birthYear## 6 Ardoin Danny 218 72 R R 2000-08-02 1974## 9 Aurilia Rich 170 72 R R 1995-09-06 1971## 19 Beimel Joe 201 74 L L 2001-04-08 1977## 24 Bennett Gary 190 72 R R 1995-09-24 1972## 27 Berroa Angel 175 71 R R 2001-09-18 1978## 30 Blake Casey 200 74 R R 1999-08-14 1973## playerID yearID stint teamID lgID G G_batting AB R H 2B 3B HR## 6 ardoida01 2008 1 LAN NL 24 24 51 3 12 1 0 1## 9 aurilri01 2008 1 SFN NL 140 140 407 33 115 21 1 10## 19 beimejo01 2008 1 LAN NL 71 69 0 0 0 0 0 0## 24 bennega01 2008 1 LAN NL 10 10 21 1 4 1 0 1## 27 berroan01 2008 1 LAN NL 84 84 226 26 52 13 1 1## 30 blakeca01 2008 2 LAN NL 58 58 211 25 53 12 1 10## RBI SB CS BB SO IBB HBP SH SF GIDP G_old## 6 4 1 0 2 10 0 1 0 0 2 24## 9 52 1 1 30 56 4 1 0 2 11 140## 19 0 0 0 0 0 0 0 0 0 0 69## 24 4 0 0 2 0 0 0 0 0 1 10## 27 16 0 0 20 41 4 4 6 0 13 84## 30 23 1 0 16 52 5 4 0 2 9 58## [到達getOption("max.print") -- 略過134行]]

這個函數對於數據的各種複雜抽樣非常方便,但你可能還需要用到更複雜的抽樣方式,比如分層抽樣、整群抽樣、最大熵抽樣,這些方法都可以在sampling包中找到。

匯總函數tapply與aggregate

tapply函數用於向量的匯總分析,是一個非常靈活的函數。可以設置對向量X的某個子集做匯總,也可以指定匯總函數:

tapply(X, INDEX, FUN = , ..., simplify = )

比如計算各隊本壘打的總數:

tapply(X=batting.2008$HR, INDEX=list(batting.2008$teamID), FUN=sum)## ARI ATL BAL BOS CHA CHN CIN CLE COL DET FLO HOU KCA LAA LAN MIL MIN NYA ## 159 130 172 173 235 184 187 171 160 200 208 167 120 159 137 198 111 180 ## NYN OAK PHI PIT SDN SEA SFN SLN TBA TEX TOR WAS ## 172 125 214 153 154 124  94 174 180 194 126 117

也可以使用返回多個值的函數,例如fivenum計算各個聯盟球員擊球平均數:

tapply(batting.2008$H/batting.2008$AB, INDEX=list(batting.2008$lgID), fivenum)## $AL## [1] 0.000 0.176 0.249 0.283 1.000## ## $NL## [1] 0.0000 0.0952 0.2173 0.2680 1.0000

plyr包中沒有tapply的等價功能。

by是和tapply有密切關係的一個函數,區別在於by是用於數據框的。下面是一個例子:

by(batting.2008[, c("H", "2B", "3B", "HR")],   INDICES = list(batting.2008$lgID, batting.2008$bats), FUN=mean)## Warning in mean.default(data[x, , drop = FALSE], ...): 參數不是數值也不是邏## 輯值:回覆NA
## Warning in mean.default(data[x, , drop = FALSE], ...): 參數不是數值也不是邏## 輯值:回覆NA
## Warning in mean.default(data[x, , drop = FALSE], ...): 參數不是數值也不是邏## 輯值:回覆NA
## Warning in mean.default(data[x, , drop = FALSE], ...): 參數不是數值也不是邏## 輯值:回覆NA
## Warning in mean.default(data[x, , drop = FALSE], ...): 參數不是數值也不是邏## 輯值:回覆NA
## Warning in mean.default(data[x, , drop = FALSE], ...): 參數不是數值也不是邏## 輯值:回覆NA## : AL## : B## [1] NA## - ## : NL## : B## [1] NA## - ## : AL## : L## [1] NA## - ## : NL## : L## [1] NA## - ## : AL## : R## [1] NA## - ## : NL## : R## [1] NA

另一個用於數據匯總的函數是aggregate:

aggregate(x, by, FUN, ...)

也可以用於時間序列,參數略有不同。

下面看一個按球隊統計擊球數的例子:

aggregate(x=batting.2008[, c("AB", "H", "BB", "2B", "3B", "HR")],          by=list(batting.2008$teamID), FUN=sum)##    Group.1   AB    H  BB  2B 3B  HR## 1      ARI 5409 1355 587 318 47 159## 2      ATL 5604 1514 618 316 33 130## 3      BAL 5559 1486 533 322 30 172## 4      BOS 5596 1565 646 353 33 173## 5      CHA 5553 1458 540 296 13 235## 6      CHN 5588 1552 636 329 21 184## 7      CIN 5465 1351 560 269 24 187## 8      CLE 5543 1455 560 339 22 171## 9      COL 5557 1462 570 310 28 160## 10     DET 5641 1529 572 293 41 200## 11     FLO 5499 1397 543 302 28 208## 12     HOU 5451 1432 449 284 22 167## 13     KCA 5608 1507 392 303 28 120## 14     LAA 5540 1486 481 274 25 159## 15     LAN 5506 1455 543 271 29 137## 16     MIL 5535 1398 550 324 35 198## 17     MIN 5641 1572 529 298 49 111## 18     NYA 5572 1512 535 289 20 180## 19     NYN 5606 1491 619 274 38 172## 20     OAK 5451 1318 574 270 23 125## 21     PHI 5509 1407 586 291 36 214## 22     PIT 5628 1454 474 314 21 153## 23     SDN 5568 1390 518 264 27 154## 24     SEA 5643 1498 417 285 20 124## 25     SFN 5543 1452 452 311 37  94## 26     SLN 5636 1585 577 283 26 174## 27     TBA 5541 1443 626 284 37 180## 28     TEX 5728 1619 595 376 35 194## [到達getOption("max.print") -- 略過2行]]

計數

使用tabulate與table函數。

reshape包另起一文單獨寫下,不要將內置的reshape函數與reshape包混淆。

來源:《R核心技術手冊》

參考資料[1]

【r<-高級|理論】apply,lapply,sapply用法探索: https://www.jianshu.com/p/9bca3555b06c

相關焦點

  • R 語言之數據分析高級方法「主成分分析」和「因子分析」
    本節主要總結「數據分析」的「主成分分析」和「因子分析」的思想。通過學習《 R 語言實戰 》關於這兩種方法的解釋,我們很容易理解這兩種方法其存在的意義。——降維。我們將要面對的數據實在是太大,變量實在太多,因此計算機所承受的壓力也會越來越大。信息過度複雜是多變量數據最大的挑戰之一,特別是在還要考慮變量間交互關係的時候,變量增加時交互關係的量是按階乘關係在往上漲的,所以降維在很多時候能夠起到減少大量工作量的作用,是數據分析很重要的一個思想。以上是「主成分分析」與「因子分析」聯繫,有共同的目的。
  • R 語言之數據分析「Resampling」
    本節主要總結「數據分析」的「Resampling」重抽樣思想,並通過 R 語言實現。有一種東西叫作「傳統」,它在很多時候很有用,但會讓你思維固化,在新的環境下讓你出錯。在總結回歸分析和方差分析的時候 ④R語言之數據分析「初章」,我總是會在模型的建立之前提到「統計假設」,在模型建立之後進行「假設檢驗」,原因想必大家都能理解,就是因為這些「統計假設」是我們模型建立思想的基礎,是支撐我們模型正確性的「必要條件」。但是,不可否認的是,這些「必要條件」最終會成為我們「數據分析」的局限,讓我們對「不滿足條件的數據集」束手無策。
  • 「Why-What-How」數據分析方法
    統一認知後,才能保證不同層級,不同部門的人在平等話語權和同一個方向進行討論和協作,才能避免公司內的人以「我感覺」「我猜測」來猜測當前業務的情況。除了「量化」之外,另外一個重點詞語是「業務」。只有解決業務問題分析才能創造價值,價值包括個人價值和公司價值。對於公司來講,你提高了收入水平或者降低了業務成本,對於個人來講,你知道怎麼去利用數據解決業務問題,這對個人的能力成長和職業生涯都有非常大的幫助。
  • Gartner預測2019年十大「數據和分析技術」趨勢:增強型分析成為...
    增強型數據分析,增強型數據管理,持續型智能,可解釋的 AI,數據結構,NLP/對話式分析,商業 AI 和 ML,區塊鏈和持久性內存伺服器共同構成了 Gartner 2019 年十大「數據和分析技術趨勢」。 最近兩天裡,2 月 18 日-19 日,在雪梨舉行的 Gartner 數據與分析峰會上,增強型數據分析和可解釋的人工智慧成為焦點。
  • 什麼才是打開「數據分析」的正確姿勢?
    「因為負責渠道的同事提出了需求,希望了解渠道這半年來的相關數據。」「是要數據,還是要分析?」「要數據,但是要協助分析。」「如果要數據,你提供一張Excel表格就可以了,但如果要分析,這個PPT是不合格的。」
  • SQL/Tableau/Excel/Wind/R語言,一個月教你把「數據分析」技能寫入簡歷
    首先是解構任務,記錄問題,定性問題(找各種分析維度)其次是收集數據,通過各種數據軟體的應用,扒自己公司的數據&其他的數據,清洗處理,生成圖表最後是根據數據分析的結果來分析問題,做出自己的判斷,得出結論(通過ppt、專業圖表、報告等形式交付給老闆)
  • 「數據分析」的理念、流程、方法、工具
    >(一) 數據驅動企業運營 從電商平臺的「猜你喜歡」到音樂平臺的「心動模式」,大數據已經滲透到了我們生活的每一個場景。根據實際工作需要,「報告」不一定是必須的,數據分析的結果是為了下一步的行動計劃作支撐。
  • 擁有「數據分析」+「數據可視化」能力,更能受到社會偏愛?
    數據分析其實是時代下的產物,隨著大數據的應用,數據分析可以幫助企業了解到自身的情況和行業環境,輔助進行風險評判與決策,那麼數據分析員/師賦予的分析報告的價值,才是對企業最有用的。乍一聽『數據分析』,無論是從名頭上,還是從工作內容上,都感覺很高大上。
  • 中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?
    BBC 視覺與數據新聞團隊的數據記者已經使用 R 來執行複雜和可重複的數據分析以及構建原型一些時日了。比如,在獲過獎的 NHS 跟蹤項目中,我們使用了 R 來提取、清洗、清理和探索數百份電子表格中的數據,以了解 NHS 目標是否遭受了攻擊。
  • 沃林老師「數據挖掘」答疑 18 問
    至於幾個 G 的情況大多數是晶片的 CEL 文件了,這類數據建議直接通過 GEO2R 進行分析。問題 2 :GEO 資料庫平臺文件裡沒有「gene. symbol」信息,怎麼解決呢?回  答:如果是晶片測序的話可以直接搜索晶片對應版本的注釋信息,如果是高通量測序的話找個在線 ID 轉換工具就可以解決了,比如「webgenestalt」或者 R 包「clusterprofiler」。
  • 「Geek-r」數據導入
    本部分內容是我寫的 R book 的數據導入部分,寫了好久了。。。斷斷續續的,只完成了一半的內容吧。已經寫的的內容可以通過原文閱讀。在掌握一定的 R 編程技能後,我們開始邁入數據分析的殿堂。大部分數據分析事務的數據都不是通過 R 創建,而是來自於各種數據收集軟硬體、渠道,包括 Excel、網絡等。
  • 全網最全 | R語言中的方差分析匯總
    方差分析,是統計中的基礎分析方法,也是我們在分析數據時經常使用的方法。下面我總結一下R語言如何對常用的方差分析進行操作。1.包的下載地址:https://cran.r-project.org/web/packages/agridat/index.html「包的介紹」❝「agridat: Agricultural Datasets」
  • R語言 | 回歸分析(一)
    如果我想問你觀察裡沒有的數據,比如沒有182cm數據,它對應的體重「可能」是多少呢?正如上面提到,我們可以「擬合」一條直線來描述相關性,那麼自然的可以通過這條直線來「預測」數據。這種分析思路,即所謂的回歸分析(regression analysis)。
  • 用Python揪出你微信裡的「殭屍粉」
    相信每個人的微信好友裡都有一些所謂的「殭屍粉」,他們默默地躺在你微信聯繫人中,你傻傻的以為對方還是好朋友,那你就真是太傻了;而現實是,對方早就把你從好友列表中刪除了,那到底如何來揪出這群人呢?本篇文章的目的是自動化操作微信 App,通過「模擬給好友轉帳」來揪出所有的「殭屍粉」,並一鍵刪除它們。
  • 「ONE·一個」產品分析報告
    (2) 用戶特點通過對比及分析目標用戶的數據和產品內的UGC內容(評論),可以看出「ONE·一個」的用戶與其他閱讀APP的用戶有所差別,「ONE·一個」的用戶偏年輕化與文藝化,喜歡高質量且篇幅較短的內容。
  • 數據可視化|用散點圖進行數據分析
    」的方法進行畫圖。# 使用「面向對象」的方法畫圖,定義圖片的大小fig, ax = plt.subplots(figsize=(8, 6))# 設置標題ax.set_title('\n客戶每年長一歲,人均消費金額增加' + '%.2f' % coef[0][1
  • 移動廣告歸因與營銷數據分析公司「AppsFlyer」獲 2.1 億美元大型...
    「AppsFlyer」官網據外媒報導,近日,全球領先的移動廣告歸因與營銷數據分析公司「AppsFlyer」完成了 2.1 億美元的大型 D 輪融資。「AppsFlyer」成立於 2011 年,宗旨是精準衡量營銷效果。「AppsFlyer」的聯合創始人兼執行長 Oren Kaniel 表示,之所以創建「AppsFlyer」,是因為營銷人員缺少基本分析工具,無法監測和提升移動營銷市場投資的效果。
  • 深度| R vs Python:R是現在最好的數據科學語言嗎?
    請記住,TIOBE 索引的結構是「程式語言受歡迎程度的指示」。索引每個月更新一次,評分是基於世界範圍內的精尖工程師、課程和第三方供應商的使用量。R 語言是真正的「數據語言」R 語言之所以如此適合數據科學的原因部分跟它本身的語言特性有關。自 R 語言發明之初,數據及統計的觀念便融入其中。R-Project 形容其為「為統計計算而準備的程式語言及環境」。也就是說,R 語言的 DNA 中就含有統計及數據的基因。
  • 「競品分析」的理念、流程、方法、工具
    2,競品分析與市場分析其實是有區別的。市場分析、競品分析、產品分析、產品體驗分析在「分析目的」、「產品數量」、「分析維度」三個方面都是有所區別的,是一個從宏觀到微觀的過程。產品戰略規劃階段,可使用「PEST分析」與「波特五力模型」歸納出「SWOT分析」中的機會與威脅,從而得出「該不該做」的戰略結論。
  • 歐盟「史上最嚴」數據保護法 GDPR 生效;騰訊上線「下飯視頻」;中...
    歐盟「史上最嚴」數據保護法 GDPR 生效昨日,通用數據保護條例(The EU General Data Protection Regulation,一年前,投資快手後,騰訊的另一款短視頻產品 QIM 傳來在內測的消息,這款產品被定位類似於「美拍」、「快手」,主打拍照、短視頻分享,在廣場可以看到附近的人分享的視頻照片。