【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だけで事足りるのですが。。。