Projeto Ataque de tubarão
Introdução
O objetivo deste projeto é analisar e compreender os incidentes globais de ataques de tubarão, utilizando um conjunto de dados abrangente que fornece informações detalhadas sobre esses eventos. Os ataques de tubarão são eventos significativos que despertam grande interesse e preocupação em diversas comunidades e indivíduos que frequentam áreas costeiras em todo o mundo.
Por que deveríamos estar interessados nisso?
A compreensão dos padrões e tendências dos ataques de tubarão é crucial para garantir a segurança das pessoas que desfrutam das praias e atividades aquáticas. Ao entender os fatores que contribuem para esses incidentes, podemos tomar medidas proativas para reduzir os riscos e aumentar a segurança dos banhistas, surfistas, mergulhadores e outros frequentadores das áreas costeiras.
Abordagem Planejada:
Para abordar essa questão, utilizei o conjunto de dados fornecido, que contém uma variedade de informações relevantes, como ano, localização, atividade da vítima, gravidade das lesões e outros detalhes relacionados aos ataques de tubarão. A metodologia empregada envolverá análises estatísticas descritivas e inferenciais, além de técnicas de visualização de dados para identificar padrões, correlações e tendências nos dados.
Como essa analise ajudará os potenciais clientes?
A análise realizada neste projeto fornecerá informações para autoridades locais, gestores de praias, organizações de conservação marinha, pesquisadores e o público em geral. Ao compreender melhor os padrões e fatores associados aos ataques de tubarão, os potenciais clientes poderão implementar medidas de segurança mais eficazes, como sistemas de alerta precoce, estratégias de monitoramento de praias e programas de educação pública. Essas medidas têm o potencial de salvar vidas e promover um ambiente mais seguro para todos que desfrutam das atividades costeiras.
Fonte de dados
O conjunto de dados sobre incidentes globais de ataques de tubarão foi adquirido do site Kaggle, Kaggle Global Shark Attack Incidents Dataset O dataset original tem 6461 linhas 266 colunas.
Pacotes requeridos
| Biblioteca | Descrição |
|---|---|
| lubridate | Para trabalhar com datas |
| dplyr | Para manipulação avançada dos DataFrames |
| knitr | Para geração de tabelas |
| ggplot2 | Para geração de gráficos |
| plotly | Para geração de gráficos interativos |
| maps | Para trabalhar com mapas |
| rmdformats | Template customizado para documentos RMarkdown |
| mapdata | Dados geográficos adicionais para mapas |
| mapproj | Funções para projetar e transformar coordenadas |
| DT | Para geração de tabelas interativas |
Preparação dos dados
A fonte original dos dados utilizados no projeto é oKaggle Global Shark Attack Incidents Dataset O dataset Original tinha um propósito abrangente que fornece registros atualizados diariamente de incidentes de ataques de tubarões em todo o mundo. Oferece informações valiosas sobre vários aspectos de cada incidente, incluindo a data e local do ataque, detalhes específicos sobre a atividade que a vítima estava envolvida no momento e se resultou ou não em morte. Com colunas adicionais como idade, descrição da lesão e até mesmo o nome da vítima envolvida, este conjunto de dados visa informar as pessoas sobre os riscos associados às atividades aquáticas costeiras. O original tinha 266 colunas, onde da coluna 23-266 eram colunas vazias. Além disso, o dataset original possuia muitos valores ausentes em todos as colunas, sem a colocação do NA.
Quais atividades de limpeza de dados foram executadas?
Remoção de Colunas vazias, organização de colunas e adição de NA.
Primeiramente, procedemos com a remoção de todas as colunas consideradas dispensáveis, seguida pela exclusão das colunas que não seriam utilizadas no escopo do projeto, a fim de adquirir os dados relevantes. Posteriormente, realizamos a substituição de todos os espaços em branco por valores NA para lidar com dados ausentes de forma consistente.
Organização de valores e ordenação de variaveis.
A organização dos valores a partir da coluna “Type”, foi realizada uma limpeza para categorizar os tipos de ataques de tubarão em apenas dois tipos: “Unprovoked” e “Provoked”. Essa medida foi adotada para facilitar a criação de gráficos e análises estatísticas. No conjunto de dados original, a classificação estava confusa, incluindo valores como “questionável” ou “inválido”. Por isso, para simplificar, foi atribuido a esses valores o NA (não aplicável).
Organização da Coluna Activity para facilitar a leitura dos dados
A organização da coluna Activity foi realizada visando facilitar a interpretação dos dados. Muitas entradas continham descrições detalhadas, como “swimming alone”, “swimming with friends”, entre outras, o que dificultava a análise. Portanto, optei por agrupar todas essas atividades sob a categoria “swimming” para simplificar a leitura e tornar a interpretação dos dados mais eficiente. E isso foi feito para todas as atividades que estavam com essas variaçoes.
dados$Activity <- gsub("(?i).*\\b(swimming)\\b.*", "Swimming", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(fishing)\\b.*", "Fishing", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(spearfishing)\\b.*", "Spearfishing", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(surfing)\\b.*", "Surfing", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(floating)\\b.*", "Floating", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(walking)\\b.*", "Walking", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(diving)\\b.*", "Diving", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(freediving)\\b.*", "Diving", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(surf)\\b.*", "Surfing", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(paddle)\\b.*", "Paddling", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(paddleboarding)\\b.*", "Paddling", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(paddling)\\b.*", "Paddling", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(paddleskiing)\\b.*", "Paddling", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(Body Boarding)\\b.*", "Body boarding", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(bathing)\\b.*", "Bathing", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(sunbathing)\\b.*", "Bathing", dados$Activity, perl = TRUE)
dados$Activity <- gsub("(?i).*\\b(snorkeling)\\b.*", "Snorkeling", dados$Activity, perl = TRUE)Organização da Coluna Age
Durante a organização dos dados, notou-se que a coluna “Age” continha uma combinação de números e strings. Para garantir a consistência dos dados, foi realizada uma limpeza para remover todas as strings, mantendo apenas os valores numéricos. Além disso, foram ajustados os números que excediam duas casas, garantindo a uniformidade dos dados. E também mudei o nome da coluna que tava “Unnamed” para Sex, que é o sexo do individuo que foi atacado.
Organização da Coluna Injury e FATAL
Durante a preparação dos dados, foi observado que a coluna “Injury” continha uma variedade de descrições sobre os ferimentos sofridos pelas vítimas. Para simplificar a análise e a criação de tabelas, várias entradas estavam detalhadas com informações específicas, como “FATAL, but death was probably due to drowning” ou “Thigh bitten, FATAL”, entre outras. Com o objetivo de facilitar a interpretação dos dados e tornar a análise mais eficiente, todas as descrições foram uniformizadas para que estivessem associadas ao termo “FATAL”, indicando a gravidade do incidente. Essa modificação permitirá uma análise mais clara e direta dos resultados obtidos durante o estudo dos incidentes com tubarões. Além disso, alguns dados estavam como “NA” na tabela FATAL, que era para ter Y, mesmo contando como a injury sendo FATAL.
names(dados)[10] <- "FATAL"
dados$Injury <- gsub("(?i).*\\b(fatal)\\b.*", "FATAL", dados$Injury, perl = TRUE)
dados$Injury <- gsub("(?i).*\\b(No injury)\\b.*", "No injury", dados$Injury, perl = TRUE)
dados$Injury <- gsub("(?i).*\\b(Minor Injury)\\b.*", "Minor Injury", dados$Injury, perl = TRUE)
dados$Injury <- gsub("(?i).*\\b(PROVOKED INCIDENT)\\b.*", "PROVOKED INCIDENT", dados$Injury, perl = TRUE)
dados <- dados %>%
mutate(FATAL = ifelse(grepl("No injury", Injury, ignore.case = TRUE), "N", FATAL))
dados <- dados %>%
mutate(FATAL = ifelse(grepl("FATAL", Injury, ignore.case = TRUE), "Y", FATAL))
dados <- dados %>%
mutate(FATAL = ifelse(FATAL %in% c("Y", "N"), FATAL, NA))Organização Coluna Species
A organização da coluna “Species” foi um passo crucial na análise dos dados, para identificar quais espécies de tubarão estavam mais frequentemente associadas a ataques e quais eram menos comuns. Essa organização foi para facilitar a criação de gráficos e análises mais precisas, especialmente ao investigar quais espécies estavam mais relacionadas aos casos fatais. Ao compreender a distribuição das espécies de tubarão nos incidentes, para assim ter uma noção sobre os padrões de ataques e os riscos associados a cada espécie.
dados$Species <- gsub("(?i).*\\b(tiger shark)\\b.*", "Tiger shark", dados$Species, perl = TRUE)
dados$Species <- gsub("(?i).*\\b(White shark)\\b.*", "White shark", dados$Species, perl = TRUE)
dados$Species <- gsub("(?i).*\\b(White sharks)\\b.*", "White shark", dados$Species, perl = TRUE)
dados$Species <- gsub("(?i).*\\b(nurse shark)\\b.*", "Nurse shark", dados$Species, perl = TRUE)
dados$Species <- gsub("(?i).*\\b(bull shark)\\b.*", "Bull shark", dados$Species, perl = TRUE)
dados$Species <- gsub("(?i).*\\b(blue shark)\\b.*", "Blue shark", dados$Species, perl = TRUE)
dados$Species <- gsub("(?i).*\\b(lemon shark)\\b.*", "Lemon shark", dados$Species, perl = TRUE)Conjunto resultante
A tabela interativa abaixo oferece uma visão preliminar do conjunto de dados resultante após as operações de limpeza e organização. Esta visualização é uma representação inicial do estado dos dados, limitada a 100 entradas para fins de visualização.
Analise Exploratoria
As análises serão realizadas através de subconjuntos cuidadosamente selecionados, cada um correspondendo a uma análise específica. Essa abordagem permitirá a criação de gráficos e tabelas que proporcionarão uma visualização precisa e detalhada dos dados. Cada observação terá um propósito definido, o qual será minuciosamente explicado ao longo da análise.
Organização do conjunto que vai ser trabalhado
Foi criado um novo conjunto de dados focando nas informações sobre os países e o tipo de ataque de tubarão. Para isso, selecionamos as colunas “Country” e “Type” do conjunto de dados original. Em seguida, organizamos esses dados em três grupos distintos: os ataques “Provoked”, os “Unprovoked” e aqueles em que o tipo de ataque não foi especificado (NA). Cada grupo foi separado e organizado de acordo com o tipo de ataque.
new_datasetCT <- dados[, c("Country", "Type")]
provoked <- new_datasetCT[new_datasetCT$Type == "Provoked", ]
unprovoked <- new_datasetCT[new_datasetCT$Type == "Unprovoked", ]
na_values <- new_datasetCT[is.na(new_datasetCT$Type), ]
new_ordered_dataset <- rbind(provoked, unprovoked, na_values)Agora, um conjunto de dados fazendo um processo de organização do dataset com base na coluna “FATAL”. A organização foi crucial para analisar e compreender melhor as incidências de ataques de tubarão, quais os tubarões que estão mais relacionados com os resultados fatais.
new_datasetIFS <- dados[, c("Injury", "FATAL", "Species")]
new_datasetIFS <- new_datasetIFS %>%
arrange(FATAL)Foi criado um novo conjunto de dados que combina as informações de país (Country) e idade (Age). Para ver em qual pais o indice de pessoas menos de 18 anos foram vitimas. Além disso, uma nova coluna foi adicionada para indicar se as vítimas eram adultas ou não. Para fazer isso, verificamos se a idade registrada era maior que 18 anos.
dados$Age <- as.numeric(dados$Age)
new_datasetCA <- data.frame(COUNTRY = dados$Country, Age = dados$Age)
new_datasetCA$ADULT <- ifelse(new_datasetCA$Age >= 18, "Y", "N")
new_datasetCA$ADULT <- factor(new_datasetCA$ADULT, levels = c("Y", "N"))Essa junção das colunas ‘Activity’, ‘Species’ e ‘FATAL’ para observar a relação entre as atividades,species e os ataques fatais de tubarão. Essa combinação nos permitirá analisar quais atividades estiveram mais frequentemente associadas a ataques fatais e identificar possíveis padrões ou tendências.
new_datasetASF <- data.frame(Activity = dados$Activity,
Species = dados$Species,
FATAL = factor(dados$FATAL, levels = c("Y", "N", NA)))Cidades e ataques provocados
provoked_counts <- table(provoked$Country)
provoked_counts_df <- as.data.frame(provoked_counts)
provoked_counts_df <- provoked_counts_df[order(provoked_counts_df$Freq, decreasing = TRUE), ]
# Gráfico das 5 cidades com mais ataques provocados
ggplot(head(provoked_counts_df, 5), aes(x = reorder(Var1, Freq), y = Freq)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Top 5 Cidades com Mais Ataques Provocados",
x = "Cidade",
y = "Número de Ataques") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))# Contando o número de ataques não provocados por cidade
unprovoked_counts <- table(unprovoked$Country)
unprovoked_counts_df <- as.data.frame(unprovoked_counts)
unprovoked_counts_df <- unprovoked_counts_df[order(unprovoked_counts_df$Freq, decreasing = TRUE), ]
# Gráfico das 5 cidades com mais ataques não provocados
ggplot(head(unprovoked_counts_df, 5), aes(x = reorder(Var1, Freq), y = Freq)) +
geom_bar(stat = "identity", fill = "salmon", color = "black") +
labs(title = "Top 5 Cidades com Mais Ataques Não Provocados",
x = "Cidade",
y = "Número de Ataques") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))