# 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"