【R】RMarkdownでPython
2020年5月31日
こちらでも触れましたが、RMarkdown
にてPython
を扱えます。実際にやってみます。RMarkdown
でPython engine
を使う方法に関してはこちらのページを参考にしました。
環境省の熱中症予防情報サイトには、場所(基準,駐車場, 交差点, バス停, 住宅地, 子供, ビニールハウス, 体育館)ごとの温度と予測が表示されます。地点も選択することができます。府中の情報をとってきて、プロットしてみます。Python
にてWebサイトをスクレイピングして、そのデータをR
に渡してggplot
にて表示します。スクレイピングは、こちらのサイトを参考にさせていただきました。
RMarkdown
のコードは次の通り。
--- title: "R Markdown Python Engine" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(reticulate) ``` ```{python, include=FALSE} import requests, bs4 temp = [] for x in range(1, 9): url = "res" + str(x) url = requests.get('https://www.wbgt.env.go.jp/graph_ref_td.php?region=03&prefecture=44&point=44116&refId='+str(x)) soup = "soup" + str(x) soup = bs4.BeautifulSoup(url.text, "html.parser") elems = "elems" + str(x) elems = soup.select('span.num') number = "number" + str(x) number = elems[0].getText() temp.append(number[0:4]) ``` ```{r} library(ggplot2) df <- data.frame(x=c("基準", "駐車場", "交差点", "バス停", "住宅地", "子供", "ビニールハウス", "体育館"), y=as.numeric(py$temp)) ggplot(df, aes(x, y)) + geom_point() + ylim(min(as.numeric(py$temp))-2, max(as.numeric(py$temp))+2) + labs(title = paste("暑さ指数_as_of:", Sys.Date()), x="場所", y="気温_度") ```
次のように表示されます。
R Markdown Python Engine
library(ggplot2)
df <- data.frame(x=c("基準", "駐車場", "交差点", "バス停", "住宅地", "子供", "ビニールハウス", "体育館"), y=as.numeric(py$temp))
ggplot(df, aes(x, y)) +
geom_point() +
ylim(min(as.numeric(py$temp))-2, max(as.numeric(py$temp))+2) +
labs(title = paste("暑さ指数_as_of:", Sys.Date()), x="場所", y="気温_度")
別にPython
を使わなくても、R
だけで事足りるのですが。。。