Visão Geral

Column

Fatores por documento, dimensão e Tipo de acidente

Visão Geral Gráficos

Column

Fatores por documento, dimensão e Tipo de acidente

Column

Núvem das frases dos Fatores em todos os documentos

NULL

Agrupamento de fatores de todos os documentos

Visão por Acidente

Column

Fatores por Tipo de acidente

Column

Mapa de calor por acidente

Mapa de calor dos fatores

Visão por Modelo de Análise

Column

Fatores por Dimensão

Column

Núvem de palavras dos relatório nas Dimensões Indivíduo e Organização

NULL

Núvem de palavras dos relatório na Dimensão Trabalho

NULL
---
title: "Human Factor 2"
author: "Grupo EGC:"
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
    social: menu
    source_code: embed
---

```{r setup, include=FALSE}

library(flexdashboard)
library(tidyverse)
library(dplyr)
library(pdftools)
library(magrittr)
library(tidyverse) # Manipulacao eficiente de dados
library(tidytext) # Manipulacao eficiente de texto
library(textreadr) # Leitura de pdf para texto
library(tm) # Pacote de mineracao de texto com stopwords 
library(wordcloud) # Grafico nuvem de palavras
library(igraph)
library(ggraph)
library(ggplot2)
library(RRPP)
library(SnowballC)
library(glue)
library(purrr)
library(ngram)




## Função para ler, organizar, limpar palavras e normalizar o texto
setwd("~/Text Mining/HumanFactor2")

# Arquivo pdf
library(reader)
Pdf_P20 <- "~/Text Mining/HumanFactor2/Incendio_P20.pdf"
Pdf_P36 <- "~/Text Mining/HumanFactor2/Explosao_Naufragio_P36.pdf"
Pdf_P48 <- "~/Text Mining/HumanFactor2/P48_Incendio.pdf"
Pdf_P34 <- "~/Text Mining/HumanFactor2/Abandono_producao_P34.pdf"
Pdf_PSM <- "~/Text Mining/HumanFactor2/ExplosaoSM_110215.pdf"
Pdf_P69 <- "~/Text Mining/HumanFactor2/Fatalidade_SS_69_WestEminence.pdf"
Pdf_SM1 <- "~/Text Mining/HumanFactor2/investigacao_ExplosaoSM110215.pdf"
Pdf_PFR <- "~/Text Mining/HumanFactor2/vazamento_frade.pdf"
Pdf_P83 <- "~/Text Mining/HumanFactor2/Balroamento_obitoSS83.pdf"
Pdf_sonda <- "~/Text Mining/HumanFactor2/Explosao_obitossondanorbeviii.pdf"
Pdf_Oleo <- "~/Text Mining/HumanFactor2/ExsudacaoDeOleo.pdf"

files <- list.files(pattern = "pdf$")



.Le_Organiza <- function(arquivoPdf) {
    Texto <- arquivoPdf %>% 
              read_pdf() %>% 
              as.tibble() %>% 
              select(text) 
              return(Texto)
}

P20 <- .Le_Organiza(Pdf_P20)
P36 <-.Le_Organiza(Pdf_P36)
P48 <- .Le_Organiza(Pdf_P48)
P34 <- .Le_Organiza(Pdf_P34)
PSM <- .Le_Organiza(Pdf_PSM) 
P69 <- .Le_Organiza(Pdf_P69)
PSM1 <- .Le_Organiza(Pdf_SM1)
PFR <- .Le_Organiza(Pdf_PFR)
P83<- .Le_Organiza(Pdf_P83)
Psonda <- .Le_Organiza(Pdf_sonda)
POleo  <- .Le_Organiza(Pdf_Oleo)


## Functon return phases reletec with a factor and 3 exemplos of these phrases
.Frases <- function(texto, vetor){
  
  # Create our polit_pattern again by collapsing "factors"
polit_pattern <- glue_collapse(vetor, sep = "|")

# Match one or more word characters or punctuations
context <-"([\\w[:punct:]]+\\s){0,20}"

# Add this pattern in front and after the polit_pattern
polit_pattern_with_context <- glue(
  "{context}({polit_pattern})\\s?{context}"
)
frases <- grep(
  texto,
  pattern = polit_pattern_with_context, ignore.case = TRUE, value = TRUE
)
frases <- as.data.frame.character(frases)
return(frases)
}


F22 <- c('riscos?', 'avaliação', 'verificação', 'análises?', 'avaliou', 'avaliaram')
F28 <-  c("considerção", "aprovação", "consciência","aprovação", "planejamento","segurança","respeito","avaliação","permissão","segurança","risco")
F29 <-  c("considerção","consciência","aprovação","planejamento","segurança","respeito","avaliação","permissão","segurança","monitor")
F51 <- c('não\\scumpriu', 'não\\spossui', 'ausentes?', 'normas?','regras?','procedimentos?','regulamentos?')
F52 <-  c("alocação","jornada","cansaço","demasiado","trabalhos?")
F56 <-  c("feedback","sistema")       
F57 <- c('equipamentos?', 'configuração', 'dimensionamento', 'especificação','rupturas','instalação')
F58 <- c('manutenção', 'registro', 'notas')
F61 <-  c("comunicação", "canais?","rádios?","esclarecimentos?","orientação")
F87 <- c('direcionou', 'ineficácia', 'comando', 'coordenação','lideranças?','tomada', 'decisão','decisões', 'responsáveis')
F104 <- c('gestão\\sde\\smudanças?', 'gerenciamento\\sde\\smudanças?')
F105 <- c("segurança")
F118 <- c('trabalho', 'permissão')

vetores_fatores <- list(F22, F28, F29, F51, F52, F56, F57, F58, F61, F87, F104, F105, F118)

# Function to return a wordcloud and 3 main prases from a factor


.Wc_3f <- function(phrases){
frequency <- freq_terms(
  phrases,
  top = 15,
  at.least = 1,
  stopwords("pt"))
  wc <- wordcloud(frequency$WORD,frequency$FREQ,
    max.words = 80,
    colors = c("grey80", "darkgoldenrod1","tomato"))
  return(phrases[1:3])
  return(wc)
}

# FUNÇÃO para fazer tabela dos fatores e frases correspondentes


.Analise_fatores_tb <- function(Texto, Tipo_Acidente){


### Fator linha 51 "Regras e instruções de trabalho projetadas"
F51_Regras_projetadas <- .Frases(Texto$text,F51)

### Fator linha 22: Análise dos riscos na tomada de decisão
F22_Decisao <- .Frases(Texto$text, F22)

## Fator linha 87: Trabalho	Relações de Trabalho	Liderança de Equipe	Capacidade de coordenação 
F87_coordena <- .Frases(Texto$text, F87)

## Fator linha 58 Trabalho	Condições de Trabalho	Design de interfaces	Inspeção / manutenção
F58_manutencao <- .Frases(Texto$text, F58)

## Fator linha 104 Organização	Gestão e organização do trabalho 	Gerenciamento de mudanças
F104Gerir_mudanca <- .Frases(Texto$text, F104)

## Fator linha 57 Design de interfaces,	Qualidade do equipamento
F57_QualiEquipamento <- .Frases(Texto$text, F57)

## Fator linha 118 Organização	Gestão e organização do trabalho 	Planejamento e Práticas de trabalho
F118_PraticaTrabalho <- .Frases(Texto$text, F118)

## Fator linha 28 Indivíduo	Competência / Repertório de Ações	Habilidades não técnicas	Consciência situacional	Consciência e respeito pelo risco	
F28_ConscienciaRespeitoRisco <- .Frases(Texto$text, F28)

## Fator linha 29 Indivíduo	Competência / Repertório de Ações	Habilidades não técnicas	Consciência situacional	Atenção aos detalhes	Consciência situacional; atenção aos detalhes; falha no monitoramento do trabalho
F29_ConscienciaMonitora <- .Frases(Texto$text, F29)

## Fator linha 52 Trabalho	Condições de Trabalho	Design do trabalho	Carga de trabalho	

F52_CargaTrabalho <-  .Frases(Texto$text, F52)

## Fator linha 56 Trabalho	Condições de Trabalho	Design de interfaces	Feedback do sistema técnico
F56_FeedbackSistema <-  .Frases(Texto$text, F56)

## Fator linha 61 Trabalho	Condições de Trabalho	Design de interfaces	Informação	Canais de comunicação	
F61_Comunicacao <-  .Frases(Texto$text, F61)

## Fator linha 105 Organização	Gestão e organização do trabalho 	Cultura de segurança 	Prioridade à segurança


F105_PriorSeguranca <-  .Frases(Texto$text, F105)



F22_Decisao <- F22_Decisao %>%
 mutate(Fator = "F22_Decisao", text = F22_Decisao, Dimensao = "Indivíduo") 

F51_Regras_projetadas <- F51_Regras_projetadas  %>% mutate(Fator = "F51_Regras_projetadas", text = F51_Regras_projetadas, Dimensao = "Trabalho") 

F58_manutencao <- F58_manutencao %>% mutate(Fator = "F58_manutencao", text = F58_manutencao, Dimensao = "Trabalho")
  
F57_QualiEquipamento <- F57_QualiEquipamento %>% mutate(Fator = "F57_QualiEquipamento", text = F57_QualiEquipamento, Dimensao = "Trabalho" )

F87_coordena <- F87_coordena %>% mutate(Fator = "F87_coordena", text = F87_coordena, Dimensao = "Organização")

F104Gerir_mudanca <- F104Gerir_mudanca %>% mutate(Fator = "F104Gerir_mudanca", text = F104Gerir_mudanca, Dimensao = "Organização")

F118_PraticaTrabalho <- F118_PraticaTrabalho %>% mutate(Fator = "F118_PraticaTrabalho", text = F118_PraticaTrabalho, Dimensao = "Trabalho")

F28_ConscienciaRespeitoRisco <- F28_ConscienciaRespeitoRisco %>% mutate(Fator = "F28_ConscienciaRespeitoRisco", text = F28_ConscienciaRespeitoRisco, Dimensao = "Indivíduo")

F29_ConscienciaMonitora <- F29_ConscienciaMonitora %>% mutate(Fator = "F29_ConscienciaMonitora", text = F29_ConscienciaMonitora, Dimensao = "Indivíduo")

F52_CargaTrabalho <- F52_CargaTrabalho %>% mutate(Fator = "F52_CargaTrabalho", text = F52_CargaTrabalho, Dimensao = "Trabalho")

F56_FeedbackSistema <- F56_FeedbackSistema %>% mutate(Fator = "F56_FeedbackSistema", text = F56_FeedbackSistema,  Dimensao = "Trabalho")

F61_Comunicacao <- F61_Comunicacao %>% mutate(Fator = "F61_Comunicacao", text = F61_Comunicacao, Dimensao = "Organização")

F105_PriorSeguranca <- F105_PriorSeguranca %>% mutate(Fator = "F105_PriorSeguranca", text = F105_PriorSeguranca, Dimensao = "Trabalho")


#put together in a big data frame
Frases_por_fator <- bind_rows(F22_Decisao[,2:4], 
                              F51_Regras_projetadas[,2:4], 
                              F58_manutencao[,2:4],
                              F57_QualiEquipamento[,2:4],
                              F87_coordena[,2:4], 
                              F104Gerir_mudanca[,2:4],
                              F118_PraticaTrabalho[,2:4], 
                              F28_ConscienciaRespeitoRisco[,2:4], 
                              F29_ConscienciaMonitora[,2:4], 
                              F52_CargaTrabalho[,2:4],
                              F56_FeedbackSistema[,2:4],
                              F61_Comunicacao[,2:4],
                              F105_PriorSeguranca[,2:4])

Frases_por_fator <- mutate(Frases_por_fator,Tipo_Acidente = Tipo_Acidente) 


return(Frases_por_fator)

}


# FUNÇÃO Grafico do documento

.Analise_Fatores_grafico <- function(Frases_por_fator){
print(
   Frases_por_fator %>%
    group_by(Fator, Dimensao, Tipo_Acidente) %>% 
    summarise(Qnt_Frases = n())  %>% 
    ggplot(aes(x=Qnt_Frases , y= Fator, size = Qnt_Frases, color=Dimensao)) +
    geom_point(alpha=0.5) +
    scale_size(range = c(.1, 20), name="Fatores no Documento")
)
  
}

##  FUNCAO Núvem do documento

.Nuvem_Fatores <- function(texto){
library(qdap)
as.character(texto)
frequency <- freq_terms(
texto,
top = 20,
at.least = 1,
stopwords("pt"))

print(wordcloud(frequency$WORD,frequency$FREQ,
    max.words = 60,
    colors = c("grey80", "darkgoldenrod1","tomato")))


}


tb_P20 <- .Analise_fatores_tb(P20, "Incendio")
tb_P36 <- .Analise_fatores_tb(P36, "Naufragio")
tb_P48 <-.Analise_fatores_tb(P48, "Incendio")
tb_P34 <- .Analise_fatores_tb(P34, "Abandono_Producao")
tb_PSM <- .Analise_fatores_tb(PSM, "Explosao")
tb_P69 <- .Analise_fatores_tb(P69, "Fatalidade")
tb_PSM1 <- .Analise_fatores_tb(PSM1, "Explosao")
tb_PFR <- .Analise_fatores_tb(PFR, "Vazamento")
tb_P83 <- .Analise_fatores_tb(P83, "Balroamento")
tb_Psonda <- .Analise_fatores_tb(Psonda, "Explosao")
tb_POleo <- .Analise_fatores_tb(POleo, "ExsudaçãoDeOleo")

data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)






```

Visão Geral
=======================================================================

Column {data-width=900}
-----------------------------------------------------------------------

### Fatores por documento, dimensão e Tipo de acidente

```{r}

data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)


data1 <- data %>%
    group_by(Fator, Dimensao, Tipo_Acidente) %>%
   summarise(Qnt_Frases = n(),
               )
library(plotly)
library(gapminder)
p <- data1 %>%
  plot_ly(
    x = ~Qnt_Frases, 
    y = ~Fator, 
    size = ~Qnt_Frases, 
    color = ~Fator, 
    frame = ~Tipo_Acidente, 
    text = ~Qnt_Frases
    , 
    hoverinfo = "text",
    type = 'scatter',
    mode = 'markers'
  ) %>%
  layout(
    xaxis = list(
      type = "log"
    )
  )
p

```


Visão Geral Gráficos
=======================================================================


Column {data-width=600}
-----------------------------------------------------------------------


### Fatores por documento, dimensão e Tipo de acidente

```{r}

library(packcircles)
library(ggplot2)

data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)



data2 <- data %>%
select(Fator, Dimensao, Tipo_Acidente)%>%
    group_by(Fator, Dimensao) %>%
   summarise(count = n())
names(data2)  <- c( "group","individual", "value")
 
 data <- data2
 
# Generate the layout. This function return a dataframe with one line per bubble. 
# It gives its center (x and y) and its radius, proportional of the value
packing <- circleProgressiveLayout(data$value, sizetype='area')
 
# We can add these packing information to the initial data frame
data <- cbind(data, packing)
 
# Check that radius is proportional to value. We don't want a linear relationship, since it is the AREA that must be proportionnal to the value
# plot(data$radius, data$value)
 
# The next step is to go from one center + a radius to the coordinates of a circle that
# is drawn by a multitude of straight lines.
dat.gg <- circleLayoutVertices(packing, npoints=50)
 
# Make the plot
ggplot() + 
  
  # Make the bubbles 
  geom_polygon(data = dat.gg, aes(x, y, group = id, fill=as.factor(id)), colour = "black", alpha = 0.6) +
  
  # Add text in the center of each bubble + control its size
  geom_text(data = data, aes(x, y, size=value, label = group)) +
  scale_size_continuous(range = c(1,4)) +
  
  # General theme:
  theme_void() + 
    theme(legend.position="none")+
  coord_equal()


```

Column {data-width=350}
-----------------------------------------------------------------------

### Núvem das frases dos Fatores em todos os documentos

```{r}


data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)

.Nuvem_Fatores(data$text)

```

### Agrupamento de fatores de todos os documentos

```{r}

data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)


   data %>%
    group_by(Fator, Dimensao, Tipo_Acidente) %>% 
    summarise(Qnt_Frases = n())  %>% 
    ggplot(aes(x=Qnt_Frases , y= Fator, size = Qnt_Frases, color=Tipo_Acidente)) +
    geom_point(alpha=0.5) +
    scale_size(range = c(.1, 20), name="Fatores no Documento")


```



Visão por Acidente
=======================================================================

Column {data-width=650}
-----------------------------------------------------------------------

### Fatores por Tipo de acidente

```{r}
data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)



data3 <- data %>%
    group_by(Fator, Dimensao, Tipo_Acidente) %>%
   summarise(Qnt_Frases = n(),
               )



library(plotly)
library(gapminder)
p <- data3 %>%
  plot_ly(
    x = ~Qnt_Frases, 
    y = ~Tipo_Acidente, 
    size = ~Qnt_Frases, 
    color = ~Tipo_Acidente, 
    frame = ~Dimensao, 
    text = ~Fator
    , 
    hoverinfo = "text",
    type = 'scatter',
    mode = 'markers'
  ) %>%
  layout(
    xaxis = list(
      type = "log"
    )
  )
p

```


Column {data-width=350}
-----------------------------------------------------------------------

### Mapa de calor por acidente

```{r}
data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)


data4 <- data %>%
select(Fator, Dimensao, Tipo_Acidente)%>%
    group_by(Fator, Tipo_Acidente) %>%
   summarise(count = n())


ggplot(data4, aes(fill=Tipo_Acidente, y=Fator, x=count)) + 
    geom_bar(position="fill", stat="identity") + ggtitle("Fatores humanos por relatório de acidente")

```

### Mapa de calor dos fatores

```{r}
data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)


data5 <- data %>%
select(Fator, Dimensao, Tipo_Acidente)%>%
    group_by(Fator, Tipo_Acidente) %>%
   summarise(count = n())

names(data5) <- c("fator_humano","plataforma", "percentual")

ggplot(data5, aes(fill=fator_humano, y=plataforma, x=percentual)) + 
    geom_bar(position="fill", stat="identity") + ggtitle("Fatores humanos por relatório de acidente")

```

Visão por Modelo de Análise
=======================================================================

Column {data-width=650}
-----------------------------------------------------------------------

### Fatores por Dimensão

```{r}
data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)



data3 <- data %>%
    group_by(Fator, Dimensao, Tipo_Acidente) %>%
   summarise(Qnt_Frases = n(),
               )



library(plotly)
library(gapminder)
p <- data3 %>%
  plot_ly(
    x = ~Qnt_Frases, 
    y = ~Dimensao, 
    size = ~Qnt_Frases, 
    color = ~Dimensao, 
    frame = ~Fator, 
    text = ~Tipo_Acidente
    , 
    hoverinfo = "text",
    type = 'scatter',
    mode = 'markers'
  ) %>%
  layout(
    xaxis = list(
      type = "log"
    )
  )
p

```


Column {data-width=350}
-----------------------------------------------------------------------

### Núvem de palavras dos relatório nas Dimensões Indivíduo e Organização

```{r message=FALSE}
data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)


dataio <- data %>%
         filter(Dimensao != "Trabalho")

.Nuvem_Fatores(dataio$text)

```

### Núvem de palavras dos relatório na Dimensão Trabalho

```{r}

library(qdap)

data <- bind_rows(tb_P36, tb_P48, tb_P20,tb_P34,tb_PSM,tb_P69,tb_PSM1,tb_PFR,tb_P83,tb_Psonda,tb_POleo)


datat <- data %>%
         filter(Dimensao == "Trabalho")



frequency <- freq_terms(
datat$text,
top = 20,
at.least = 1,
stopwords("pt"))

print(wordcloud(frequency$WORD,frequency$FREQ,
    max.words = 60,
    colors = c("green", "blue","tomato")))





```