Hiroki Matsui
20150416
メモリに乗るデータ
R で処理して解析
メモリに乗らないデータをShrinkして使う。
SQL でハンドリングしてR に読み込む。
メモリに乗らないデータをそのまま使う(機械学習など)
Python?
その他諸々
Excel・Access・AWK・シェル芸・perl でテキスト処理・SASで解析・Hadoop廻そう….
臨機応変に多分効率的な手段を選択。
以下のデータをダウンロードして下さい。
http://u111u.info/k1dd
Rstudio を使うとデータの読み込みがGUI で出来ます。
以下の様に書けます。
data1 <- read.csv(# file 名
file= "C:/Users/HEER_matsui/Desktop/data1.tsv",
# 1行目を列名にする。
header = T,
# tab 区切りのファイル
sep = "\t",
# 全てのカラムは文字列として読み込む。
colClasses=rep("character",11))
URLからのデータ読み込みも可能です。 例えば、http://u111u.info/k14zにあるCSVからデータを読み込めます。
data2 <- read.csv(file= "http://u111u.info/k14z",
header = T,
colClasses=rep("character",12))
data3 <- read.csv(file= "http://u111u.info/k14F",
header = T,
colClasses=rep("character",8))
クリップボードからの読み込みも可能です。
data4 <- read.table("clipboard",header = T)
vec1 <- c(1:3)
vec1
[1] 1 2 3
vec2 <- c("a","b","c")
vec2
[1] "a" "b" "c"
vec3 <- c(T,F,T)
vec3
[1] TRUE FALSE TRUE
vec1[c(1,2)]
[1] 1 2
vec2[c(T,T,F)]
[1] "a" "b"
vec3[-1]
[1] FALSE TRUE
temp_data <- data.frame(x1 =vec1, x2 = vec2,x3 =vec3)
head(data1)
No データ日 保険区分 都道府県 保険医療機関コード 施設名
1 514 平成24年9月1日 歯科 38 381230135 山崎歯科医院
2 515 平成24年9月1日 歯科 38 381230143 杉歯科医院
3 516 平成24年9月1日 歯科 38 381230168 月岡歯科医院
4 517 平成24年9月1日 歯科 38 381230192 小澤歯科医院
5 518 平成24年9月1日 歯科 38 381230218 さか歯科医院
6 519 平成24年9月1日 歯科 38 381230226 行元歯科医院
郵便番号 住所 病床数 Phone FAX
1 799-1351 西条市三津屋50-6 0898-64-1002
2 799-1344 西条市円海寺16-3 0898-64-1212 0898-64-1212
3 799-1354 西条市北条1429-2 0898-65-4618 0898-65-5477
4 799-1322 西条市国安1284-1 0898-66-5000
5 799-1353 西条市三津屋南8-7 0898-64-2077 0898-65-5324
6 799-1301 西条市三芳1235番地 0898-66-5068 0898-66-0882
head(data2)
告示番号.2 施設名 医療機関コード 都道府県
1 1 札幌医科大学附属病院 0119385 北海道
2 2 北海道大学病院 8010016 北海道
3 3 旭川医科大学病院 8010214 北海道
4 4 弘前大学医学部附属病院 8010221 青森
5 5 岩手医科大学附属病院 0113501 岩手
6 6 東北大学病院 8010146 宮城
病院類型 DPC算定病床数 DPC算定病床の入院基本料
1 平成15年度DPC参加病院 890 特定機能7対1
2 平成15年度DPC参加病院 874 特定機能7対1
3 平成15年度DPC参加病院 569 特定機能7対1
4 平成15年度DPC参加病院 595 特定機能7対1
5 平成15年度DPC参加病院 1088 特定機能7対1
6 平成15年度DPC参加病院 1216 特定機能7対1
DPC算定病床割合.3 精神病床数.4 療養病床数 結核病床数 病床総数.5
1 94.9% 42 0 6 938
2 92.4% 72 0 0 946
3 94.5% 33 0 0 602
4 93.6% 41 0 0 636
5 93.3% 78 0 0 1166
6 93.0% 70 0 0 1308
temp_data[1, ]
x1 x2 x3
1 1 a TRUE
temp_data[ ,1]
[1] 1 2 3
data1[1:3, ]
No データ日 保険区分 都道府県 保険医療機関コード 施設名
1 514 平成24年9月1日 歯科 38 381230135 山崎歯科医院
2 515 平成24年9月1日 歯科 38 381230143 杉歯科医院
3 516 平成24年9月1日 歯科 38 381230168 月岡歯科医院
郵便番号 住所 病床数 Phone FAX
1 799-1351 西条市三津屋50-6 0898-64-1002
2 799-1344 西条市円海寺16-3 0898-64-1212 0898-64-1212
3 799-1354 西条市北条1429-2 0898-65-4618 0898-65-5477
data1[1:3,c(2,3)]
データ日 保険区分
1 平成24年9月1日 歯科
2 平成24年9月1日 歯科
3 平成24年9月1日 歯科
data1[1:3,"データ日"]
[1] "平成24年9月1日" "平成24年9月1日" "平成24年9月1日"
data1$データ日[1:3]
[1] "平成24年9月1日" "平成24年9月1日" "平成24年9月1日"
# カラム追加
temp_data$x4 <- c(4:6)
temp_data$x5 <- temp_data$x1 * temp_data$x4
# 行の抽出
temp_data$x5 == 4
[1] TRUE FALSE FALSE
temp_data[temp_data$x5 == 4, ]
x1 x2 x3 x4 x5
1 1 a TRUE 4 4
# データのマージ
temp_data_2 <- data.frame(x6 = c("a","b","d"), x7 = c("疾患A","疾患B","疾患D"))
merge(x = temp_data, y =temp_data_2, by.x = "x2", by.y = "x6")
x2 x1 x3 x4 x5 x7
1 a 1 TRUE 4 4 疾患A
2 b 2 FALSE 5 10 疾患B
merge(x = temp_data, y =temp_data_2, by.x = "x2", by.y = "x6",all = T)
x2 x1 x3 x4 x5 x7
1 a 1 TRUE 4 4 疾患A
2 b 2 FALSE 5 10 疾患B
3 c 3 TRUE 6 18 <NA>
4 d NA NA NA NA 疾患D
# データのマージ
merge(x = temp_data, y =temp_data_2, by.x = "x2", by.y = "x6",all.x = T)
x2 x1 x3 x4 x5 x7
1 a 1 TRUE 4 4 疾患A
2 b 2 FALSE 5 10 疾患B
3 c 3 TRUE 6 18 <NA>
merge(x = temp_data, y =temp_data_2, by.x = "x2", by.y = "x6",all.y = T)
x2 x1 x3 x4 x5 x7
1 a 1 TRUE 4 4 疾患A
2 b 2 FALSE 5 10 疾患B
3 d NA NA NA NA 疾患D
http://www.mhlw.go.jp/bunya/iryouhoken/database/sinryo/dpc.html
x <- c("a","b","c")
y <- c("A","B","C")
paste0(x,y)
[1] "aA" "bB" "cC"
x <- c("1","2","3","-")
x <- as.numeric(x)
x[is.na(x)] <- 0
x
[1] 1 2 3 0
fun_chr_0 <- function(x){
x <- as.numeric(x)
x[is.na(x)] <- 0
return(x)
}
data_hosp <- data1[data1$保険区分 == "医科", ]
data_pref <- read.csv(file = "http://u111u.info/k1bc", colClasses = c(rep("character")))
data_hosp_dpc <- merge(data2, data_pref, by.x = "都道府県", by.y = "都道府県名称")
data_hosp_dpc$保険医療機関コード <- paste0(data_hosp_dpc$都道府県コード, data_hosp_dpc$医療機関コード)
data_hosp_dpc_pt <- data3
data_hosp_dpc_pt[,3] <- fun_chr_0(data_hosp_dpc_pt[,3])
data_hosp_dpc_pt[,4] <- fun_chr_0(data_hosp_dpc_pt[,4])
data_hosp_dpc_pt[,5] <- fun_chr_0(data_hosp_dpc_pt[,5])
data_hosp_dpc_pt[,6] <- fun_chr_0(data_hosp_dpc_pt[,6])
data_hosp_dpc_pt[,7] <- fun_chr_0(data_hosp_dpc_pt[,7])
data_hosp_dpc_pt[,8] <- fun_chr_0(data_hosp_dpc_pt[,8])
data <- merge(data_hosp_dpc, data_hosp_dpc_pt, by.x = "告示番号.2", by.y = "告示番号")
data <- merge(data, data_hosp, by = "保険医療機関コード")
data <- data[, c("施設名.x", "保険医療機関コード", "住所", "X97", "X99")]
write.csv(data,"data.csv",row.names=F)
data_hosp <- data1[data1$保険区分 == "医科", ]
table(data_hosp$保険区分)
医科
92975
data_pref <- read.csv(file = "http://u111u.info/k1bc", colClasses = c(rep("character")))
data_hosp_dpc <- merge(data2, data_pref, by.x = "都道府県", by.y = "都道府県名称")
data_hosp_dpc$保険医療機関コード <- paste0(data_hosp_dpc$都道府県コード, data_hosp_dpc$医療機関コード)
head(data_hosp_dpc)
都道府県 告示番号.2 施設名
1 愛知 1014 社会医療法人 名古屋記念財団 名古屋記念病院
2 愛知 1017 公立陶生病院
3 愛知 1024 愛知県厚生農業協同組合連合会 海南病院
4 愛知 538 総合病院 南生協病院
5 愛知 1023 西尾市民病院
6 愛知 543 独立行政法人 労働者健康福祉機構 旭労災病院
医療機関コード 病院類型 DPC算定病床数
1 1600767 平成21年度DPC参加病院 464
2 2300243 平成21年度DPC参加病院 672
3 7500011 平成21年度DPC参加病院 475
4 1402578 平成20年度DPC参加病院 273
5 3200210 平成21年度DPC参加病院 400
6 4500030 平成20年度DPC参加病院 250
DPC算定病床の入院基本料 DPC算定病床割合.3 精神病床数.4 療養病床数
1 一般7対1 100.0% 0 0
2 一般10対1 93.9% 0 0
3 一般10対1 85.9% 0 0
4 一般7対1 87.2% 0 0
5 一般7対1 100.0% 0 0
6 一般10対1 100.0% 0 0
結核病床数 病床総数.5 都道府県コード 保険医療機関コード
1 0 464 23 231600767
2 44 716 23 232300243
3 0 553 23 237500011
4 0 313 23 231402578
5 0 400 23 233200210
6 0 250 23 234500030
data_hosp_dpc_pt <- data3
data_hosp_dpc_pt[,3] <- fun_chr_0(data_hosp_dpc_pt[,3])
data_hosp_dpc_pt[,4] <- fun_chr_0(data_hosp_dpc_pt[,4])
data_hosp_dpc_pt[,5] <- fun_chr_0(data_hosp_dpc_pt[,5])
data_hosp_dpc_pt[,6] <- fun_chr_0(data_hosp_dpc_pt[,6])
data_hosp_dpc_pt[,7] <- fun_chr_0(data_hosp_dpc_pt[,7])
data_hosp_dpc_pt[,8] <- fun_chr_0(data_hosp_dpc_pt[,8])
head(data_hosp_dpc_pt)
告示番号 施設名 X99 X97 X97.輸血以外の再掲. X03 X02 X01
1 1 札幌医科大学附属病院 0 0 0 20 0 0
2 2 北海道大学病院 0 0 0 14 0 0
3 3 旭川医科大学病院 0 0 0 24 0 0
4 4 弘前大学医学部附属病院 14 0 0 128 0 0
5 5 岩手医科大学附属病院 17 12 0 106 0 0
6 6 東北大学病院 10 0 0 18 0 0
data <- merge(data_hosp_dpc, data_hosp_dpc_pt, by.x = "告示番号.2", by.y = "告示番号")
data <- merge(data, data_hosp, by = "保険医療機関コード")
data <- data[, c("施設名.x", "保険医療機関コード", "住所", "X97", "X99")]
head(data)
施設名.x 保険医療機関コード
1 KKR札幌医療センター 斗南病院 010111085
2 JR札幌病院 010114386
3 医療法人 北海道循環器病院 010114634
4 医療法人医仁会 中村記念病院 010114790
5 JA北海道厚生連 札幌厚生病院 010116258
6 市立札幌病院 010116381
住所 X97 X99
1 札幌市中央区北1条西6丁目 0 0
2 札幌市中央区北3条東1丁目1番地 0 0
3 札幌市中央区南27条西13丁目1番30号 0 0
4 札幌市中央区南1条西14丁目291番地 0 0
5 札幌市中央区北3条東8丁目5番地 0 0
6 札幌市中央区北11条西13丁目1番1号 0 0
write.csv(data,"data.csv",row.names=F)