【R】RMarkdownでPython

こちらでも触れましたが、RMarkdownにてPythonを扱えます。実際にやってみます。RMarkdownPython 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だけで事足りるのですが。。。

Add a Comment

メールアドレスが公開されることはありません。