【目的】 すべてのNA(欠損値)を置換する
【方法】 df.all[is.na(df.all)] <- 0
df.allのNAをすべて置換するには、
df.all[is.na(df.all)] <- 0
でOK。
データ分析に関する備忘録。主にR言語を使ったデータの前処理や統計、機械学習などの方法を記録。ビッククエリとトレジャーデータがお気に入り。オフラインとオンラインの連携が最近のマイブーム。
注目の投稿
【kepler.gl】コロナ対策による人流の変化も地図上に可視化(各種メディアで報道)
kepler.glのサイト画面 kepler.glを使ってコロナ対策の効果を分析したところ、テレビ、新聞、ネットのメディアから問い合わせや報道依頼が殺到。今も、土日返上で都内や全国の人流変化を分析しています。この記事では人流変化の可視化に便利なkepler.glにつ...
2015年9月16日水曜日
R クロス集計(acast)
目的:Rでエクセルのピポッドテーブルのようなクロス集計をおこなう
方法:acastを使う
補足:library(reshape2)が必要
#サンプルデータ作成
v.x1 <- c("oda","oda","oda","toyo","toyo","toyo","ie","ie","ie","ie")
v.x2 <- c("a","a","b","b","b","c","c","c","c","c")
v.x3 <- c(1000,900,800,700,600,500,400,300,200,100)
df.x <- data.frame(user_id = v.x1, item = v.x2, price =v.x3)
df.x
#クロス集計
tmp <- acast(df.x, user_id ~ item, sum, value.var = "price")
tmp
#補足:user_idの列を無理やり作る
df.cross <- data.frame(tmp)
write.csv(df.cross,file = "./cross.csv")
df.cross <- fread("./cross.csv") #llibrary(data.table)が必要
df.cross <- data.frame(df.cross)
df.cross
names(df.cross)[1] <- c("user_id")
df.cross
追記:acastは遅いのでspreadがお勧め
R 高速に大規模データのクロス集計をおこなう(tally, spread)
方法:acastを使う
補足:library(reshape2)が必要
#サンプルデータ作成
v.x1 <- c("oda","oda","oda","toyo","toyo","toyo","ie","ie","ie","ie")
v.x2 <- c("a","a","b","b","b","c","c","c","c","c")
v.x3 <- c(1000,900,800,700,600,500,400,300,200,100)
df.x <- data.frame(user_id = v.x1, item = v.x2, price =v.x3)
df.x
> df.x user_id item price 1 oda a 1000 2 oda a 900 3 oda b 800 4 toyo b 700 5 toyo b 600 6 toyo c 500 7 ie c 400 8 ie c 300 9 ie c 200 10 ie c 100
#クロス集計
tmp <- acast(df.x, user_id ~ item, sum, value.var = "price")
tmp
> tmp a b c ie 0 0 1000 oda 1900 800 0 toyo 0 1300 500
#補足:user_idの列を無理やり作る
df.cross <- data.frame(tmp)
write.csv(df.cross,file = "./cross.csv")
df.cross <- fread("./cross.csv") #llibrary(data.table)が必要
df.cross <- data.frame(df.cross)
df.cross
> df.cross V1 a b c 1 ie 0 0 1000 2 oda 1900 800 0 3 toyo 0 1300 500
names(df.cross)[1] <- c("user_id")
df.cross
> df.cross user_id a b c 1 ie 0 0 1000 2 oda 1900 800 0 3 toyo 0 1300 500
追記:acastは遅いのでspreadがお勧め
R 高速に大規模データのクロス集計をおこなう(tally, spread)
2015年8月31日月曜日
R 条件式にもとづいて列の内容を変える
【目的】 条件式にもとづいて列の内容を変える
【方法】 df.x[dfx$x == 1, ]$new <- "x"
#サンプルデータ作成
v.x1 <- c(1,2,3,4,5,6,7,8,9,10)
v.x2 <- c("a","a","b","b","b","c","c","c","c","c")
v.x3 <- c(1000,900,800,700,600,500,400,300,200,100)
df.x <- data.frame(id = v.x1, item = v.x2, price =v.x3)
#新たな列を追加
df.x$new <- "0"
#条件式
df.x[df.x$item == "c" & df.x$price >= 500,]$new <- "ok"
【方法】 df.x[dfx$x == 1, ]$new <- "x"
#サンプルデータ作成
v.x1 <- c(1,2,3,4,5,6,7,8,9,10)
v.x2 <- c("a","a","b","b","b","c","c","c","c","c")
v.x3 <- c(1000,900,800,700,600,500,400,300,200,100)
df.x <- data.frame(id = v.x1, item = v.x2, price =v.x3)
> df.x id item price 1 1 a 1000 2 2 a 900 3 3 b 800 4 4 b 700 5 5 b 600 6 6 c 500 7 7 c 400 8 8 c 300 9 9 c 200 10 10 c 100
#新たな列を追加
df.x$new <- "0"
> df.x id item price new 1 1 a 1000 0 2 2 a 900 0 3 3 b 800 0 4 4 b 700 0 5 5 b 600 0 6 6 c 500 0 7 7 c 400 0 8 8 c 300 0 9 9 c 200 0 10 10 c 100 0
#条件式
df.x[df.x$item == "c" & df.x$price >= 500,]$new <- "ok"
> df.x id item price new 1 1 a 1000 0 2 2 a 900 0 3 3 b 800 0 4 4 b 700 0 5 5 b 600 0 6 6 c 500 ok 7 7 c 400 0 8 8 c 300 0 9 9 c 200 0 10 10 c 100 0
2015年8月28日金曜日
R 棒グラフを描く(barplot)
【目的】 Rで棒グラフを描く
【方法】 barplot()
#サンプルデータ作成
v.x1 <- c(1,2,3,4,5,6,7,8,9,10)
v.x2 <- c("a","a","b","b","b","c","c","c","c","c")
v.x3 <- c(1000,900,800,700,600,500,400,300,200,100)
df.x <- data.frame(id = v.x1, item = v.x2, price =v.x3)
#先頭6行のデータを表示
head(df.x)
#最小値、第1四分位点、中央値、平均値、第3四分位点、最大値(カテゴリカル変数は度数)
summary(df.x)
#xtabs:カテゴリーの度数をデータとして得る
data.item <- xtabs(~ item, data = df.x)
data.item
#棒グラフ
barplot(data.item)
#並び替え 降順:decreasing = TRUE
data.item2 <- data.item[order(data.item, decreasing = TRUE)]
barplot(data.item2)
Rでの棒グラフ作図に関するより詳しい説明
http://stat.biopapyrus.net/graph/barplot.html
【方法】 barplot()
#サンプルデータ作成
v.x1 <- c(1,2,3,4,5,6,7,8,9,10)
v.x2 <- c("a","a","b","b","b","c","c","c","c","c")
v.x3 <- c(1000,900,800,700,600,500,400,300,200,100)
df.x <- data.frame(id = v.x1, item = v.x2, price =v.x3)
#先頭6行のデータを表示
head(df.x)
> head(df.x) id item price 1 1 a 1000 2 2 a 900 3 3 b 800 4 4 b 700 5 5 b 600 6 6 c 500
#最小値、第1四分位点、中央値、平均値、第3四分位点、最大値(カテゴリカル変数は度数)
summary(df.x)
> summary(df.x) id item price Min. : 1.00 a:2 Min. : 100 1st Qu.: 3.25 b:3 1st Qu.: 325 Median : 5.50 c:5 Median : 550 Mean : 5.50 Mean : 550 3rd Qu.: 7.75 3rd Qu.: 775 Max. :10.00 Max. :1000
#xtabs:カテゴリーの度数をデータとして得る
data.item <- xtabs(~ item, data = df.x)
data.item
> data.item item a b c 2 3 5
#棒グラフ
barplot(data.item)
#並び替え 降順:decreasing = TRUE
data.item2 <- data.item[order(data.item, decreasing = TRUE)]
barplot(data.item2)
Rでの棒グラフ作図に関するより詳しい説明
http://stat.biopapyrus.net/graph/barplot.html
R 日時の差を計算
set.date1 <- "2015-01-01 00:00:00"
set.date2 <- "2015-01-02 01:00:00"
as.POSIXct(set.date1) - 1
as.Date(set.date1) - 1
as.POSIXct(set.date2) - 1
as.Date(set.date2) - 1
as.POSIXct(set.date2) - as.POSIXct(set.date1)
as.Date(set.date2) - as.Date(set.date1)
set.date2 <- "2015-01-02 01:00:00"
as.POSIXct(set.date1) - 1
as.Date(set.date1) - 1
> as.POSIXct(set.date1) - 1 [1] "2014-12-31 23:59:59 JST" > as.Date(set.date1) - 1 [1] "2014-12-31"
as.POSIXct(set.date2) - 1
as.Date(set.date2) - 1
> as.POSIXct(set.date2) - 1 [1] "2015-01-02 00:59:59 JST" > as.Date(set.date2) - 1 [1] "2015-01-01"
as.POSIXct(set.date2) - as.POSIXct(set.date1)
as.Date(set.date2) - as.Date(set.date1)
> as.POSIXct(set.date2) - as.POSIXct(set.date1) Time difference of 1.041667 days > as.Date(set.date2) - as.Date(set.date1) Time difference of 1 days
R 順番を変える(arrange)
【目的】 指定した列を抽出する
【方法】 arrange(df, v1, v2) で 昇順、arrange(df, desc(column))で降順
【補足】 library(dplyr)が必要
#テスト用データフレーム作成
v.x1 <- c(1,2,3,4)
v.x2 <- c("a","a","b","b")
df.x <- data.frame(id = v.x1, item = v.x2)
df.x
df.x <- arrange(df.x, desc(id))
df.x
df.x <- arrange(df.x, id)
df.x
【方法】 arrange(df, v1, v2) で 昇順、arrange(df, desc(column))で降順
【補足】 library(dplyr)が必要
#テスト用データフレーム作成
v.x1 <- c(1,2,3,4)
v.x2 <- c("a","a","b","b")
df.x <- data.frame(id = v.x1, item = v.x2)
df.x
> df.x id item 1 1 a 2 2 a 3 3 b 4 4 b
df.x <- arrange(df.x, desc(id))
df.x
> df.x <- arrange(df.x, desc(id)) > df.x id item 1 4 b 2 3 b 3 2 a 4 1 a
df.x <- arrange(df.x, id)
df.x
> df.x <- arrange(df.x, id) > df.x id item 1 1 a 2 2 a 3 3 b 4 4 b
R 列名を変更する(rename)
【目的】 列名を変更する
【方法】 rename(df, after = before)
【補足】 library(dplyr)が必要
#テスト用データフレーム作成
v.x1 <- c(1,2,3,4)
v.x2 <- c("a","a","b","b")
df.x <- data.frame(id = v.x1, item = v.x2)
df.x
rename(df.x, id2 = id)
【方法】 rename(df, after = before)
【補足】 library(dplyr)が必要
#テスト用データフレーム作成
v.x1 <- c(1,2,3,4)
v.x2 <- c("a","a","b","b")
df.x <- data.frame(id = v.x1, item = v.x2)
df.x
> df.x id item 1 1 a 2 2 a 3 3 b 4 4 b
rename(df.x, id2 = id)
> rename(df.x, id2 = id) id2 item 1 1 a 2 2 a 3 3 b 4 4 b
登録:
投稿
(
Atom
)

