R分析用のチートシート
*100%個人向けです
#for分を使った連続変数作成
years <- c(1960,1970,1980,1990,2000,2005,2010,2015,2018)
for (i in 1:length(years)){
assign(
paste("graph_ally_", years[i],sep=""),
df_ally %>%
filter(year == years[i]) %>%
rename(from = stateA_n, to = stateB_n) %>%
as_tbl_graph(directed = T)
)
}
##########################################################
#1. 分析手法 #
##########################################################
library(broom) #回帰分析を表に
#robust標準誤差
library(estimatr)
model <- lm_robust(rata ~ dtreat*time + as.factor(year),
clusters = id,
data = df)
iv_robust(new_empinxavg ~ EV | l2CPcol2,
data = df,
subset = year >= 1987,
fixed_effects = ~ year + ccode,
clusters = ccode) %>%
tidy(conf.int = TRUE)
#RDD estimate
library(rdd)
RDestimate(y~x, data = df, bw = "バンド幅", kernel = "rectangular")
#RDDの図
df %>%
filter(between(IVibrd.sc, -0.2, 0.2)) %>%
mutate(treatment = if_else(IVibrd.sc > 0, "treated", "controlled")) %>%
ggplot(aes(x = IVibrd.sc, y = diff_fh_polity2, colour = treatment)) +
geom_point() +
geom_smooth(se = FALSE)
ggsave("figures/Carnegie.png")
#IV regression(操作変数法)
library(AER)
ivreg(y ~ x + a + b + c | z + a + b + c,
data = df, subset = year >= 1987)
#robustなら
iv_robust(new_empinxavg ~ EV | l2CPcol2,
data = df,
subset = year >= 1987,
fixed_effects = ~ year + ccode,
clusters = ccode) %>%
tidy(conf.int = TRUE)
#Causal Impact
library(CausalImpact)
#dfは一列目が必ずresponse variable
#pre.periodはdfがzooでは無い場合に、行番号で入力するのでyear列は不要
#なので一列目がresponse variable 2列目以降がcovariatesとなる。
impact <- CausalImpact(df, pre.period = c(6, 15), post.period = c(16, 43))
#Causal Impactの図
plot(impact)
#fixed effect model (固定効果モデル)
library(plm)
#pooling model (プーリングモデル)
plm(new_empinxavg ~ EV, data = df,
model = "pooling")
#inidividual fixed model (主体固定効果モデル)
plm(new_empinxavg ~ EV, data = df,
effect = "individual",
model = "within",
index = c("ccode", "year"))
#two-way fixed model (二元固定モデル)
plm(new_empinxavg ~ EV, data = df,
effect = "twoway",
model = "within",
index = c("ccode", "year"))
#独立変数が二項分布(binomial distribution)に従う回帰モデル
glm(y ~ x1 + x2,
family = binomial(),
data = df) %>%
tidy()
#信頼区間のプロット
glm(y ~ x1 + x2,
family = binomial(),
data = df) %>%
tidy(conf.int = TRUE) %>%
filter(term != "(Intercept)") %>%
ggplot() +
geom_pointrange(aes(x = estimate, y = erm= conf.low, xmax = conf.high))+
geom_hline(aes(yintercept = 0), linetype = "dashed")
#ベイズモデル
library(brms)
model <- brm(Outcome ~ Democracy + Military_Personnel + Iron_Steel + Initiator,
family = binomial(),
data = df)
#ベイズプロット
plot(model)
#交差項を用いたモデル
#交差項を入れたときは、解釈を誤りやすいので必ずプロットする!
#縦軸が処置効果
#横軸がモデレーター
library(interplot)
model <- lm(totApprov ~ treatment*ideology,
data = df_audience)
interplot(model, var1 = "treatment", var2 = "ideology") +
geom_hline(aes(yintercept = 0), linetype = "dashed") +
labs(x = "Ideology", y = "Conditional Effect")
#さらに細かい情報を足す(interplotの上位互換)
interflex(Y = "totApprov", D = "treatment", X = "ideology",
estimator = "binning", nbins = 4, data = df_audience %>% as.data.frame())
#ブートストラップを使ったより詳細なitnerplot
interflex(Y = "totApprov", D = "treatment", X = "ideology",
estimator = "kernel", data = df_audience %>% as.data.frame())
#限界効果モデルの作成(モデルは普通に作ってmargins()に引数として渡す)
library(margins)
model <- glm(Outcome ~ Democracy + Military_Personnel + Iron_Steel,
family = binomial,
data = df_victory)
model %>%
margins() %>%
summary()
#予測値のプロット(限界効果)
model %>%
cplot("Democracy", draw = FALSE) %>%
ggplot() +
geom_line(aes(x = xvals, y = yvals)) +
geom_ribbon(aes(x = xvals, ymin = lower, ymax = upper), alpha = 0.3)
#対数logを用いたモデル
#政治学の分野では、変数分布がきもかったら対数変換することがおおいっぽい
df_eu_aid %>% #対数分布のプロット(ゆがんだ分布を対数を取ることで治せる)
ggplot() +
geom_histogram(aes(x = exp(EV))) +
scale_x_log10()
#causal forestモデル
library(grf)
#まず予測モデルを作成
#yに結果変数、wにトリートメント変数、xに共変量を渡す
tau.forest <- causal_forest(Y = df_audience %>%
pull(totApprov),
W = df_audience %>%
pull(treatment),
X = df_audience %>%
dplyr::select(gender, education, hispanic, ideology, income, age),
tune.parameters = "all",
num.trees = 50000)
#randam forestのATEを求める
average_treatment_effect(tau.forest, target.sample = "all")
#randam forestの結果の分布を確認する
tibble(tau = tau.forest$predictions) %>%
ggplot() +
geom_histogram(aes(x = tau))
# ggsave("figures/hte_distribution.png")
#random forestの中で最も当てはまりのよかったモデルの結果を見る
best_linear_projection(tau.forest,
df_audience %>%
dplyr::select(gender, education, hispanic, ideology, income, age))
#モデレータのみが変動するデータを作成
X.test <- tibble(gender = median(df_audience$gender),
education = median(df_audience$education),
hispanic = median(df_audience$hispanic),
ideology = median(df_audience$ideology),
income = median(df_audience$income),
age = 10:70)
#作成したテストデータでどのように変動するかを予測
tau.hat <- predict(tau.forest, X.test, estimate.variance = TRUE)
#分散を作成
sigma.hat <- sqrt(tau.hat$variance.estimates)
#予測値、信頼区間を作成し、プロット
tibble(tau = tau.hat$predictions,
conf.low = tau.hat$predictions - 1.96 * sigma.hat,
conf.high = tau.hat$predictions + 1.96 * sigma.hat,
moderator = 10:70) %>%
ggplot() +
geom_line(aes(x = moderator, y = tau)) +
geom_ribbon(aes(x = moderator, ymin = conf.low, ymax = conf.high), alpha = 0.3) +
geom_hline(aes(yintercept = 0), linetype = "dashed")
# ggsave("figures/causal_forest.png")
#logisticモデル ロジスティックモデル
library(tidymodels)#機械学習(caretも機械学習用)
model <- logistic_reg() %>% #logistic回帰する機械学習
set_engine("glm") %>% #計算モデルは?
set_mode("classification") %>% #回帰か分類か
fit(outcome ~ ., #.は目的変数以外の全変数を指す
data = df_power)#モデル式
#予測値と実地の比較
res <- tibble(outcome = df_power$outcome,#実際のカテゴリ
predict(model, df_power),#予測したカテゴリ
predict(model, df_power, type = "prob")[,1])#1になる確率
#的中率を計算
res %>%
accuracy(outcome, .pred_class)
res %>%
conf_mat(outcome, .pred_class)#混同行列(confusion matrix)を求める
#ラベルが偏っている場合には、求める正確性は高くなる
#モザイクプロット
res %>%
conf_mat(outcome, .pred_class) %>%
autoplot()
#マシューズ相関係数
res %>%
mcc(outcome, .pred_class)
#decison tree(決定木モデル)
model <- decision_tree() %>%
set_engine("rpart") %>%
set_mode("classification") %>%
fit(outcome ~ .,
data = df_power)
#png("figures/decision_tree.png")
rpart.plot::rpart.plot(model$fit)
#dev.off()
model <- rand_forest() %>% #ランダムフォレスト
set_engine("ranger") %>%
set_mode("classification") %>%
fit(outcome ~ .,
data = df_power)
res <- tibble(outcome = df_power$outcome,
predict(model, df_power),
predict(model, df_power, type = "prob")[,1])
res %>%
accuracy(outcome, .pred_class)
res %>%
conf_mat(outcome, .pred_class)
res %>%
mcc(outcome, .pred_class)#マシューズ相関係数
df_split <- initial_split(df_power, 0.8)
df_train <- training(df_split)
df_test <- testing(df_split)
model <- rand_forest() %>%
set_engine("ranger") %>%
set_mode("classification") %>%
fit(outcome ~ .,
data = df_train)
res <- tibble(outcome = df_test$outcome,
predict(model, df_test),
predict(model, df_test, type = "prob")[,1])
res %>%
accuracy(outcome, .pred_class)
res %>%
conf_mat(outcome, .pred_class)
res %>%
mcc(outcome, .pred_class)
res %>%
roc_curve(outcome, .pred_1) %>%
ggplot(aes(x = 1 - specificity, y = sensitivity)) +
geom_path() +
geom_abline(lty = 3)
ggsave("figures/power_roc.png")
#read_csv("data/UNVotes.csv") %>%
# filter(year == 2018) %>%
# write_csv("data/data_vote.csv")
df_vote <- read_csv("data/UNVotes.csv") %>%
filter(year == 2018) %>%
dplyr::select(Country, unres, vote) %>%
pivot_wider(Country, names_from = "unres", values_from = "vote")
rc_vote <- df_vote %>%
dplyr::select(-Country) %>%
as.matrix() %>%
rollcall(yea = 1, nay = 3, missing = c(2, 8),
legis.names = df_vote$Country)
ipoint <- ideal(rc_vote)
df_ideal <- ipoint$xbar %>%
as.data.frame() %>%
mutate(name = df_vote$Country)
df_ideal %>%
ggplot() +
geom_density(aes(x = D1))
ggsave("figures/distribution_idealpoint.png")#イデオロギー分布
df_ideal %>%
ggplot() +
geom_text(aes(x = D1, y = 0, label = name),
position = position_jitter())
ggsave("figures/country_idealpoint.png") #横軸イデオロギー
# read_excel("data/p5v2018.xls", na = c("-66", "-77", "-88")) %>%
# filter(year == max(year)) %>%
# drop_na(parcomp, parreg, xrcomp, xropen, xconst) %>%
# write_csv("data/data_polity.csv")
df_polity <- read_excel("data/p5v2018.xls", na = c("-66", "-77", "-88")) %>%
filter(year == 2018) %>%
drop_na(parcomp, parreg, xrcomp, xropen, xconst)%>%
write.csv("data/data_polity.csv")
df_polity <- read_csv("data/data_polity.csv") %>%
mutate(parcomp = case_when(parcomp == 5 ~ 6,
parcomp == 4 ~ 5,
parcomp == 3 ~ 4,
parcomp == 2 ~ 2,
parcomp == 1 ~ 1,
parcomp == 0 ~ 3),
parreg = case_when(parreg == 5 ~ 3,
parreg == 4 ~ 3,
parreg == 3 ~ 2,
parreg == 2 ~ 1,
parreg == 1 ~ 3),
xrcomp = case_when(xrcomp == 3 ~ 4,
xrcomp == 2 ~ 3,
xrcomp == 1 ~ 1,
xrcomp == 0 ~ 2),
xropen = case_when(xropen == 4 ~ 6,
xropen == 3 ~ 5,
xropen == 2 ~ 2,
xropen == 1 ~ 1,
xropen == 0 ~ 4,
xropen == 4 ~ 3))
pca <- princomp(~ parcomp + parreg + xrcomp + xropen + xconst, data = df_polity)
summary(pca)
df_polity <- df_polity %>%
mutate(comp1 = pca$scores[,1],
comp2 = pca$scores[,2])
df_polity %>%
count(comp1, comp2, polity) %>%
filter(n != 0) %>%
ggplot() +
geom_point(aes(x = comp1, y = comp2, size = n, colour = polity))
ggsave("figures/polity5_pca.png")
loadings(pca)
kclust <- df_polity %>%
dplyr::select(parcomp, parreg, xrcomp, xropen, xconst) %>%
kmeans(center = 5)
df_polity %>%
mutate(clust = kclust$cluster) %>%
count(democ, autoc, clust) %>%
ggplot() +
geom_jitter(aes(x = democ, y = autoc, size = n, colour = as.factor(clust)))
# ggsave("figures/polity5_kmeans.png")
mix <- df_ideal %>% #混合ガウス分布は、k-meansの確率版
dplyr::select(D1) %>%
Mclust()
df_ideal %>%
mutate(group = mix$classification) %>%
ggplot() +
geom_text(aes(x = D1, y = 0, label = name, colour = as.factor(group)),
position = position_jitter())
ggsave("figures/vote_mixture.png")
#変数を正規表現で一括削除
rm(list=ls(pattern="model_.*"))
#global
assign(a, b, envir = .GlobalEnv)
library(tidyverse)
## install rtweet from CRAN
install.packages("rtweet")
install.packages("tidyverse")
## load rtweet package
path.package("rtweet")
find.package("ggplot2")
library(rtweet)
##################
#時系列変換関数
#列に年度が格納されているデータをプロットできる形式に変換する関数を作成
#dfにはもともとの形のデータフレーム,
#observationに国など、列に年度、valueとして価格などデータをもっている形
#spanには使用する年度を格納する。
#seq(2008,2019, by = 1)など
##################################################################
to_tseries <- function(df, span){
#統合用に一国分の時系列データ枠を作成
timedf <- data.frame(Time = span,
Country = df[1,1],
Price = NA)
for (i in 1:nrow(df)){
#i国の時系列データ枠を作成
a <- data.frame(Time = span,
Country = df[i,1],
Price = NA)
#jこの時系列情報を格納
for (j in 1:length(span)){
a[j,3] <- df[i,j+1]
}
#国の情報を統合
timedf <- rbind(timedf,a)
}
#最初に統合用に使った部分を削除
timedf <- slice(timedf, -c(1:length(span)))
#xts(timedf,order.by = timedf$Time) %>%
return(timedf)
}
##### dataframe manipulation (データフレーム操作) ####
#特定列の抽出
x <- df %>%
dplyr::select("列名1","列名2")
#wider dataframe (データフレームを横長にする)
x <- df %>%
pivot_wider(names_from = "新しく列にする列名", values_from = "動かしたい値が入っている列名")
#longer dataframe(データフレームを縦長にする)
#colsには、動かしたい列名を入れる(ただし、動かしたくない列を-で指定したほうが楽なことも多い。)
#names_toは、動かした列名を束ねる列名を入力する。
#たとえば、列名が年だった場合には、names_to = "year"と指定するとよい。
#values_toは、動かしたい値を束ねる列名を入力する。
#たとえば、gdpなど
x <- df %>%
pivot_longer(cols = -regionname, names_to = "year", values_to = "gdpcap")
#左側(右側にデータを結合する/mergeの特殊系)
df <- leftjoin(x,y, by = "year")
#日付・時間・時系列を文字列から時間変数に。
library(lubridate)
fas_body_agg <- fas_body_agg %>%
mutate(year = lubridate::year(created_at)) %>%
mutate(month = lubridate::month(created_at)) %>%
mutate(day = lubridate::day(created_at))
#データフレーム内の検索と置換(置換はgsub)
df <- mutate(df,列名=gsub(列名, pattern="検索する文字列",
replacement = "置き換える文字列",
ignore.case = TRUE))
#データフレーム内の検索と抽出(抽出はgrep)
df <- df[grep(pattern = "正規表現",
x = "列名(文字列ベクトル)",
ignore.case = FALSE, #(大文字を区別),
value = FALSE),] #Falseならベクトルの番号を、Trueなら値を返す
#csv一括読み込み
csvlist <- list.files(path = "C:/Users/yuhij/OneDrive/デスクトップ/論文関係/自学/OBR/", pattern = "result", full.names = TRUE)
res_tbl <- sapply(csvlist, read.csv, simplify = FALSE) %>%
bind_cols() %>%
data.frame()
#行削除
df[,-c(2,5)]
#列削除
df[-c(2,5),]
#データフレームに列を挿入
mutate(df, col_name = func)
#または
df$colname <- func
#NAを含む列番号をdfから取得
na_index <- which(is.na(df$col))
#na_indexを利用してNAを含む列を削除
df <- df[-na_index,]
#na_indexを利用してNAをmedianに置き換え
df$col[na_index] <- median(df$col, na.rm = TRUE)
#重複行の削除
df %>%
distinct(列名:複数OK&cでくくる必要なし)
#データの統合(merge)
#innerはAかつB、outerはAまたはB、rightはdf1に合わせる、leftはdf2に合わせる
merge(df1, df2, join = "inner|outer|right|left")
#コンソールにすべてのデータを表示
df %>%
select(列名) %>%
tibble(options('tibble.print_max' = 1000))
#######################################################
#ランダムサンプリング
# Set seed of 567
set.seed(567)
# Store row numbers randomly (2/3) : index_random
index_random <- sample(1:nrow(df), 2 / 3 * nrow(df))
# Create training set: training_set
random_selected <- df[index_random, ]
#######################################################
#データフレームの並び替え
df[order(df$prob, decreasing=T),]
#データフレームからvectorを作る(selectだとtibbleになる)
df %>% pull(変数)
#相関関係を図で一覧する
pairs(df)
#ロジット回帰分析(1説明変数)
# Build a glm(general liner model) model with variable ir_cat as a predictor
log_model <- glm(explained_col ~ explanatory_col, family = binomial(link = "logit"|"probit"|"cloglog"), data = df)
log_model %>%
summary()
#ロジット回帰分析(多説明変数)
log_model <- glm(explained_col ~ explanatory_col1 + explaatory_col2, family = "binomial", data = df)
log_model %>%
summary()
#ロジット回帰分析に基づく予測
# Build the logistic regression model
#log_modelを作成したデータに基づき、newdataに入れたデータの予測を行う
predictions_all_small <- predict(log_model, newdata = optional, type = "response")
#左右15%の除去
ifelse(predictions_all_small > 0.15, 1, 0)
#time series ####################################################
#時系列データを作成(xtsは時間情報がIndexとなっている)
library(xts)
matrix <- as.xts(df, order.by = as.Date(df$col,"%d/%m/%Y"))
#リストの場合
matrix <- as.xts(list, order.by = Index)
#特定の時間を時間として認識
As.Date()
#特定の時間を抽出
#2016/01 ~ 2016/03/12
time <- x["2016-01/2016-03-12"]
#2016 am 10:00 ~ 11:00
time <- irreg("T10:00/T11:00")
matrix[time]
#naを最も近い時間(前)データの値で置き換える
xts_matrix <- na.locf(xts_matrix)
#naを最も近い時間(前)データの値で置き換える
xts_matrix <- na.locf(xts_matrix, fromLast = TRUE)
#naを欠損する前と後の時間の平均となるように置き換える
xts_matrix <- na.approx(xts_matrix)
#データベースからフィルタリングして抽出
filter(df, 条件)
#周期を取得
periodicity(xts)
#周期を変更
xts <- to.period(xts, period = "months", OHLC = FALSE, indexAt = "firstof")
#年月日の合計数を表示
nmonths(xts)
#日付の書き方
"20160622/20180611"
#ラグ処理(1周期遅らせる場合)
lag(xts, k = 1)
#xts plot 時系列プロット
#特定の列をプロット
plot.xts(flights_xts$total_flights)
#複数列(前列)をプロット(分割か一緒か)
plot.zoo(flights_xts, plot.type = "multiple|single", lty = lty)
legend("right", lty = lty, legend = labels)
#複数列(特定列)をプロット
plot.zoo(x = xts[ , c("___", "___", "___")])
#時間を比較するため、2つの図を縦に並べてプロット
par(mfrow = c(2,1))
plot.xts()
plot.xts()
#時系列で出力(Csv)
write.zoo(xts, file = ".csv", sep = ",")
#ランク付け
df$rank <- NA
for (i in unique(df$Year)) {
df$rank[df$Year == i] <- rank(df$Value[df$Year == i])
}
##########################################
#ggplot
##########################################
#基本構文(data spaceを作成)
ggplot(data = df, aes(y = explained, x = explanatory, color = "red")) +
#点をプロット
geom_point() +
#点をずらして表示
geom_jitter(height = 0.05, width = 0, alpha = 0.5) +
#直線回帰線をプロット
geom_smooth(method = "lm", se = FALSE) +
#Logistic 回帰線をプロット
geom_smooth(method = "glm", se = FALSE, method.arg = list(family = "binomial"))
#相関図を全変数作成
library(GGally)
my_fn <- function(data, mapping, method="p", use="pairwise", ...){
# grab data
x <- eval_data_col(data, mapping$x)
y <- eval_data_col(data, mapping$y)
# calculate correlation
corr <- cor(x, y, method=method, use=use)
# calculate colour based on correlation value
# Here I have set a correlation of minus one to blue,
# zero to white, and one to red
# Change this to suit: possibly extend to add as an argument of `my_fn`
colFn <- colorRampPalette(c("blue", "white", "red"), interpolate ='spline')
fill <- colFn(100)[findInterval(corr, seq(-1, 1, length=100))]
ggally_cor(data = data, mapping = mapping, ...) +
theme_void() +
theme(panel.background = element_rect(fill=fill))
}
variables %>%
ggpairs(upper = list(continuous = my_fn), lower = list(continuous = "smooth"))
#よく使うテンプレ
#factorの順番を任意に並び替える(デフォルトはアルファベット)
df_compare$Label <- factor(df_compare$Label, levels = c("Houston","Chicago","Texas","Illinois","Nation"))
sumt %>%
filter(TIME >=2004) %>%
ggplot(aes(x=TIME, y = VRE_SHARE))+
facet_wrap(.~GEO) +
geom_line()+
theme_classic() + #かっこよくする(背景白)
geom_vline(xintercept = c(2008),linetype = "dashed") +#垂直線を追加
scale_x_continuous(breaks = seq(2004,2019,by=2),"Year") +
theme(axis.text.x=element_text(angle = -60, hjust=0, vjust = 0))+
scale_fill_discrete(labels=c("MINOR","WAR"))+ #レジェンドの名前を変更
scale_colour_discrete(limits = c("farright", "other populist", "farleft")) #レジェンドの表示順を変
theme(axis.text.x=element_blank())+ #x軸の目盛り消す
scale_x_discrete(labels =c("単純小選挙区","絶対多数","完全連記","Party Block Vote","小選挙区比例代表並立A","小選挙区比例代表並立B","比例代表(7人未満)", "比例代表(7人以上)", "選好投票","非選好投票","制限投票","ボルダ方式"))+
ggtitle("aaaa") #タイトル
guides(fill = FALSE) #レジェンドをけす
labs(x=attr(V8_Scale, "label"), #x軸,y軸,レジェンドの変更
y=attr(V16, "label"),
colour=attr(V4_Scale, "label"))
scale_color_discrete(labels=c("95%","90%"))+ #判例のラベルを変更
scale_fill_manual(values = Colours) #色付け
ggsave("VRE_Share_all.png")
#動くラインプロット
df %>%
filter(Label=="Reported") %>%
ggplot(aes(x=Year, y=Value, colour = id)) +
#facet_wrap(.~id,ncol = 3) +
geom_line() +
theme_classic() + #かっこよくする(背景白)
ggtitle("各警察管轄の犯罪数")+
transition_reveal(Year)
#動くタイルプロット
df %>%
ggplot(aes(x = rank, group = id)) +
geom_tile(aes(y = Value/2,
height = Value,
fill = id,
width = 0.9)) +
geom_text(aes(y = 0, label = paste(id, " ")), vjust = -1, hjust = -0.1) +
geom_text(aes(y = Value, label = paste0(" ", Value), vjust = 1, hjust = 0)) +
scale_x_reverse() +
coord_flip() +
theme_light()+
transition_states(Year)
################################################################
#データ収集(e-statのAPIを使用)
################################################################
library(keyring)
library(httr)
library(listviewer)
library(rlist)
keyring::key_set("e-stat") #ここにApplication IDを入力
########################################################
#どんなデータベースがあるのかざっと見る
########################################################
response <- GET(
url = "https://api.e-stat.go.jp/rest/3.0/app/json/getStatsList",
query = list(
appId = keyring::key_get("e-stat"), #ここにID入力
searchWord = "犯罪統計 AND 刑法犯" #検索したいワードを入力
)
)
res_content <- content(response)
jsonedit(res_content) #中身の確認
res_content$GET_STATS_LIST$DATALIST_INF$TABLE_INF %>%
list.select(id = `@id`,
table_name = TITLE_SPEC$TABLE_NAME
) %>%
list.stack() #listをdataframe形式で出力
########################################################
#調べた中からおもしろそうなものを実際に取得
########################################################
response <- GET(
url = "https://api.e-stat.go.jp/rest/3.0/app/getSimpleStatsData",
query = list(
appId = keyring::key_get("e-stat"),
statsDataId = "0003191320" #欲しい統計表に対応するIDを入力
)
)
response
#csvとして読み込み
res_content <- content(response) %>%
read.csv(text = sub('(?s).*"VALUE"\n', "", res_content, perl = TRUE))