Veículos extraterrestres

Uma análise sobre aparições de OVNIs nos últimos 50 anos.

#datavisualization, #datascience, #r #rstudio - 02 de setembro de 2018

Ao longo do tempo temos acumulado inúmeros avistamentos de OVNIs, dos quais boa parte são atribuídas a extraterrestres visitando nosso planeta, a bordo de suas velozes naves espaciais. Na literatura e no cinema, esses veículos são retratados de várias formas, sendo a mais popular a de luminosos discos voadores que aparecem no meio da noite. Mas seriam eles realmente discos? Luminosos? Adeptos da vida noturna?

Para tirar essas dúvidas que ninguém tinha, preparei uma breve análise utilizando linguagem R e dados de aparições de OVNIs registrados nos últimos 50 anos e disponíveis no site NUFORC, que é dedicado ao armazenamento de informações sobre atividades alienígenas.

Apesar de gostar bastante do tema, não tenho muito conhecimento em Ufologia, então já peço desculpas antecipadamente por qualquer gafe em relação aos termos utilizados. A ideia de fazer essa análise, surgiu ao fazer um curso sobre Data Science que utiliza a mesma fonte de dados. Inclusive, fica aqui a recomendação do curso e o agradecimento ao professor Eduardo Morelli pelo conhecimento compartilhado.

Feita as considerações iniciais, vamos a nossa análise. Construímos o nosso dataset os registros dos últimos 50 anos disponíveis no NUFORC. Mais precisamente entre 08/1968 e 08/2018

Após uma boa limpeza e padronização dos dados, iniciamos a nossa análise no R Studio.


Primeiro instalamos o pacote SQL para nos ajudar a criar nossos dataframes:

install.packages('sqldf')
require(sqldf)

Alguns pacotes para a criação de gráficos:

install.packages('ggplot2')
library(ggplot2)
install.packages("ggmap")
library(ggmap)
library(dplyr)

E importamos o nosso dataset:

df_OVNI_EUA <- read.csv("dados_tratados/dados_finais/OVNIS_T_EUA.csv",stringsAsFactors = FALSE)
df_OVNI_EUA$X <- NULL

Por ser um site americano, a maior parte dos registros são dos Estados Unidos. Dos mais de 105 mil registros, quase 98 mil são da terra do Tio Sam. Por isso, optei por analisar aqui apenas os dados americanos.

Utilizando o ggplot2 e um pacote de código postais americanos podemos associar os avistamentos a suas respectivas localidades e visualizá-los em um mapa. Podemos notar que há uma grande frequência em cidades próximas ao mar e uma incidência menor no centro do páis.

install.packages('zipcode') 
library(zipcode)
data(zipcode)
us <- map_data("state")
zipcode$city <- toupper(zipcode$city)
  
# Visualizações de OVNIs por cidade - EUA
VIEWS_OVNI_CIDADE_EUA = 
    sqldf("select city as city, state as state, count(*) views from df_OVNI_EUA 
    group by City order by 3 desc")

# gráfico pontos de avistamentos
d <- merge(VIEWS_OVNI_CIDADE_EUA, zipcode, by=c("city","state"))

ggplot(d,aes(longitude,latitude)) +
geom_polygon(data=us,aes(x=long,y=lat,group=group),color='gray32',fill='black')+
geom_point(aes(color=Views),colour="springgreen3",size=.15,alpha=.25)+
xlim(-125,-65)+ylim(20,50)+ 
theme(panel.background = element_blank())+
theme(axis.ticks = element_blank())+
theme(axis.text = element_blank())+
labs(x=NULL, y=NULL) + coord_map()+ 
ggtitle("Pontos de avistamentos de OVNIs - EUA") 

A visualização por pontos nos permite ver facilmente as regiões com reincidências, mas não nos dá uma noção de quantidade. Para isso, vamos Agrupamos os avistamentos por estado. Note que o estado da Califórnia na costa oeste se destaca, tendo muitos mais avistamentos que os outros. O que não era possível de ser identificado no mapa dos pontos.

ggplot()+
geom_map(data=us, map=us, aes(x=long, y=lat, map_id=region),fill="black", color="gray32", size=0.15)+
geom_map(data=f, map=us,aes(fill=views, map_id=region), color="#ffffff", size=0.15)+
scale_fill_continuous(low='black', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
theme(axis.ticks = element_blank())+
theme(axis.text = element_blank())+
labs(x=NULL, y=NULL) + coord_map()+
ggtitle("Visualizações de OVNIs por estado - EUA")

Ao fazer um Top 5 de estados e cidades, temos um fato curioso: Apesar da Califórnia ser o que tem o maior número de registros, somente uma cidade califórniana (San Diego) faz parte do Top 5.

# Visualizações de OVNIs por estado - EUA-TOP 5
VIEWS_OVNI_ESTADO_EUA_TOP5 = 
    sqldf("select State as state, count(*) views from df_OVNI_EUA 
          group by State order by 2 desc limit 5")

VIEWS_OVNI_ESTADO_EUA_TOP5 = merge(VIEWS_OVNI_ESTADO_EUA_TOP5, US_COORD, by=c("state"))
VIEWS_OVNI_ESTADO_EUA_TOP5$latitude = NULL
VIEWS_OVNI_ESTADO_EUA_TOP5$longitude = NULL

# gráfico
ggplot(VIEWS_OVNI_ESTADO_EUA_TOP5, aes(x = reorder(region, -views), y = views, label = views)) +
geom_col(aes(fill = views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
geom_text(size = 4, color = "white", position = position_stack(vjust = 0.5))+
labs(x=NULL, y=NULL)+ 
ggtitle("Visualizações de OVNIs TOP 5 Estados - EUA")
  
  
# Visualizações de OVNIs por cidade - EUA-TOP 5
VIEWS_OVNI_CIDADE_EUA_TOP5 = 
    sqldf("select City as city, State as state, count(*) views from df_OVNI_EUA 
          group by City order by 3 desc limit 5")

# gráfico
ggplot(VIEWS_OVNI_CIDADE_EUA_TOP5, aes(x = reorder(city, -views), y = views, label = views)) +
geom_col(aes(fill = views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
geom_text(size = 4, color = "white", position = position_stack(vjust = 0.5))+
labs(x=NULL, y=NULL)+ 
ggtitle("Visualizações de OVNIs TOP 5 Cidades - EUA")


Em relação aos formatos, foram relatados 22 formas diferentes. O mais avistado foi "Luz". Como "luz" é algo pouco objetivo, preparamos um top 5 mais preciso, removendo o formato luz e outros pouco definidos. O famoso disco presente na cultura pop, marca presença no top 5, mas perde para formas circulares e triangulares.

# Tipo de formato de OVNI mais visto - EUA
FORMATO_OVNI_EUA = 
    sqldf("select Shape as shape, count(*) views from df_OVNI_EUA 
          group by Shape order by 2 desc")
# gráfico
ggplot(FORMATO_OVNI_EUA, aes(x = reorder(shape, views), y = views, label = views)) +
geom_col(aes(fill = views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
labs(x=NULL, y=NULL)+
coord_flip()+ 
ggtitle("Formatos de OVNIs - EUA")
  
# Tipo de formato de OVNI mais visto - EUA-TOP 5
FORMATO_OVNI_EUA_TOP5 = 
    sqldf("select Shape as shape, count(*) views from df_OVNI_EUA 
          group by Shape order by 2 desc limit 5")
# gráfico
ggplot(FORMATO_OVNI_EUA_TOP5, aes(x = reorder(shape, views), y = views, label = views)) +
geom_col(aes(fill = views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
geom_text(size = 4, color = "white", position = position_stack(vjust = 0.5))+
labs(x=NULL, y=NULL)+
coord_flip()+ 
ggtitle("Formatos de OVNIs Top 5 - EUA")
  
# Tipo de formato de OVNI mais visto - EUA-TOP 5 - tratado
FORMATO_OVNI_EUA_TOP5_TR = 
    sqldf("select shape as shape, count(*) views from df_OVNI_EUA 
          Where Shape NOT IN  ('LIGHT','UNKNOWN', 'OTHER')
          group by Shape order by 2 desc limit 5")
# gráfico
ggplot(FORMATO_OVNI_EUA_TOP5_TR, aes(x = reorder(shape, views), y = views, label = views)) +
geom_col(aes(fill = views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
geom_text(size = 4, color = "white", position = position_stack(vjust = 0.5))+
labs(x=NULL, y=NULL)+
coord_flip()+ 
ggtitle("Formatos de OVNIs Top 5 Tratado - EUA")



Entre os horários de avistamento, o período entre 20:00 e 00:00 é o com maior número de registros. O que confirma a ideia de que as aparições são mais comuns a noite. Curiosamente ao analisarmos os dias da semana, vemos uma crescente que vai de domingo até sábado onde há uma disparada.

# Horário como maior incidência de avistamentos de OVNIs - EUA-TOP 5
HORARIO_OVNI_EUA_TOP5= 
    sqldf("select Sight_Time, count(*) Views from df_OVNI_EUA
          group by Sight_Time order by 2 desc limit 5")
# gráfico
ggplot(HORARIO_OVNI_EUA_TOP5, aes(x=Sight_Time, y=Views, label = Views)) +
geom_col(aes(fill = Views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
geom_text(size = 4, color = "white", position = position_stack(vjust = 0.5))+
labs(x=NULL, y=NULL)+
ggtitle("Horário de avistamento TOP 5 - EUA")

# Dia da Semana como maior incidência de avistamentos de OVNIs - EUA
DIA_DA_SEMANA_OVNI_EUA= 
    sqldf("select Sight_Weekday, count(*) Views from df_OVNI_EUA
          group by Sight_Weekday order by 2 desc")
# gráfico
ggplot(DIA_DA_SEMANA_OVNI_EUA, aes(x = reorder(Sight_Weekday, Views), y = Views, label = Views)) +
geom_col(aes(fill = Views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
geom_text(size = 4, color = "white", position = position_stack(vjust = 0.5))+
labs(x=NULL, y=NULL)+
ggtitle("Dia da Semana como maior incidência - EUA")     


Os dias do mês com os maiores índices de registros são os dias 1 e 15. Tendo em média quase o dobro das aparições que costuma ter nos outros dias. Já em relação aos meses, podemos notar que o segundo semestre é o período com maior probabilidade de avistamento de OVNIs. O mês de Julho (coincidentemente o mês do meu aniversário) é o campeão de registros.

# Dia da Mês como maior incidência de avistamentos de OVNIs - EUA-TOP 5
DIA_DO_MES_OVNI_EUA_TOP5= 
    sqldf("select Sight_Day, count(*) Views from df_OVNI_EUA
          group by Sight_Day order by 2 desc limit 5")
# gráfico
ggplot(DIA_DO_MES_OVNI_EUA_TOP5, aes(x = reorder(Sight_Day, Views), y = Views, label = Views)) +
geom_col(aes(fill = Views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
geom_text(size = 4, color = "white", position = position_stack(vjust = 0.5))+
labs(x=NULL, y=NULL)+
coord_flip()+
ggtitle("Dia do Mês como maior incidência - EUA")
            
# Mês como maior incidência de avistamentos de OVNIs - EUA
MES_OVNI_EUA= 
    sqldf("select Sight_Month, count(*) Views from df_OVNI_EUA
          group by Sight_Month order by 2 desc")
# gráfico
ggplot(MES_OVNI_EUA, aes(x = reorder(Sight_Month, Views), y = Views, label = Views)) +
geom_col(aes(fill = Views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
geom_text(size = 4, color = "white", position = position_stack(vjust = 0.5))+
labs(x=NULL, y=NULL)+
ggtitle("Mês como maior incidência - EUA")
            


Ao longos dos últimos 50 anos podemos notar o crescimento de registros a partir do final dos anos 90, claro, impulsionado pela evolução da tecnologia que com o auxílio da internet tornou mais fácil a documentação. Hoje, caso faça algum avistamento, posso registrá-lo em menos de um minuto no NUFORC. Podemos notar também que tivemos um pico de aparições entre 2011 e 2014, onde foi registrado a maior quantidade do último meio século. De 2015 pra cá, os números vêm diminuindo a cada ano. Ao que tudo indica, em 2018 teremos a menor quantidade de aparições de OVNIs dos últimos 15 anos.

# ANO como maior incidência de avistamentos de OVNIs - EUA
ANO_OVNI_EUA= 
sqldf("select Sight_Year, count(*) Views from df_OVNI_EUA
        group by Sight_Year order by 2 desc")
# Gráfico
ANO_OVNI_EUA$Year[ANO_OVNI_EUA$Sight_Year < 100] <- ANO_OVNI_EUA$Sight_Year + 1900
ANO_OVNI_EUA$Year[ANO_OVNI_EUA$Sight_Year < 18] <- ANO_OVNI_EUA$Year + 100
ANO_OVNI_EUA$Year[ANO_OVNI_EUA$Sight_Year ==0] <- 2000
ANO_OVNI_EUA$Year[ANO_OVNI_EUA$Sight_Year ==18] <- 2018
          
ggplot(ANO_OVNI_EUA, aes(x = reorder(Year, Year), y = Views, label = Views)) +
geom_col(aes(fill = Views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
labs(x=NULL, y=NULL)+
ggtitle("Ano como maior incidência - EUA")
  
# ANO como maior incidência de avistamentos de OVNIs - EUA-TOP 5
ANO_OVNI_EUA_TOP5= 
    sqldf("select Year, Views from ANO_OVNI_EUA
          group by Year order by 2 desc limit 5")
# gráfico
ggplot(ANO_OVNI_EUA_TOP5, aes(x = reorder(Year, Views), y = Views, label = Views)) +
geom_col(aes(fill = Views))+
scale_fill_continuous(low='grey1', high='springgreen3', guide='colorbar')+
theme(panel.background = element_blank())+
geom_text(size = 4, color = "white", position = position_stack(vjust = 0.5))+
labs(x=NULL, y=NULL)+
coord_flip()+
ggtitle("Ano como maior incidência Top 5 - EUA")


Alguns dados interessantes desses últimos 50 anos:

Média de avistamentos por ano (EUA): 1958,44
Média de avistamentos por mês (EUA): 163,20
Média de avistamentos por dia (EUA): 5,26


20-09-2018 | Update:

Pra quem quiser, segue o link do Github com o código e o dataset disponível para baixar. Além dos códigos apresentados aqui, nele também tem o código para extração de dados e análises de dados de outros países como o nosso Brasil. ;)