(自分のPCまたは教室のPCに)ログイン
ウェッブ・ブラウザー(Google Chrome など)を起動
(別のタブまたは ウィンドウで)PositCloud にログイン[Posit.cloud]
アカウントのない人はサイン・アップ [共有プロジェクト] から、Save a Permanent Copy)
RStudio を自分のコンピュータにインストールしている人は起動
リンクの右上の Raw ボタンの右の Copy a raw file からコピーして演習用 R Markdown ファイルを作成(あとで再度解説します)[Rmd]
Posit Cloud のときは、まず、Login し、intro2rj のプロジェクトに入り、 ファイルから、ges001 のフォルダーを選択して、移動します。この中に、data フォルダが作成されていることを確認し、このges001 に、新しく作成したファイルを保存します。新しく作成したファイルの入っているフォルダーの中に、data フォルダがあることが大切です。そこに、データを書き込みます。
RStudio の場合には、まずは、あたらしい Project を作成します。File > New Project から作成します。すでに、作成してある場合は、それを、Open Project や、Recent Project から開きます。その中に、新しいファイルを作成します。作成したフォルダーに、data フォルダがあることを確認してください。新しく作成したファイルの入っているフォルダーの中に、data フォルダがあることが大切です。そこに、データを書き込みます。
RStudio の場合には、自分の PC に作成したファイルがありますから、問題ないと思いますが、Posit Cloud で作成した場合には、提出したいファイルの左にあるチェックボックスをチェックします。Files の 右端にある、ギアマークの Export を押すと、ダウンロードできます。それを提出してください。末尾が、nb.html となっているものを提出していただくのがよいですが、よくわからないときは、nb.html ファイルと、Rmd ファイルと両方提出してください、
02/01(TH) 気候変動に対する対策
気候変動と貧困の連鎖
第7週は、南部アフリカや南アジアなど気候変動から大きな影響を受けている国々の現状を取り上げます。
02/06 (TU) Rでデータサイエンス7:都市部と農村部の生活状況の格差 [Main]・[授業]
Urban and rural development
Access to electricity, urban (% of urban population):EG.ELC.ACCS.UR.ZS [Link]
Access to electricity, rural (% of rural population):EG.ELC.ACCS.RU.ZS [Link]
People using at least basic drinking water services, urban (% of urban population):SH.H2O.BASW.UR.ZS [Link]
People using at least basic sanitation services, rural (% of rural population):SH.STA.BASS.RU.ZS [Link]
People using at least basic sanitation services, urban (% of urban population):SH.STA.BASS.UR.ZS [Link]
People using at least basic drinking water services, rural (% of rural population):SH.H2O.BASW.RU.ZS [Link]
library(tidyverse); library(WDI)
df_w6eda <- WDI(indicator = c(co2pcap = "EN.ATM.CO2E.PC", forest = "AG.LND.FRST.ZS"), extra = TRUE)
co2pcap
,
forest
extra = TRUE
; region
地域情報,
income
収入レベル行の選択:filter(country %in% c("Japan", "China")
,
distinct(country)
, drop_na(value)
列の選択:select(country, iso2c, year, var1, var2, region)
横並びの変数を縦並びに:name 列と、value 列を作り、var_1, var_2, … , var_n を name 列に、対応する値を value 列に
pivot_longer(cols = c(var_1, var_2, ... , var_n))
pivot_longer(cols = c(female_unemploy, male_unemploy))
pivot_longer(cols = c(electricity_urban, electricity_rural))
pivot_longer(cols = electricity_urban:sanitation_rural))
活用:pivot_longer(cols = c(var1, var2))|> ggplot(aes(year, value, col = name) + geom_line()
カテゴリ変数(country, region, income など)毎の分布を描く
ggplot(aes(categorical_var, numerical_var)) + geom_boxplot()
ggplot(aes(region, electricity_urban)) + geom_boxplot()
ggplot(aes(income, electricity_rural)) + geom_boxplot()
pivot_longer(cols = c(var1, var2)) |> ggplot(aes(name, value)) + geom_boxplot()
year は、整数なので数値変数(numerical variable)。これを
カテゴリー変数として扱うためには、factor(yea
r)
を使う。x
軸のラベルなどはあとから修正が必要。
filter(year %in% c(1960,1990,2020))|> ggplot(aes(factor(year), var)) + geom_boxplot()
Access to electricity, urban (% of urban population):EG.ELC.ACCS.UR.ZS [Link]
Access to electricity, rural (% of rural population):EG.ELC.ACCS.RU.ZS [Link]
People using at least basic drinking water services, urban (% of urban population):SH.H2O.BASW.UR.ZS [Link]
People using at least basic drinking water services, rural (% of rural population):SH.H2O.BASW.RU.ZS [Link]
People using at least basic sanitation services, urban (% of urban population):SH.STA.BASS.UR.ZS [Link]
People using at least basic sanitation services, rural (% of rural population):SH.STA.BASS.RU.ZS [Link]
library(tidyverse)
library(WDI)
df_service <- WDI(
indicator = c(electricity_urban = "EG.ELC.ACCS.UR.ZS",
electricity_rural = "EG.ELC.ACCS.RU.ZS",
water_urban = "SH.H2O.BASW.UR.ZS",
water_rural = "SH.H2O.BASW.RU.ZS",
sanitation_urban = "SH.STA.BASS.UR.ZS",
sanitation_rural = "SH.STA.BASS.RU.ZS"
), extra = TRUE)
write_csv(df_service, "data/service.csv")
df_service <- read_csv("data/service.csv")
Rows: 16758 Columns: 18── Column specification ─────────────────────────────────────────────────────────────────
Delimiter: ","
chr (7): country, iso2c, iso3c, region, capital, income, lending
dbl (9): year, electricity_urban, electricity_rural, water_urban, water_rural, sanit...
lgl (1): status
date (1): lastupdated
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_service
str(df_service)
spc_tbl_ [16,758 × 18] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ country : chr [1:16758] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
$ iso2c : chr [1:16758] "AF" "AF" "AF" "AF" ...
$ iso3c : chr [1:16758] "AFG" "AFG" "AFG" "AFG" ...
$ year : num [1:16758] 2014 1971 2006 2013 1995 ...
$ status : logi [1:16758] NA NA NA NA NA NA ...
$ lastupdated : Date[1:16758], format: "2023-12-18" "2023-12-18" ...
$ electricity_urban: num [1:16758] 98.7 NA 81.6 92.2 NA ...
$ electricity_rural: num [1:16758] 86.5 NA 19.3 60.2 NA ...
$ water_urban : num [1:16758] 82.1 NA 64.3 79.9 NA ...
$ water_rural : num [1:16758] 52.2 NA 30.9 49.4 NA ...
$ sanitation_urban : num [1:16758] 54.4 NA 38.5 52.3 NA ...
$ sanitation_rural : num [1:16758] 38.3 NA 25.9 36.8 NA ...
$ region : chr [1:16758] "South Asia" "South Asia" "South Asia" "South Asia" ...
$ capital : chr [1:16758] "Kabul" "Kabul" "Kabul" "Kabul" ...
$ longitude : num [1:16758] 69.2 69.2 69.2 69.2 69.2 ...
$ latitude : num [1:16758] 34.5 34.5 34.5 34.5 34.5 ...
$ income : chr [1:16758] "Low income" "Low income" "Low income" "Low income" ...
$ lending : chr [1:16758] "IDA" "IDA" "IDA" "IDA" ...
- attr(*, "spec")=
.. cols(
.. country = col_character(),
.. iso2c = col_character(),
.. iso3c = col_character(),
.. year = col_double(),
.. status = col_logical(),
.. lastupdated = col_date(format = ""),
.. electricity_urban = col_double(),
.. electricity_rural = col_double(),
.. water_urban = col_double(),
.. water_rural = col_double(),
.. sanitation_urban = col_double(),
.. sanitation_rural = col_double(),
.. region = col_character(),
.. capital = col_character(),
.. longitude = col_double(),
.. latitude = col_double(),
.. income = col_character(),
.. lending = col_character()
.. )
- attr(*, "problems")=<externalptr>
df_serv <- df_service |>
select(country, iso2c, year, electricity_urban:sanitation_rural, region, income)
df_serv
electricity_urban
の列から
sanitation_rural
の列までを、変数を name に、値を value
に入れて、縦に並べます。
df_serv_long <- df_serv |>
pivot_longer(electricity_urban:sanitation_rural)
df_serv_long
df_serv_long |> drop_na(value) |>
ggplot(aes(year)) + geom_bar()
fill
を col
に変えるとどうなるでしょうか。
df_serv_long |> drop_na(value) |>
ggplot(aes(year, fill = name)) + geom_bar()
気づいたこと、疑問
iso2c
コードcountry には、国と地域両方が入っています。地域の iso2c は以下のものです。
REGION <- c("1A", "1W", "4E", "6F", "6N", "6X", "7E", "8S", "A4", "A5",
"A9", "B1", "B2", "B3", "B4", "B6", "B7", "B8", "C4", "C5", "C6",
"C7", "C8", "C9", "D2", "D3", "D4", "D5", "D6", "D7", "EU", "F1",
"F6", "M1", "M2", "N6", "OE", "R6", "S1", "S2", "S3", "S4", "T2",
"T3", "T4", "T5", "T6", "T7", "V1", "V2", "V3", "V4", "XC", "XD",
"XE", "XF", "XG", "XH", "XI", "XJ", "XL", "XM", "XN", "XO", "XP",
"XQ", "XT", "XU", "XY", "Z4", "Z7", "ZB", "ZF", "ZG", "ZH", "ZI",
"ZJ", "ZQ", "ZT")
df_serv |> filter(iso2c %in% REGION) |> distinct(country, iso2c)
df_serv |> filter(!(iso2c %in% REGION)) |> distinct(country, iso2c,region,income)
ASEAN <- c("BN", "KH", "ID", "LA", "MY", "MM", "PH", "SG", "VN")
BRICS <- c("Brazil", "Russian Federation", "India", "China", "South Africa")
SACU <- c("South Africa", "Namibia", "Eswatini", "Botswana", "Lesotho")
CHOSEN_COUNTRIES <- c("Suriname", "Belize", "Brazil", "Colombia")
df_serv |> filter(!(iso2c %in% REGION)) |> # 地域以外(国のみ選択)
drop_na(electricity_urban:sanitation_rural) |>
select(electricity_urban:sanitation_rural) |> cor()
electricity_urban electricity_rural water_urban water_rural
electricity_urban 1.0000000 0.8314102 0.7628490 0.7248691
electricity_rural 0.8314102 1.0000000 0.7927840 0.8637606
water_urban 0.7628490 0.7927840 1.0000000 0.8391167
water_rural 0.7248691 0.8637606 0.8391167 1.0000000
sanitation_urban 0.7930134 0.8937821 0.7681716 0.8306062
sanitation_rural 0.7496970 0.8945593 0.7598583 0.8644760
sanitation_urban sanitation_rural
electricity_urban 0.7930134 0.7496970
electricity_rural 0.8937821 0.8945593
water_urban 0.7681716 0.7598583
water_rural 0.8306062 0.8644760
sanitation_urban 1.0000000 0.9196274
sanitation_rural 0.9196274 1.0000000
値の正負:正の相関・負の相関、1に近いと強い正の相関、-1に近いと強い負の相関
相関係数:散布図の近似(回帰)直線の傾きが正なら正、負なら負、直線に近い程、1 または-1 に近い
df_serv_long |> filter(country == "Japan") |> drop_na(value) |>
ggplot(aes(year, value, col = name)) + geom_line()
df_serv_long |> filter(country == "Japan") |> drop_na(value)
df_serv_long |> filter(iso2c %in% ASEAN) |> drop_na(value) |>
ggplot(aes(year, value, col = country, linetype = name)) + geom_line()
df_serv_long |> filter(iso2c %in% ASEAN) |> drop_na(value) |>
filter(value < 80) |>
ggplot(aes(year, value, col = country, linetype = name)) + geom_line()
df_serv_long |> filter(country %in% SACU) |> drop_na(value) |>
ggplot(aes(year, value, col = country, linetype = name)) + geom_line()
df_serv_long |> filter(name == "electricity_rural") |>
filter(region != "Aggregates") |> drop_na(value) |>
ggplot(aes(region, value)) + geom_boxplot() + coord_flip()
df_serv |> filter(region != "Aggregates") |> drop_na(electricity_rural) |>
ggplot(aes(region, electricity_rural)) + geom_boxplot() + coord_flip()
df_serv_long |> filter(name %in% c("electricity_rural", "electricity_urban")) |>
filter(income != "Aggregates") |> drop_na(value) |>
ggplot(aes(income, value, fill = name)) + geom_boxplot() + coord_flip()
df_serv_long |> filter(income != "Aggregates", income != "Not classified") |> drop_na(value) |>
ggplot(aes(income, value, fill = name)) + geom_boxplot() + coord_flip()
基本的には、PositCloud(https://posit.cloud/)を使って実習
2023.2.10.23:59 までに Moodle の課題2提出ボックスに提出してください。
できたグラフだけでも構いませんから、期限までに提出してください。解説を加え、課題2再提出ボックスを作成する予定です。
以下の指標の中から、二つ以上(複数)を選択して、データの概要(description)を記録し、データを WDI で取得し、以下の分析をする。
1 各年毎のデータの数の棒グラフ
2 経年変化を表す折れ線グラフ a. 日本、またはデータがある国 b. 選択したいくつかの国
3 複数の指標の値を一列に含む縦長の表(Long Table)を作成し a. 日本、またはデータがある国の、複数の指標を色分けした経年変化のグラフ b. 選択したいくつかの国についての経年変化のグラフを、国を色分けし、指標は線の種類を変えたグラフ
4 二つのデータの散布図- NA は取り除くこと。(log10 スケールを用いる場合は値が正のもののみに限定) a. (地域を除き)国のみの散布図 (近似(回帰)直線を表示) b. 最近の年の(地域を除き)国のみの散布図 (近似(回帰)直線を表示) c. b に対応する相関係数
5 カテゴリー変数(Categorical Variable: region, income, year など)と、数値変数(Numberical Variable)一組についての箱ヒゲ図(Boxplot)
それぞれについて考察(気づいたこと、疑問など)を記す
2023.2.10.23:59 までに Moodle の課題2提出ボックスに提出してください。
Preview で確認。
Web Browser で、w5_c123456.nb.html など、R Notebook を見て確認。
もし、問題があれば、Run ボタンの右の三角から、Run All を選択し、エラーがでないか確認。
最初にもどる。
「みんなのデータサイエンス - Data Science for All」[はじめてのデータサイエンス]
Posit Recipes(旧 Posit Primers): The Basics 対話型の演習サイトの最初 [Link]
Posit Cheat Sheet. 早見表です。印刷して使うために、PDF も提供しています。[Site Link]
DataCamp Cheat Sheet: Tidyverse for Biginners. データサイエンスの教育をしている会社の早見表の一つです。基本が簡単にまとまっています。[Link]