Slide 1

Slide 1 text

ϋυϦʔ͞Μɺ ਐ௙Ͳ͏Ͱ͔͢ ӝੜਅ໵!V@SJCP ! " 5PLZP3!4IJCVZB )BEMFZ&DPTZTUFN

Slide 2

Slide 2 text

ຊ೔ͷओ໾

Slide 3

Slide 3 text

Hadley Wickham はどりー うぃっかむ

Slide 4

Slide 4 text

# ୭ʁ

Slide 5

Slide 5 text

Hadley Wickham 34UVEJPνʔϑαΠΤϯςΟετ $ ΦʔΫϥϯυେֶʢχϡʔδʔϥϯυʣͷ ඇৗۈߨࢣ $ 3քͷϨδΣϯυ $ Ӌௗʢ೔ຊͰͷѪশʣ $ !

Slide 6

Slide 6 text

ʮ3Ͱ̏ԯԁʯ ʹ࠷΋͍ۙஉ

Slide 7

Slide 7 text

)BEMFZ&DPTZTUFN d Hadley Ecosystem: Reshape, Plyr, GGplot @Etienne https://speakerdeck.com/lowdecarie/hadley-ecosystem-reshape-plyr-ggplot

Slide 8

Slide 8 text

Hadley Ecosystem

Slide 9

Slide 9 text

σʔλαΠΤϯε σʔλऔಘ ΤϯδχΞϦϯά $ $ $

Slide 10

Slide 10 text

Fry to the Hadley World

Slide 11

Slide 11 text

άϥϑͷछྨʹԠͨ͡࡞ਤؔ਺ plot(x, y, ...) barplot(height, ...) boxplot(x, ...) hist(x, ...) pie(x, labels = names(x), ...) # ؔ਺ͷҾ਺͕ ଗ͓ͬͯΒͣɺ ֮͑ʹ͍͘ \HHQMPU^ύοέʔδ

Slide 12

Slide 12 text

άϥϑඳըͷͨΊͷจ๏ʹجͮ͘ϨΠϠʔͷߟ͑Λಋೖ library(ggplot2) ggplot(data, aes(x, y)) + geom_*() + xlab() + ylab() \HHQMPU^ύοέʔδ

Slide 13

Slide 13 text

άϥϑඳըͷͨΊͷจ๏ʹجͮ͘ϨΠϠʔͷߟ͑Λಋೖ library(ggplot2) ggplot(data, aes(x, y)) + geom_*() + xlab() + ylab() άϥϑʹ༻͍ΔཁૉΛࢦఆ BFT ΤεςςΟοΫ৹ඒతཁૉΛఆٛ͢Δؔ਺ Y Z [ ʜ ʜ ʜ \HHQMPU^ύοέʔδ

Slide 14

Slide 14 text

άϥϑඳըͷͨΊͷจ๏ʹجͮ͘ϨΠϠʔͷߟ͑Λಋೖ library(ggplot2) ggplot(data, aes(x, y)) + geom_*() + xlab() + ylab() ඳը͢ΔάϥϑͷछྨΛࢦఆ FYHFPN@QPJOU ʜࢄ෍ਤɺ HFPN@CBS ʜ๮άϥϑ \HHQMPU^ύοέʔδ

Slide 15

Slide 15 text

HFPN@Ͱ࢝·Δؔ਺Λදࣔ͢Δ ls("package:ggplot2") %>% grep("^geom_", ., value = TRUE) \HHQMPU^ύοέʔδ

Slide 16

Slide 16 text

άϥϑඳըͷͨΊͷจ๏ʹجͮ͘ϨΠϠʔͷߟ͑Λಋೖ library(ggplot2) ggplot(data, aes(x, y)) + geom_*() + xlab() + ylab() ඞཁͳཁૉΛϨΠϠʔͱͯ͠௥Ճ \HHQMPU^ύοέʔδ # ౷Ұ͞Εͨه๏ͱؔ਺ʹΑΓɺ άϥϑ࡞੒͕؆ܿʹ

Slide 17

Slide 17 text

3ඪ४ͷจࣈྻૢ࡞ؔ਺ͱ\TUSJOHJ^ύοέʔδ paste("ほく", "のうむ") # [1] "ほく のうむ" stringi::stri_c("ほく", "のうむ") # [1] "ほくのうむ" \TUSJOHS^ύοέʔδ # \TUSJOHS^͸*$6Λαϙʔτ͢Δ\TUSJOHJ^ͷ ϥούʔύοέʔδ

Slide 18

Slide 18 text

TUS@ ͱ͍͏ؔ਺໊ library(stringr) ls("package:stringr") %>% grep("^str_", ., value = TRUE) stringr::str_c("ほく", "のうむ") # [1] "ほくのうむ" \TUSJOHS^ύοέʔδ

Slide 19

Slide 19 text

library(stringi) stri_locale_list() %>% length() # [1] 683 stri_datetime_symbols() %>% names() # [1] "Month" "Weekday" "Quarter" "AmPm" "Era" stri_datetime_symbols(locale="ja_JP_TRADITIONAL")$Era %>% tail() # [1] "元治" "慶応" "明治" "大正" "昭和" "平成" \TUSJOHS^ύοέʔδ # ϩέʔϧɺϢχίʔυਖ਼نԽͳͲ͸ \TUSJOHJ^ύοέʔδͷؔ਺ͰରԠʂ

Slide 20

Slide 20 text

stri_trans_general("㈱ホクソエム", id = "nfkd") stri_trans_general("ת京", "Any-ch_FONIPA") stri_trans_general("Nippon", "es-ja") stri_trans_general("ת京", "Simplified-Traditional") \TUSJOHS^ύοέʔδ :PVS5VSO

Slide 21

Slide 21 text

stri_trans_general("㈱ホクソエム", id = "nfkd") # [1] "(株)ホクソエム" stri_trans_general("ת京", "Any-ch_FONIPA") # [1] "dōng jīng" stri_trans_general("Nippon", "es-ja") # [1] "ニッポン" stri_trans_general("ת京", "Simplified-Traditional") # [1] "東京" \TUSJOHS^ύοέʔδ

Slide 22

Slide 22 text

3Ͱ೔෇ɾ࣌ؒΦϒδΣΫτΛѻ͏ؔ਺ c("2016-04-30") %>% as.Date() # [1] "2016-04-30" Sys.Date() # [1] "2016-04-30" \MVCSJEBUF^ύοέʔδ # ϢʔβʔϑϨϯυϦʔͰͳ͍ؔ਺໊ͱ ࣌ܥྻσʔλΛѻ͏ύοέʔδͷ܈༤ׂڌʜ

Slide 23

Slide 23 text

library(lubridate) today() # [1] "2016-04-30" ymd("2016年4月30日", tz = "Asia/Tokyo") %>% month() # [1] 4 \MVCSJEBUF^ύοέʔδ λΠϜκʔϯ΍ϩέʔϧͷ มߋ͕ؔ਺಺Ͱ࣮ߦՄೳ

Slide 24

Slide 24 text

೔෇ɾ࣌ؒͷՃ޻ͱߏจղੳ today() + weeks(1) # [1] "2016-05-06" x <- dmy("30/04/2016") day(x) <- 26 x # [1] "2016-04-26" \MVCSJEBUF^ύοέʔδ # ௚ײతʹཧղ ͠΍͍ؔ͢਺໊ɻ ೔෇ɾ࣌ؒσʔλͷ ѻ͍ʹศརͳ ิॿؔ਺Λఏڙ

Slide 25

Slide 25 text

ศརͳิॿؔ਺܈ (time1 <- ymd_hms("2016-04-01 09:00:00", tz = "Asia/Tokyo")) # [1] "2016-04-01 09:00:00 JST" with_tz(time1, "America/New_York") # [1] "2016-03-31 20:00:00 EDT" \MVCSJEBUF^ύοέʔδ ࢦఆՄೳͳλΠϜκʔϯ͸0MTPO/BNFT Ͱ֬ೝ

Slide 26

Slide 26 text

(chl <- interval(ymd("1989年11月27日", tz = "Asia/Tokyo"), mdy("April 30, 2016", tz = "Asia/Tokyo"))) # [1] 1989-11-27 JST--2016-04-30 JST time1 %within% chl # [1] TRUE \MVCSJEBUF^ύοέʔδ

Slide 27

Slide 27 text

\SFBES^ύοέʔδ طଘͷදܗࣜϑΝΠϧಡΈࠐΈؔ਺ͷվྑ library(readr) read_csv(file, col_types = NULL, locale = default_locale()) # SFBEDTW DPM$MBTTFT Λجૅͱͨ͠ DPMMFDUPS ؔ਺ͷ੔උͱϩέʔϧରԠ

Slide 28

Slide 28 text

\SFBES^ύοέʔδ ܕ ؔ਺ লུ࣌ͷදه ࿦ཧܕ col_logical() l (logical) ੔਺ܕ col_integer() i (integer) ࣮਺ܕ col_double() d (double) จࣈྻܕ col_character c (character) ೔෇ܕʢ:NEදهʣ col_date(format) D (date) ೔࣌ܕʢ<*40>ʣ col_datetime(format, tz) T (time) ࣌ؒܕ col_time(format) ਺஋ܕ col_number() n ཁҼܕ col_factor(levels, ordered) ಡΈࠐΈର৅ͱ͠ͳ͍ col_skip() _, - collector()

Slide 29

Slide 29 text

read_csv("x,y,z\n1,2,a\n3,4,b", col_types = cols(x = "i", y = "c", z = "_")) \SFBES^ύοέʔδ Source: local data frame [2 x 2] x y 1 1 2 2 3 4 ม਺ͷܕ͸ೖྗͷઌ಄ߦ͔Β ࣗಈతʹਪଌ͞ΕΔ #

Slide 30

Slide 30 text

library(httr) GET(…) POST(…) library(rvest) xml2::read_html(x = …) %>% html_nodes(xpath = …) ΢Σϒσʔλऔಘ # IUUQϝιουʹରԠͨؔ͠਺܈ɻ ೝূɺIUUQϔομʔ౳ͷαϙʔτ IUNM YNMͲΜͱདྷ͍

Slide 31

Slide 31 text

3ύοέʔδ։ൃิॿ library(devtools) install_*(…) use_*(…) check(run_dont_test = FALSE, …) build(…) install(…) $3"/ϦϙδτϦ֎͔ΒͷύοέʔδΠϯετʔϧ ܧଓతΠϯςάϨʔγϣϯɺHJUϦϙδτϦʜΠϯϑϥ੔උ # \SPYZHFO^ \UFTUUIBU^ύοέʔδ ʹΑΔࣗಈυΩϡϝϯτੜ੒ɺ ςετ࣮ߦ

Slide 32

Slide 32 text

まさに "神業" ggmap::ggimage(hadley)

Slide 33

Slide 33 text

2014~ {dplyr}

Slide 34

Slide 34 text

\EQMZS^ύοέʔδ σʔλϑϨʔϜૢ࡞ʹಛԽʢલॲཧͷաఔɾ࡞ۀΛ੔ཧʣ $ Ճ޻طଘͷม਺Λݩʹ৽ͨͳม਺Λ௥Ճͨ͠Γɺ ม਺ͷ஋ʹमਖ਼ΛՃ͑Δ બ୒ม਺໊ͷมߋ΍ෆཁͳม਺ྻͷ࡟আ͢Δ நग़ಛఆͷج४ʹର͠ɺ৚݅ʹҰக͢Δ߲໨Λநग़͢Δ ूܭͦΕͧΕͷ߲໨ͷूܭ஋ΛٻΊΔ 3%#͔Βͷσʔλऔಘɾ42-ΫΤϦʔ࣮ߦ؀ڥ΋੔උ $

Slide 35

Slide 35 text

library(dplyr) data("Butterflies", package = "gpk") glimpse(Butterflies) \EQMZS^ύοέʔδ Πϯυࠃ಺ͷ͔̑ॴͰه࿥͞Εͨ௏ྨͷ෼෍σʔλ Observations: 44 Variables: 9 $ Serial_Number (int) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, ... $ Area (fctr) Indian Subcontinent, Western Himalaya, Western Himalaya, Western Himalaya, Western Himalaya, Western Himalaya, Western Himalaya, Western Himal... $ Locality (fctr) Indian Subcontinent, Western Himalaya, Kangra Hills, Shimla Hills, Dehradun Valley, Mussoorie Hills, Mussoorie Town, Kumaon Hills, Central Him... $ Total_Species_count (int) 1439, 417, 228, 299, 148, 323, 146, 371, 623, 962, 853, 690, 262, 423, 321, 510, 596, 276, 167, 124, 151, 109, 77, 110, 78, 78, 59, 145, 164, 1... $ Skippers (int) 307, 63, 25, 41, 22, 54, 14, 52, 125, 211, 189, 159, 27, 67, 119, 98, 132, 59, 32, 18, 19, 15, 11, 12, 14, 11, 4, 22, 19, 23, 54, 60, 20, 37, 4... $ Swallow_tails (int) 94, 31, 23, 21, 11, 23, 10, 26, 43, 69, 62, 55, 29, 38, 18, 42, 49, 13, 10, 9, 10, 7, 4, 4, 6, 5, 5, 10, 10, 11, 16, 18, 9, 15, 15, 23, 12, 5, ... $ Whites_Yellows (int) 99, 42, 37, 34, 19, 32, 13, 37, 49, 57, 52, 51, 32, 30, 1, 36, 40, 26, 19, 12, 23, 19, 20, 29, 21, 19, 18, 25, 50, 19, 21, 31, 25, 26, 30, 35, ... $ Blues (int) 458, 129, 56, 88, 42, 88, 44, 109, 185, 284, 258, 162, 48, 110, 126, 128, 166, 77, 57, 46, 38, 33, 22, 31, 20, 22, 17, 46, 41, 35, 66, 80, 50, ... $ Brush_Footed (int) 482, 152, 87, 115, 54, 126, 65, 147, 221, 342, 292, 263, 126, 178, 57, 207, 209, 101, 49, 39, 61, 35, 20, 34, 17, 21, 15, 42, 44, 42, 66, 89, 3...

Slide 36

Slide 36 text

Butterflies %>% filter(Total_Species_count >= 200 | Area %in% c("Indian Subcontinent", "North East India+ North Myanmar", "Other parts of India"), grepl("Hills", Locality), between(Serial_Number, 10, 20)) \EQMZS^ύοέʔδ

Slide 37

Slide 37 text

Butterflies %>% filter(Total_Species_count >= 200 | Area %in% c("Indian Subcontinent", "North East India+ North Myanmar", "Other parts of India"), grepl("Hills", Locality), between(Serial_Number, 10, 20)) \EQMZS^ύοέʔδ ࿦ཧ࿨ ਅِ஋Λฦؔ͢਺ ൣғΛநग़ʜ\EQMZS^ͷิॿؔ਺ ཁૉͷू߹

Slide 38

Slide 38 text

ʮϓϦΩϡΞʯγϦʔζͷ"1*!TVF req.girls <- GET("https://rubicure.herokuapp.com/ girls.json") %>% content() req.girls %>% class() # [1] "list" req.girls %>% .[[1]] %>% names() # [1] "girl_name" "human_name" "precure_name" "cast_name" "created_date" "color" "birthday" "transform_message" # [9] "extra_names" "attack_messages" "transform_calls" \EQMZS^\QVSSS^\IUUS^

Slide 39

Slide 39 text

req.girls %>% map_df(., ~ .[c("color")]) %>% group_by(color) %>% tally(sort = TRUE) Source: local data frame [8 x 2] color n 1 pink 10 2 blue 9 … 7 green 2 8 black 1 JF TVNNBSJTF OO BSSBOHF O \EQMZS^\QVSSS^\IUUS^

Slide 40

Slide 40 text

໰୊ GSPNŴŞťŚŷŵŕţſŞŽŲƄ LJOUPSF

Slide 41

Slide 41 text

೴τϨԋश TFMFDUIFMQFST var_1 var_2 third_variable 4th_variable start_with("var_") end_with("variable") contains("_") matches("[[:punct:]]") num_range("var_", 1:2) one_of("third_variable") everything() :PVS5VSO Ͳͷม਺͕બ୒͞ΕΔ͔ʁ

Slide 42

Slide 42 text

TFMFDUIFMQFST var_1 var_2 third_variable 4th_variable start_with("var_") ○ ○ ✖ ✖ end_with("variable") ✖ ✖ ○ ○ contains("_") ○ ○ ○ ○ matches("[[:punct:]]") ○ ○ ○ ○ num_range("var_", 1:2) ○ ○ ✖ ✖ one_of("third_variable") ✖ ✖ ○ ✖ everything() ○ ○ ○ ○ ೴τϨԋश

Slide 43

Slide 43 text

point <- c(-2:2, NA) if_else(point < 0, "あし", "よし", "なし") soum <- c("そうむ", "ほうむ", "ポエム", "のうむ") na_if(soum, "ポエム") nth(soum, 2) ϕΫτϧΛର৅ʹͨ͠ૢ࡞ :PVS5VSO ೴τϨԋश

Slide 44

Slide 44 text

point <- c(-2:2, NA) if_else(point < 0, "あし", "よし", "なし") # [1] "あし" "あし" "よし" "よし" "よし" "なし" soum <- c("そうむ", "ほうむ", "ポエム", "のうむ") na_if(soum, "ポエム") # [1] "そうむ" "ほうむ" NA "のうむ" nth(soum, 2) # [1] "ほうむ" ϕΫτϧΛର৅ʹͨ͠ૢ࡞ ೴τϨԋश

Slide 45

Slide 45 text

library(magrittr); library(stringr) df.q1 <- data_frame( point = c("10/13/13/16", "9/12/8/15")) %$% point %>% str_split_fixed(., "/", 4) %>% as.data.frame() %>% set_colnames(str_c("var", 1:4)) ೴τϨԋश

Slide 46

Slide 46 text

library(tibble) df.q2 <- frame_data( ~fruit, ~sales, "apple/banana/orange", "1/2/4", "orange/melon/applef/pear", "1/3/5/1") %$% data_frame( fruit = fruit %>% str_split("/"), sales = sales %>% str_split("/")) ೴τϨԋश

Slide 47

Slide 47 text

df.q1 var1 var2 var3 var4 1 10 13 13 16 2 9 12 8 15 df.q2 Source: local data frame [2 x 2] fruit sales 1 2 library(tidyr) df.q3 <- df.q2 %>% unnest() ೴τϨԋश

Slide 48

Slide 48 text

df.q3 Source: local data frame [7 x 2] fruit sales 1 apple 1 2 banana 2 3 orange 4 4 orange 1 5 melon 3 6 apple 5 7 pear 1 ೴τϨԋश

Slide 49

Slide 49 text

with 2015~ 2014~ adv anced & DPLyr

Slide 50

Slide 50 text

σʔλ͕࣋ͭ֊૚ੑ " # $ ʜ ʜ B ʜ ʜ B ʜ ʜ C ʜ ʜ D ʜ ʜ D ʜ ʜ D ^ ^ ^ EBUB B EBUB EBUB D EBUB EBUB C EBUB $ SFTVMU SFTVMU B ʜ ʜ C ʜ ʜ D ʜ ʜ

Slide 51

Slide 51 text

σʔλ͕࣋ͭ֊૚ੑ " # $ ʜ ʜ B ʜ ʜ B ʜ ʜ C ʜ ʜ D ʜ ʜ D ʜ ʜ D ^ ^ ^ EBUB B EBUB EBUB D EBUB EBUB C EBUB $ SFTVMU SFTVMU B ʜ ʜ C ʜ ʜ D ʜ ʜ UJEZSOFTU UJEZSVOOFTU QVSSSNBQ EQMZSEP

Slide 52

Slide 52 text

library(tidyr) by_area <- group_by(Butterflies, Area) %>% nest() \EQMZS^\UJEZS^ Source: local data frame [8 x 2] Area data 1 Indian Subcontinent 2 Western Himalaya 3 Central Himalaya 4 North East India+ North Myanmar 5 Other parts of India 6 Sri Lanka 7 North Myanmar 8 South Myanmar # HSPVQ@CZ Ͱࢦఆ ͨ͠ά ϧʔϓ͝ͱʹ UCM@EGΫϥε ΦϒδΣΫτͱͯ͠ ֨ೲ

Slide 53

Slide 53 text

library(purrr) mod_res <- map(by_area$data, ~ glm(Total_Species_count ~ Skippers + Blues, data = ., family = poisson)) \EQMZS^\QVSSS^ # άϧʔϓ͝ͱʹؔ਺Λద༻ʢNBQQJOHʣ

Slide 54

Slide 54 text

mod_res[[4]] mod_res %>% class() # [1] "list" \EQMZS^\QVSSS^ # Call: glm(formula = Total_Species_count ~ Skippers + Blues, family = poisson, data = .) Coefficients: (Intercept) Skippers Blues 5.380924 0.003370 0.002889 Degrees of Freedom: 8 Total (i.e. Null); 6 Residual Null Deviance: 932.4 Residual Deviance: 100.3 AIC: 178.6 NBQ ͷฦΓ஋͸ ϦετΦϒδΣΫτ NBQ@EG Ͱ͸ σʔλϑϨʔϜ

Slide 55

Slide 55 text

library(broom) (do_mod_res <- group_by(Butterflies, Area) %>% do(mod = glm(Total_Species_count ~ Skippers + Blues, data = ., family = poisson) %>% glance())) do_mod_res %>% class() # [1] "rowwise_df" "tbl_df" "tbl" "data.frame" \EQMZS^\CSPPN^

Slide 56

Slide 56 text

\EQMZS^\CSPPN^ do_mod_res %>% unnest() Source: local data frame [8 x 8] Area null.deviance df.null logLik AIC BIC deviance df.residual 1 Central Himalaya 0.0000 0 -4.136346 10.272691 8.272691 0.000000e+00 0 2 Indian Subcontinent 0.0000 0 -4.554848 11.109697 9.109697 -1.723066e-13 0 3 North East India+ North Myanmar 932.3645 8 -86.309184 178.618368 179.210041 1.002874e+02 6 4 North Myanmar 55.5590 2 -10.891251 27.782502 25.078339 2.664535e-14 0 5 Other parts of India 630.0408 20 -94.738568 195.477137 198.610704 4.746547e+01 18 6 South Myanmar 0.0000 0 -4.253793 10.507587 8.507587 5.240253e-14 0 7 Sri Lanka 0.0000 0 -3.663752 9.327503 7.327503 -4.884981e-15 0 8 Western Himalaya 255.5851 6 -33.529065 73.058130 72.895860 1.535052e+01 4 #֊૚ߏ଄Λ࣋ͭσʔλϑϨʔϜΛ࠶݁߹

Slide 57

Slide 57 text

ਐԽ͠ଓ͚Δ \EQMZS^ύοέʔδ

Slide 58

Slide 58 text

Ұํʜͱ͋Δࣝऀͷಗ໊ݟղ ˞ϓϥΠόγʔอޢͷͨΊɺ Ұ෦΅͔͠ΛೖΕ͍ͯ·͢ \EQMZS^ͱ͸ Կͩͬͨͷ͔ʜ a͜ͷޙͷ-5ʹظ଴ʂ

Slide 59

Slide 59 text

Hadley Ecosystem 2016~

Slide 60

Slide 60 text

)BEMFZ&DPTZTUFNͷ৽੕

Slide 61

Slide 61 text

)BEMFZ&DPTZTUFNͷ৽੕ \EQMZS^ͷؔ਺ΛϚϧνίΞॲཧ QBSUJUJPO Ͱάϧʔϓ෼ׂɺDPMMFDU Ͱ݁ՌΛճऩ Ϋϥελʔ਺͸TFU@EFGBVMU@DMVTUFS ؔ਺Ͱௐ੔Մೳ

Slide 62

Slide 62 text

)BEMFZ&DPTZTUFNͷ৽੕ \EQMZS^ͷྲّྀΛܧঝͨ͠σʔλϑϨʔϜੜ੒ EQMZSBEE@SPXOBNFT ͔Β UJCCMFSPXOBNFT@UP@DPMVNO ΁ σʔλϑϨʔϜΛྻ͝ͱʹهड़͢ΔGSBNF@EBUB ͱ͔ศར͔΋

Slide 63

Slide 63 text

)BEMFZ&DPTZTUFNͷ৽੕ 3 1ZUIPOؒͰޓ׵ੑͷ͋Δ௒ܰྔσʔλܗࣜ $MPVEFSBͷ8FT.D,JOOFZͱͷڞಉ։ൃ "QBDIF"SSPX1SPKFDUʜରԠܗࣜ΋ͬͱ૿͑Δ͔΋ 3ඪ४ͷอଘػߏʹΑΔσʔλͷอଘ͕ܰྔʹͳΔ͜ͱ΋

Slide 64

Slide 64 text

ホクソエム神話 第四の書 "R4DS"

Slide 65

Slide 65 text

ѹ౗తےྗΛ ಘΑ͏ʂ

Slide 66

Slide 66 text

enjoy!!!