Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NDS#51
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kasacchiful
PRO
March 25, 2017
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
NDS#51
NDS#51 の LT で発表した資料
kasacchiful
PRO
March 25, 2017
More Decks by kasacchiful
See All by kasacchiful
Step Functions Express ワークフローの使い所 / 20260725jawsug-niigata-sado
kasacchiful
PRO
1
64
Step FunctionsでAIエージェント × 人の承認を試す / 20260705jawsug-hokurikushinkansen-agentcore-hitl-workflow
kasacchiful
PRO
0
84
上越のサメ食文化を訪ねて - 新潟市民の初体験レポ / ssmjp-shark
kasacchiful
PRO
1
82
Rust on AWS でデータ分析 / 20260523iotlt-niigata-rust-on-aws
kasacchiful
PRO
0
42
Step Functionsで始めるサーバーレス入門 〜 つないで動かすAWSサーバーレス
kasacchiful
PRO
0
70
Amazon Q Developer CLI (現Kiro CLI) で作った 新潟ランチマップWebアプリのこれまでとこれから / 20260207jawsug-tochigi
kasacchiful
PRO
0
130
Amazon SageMaker Catalogの、AIエージェントによる自動データ分類機能を試してみようとしたが、できなかったので、代わりに最近構築したデータ連携基盤を紹介します / 20260117jawsug-fukui
kasacchiful
PRO
0
140
データファイルをAWSのDWHサービスに格納する / 20251115jawsug-tochigi
kasacchiful
PRO
2
290
テーブル定義書の構造化抽出して、生成AIでDWH分析を試してみた / devio2025tokyo
kasacchiful
PRO
0
1k
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
BBQ
matthewcrist
89
10k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
410
Writing Fast Ruby
sferik
630
63k
Navigating Weather and Climate Data
rabernat
0
460
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
For a Future-Friendly Web
brad_frost
183
10k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
The Limits of Empathy - UXLibs8
cassininazir
1
600
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
How to Talk to Developers About Accessibility
jct
2
490
Transcript
RͱdplyrͱPipe @kasacchiful NDS#51 2017-03-25
Who am I ? • ּݪ (@kasacchiful) • ৽ׁࢢࡏॅ,
SIerۈ • Ruby͕͓ؾʹೖΓ • ࠷ۙSwiftͱ͔Rͱ͔JavaScriptʢϞόΠϧ༻్ʣ • JaSST৽ׁͷਓ
એ
JaSST’17 Niigata։࠵ • ࣌ɿ20174݄28ʢۚʣ13:00 ʙ 16:40 • ॴɿगϝοη தձٞࣨ 201B
• ςʔϚɿʮϢʔβϏϦςΟ / UXʯ • جௐߨԋɿḺຊ ప ࢯʮϢʔβΤΫεϖϦΤϯεͷཁૉͱϓϩηε——UX/UCD֓ʯ • ࣄྫհɿ༄ੜ େհ ࢯʮػೳத৺͔Βਓؒத৺ ʙཱιϦϡʔγϣϯζͷऔΓΈʙʯ • ࢀՃඅɿ2,160ԁʢ੫ࠐʣ • ࢀՃਃࠐडதʢਃࠐظݶɿ4/14ʢۚʣ18:00ʣ • ৄࡉ http://jasst.jp ʢʮJaSSTʯͰݕࡧʣ
ࠓͷ͓ • σʔλΛѻ͏ࡍʹɺσʔλΛ͍͘͢ܗ͢ΔΑͶ • Rͩͱdplyr͕ศརͩͶʢσϑΝΫτελϯμʔυʁʣ • Pipe͏ͱศརͩͶ
ΈΜͳେ͖R • Rͷࡉ͔͍આ໌͠·ͤΜ • Rࡢ͔Β৮Γͩͨ͠ॳ৺ऀͰ͢
σʔλܗ
σʔλੳ͢Δલʹσʔλܗ • R Ͱσʔλੳ • σʔλੳ͢Δࡍʹɺ࣮ࡍͷσʔλΛͦͷ··ѻ͏͜ ͱͳ͍ ѻ͍͍͢Α͏ʹσʔλΛܗ͢Δͣ
ྫ • Λʮʯʮ݄ʯʮʯʹׂ • ϥϯΫ͚ • ιʔτ • άϧʔϓԽͯ͠ूܭͯ͠ΈΔ •
σʔλΛJoinͨ͠ΓɺUnionͨ͠Γ
࠷ۙʹͳͬͨͭ • ֳͷࠃຽͷॕcsvσʔλ • ݱࡏɺϑΥʔϚοτ͕վળ͞Ε͍ͯ·͢ • ͜Εܗ͓ͯ͠͏Ͷ
dplyr • ߴʹσʔλϑϨʔϜΛѻ͏ϥΠϒϥϦ • pythonͳΒʮpandasʯ
dplyrΠϯετʔϧ install.packages('dplyr') # Πϯετʔϧ library(dplyr) # ϥΠϒϥϦͷಡࠐ # ศརπʔϧΛҰׅΠϯετʔϧ install.packages('tidyverse')
# ҰׅΠϯετʔϧ library(tidyverse) # Ұׅಡࠐ
ҰׅΠϯετʔϧ͞ΕΔ ϥΠϒϥϦ • ggplot2: for data visualisation. • dplyr :
for data manipulation. • tidyr: for data tidying. • readr: for data import. • purrr: for functional programming. • tibble: for tibbles, a modern re-imagining of data frames. ࢀর: https://github.com/tidyverse/tidyverse
ྫ • ৽ׁࢢͷΦʔϓϯσʔλΛͬͯΈΔ • ආॴͱ֎ආॴͷGISใΛϚοϐϯά • ܽଛʹΛิ͢ΔͨΊʹɺtidyr Λͬͯ·͢
library(ggplot2) library(ggmap) library(dplyr) library(tidyr) library(readr) niigata <- c(139.0255893, 37.8490611) data.indoor_shelter
<- read_csv("od_gis_10161_okunaihinanjo.csv") data.outdoor_shelter <- read_csv("od_gis_10162_okugaihinanbasho.csv") # ֎ආॴσʔλΧϥϜ͕Γͳ͍ͷͰɺՃͯ͠ɺආॴσʔλʹunion # ʢ࣮ࡍΧϥϜΓͳͯ͘unionՄೳʣ indoor <- data.indoor_shelter %>% rename(lon = longitude, lat = latitude) # ΧϥϜ໊Λมߋ dplyr::rename outdoor <- data.outdoor_shelter %>% rename(lon = longitude, lat = latitude) %>% # ΧϥϜ໊Λมߋ mutate(SAFIELD007 = NA, SAFIELD008 = NA, SAFIELD009 = NA, SAFIELD010 = NA) # ྻΛՃ dplyr::mutate data.shelter <- dplyr::union_all(indoor, outdoor) # SAFIELD005ʢ۠ʣͷܽଛิ data.shelter <- data.shelter %>% replace_na(list(SAFIELD005 = ‘ͦͷଞ')) # tidy::replace_na # ਤඳը get_googlemap(niigata, zoom = 10, maptype = "roadmap", language = "ja-JP") %>% ggmap(extent = "device", darken = c(0.2, "black")) + geom_point(data = data.shelter, aes(color = SAFIELD005,shape = SAFIELD006)) + theme_bw(base_family = "HiraKakuProN-W3") + xlab("") + ylab("") + labs(color = "۠", shape = "/֎", title = "৽ׁࢢͷ/֎ආॴ") + guides(shape = guide_legend(order = 1), colour = guide_legend(order = 2)) + theme(axis.ticks = element_blank(), axis.text = element_blank()) https://github.com/kasacchiful/nds51-sample
None
dplyrػೳ͕๛ • ࠔͬͨ࣌ͷνʔτγʔτ • https://www.rstudio.com/wp-content/uploads/ 2015/02/data-wrangling-cheatsheet.pdf • dplyr͚ͩͰͳ͘ɺtidyrΛͬͯσʔλܗ
Pipe
library(ggplot2) library(ggmap) library(dplyr) library(tidyr) library(readr) niigata <- c(139.0255893, 37.8490611) data.indoor_shelter
<- read_csv("od_gis_10161_okunaihinanjo.csv") data.outdoor_shelter <- read_csv("od_gis_10162_okugaihinanbasho.csv") # ֎ආॴσʔλΧϥϜ͕Γͳ͍ͷͰɺՃͯ͠ɺආॴσʔλʹunion # ʢ࣮ࡍΧϥϜΓͳͯ͘unionՄೳʣ indoor <- data.indoor_shelter %>% rename(lon = longitude, lat = latitude) # ΧϥϜ໊Λมߋ outdoor <- data.outdoor_shelter %>% rename(lon = longitude, lat = latitude) %>% # ΧϥϜ໊Λมߋ mutate(SAFIELD007 = NA, SAFIELD008 = NA, SAFIELD009 = NA, SAFIELD010 = NA) # ྻΛՃ data.shelter <- dplyr::union_all(indoor, outdoor) # SAFIELD005ʢ۠ʣͷܽଛิ data.shelter <- data.shelter %>% replace_na(list(SAFIELD005 = 'ͦͷଞ')) # ਤඳը get_googlemap(niigata, zoom = 10, maptype = "roadmap", language = "ja-JP") %>% ggmap(extent = "device", darken = c(0.2, "black")) + geom_point(data = data.shelter, aes(color = SAFIELD005,shape = SAFIELD006)) + theme_bw(base_family = "HiraKakuProN-W3") + xlab("") + ylab("") + labs(color = "۠", shape = "/֎", title = "৽ׁࢢͷ/֎ආॴ") + guides(shape = guide_legend(order = 1), colour = guide_legend(order = 2)) + theme(axis.ticks = element_blank(), axis.text = element_blank())
indoor <- data.indoor_shelter %>% rename(lon = longitude, lat = latitude)
outdoor <- data.outdoor_shelter %>% rename(lon = longitude, lat = latitude) %>% mutate(SAFIELD007 = NA, SAFIELD008 = NA, SAFIELD009 = NA, SAFIELD010 = NA) data.shelter <- dplyr::union_all(indoor, outdoor)
Pipe • %>% (dplyr::%>%) • ࠨลͷΛӈลͷؔͷୈҰҾʹ • x %>% f
#=> f(x) • x %>% f(y) #=> f(x, y) • x %>% f %>% g %>% h #=> h(g(f(x)))
Pipe data.library2014 <- read.csv("2014toshokanriyo.csv") head(rename(select(data.library2014, ਤॻ໊ؗ, ։ؗ..), name=ਤॻ໊ؗ, open_days=։ؗ..), 5)
ҎԼͱՁ data.library2014 <- read.csv("2014toshokanriyo.csv") data.library2014 %>% select(ਤॻ໊ؗ, ։ؗ..) %>% rename(name=ਤॻ໊ؗ, open_days=։ؗ..) %>% head(5) ϝιουͷωετݟͮΒ͍ɻ pipe͑ɺՄಡੑ্͕Δɻॻ͖͍͢ɻ
ݩmagrittr • https://github.com/tidyverse/magrittr • R package to bring forward-piping features
ala F#'s |> operator. Ceci n'est pas un pipe. • F#ͷ |> ԋࢉࢠͷػೳ͕༝དྷ
F# ͷpipe ࢀর: https://msdn.microsoft.com/ja-jp/library/dd233229(v=vs.120).aspx#ؔ߹ͱύΠϓϥΠϯॲཧ
ଞݴޠͷpipe • Elixir • Julia • ԋࢉࢠͱߴ֊͕ؔఆٛͰ͖ΔݴޠͰ͋Εɺಠ࣮ࣗ Ͱ͖Δ͔͠Ε·ͤΜɻ ࢀর: http://elixir-lang.org/getting-started/enumerables-and-streams.html#the-pipe-operator
ࢀর: http://docs.julialang.org/en/stable/stdlib/base/#Base.|>
ଞʹPipe.R͕͋ΔΑ • %>>% • Pipe() • pipeline() • dplyrͱڞଘՄೳɻ
## magrittr system.time({ lapply(1:100000, function(i) { sample(letters,6,replace = T) %>%
paste(collapse = "") %>% "=="("rstats") }) }) Ϣʔβ γεςϜ ܦա 13.495 0.064 13.807 ## Pipe.R system.time({ lapply(1:100000, function(i) { sample(letters,6,replace = T) %>>% paste(collapse = "") %>>% "=="("rstats") }) }) Ϣʔβ γεςϜ ܦա 4.922 0.030 5.015 ࢀর: https://renkun.me/blog/2014/08/08/difference-between-magrittr-and-pipeR.html
·ͱΊ • σʔλੳ͢ΔલʹɺdplyrΛͬͯσʔλܗ͕େࣄ • RͰPipe͏ͱɺϝιουνΣΠϯ෩ʹॻ͚ͯศར • ଞݴޠͰPipe͕࣮͞Ε͍ͯΔͷ͕͋ΔͷͰɺͬ ͓ͯ͘ͱͤʹͳΕΔ͔