{"id":22446906,"url":"https://github.com/albertofaraujo/r_mongodb_r_airbnb","last_synced_at":"2025-10-28T13:34:35.541Z","repository":{"id":235263940,"uuid":"790397399","full_name":"AlbertoFAraujo/R_MongoDB_R_airbnb","owner":"AlbertoFAraujo","description":"Integrar os dados de uma base contida no banco de dados MongoDB e realizar um Map Reduce somente com as funções nativas do mongo","archived":false,"fork":false,"pushed_at":"2024-04-22T20:36:29.000Z","size":29317,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-01T15:46:05.203Z","etag":null,"topics":["devtools","ggplot2","mongodb","plotly","rstudio"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlbertoFAraujo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-04-22T20:01:34.000Z","updated_at":"2024-04-22T20:36:33.000Z","dependencies_parsed_at":"2024-04-22T21:51:14.159Z","dependency_job_id":null,"html_url":"https://github.com/AlbertoFAraujo/R_MongoDB_R_airbnb","commit_stats":null,"previous_names":["albertofaraujo/r_mongodb_r_airbnb"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlbertoFAraujo%2FR_MongoDB_R_airbnb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlbertoFAraujo%2FR_MongoDB_R_airbnb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlbertoFAraujo%2FR_MongoDB_R_airbnb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlbertoFAraujo%2FR_MongoDB_R_airbnb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlbertoFAraujo","download_url":"https://codeload.github.com/AlbertoFAraujo/R_MongoDB_R_airbnb/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245833232,"owners_count":20679811,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devtools","ggplot2","mongodb","plotly","rstudio"],"created_at":"2024-12-06T04:12:51.192Z","updated_at":"2025-10-28T13:34:30.508Z","avatar_url":"https://github.com/AlbertoFAraujo.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"![image](https://github.com/AlbertoFAraujo/R_MongoDB_R_airbnb/assets/105552990/f88f67b4-373f-41a1-ac46-b21ec3137c97)\n\n### Tecnologias utilizadas: \n| [\u003cimg align=\"center\" alt=\"R_studio\" height=\"60\" width=\"60\" src=\"https://github.com/AlbertoFAraujo/R_Petrobras/assets/105552990/02dff6df-07be-43dc-8b35-21d06eabf9e1\"\u003e](https://posit.co/download/rstudio-desktop/) | [\u003cimg align=\"center\" alt=\"ggplot\" height=\"60\" width=\"60\" src=\"https://github.com/AlbertoFAraujo/R_Petrobras/assets/105552990/db55b001-0d4c-42eb-beb2-5131151c7114\"\u003e](https://plotly.com/r/) | [\u003cimg align=\"center\" alt=\"plotly\" height=\"60\" width=\"60\" src=\"https://github.com/AlbertoFAraujo/R_Petrobras/assets/105552990/5f681062-c399-44af-a658-23e94b8b656f\"\u003e](https://plotly.com/r/) | [\u003cimg align=\"center\" alt=\"mongodb\" height=\"60\" width=\"60\" src=\"https://github.com/AlbertoFAraujo/R_MongoDB_R_airbnb/assets/105552990/e0104b01-1696-45a3-9ae6-4769dd898722\"\u003e](https://www.mongodb.com/docs/) | [\u003cimg align=\"center\" alt=\"devtools\" height=\"60\" width=\"60\" src=\"https://github.com/AlbertoFAraujo/R_MongoDB_R_airbnb/assets/105552990/d8377fe5-aade-4bbd-8331-812901e2d8c1\"\u003e](https://www.rdocumentation.org/packages/devtools/versions/2.4.5) |\n|:---:|:---:|:---:|:---:|:---:|\n| R Studio | Ggplot2 | Plotly | MongoDB | Devtools |\n\n- **RStudio:** Ambiente integrado para desenvolvimento em R, oferecendo ferramentas para escrita, execução e depuração de código.\n- **Ggplot2:** Pacote para criação de visualizações de dados elegantes e flexíveis em R.\n- **Plotly:** Biblioteca interativa para criação de gráficos e visualizações em diversas linguagens.\n- **MongoDB:** Um banco de dados NoSQL de alta performance, orientado a documentos, projetado para escalabilidade e flexibilidade.\n- **Devtools:** Conjunto de ferramentas e utilitários para desenvolvedores, incluindo bibliotecas, frameworks, ambientes de desenvolvimento integrado (IDEs) e outros recursos para facilitar o desenvolvimento de software.\n\u003chr\u003e\n\n### Objetivo: \n\nIntegrar os dados de uma base contida no banco de dados MongoDB e realizar um Map Reduce somente com as funções nativas do mongo para identicar as seguintes questões:\n\n1.  Total do número de avaliações dos quartos? E por faixa?\n2.  Quantas propriedades possuem acomodações acima de 2?\n3.  Quantas propriedades não aceitam nenhuma pessoa extra?\n\nBase de dados: \u003chttps://insideairbnb.com/get-the-data/\u003e\n\u003chr\u003e\n\n### Script R: \n```r\n# Ajustar as casas decimais\noptions(scipen = 999, digits = 4)\n\n# Definir um espelho de CRAN\noptions(repos = \"http://cran.rstudio.com/\")\n```\n```r\n# Instalando os pacores necessários\nutils::install.packages(\"devtools\")\ninstall.packages(\"mongolite\")\ninstall.packages(\"plotly\")\n```\n\n```r\n# Carregando as bibliotecas\nlibrary(devtools)\nlibrary(mongolite)\nlibrary(ggplot2)\nlibrary(dplyr)\nlibrary(plotly)\n```\n```r\n# Criando a conexão com banco de dados\n\ncon \u003c- mongolite::mongo(\n  collection = 'airbnb',\n  db = 'dbairbnb',\n  url = 'mongodb://localhost:27017',\n  verbose = FALSE,\n  options = ssl_options()\n)\n```\n```r\n# Visualizar a conexão\nprint(con)\n```\n```r\n# Visualizar os dados\ndados \u003c- con$find()\nhead(dados,1)\n```\n```r\n# Verifica o número de registros\ncon$count('{}')\n```\n[1] 5555\n\n```r\n# Verificando o nome das variáveis (colunas)\nnames(dados)\n```\n| Número | Variável                | Número | Variável                | Número | Variável                | Número | Variável                |\n|--------|-------------------------|--------|-------------------------|--------|-------------------------|--------|-------------------------|\n| [1]    | listing_url             | [11]   | house_rules             | [21]   | last_review             | [31]   | extra_people            |\n| [2]    | name                    | [12]   | property_type           | [22]   | accommodates            | [32]   | guests_included         |\n| [3]    | summary                 | [13]   | room_type               | [23]   | bedrooms                | [33]   | images                  |\n| [4]    | space                   | [14]   | bed_type                | [24]   | beds                    | [34]   | host                    |\n| [5]    | description             | [15]   | minimum_nights          | [25]   | number_of_reviews       | [35]   | address                 |\n| [6]    | neighborhood_overview   | [16]   | maximum_nights          | [26]   | bathrooms               | [36]   | availability            |\n| [7]    | notes                   | [17]   | cancellation_policy     | [27]   | amenities               | [37]   | review_scores           |\n| [8]    | transit                 | [18]   | last_scraped            | [28]   | price                   | [38]   | reviews                 |\n| [9]    | access                  | [19]   | calendar_last_scraped   | [29]   | security_deposit        | [39]   | weekly_price            |\n| [10]   | interaction             | [20]   | first_review            | [30]   | cleaning_fee            | [40]   | monthly_price           |\n|        |                         |        |                         |        |                         | [41]   | reviews_per_month       |\n```r\n# Filtrando por query e fields no mongo\nfiltro \u003c- con$find(\n  query = '{\"property_type\":\"House\"}',\n  fields = '{\"name\": true,\"maximum_nights\": true, \"price\": true, \"_id\": false}',\n  sort = '{\"price\": -1}' # ordenar desc\n)\nhead(filtro)\n```\n| Número | name                                              | Número | maximum_nights | Número | price |\n|--------|---------------------------------------------------|--------|----------------|--------|-------|\n| [1]    | Stunning Waterfront Marina bay house in Sai Kung | [1]    | 1125           | [1]    | 7002  |\n| [2]    | Barra da Tijuca beach house                      | [2]    | 1125           | [2]    | 5595  |\n| [3]    | Casa MARAVILHOSA, 5 suites OLIMPIADAS RIO 2016   | [3]    | 60             | [3]    | 5595  |\n| [4]    | LUXURY HOUSE IN BARRA DA TIJUCA                  | [4]    | 180            | [4]    | 5502  |\n| [5]    | 鮀城小家-感受不一样的异地之旅                        | [5]    | 2              | [5]    | 4828  |\n| [6]    | IPANEMA, Rio de Janeiro, Brasil                  | [6]    | 1125           | [6]    | 3730  |\n\n```r\n# Contagem do número de visualizações dos quartos\nresultado2 \u003c- con$mapreduce(\n  map = \"function(){\n          emit(Math.floor(this.number_of_reviews), 1)\n        }\",\n  reduce = \"function(id, counts){\n          return Array.sum(counts)\n          }\"\n)\n\nnames(resultado2) \u003c- c('numero_reviews','contagem')\n```\n```r\n# Gerando o gráfico do número de visualizações por propriedades\nfig \u003c- plot_ly(resultado2, x = ~numero_reviews, y = ~contagem, type = 'bar',\n        marker = list(color = 'rgb(158,202,225)',\n                      line = list(color = 'rgb(8,48,107)',\n                                  width = 1.5)))\nfig \u003c- fig %\u003e% layout(title = \"Número de avaliações por propriedadades\",\n         xaxis = list(title = \"Total de Visualizações\"),\n         yaxis = list(title = \"Contagem total\"))\nfig\n```\n![1](https://github.com/AlbertoFAraujo/R_MongoDB_R_airbnb/assets/105552990/a5f69278-853b-42a1-98be-afa69bfcf856)\n\n- 1388 propriedades não obtiveram nenhuma visualização;\n- 511 propriedades obtiveram pelo menos 1 visualização;\n- 329 propriedades obtiveram pelo menos 2 visualizações.\n\n```r\n# Número de visualizações por faixa\nresultado3 \u003c- con$mapreduce(\n  map = \"function(){\n            emit(Math.floor(this.number_of_reviews/100) * 100, 1)\n            }\",\n  reduce = \"function(id, counts){\n    return Array.sum(counts)\n  }\"\n)\n\nnames(resultado3) \u003c- c('numero_reviews','contagem')\n```\n```r\n# Gerando o gráfico do número de visualizações por propriedades por faixa\n\nfig \u003c- plot_ly(resultado3, x = ~numero_reviews, y = ~contagem, type = 'bar',\n        marker = list(color = 'rgb(158,202,225)',\n                      line = list(color = 'rgb(8,48,107)',\n                                  width = 1.5)))\nfig \u003c- fig %\u003e% layout(title = \"Número de visualizazções por faixa\",\n         xaxis = list(title = \"Faixa de visualizações\"),\n         yaxis = list(title = \"Contagem Total\"))\n\nfig\n```\n![2](https://github.com/AlbertoFAraujo/R_MongoDB_R_airbnb/assets/105552990/494e59a6-03f2-4826-81ea-b955e95c2ade)\n\n**Resumo da análise:**\n\n-   5105 propriedades obtiveram entre 0 e 100 visualizações;\n-   351 propriedades obtiveram entre 100 e 200 visualizações;\n-   80 propriedades obtiveram entre 200 e 300 visualizações;\n-   13 propriedades obtiveram entre 300 e 400 visualizações;\n-   5 propriedades obtiveram entre 400 e 500 visualizações;\n-   1 propriedade obteve 500 ou mais visualizações.\n\n```r\n# Quantas propriedades possuem o maior número de quartos? E a segunda maior?\n\nresultado4 \u003c- con$mapreduce(\n  map = \"function(){\n          if (this.accommodates \u003c= 100){\n            emit(Math.floor(this.accommodates), 1)\n          }\n        }\",\n  reduce = \"function(id, counts){\n          return Array.sum(counts);\n          }\"\n)\n\nnames(resultado4) \u003c- c('numero_acomodações','contagem')\nresultado4 \u003c- resultado4[order(resultado4$numero_acomodações),]\nresultado4\n```\n| Numero_acomodações | Contagem |\n|--------------------|----------|\n| 8                  | 1        |\n| 15                 | 2        |\n| 14                 | 3        |\n| 7                  | 4        |\n| 5                  | 5        |\n| 1                  | 6        |\n| 3                  | 7        |\n| 9                  | 8        |\n| 2                  | 9        |\n| 11                 | 10       |\n| 6                  | 11       |\n| 12                 | 12       |\n| 16                 | 13       |\n| 10                 | 14       |\n| 13                 | 15       |\n| 4                  | 16       |\n\n```r\n# Plotagem das propriedades com maiores números de quartos\nplot1 \u003c- resultado4 %\u003e% \n  plot_ly(\n    x = ~numero_acomodações,\n    y = ~contagem,\n    type = 'bar',\n    text = ~contagem,\n    textposition = 'auto',\n    marker = list(color = 'rgb(158, 202, 225)',\n                  line = list(color = 'rgb(8, 48, 107)',\n                              width = 1.5)\n                  )\n  ) %\u003e% \n  layout(title = \"Propriedades menos de 5 quartos\",\n         xaxis = list(title = \"Número de quartos\"),\n         yaxis = list(title = \"Total por número de quartos\")\n         )\n\nplot1\n```\n![3](https://github.com/AlbertoFAraujo/R_MongoDB_R_airbnb/assets/105552990/19e51dc1-b1ca-4beb-a25a-faa6facf6f9d)\n\n2052 propriedades possuem 2 quartos e 1154 propriedades possuem 4 quartos, sendo a predominância do número de quartos\n\n```r\n# Quantas propriedades não aceita nenhuma pessoa extra?\n\nresultado5 \u003c- con$mapreduce(\n  map = \"function(){\n            if (this.extra_people != 0){\n              emit(this.extra_people, 1)\n            }\n        }\",\n  reduce = \"function(id, counts){\n          return Array.sum(counts);\n          }\"\n)\n\nnames(resultado5) \u003c- c('pessoas_extras','contagem')\nresultado5 \u003c- resultado5[order(resultado5$pessoas_extras),]\nhead(resultado5)\n```\n| Pessoas_extras | Contagem |\n|----------------|----------|\n| 32             | 0        |\n| 115            | 4        |\n| 43             | 5        |\n| 37             | 6        |\n| 39             | 7        |\n| 41             | 8        |\n\n3135 das propriedades listadas não aceitam pessoas extras.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falbertofaraujo%2Fr_mongodb_r_airbnb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falbertofaraujo%2Fr_mongodb_r_airbnb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falbertofaraujo%2Fr_mongodb_r_airbnb/lists"}