-
Notifications
You must be signed in to change notification settings - Fork 0
/
R4DS lanzamientos_Dani.Rmd
396 lines (281 loc) · 11 KB
/
R4DS lanzamientos_Dani.Rmd
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
---
title: "Lanzamientos"
author: "Dani"
date: "10 de noviembre de 2019"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
agencias <- read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-01-15/agencies.csv")
lanzamientos <- read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-01-15/launches.csv")
```
```{r Explorar datos }
ggplot(lanzamientos) +
geom_histogram(aes(launch_year))
#Quisiera que me haga un conteo de cantidad de lanzamientos
lanzamientos %>%
count(launch_year) %>%
summary()
lanzamientosAnioPais <-
lanzamientos %>%
group_by(launch_year, state_code) %>%
summarise(conteo = n())
summary(lanzamientosAnioPais)
ggplot(lanzamientosAnioPais) +
geom_line(aes(launch_year, conteo, color = state_code))
```
```{r USRU}
#Ahora los pido por potencias: Unión soviética, Rusia, EEUU
USRU <- filter(lanzamientos, state_code == "US" | state_code == "RU" | state_code == "SU") %>%
group_by(launch_year, state_code) %>%
summarise(conteo = n())
ggplot(USRU) +
geom_line(aes(launch_year, conteo, color = fct_reorder2(state_code, launch_year, conteo))) +
labs(
x = "Anio",
y = "Cantidad de lanzamientos",
title = "Comparacion de numero de lanzamientos entre Rusia y EEUU antes y despues de la URSS",
subtitle = " ",
color = "codigo de estado"
)
#Hay un "agujerito" entre RU y SU. Quiero saber si la transición entre SU y RU dejó algún año sin lanzamientos
USRU %>%
filter(state_code == "SU") %>%
summary()
USRU %>%
filter(state_code == "RU") %>%
summary()
#UnSov tiene lanzamientos hasta 1991. RU arranca en 1992. UnSov cae en Dic de 1991.
```
```{r interseccion}
#Ahora quiero saber en qué año tienen la misma cantidad de lanzamientos URSS y EEUU.
US <- filter(lanzamientos, state_code == "US") %>%
group_by(launch_year) %>%
summarise(conteoUS = n())
SU <- filter(lanzamientos, state_code == "SU") %>%
group_by(launch_year) %>%
summarise(conteoSU = n())
for (anio in seq_along(US$launch_year[c(1:35)])) {
if (US$conteoUS[[anio]] <= SU$conteoSU[[anio]])
print(SU$launch_year[[anio]])
else
print("US > SU")
}
```
Aca vemos que en el primer registro de 1957, EEUU lanzaba 1 contra URSS que lanzaba 2. Luego, hasta 1967, EEUU lanzo mayor cantidad de naves al espacio. A partir de 1967, URSS lanzo mayor cantidad, hasta su caida, en 1991.
Ahora quiero ver qué otros paÃses además de EEUU y Rusia/URSS tienen más cantidad de lanzamientos.
```{r TOP}
lanzamientosAnioPais %>%
arrange(desc(conteo))
```
URSS tiene un maximo absoluto de 108 lanzamientos en 1982
Propongo graficar los primeros 5.
Tengo dos formas de armar el TOP5:
a) Cantidad total de lanzamientos
b) Maximo en un anio determinado
```{r Otros paises maximo}
#Esto andarÃa, creo. Pero no le gusta que en el filter pida "SC", porque lo entiende como string y no lo toma como el SC del "for".
#uniqueSC <- unique(lanzamientosAnioPais$state_code)
#maximos <- list()
#m <- list()
#for (SC in seq_along(uniqueSC)) {
# maximo <- max((filter(lanzamientosAnioPais, state_code == "SC"))$conteo)
# m <- c(maximo, SC)
# maximos <- c(maximos, m)
#}
#Esta es para el total de lanzamientos. Tiene el mismo inconveniente que la anterior.
#for (SC in seq_along(uniqueSC)) {
# sum((filter(lanzamientosAnioPais, state_code == #"SC"))$conteo)
#}
#En vez de usar loops, podemos usar solo dplyr
lanzamientos %>%
group_by(state_code, launch_year) %>%
count() %>%
group_by(state_code) %>%
filter(n == max(n)) %>%
arrange(desc(n))
#!!!!!!!!!!!!!!!!!!!!!!!!!!!
#Si lo hago directamente desde LanzamientosAnioPais (que es un group by + count), no estarÃa pudiendo. Es decir:
#lanzamientosAnioPais %>%
#group_by(conteo) %>%
#filter (conteo == max(conteo))
```
Acá vemos que el TOP5 de máximos (mayor cantidad de lanzamientos en algun año), está compuesto por:
1. SU
2. US
3. RU
4. CN
5. F
Para hacer el TOP5 de numero total de lanzamientos (suma de lanzamientos en todos los anios del registro):
```{r otros paises total lanzamientos}
lanzamientos %>%
group_by(state_code) %>%
count() %>%
arrange(desc(n))
# %>% .[1:5, ] si quisiera las primeras 5 solamente
```
El TOP5 de total de lanzameintos es el mismo que el de máximos. Lidera SU con 2444 lanzamientos.
Vamos a graficar los primeros 5 paÃses, por año:
```{r grafico primeros 5 por anio}
lanzamientosAnioPais %>%
filter(state_code == "SU" | state_code == "US" | state_code == "RU" | state_code == "F" | state_code == "CN") %>%
ggplot() +
geom_line(aes(launch_year, conteo, color = fct_reorder2(state_code, launch_year, conteo))) +
labs(
color = "Codigo de estado",
x = "Anio de lanzamiento",
y = "Conteo",
title = "TOP 5 - lanzamientos"
)
#POR QUÉ EL FCT_REORDER ME PONE A CN EN SEGUNDO LUGAR?
```
Quisiera hacer lo mismo pero incluir una categoría que sea "otros" y que incluya al resto de los que no están en el TOP5.
Voy a armar una lista con los state_code que no son top5 y luego hacer un fct_collapse:
```{r Otros}
#ESTE METODO NO ANDUVO. REVSAR.
listaOtros = list()
for (SC in seq_along(unique(lanzamientos$state_code))) {
if (SC != "US" & SC != "SU" & SC != "RU" & SC != "F" & SC != "CN")
print(unique(lanzamientos$state_code[SC])) #Me devuelve solo US
#listaOtros = c(listaOtros, unique(lanzamientos$state_code[SC]))
}
listaOtros
```
```{r Otros2}
#Probamos otra forma:
OtrosSC <- lanzamientos %>%
group_by(state_code) %>%
count() %>%
arrange(desc(n)) %>%
select(state_code) %>%
.[-(1:5),]
OtrosSC
```
```{r Otros3}
lanzamientosOtros <- lanzamientos %>%
mutate(state_code = fct_lump(state_code, n = 5, other_level = "Otros")) %>%
group_by(state_code, launch_year) %>%
count()
ggplot(lanzamientosOtros) +
geom_line(aes(x = launch_year, y = n, color = fct_reorder2(state_code, launch_year, n))) +
labs(
x = "anio",
y = "conteo",
color = "codigo de estado",
title = "Lanzamientos espaciales por anio según país"
)
```
Ahora, quiero buscar misiones especiales, como Apollo 11, el primero que llego a la Luna (Google dice que despego el 16 de Julio de 1969)
```{r Apollo 11}
lanzamientos %>%
filter(launch_date == "1969-07-16")
```
La mision, se llamo "Apollo CM-107". Me gustaria marcarla en el grafico, asi como tambien a otros eventos importantes, tales como el primer lanzamiento tripulado (Vostok 1 - US - 1961) y la caida de la union sovietica (1991)
```{r Grafico con Apolo}
ggplot(lanzamientosOtros) +
geom_line(aes(x = launch_year, y = n, color = fct_reorder2(state_code, launch_year, n))) +
geom_vline(aes(xintercept = 1969), linetype = 2, color = "grey") +
geom_vline(aes(xintercept = 1961), linetype = 2, color = "grey") +
geom_vline(aes(xintercept = 1991), linetype = 2, color = "grey") +
labs(
x = "anio",
y = "cantidad de lanzamientos",
color = "codigo de estado",
title = "Lanzamientos espaciales por anio segun pais"
)
```
La primera linea corresponde a 1961, lanzamiento de la primera nave tripulada. US-Vostok 1.
La segunda linea corresponde a 1969, lanzamiento del Apollo 11, llegada del hombre a la luna.
La tercer linea corresponde a 1991, caida de la US.
Me hubiese gustado marcarlos en vertical como lo hice pero ponerles una leyenda en el grafico que acompanie. Tambien hubiese preferido que en fct_reorder me tire SU, US y RU primero. Tampoco explore que pasaba con los NAs. Queda pendiente.
*- Lo del orden lo hace David Robinson en el video con un mutate(state_code = fct_reorder(state_code, -n, ¿sum?)), pero fuera del ggplot, él modifica la tibble (21:39).
Voy a explorar qué agencias fueron las que tuvieron más cantidad de lanzamientos. Para eso, hay que explorar la base "agencias".
Podría ver qué agencias tienen mas cantidad de lanzamientos segun si son privadas/estatales.
```{r Agencias1}
agencias %>%
ggplot() +
geom_bar(aes(agency_type))
agencias %>%
arrange(desc(count))
agenciasOtros <- agencias %>%
mutate(state_code = fct_lump(state_code, n = 5, other_level = "Otros"))
agenciasOtros %>%
mutate(state_code = state_code %>% fct_infreq() %>% fct_rev()) %>%
ggplot() +
geom_bar(aes(state_code, fill = state_code)) +
facet_grid( ~ agency_type) +
coord_flip() +
labs(
title = "Cantidad de agencias segun tipo",
subtitle = "Si bien SU tiene gran cantidad de lanzamientos, todos ellos son estatales y salen de muy pocas agencias, a diferencia de US",
fill = "Codigo de estado",
x = " ",
y= "Cantidad de agencias"
)
#Aca me gustaria modificar el orden en que aparecen los timpos de agencia. Quisiera que esté primero state, luego private y por último startup.
#Ademas quisiera que los colores del fill sean presentados en orden de aparicion y no al reves.
```
¿Que agencia tiene mas lanzamientos?
```{r Agencias con mas lanzamientos}
agencias <- agencias %>%
rename("conteo" = count)
agencias$conteo <- as.integer(agencias$conteo)
#agenciasOtros2 <- agencias %>%
# mutate(conteo = fct_lump(conteo, n = 5, other_level = "Otros"))
#no me deja hacer fct_lump con "conteo". Pasa que no estoy "contando" un factor, sino que le estaria pasando directamente la cuantificacion.
agenciasPrivadasOtras <- agencias %>%
filter(agency_type == "private" | agency_type == "startup" ) %>%
mutate(agency = ifelse(conteo < 60, "Otras", agency))
agenciasPrivadasOtras %>%
ggplot() +
geom_point(aes(x = agency, y = conteo, color = state_code), size = 4) +
coord_flip() +
labs(
title = "Lanzamientos en agencias privadas",
color = "Codigo de estado",
y = "Cantidad de lanzamientos",
x = "Agencia"
)
agenciasEstatalesOtras <- agencias %>%
filter(agency_type == "state") %>%
mutate(agency = ifelse(conteo < 200, "Otras", agency)) %>%
mutate(state_code = fct_lump(state_code, n = 5, other_level = "Otros"))
agenciasEstatalesOtras %>%
ggplot() +
geom_point(aes(x = agency, y = conteo, color = state_code), size = 4) +
coord_flip() +
labs(
title = "Lanzamientos en agencias Estatales",
color = "Codigo de estado",
y = "Cantidad de lanzamientos",
x = "Agencia"
)
#me hubiese gustado que se vean los colores en orden
```
No los presento en un mismo grafico con fct_grid porque la cantidad de lanzamientos segun agencia varia mucho por tipo. El nivel "otros" es distinto para estatal/privado.
Vamos a explorar que pasa con los datos faltantes.
```{r Exploracion NAs}
lanzamientos %>%
filter(state_code == is.na(state_code))
lanzamientos %>%
filter(launch_year == is.na(launch_year))
agencias %>%
filter(parent == is.na(parent))
```
Ocurre que aca en vez de NAs tengo guiones en el dataset. Podria reemplazar guiones por "NA".
```{r NAs}
agenciasNA <- agencias %>%
mutate(tstop = ifelse(tstop == "-", NA, tstop)) %>%
view()
#Podría generalizarlo para todas las columnas:
#for(i in seq_along(agencias)){
# mutate(i = ifelse(i == "-", Na, i))
#} %>%
# view()
#Este bucle no me anda! No le gusta "i" como data.
#MAGICO!!!!!!!!
agenciasNA <- agencias %>%
na_if("-") %>%
view()
```