# Instalando e carregando o pacote tm
pacotes <- c("tm", "readr")
lapply(pacotes, library, character.only = TRUE)
## Loading required package: NLP
## [[1]]
## [1] "tm"        "NLP"       "stats"     "graphics"  "grDevices" "utils"    
## [7] "datasets"  "methods"   "base"     
## 
## [[2]]
##  [1] "readr"     "tm"        "NLP"       "stats"     "graphics"  "grDevices"
##  [7] "utils"     "datasets"  "methods"   "base"
# Preparando dados
apts <- read_csv("teste_indicium_precificacao.csv")
## Rows: 48894 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr   (5): nome, host_name, bairro_group, bairro, room_type
## dbl  (10): id, host_id, latitude, longitude, price, minimo_noites, numero_de...
## date  (1): ultima_review
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
IQR <- IQR(apts$price)

limite_superior_price <- quantile(apts$price, 0.99) + 1.5 * IQR

apts$outlier <- ifelse(apts$price > limite_superior_price, 1, 0)

outliers <- apts[apts$outlier == 1, ]

# Criando um objeto que contém todos os nomes referentes as observações do percentil 99 da variável "price" (alto valor)
nomes <- Corpus(VectorSource(outliers$nome))

# "Limpando" os nomes
nomes <- tm_map(nomes, content_transformer(tolower)) # converte todas as letras para minúsculo
nomes <- tm_map(nomes, removePunctuation)            # remove toda a pontuação
nomes <- tm_map(nomes, removeNumbers)                # remove todos os números
nomes <- tm_map(nomes, removeWords, stopwords("portuguese")) # remove todas as palavras que "pouco" contribuem para o significado do texto 

# Criando uma matriz com os nomes
matriz_nomes <- DocumentTermMatrix(nomes)

# Analisando quais palavras aparecem ao menos 35 vezes nos nomes da matriz
findFreqTerms(matriz_nomes, lowfreq = 35)
## [1] "luxury"    "bedroom"   "townhouse"