{"id":22367561,"url":"https://github.com/borjamome/explorando-madrid","last_synced_at":"2025-03-26T15:53:02.781Z","repository":{"id":232950841,"uuid":"785209293","full_name":"BORJAMOME/Explorando-Madrid","owner":"BORJAMOME","description":"Exploring Madrid: A Data-driven Analysis with R 🐻🌳","archived":false,"fork":false,"pushed_at":"2024-12-02T17:47:24.000Z","size":13226,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-02T17:54:39.000Z","etag":null,"topics":["data-analysis","data-visualization","madrid","r"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","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/BORJAMOME.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,"publiccode":null,"codemeta":null}},"created_at":"2024-04-11T12:26:20.000Z","updated_at":"2024-12-02T17:47:28.000Z","dependencies_parsed_at":"2024-04-15T11:39:54.498Z","dependency_job_id":"c009d2f5-bc9e-4110-add0-9ac34fa0c9fe","html_url":"https://github.com/BORJAMOME/Explorando-Madrid","commit_stats":null,"previous_names":["borjamome/madrid_i","borjamome/explorando-madrid"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BORJAMOME%2FExplorando-Madrid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BORJAMOME%2FExplorando-Madrid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BORJAMOME%2FExplorando-Madrid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BORJAMOME%2FExplorando-Madrid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BORJAMOME","download_url":"https://codeload.github.com/BORJAMOME/Explorando-Madrid/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245689481,"owners_count":20656416,"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":["data-analysis","data-visualization","madrid","r"],"created_at":"2024-12-04T18:19:08.823Z","updated_at":"2025-03-26T15:53:02.739Z","avatar_url":"https://github.com/BORJAMOME.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Explorando Madrid: Un análisis basado en datos con R \n\n## **Introducción**\nEn el presente proyecto, se llevará a cabo un análisis detallado de diversos aspectos clave de la ciudad de **Madrid**, con el propósito de obtener una comprensión más profunda de su dinámica social, económica y demográfica. A través de este análisis, abordaremos temas fundamentales como los siguientes:\n\n- **Evolución de la población:** Análisis de los cambios en la población a lo largo del tiempo.\n- **Flujos migratorios:** Estudio de los patrones de inmigración y emigración que afectan a la ciudad.\n- **Estadísticas de nacimientos y defunciones:** Exploración de las tasas de nacimientos y defunciones en los últimos años.\n- **Tasas de desempleo:** Evaluación de la situación laboral de los residentes.\n- **Nombres más comunes entre los residentes:** Identificación de los nombres más frecuentes entre los habitantes de Madrid.\n\nPara realizar este análisis, utilizamos datos del **Banco de Datos del Ayuntamiento de Madrid**, una fuente pública y confiable.\n\n\n# \u003csub\u003e Carga de Datos \u003c/sub\u003e\n\nEl primer paso en este análisis consiste en cargar las bibliotecas necesarias y los conjuntos de datos que se utilizarán para llevar a cabo la investigación. A continuación, se presenta el código utilizado para importar las bibliotecas esenciales y leer los archivos CSV que contienen los datos relevantes para el estudio:\n\n``` r\n# Cargar bibliotecas necesarias para el análisis de datos\nlibrary(tidyverse)  # Paquete para manipulación de datos y gráficos\nlibrary(knitr)      # Para crear informes dinámicos\nlibrary(scales)     # Para escalas en gráficos\nlibrary(wordcloud2) # Para generar nubes de palabras\nlibrary(visNetwork) # Para redes interactivas\nlibrary(networkD3)  # Para redes dinámicas\n\n# Cambiar la fuente del texto a \"Oswald\" para mejorar la apariencia visual\nlibrary(showtext)  # Paquete para añadir fuentes personalizadas\nfont_add_google(\"Oswald\")  # Añadir fuente desde Google Fonts\nshowtext_auto()  # Activar la fuente personalizada para todo el proyecto\n\n# Leer los datos desde los archivos CSV\npopulation \u003c- read.csv(\"../input/population.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Población total\nage_population \u003c- read.csv(\"../input/age_population.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Población por edad\nimmigrants_emigrants_by_sex \u003c- read.csv(\"../input/immigrants_emigrants_by_sex.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Inmigrantes y emigrantes por sexo\nimmigrants_emigrants_by_destination \u003c- read.csv(\"../input/immigrants_emigrants_by_destination.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Inmigrantes y emigrantes por destino\nimmigrants_emigrants_by_destination2 \u003c- read.csv(\"../input/immigrants_emigrants_by_destination2.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Inmigrantes y emigrantes por destino (segunda tabla)\nimmigrants_by_nationality \u003c- read.csv(\"../input/immigrants_by_nationality.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Inmigrantes por nacionalidad\nbirths \u003c- read.csv(\"../input/births.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Estadísticas de nacimientos\ndeaths \u003c- read.csv(\"../input/deaths.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Estadísticas de defunciones\ndeaths_causes \u003c- read.csv(\"../input/deaths_causes.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Causas de defunciones\nunemployment \u003c- read.csv(\"../input/unemployment.csv\", sep=\",\", fileEncoding=\"UTF-8\")  # Tasa de desempleo\nbaby_names \u003c- read.csv(\"../input/most_frequent_baby_names.csv\", sep=\",\")  # Nombres de bebés más frecuentes\nnames \u003c- read.csv(\"../input/most_frequent_names.csv\", sep=\",\")  # Nombres más frecuentes\nsurname \u003c- read.csv(\"../input/most_frequent_surname.csv\", sep=\",\")  # Apellidos más frecuentes\n\n\n```\n# **Análisis de Datos**\n## **Población** \n\nEl primer gráfico presenta un análisis de la **población de la ciudad de Madrid** durante el período comprendido entre los años **2018 y 2023**.\n\n### **Objetivo del Análisis:**\n\n- **Analizar la evolución** de la población de Madrid en términos de género durante los últimos cinco años.\n- **Identificar tendencias** en el cambio de la proporción entre hombres y mujeres.\n\n```r\n\n# Niveles ordenados de los años\npopulation$Year \u003c- ordered(population$Year, levels=c(2018,2019,2020,2021,2022,2023))\n\n# Análisis de población por género y visualización\npopulation %\u003e%\n  group_by(Year, Gender) %\u003e%\n  summarise(count=sum(Number)) %\u003e%\n  mutate(percent=paste0(round((count/sum(count))*100, 2), \"%\")) %\u003e%\n  ggplot(aes(x=Year, y=count)) +\n  geom_bar(stat=\"identity\", aes(fill=Gender)) +\n  geom_text(aes(label=percent, group=Gender), position=position_stack(vjust=0.5), size = 3) +\n  scale_y_continuous(labels=comma) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  labs(x=\"Year\", y=\"Population\", title=\"Population by year (2018-2023)\") +\n  theme_minimal() + \n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA)\n  ) +\n  theme(\n    panel.border = element_blank(), \n    panel.grid = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\") \n  )\n\n```\n![1 population](https://github.com/user-attachments/assets/86264d98-f077-4af8-b229-125fc4d50428)\n\nLa población de la ciudad de Madrid se mantiene estable en torno a los **6 millones de personas**. Se observa que la población femenina es ligeramente superior a la masculina, lo que refleja una tendencia demográfica constante durante los últimos años. Este patrón de estabilidad en la población es evidente, lo que nos lleva a centrarnos en un análisis más detallado del último año disponible, **2023**, para la siguiente visualización.\n\n\n### **Población por Edad**\nEn este análisis, exploramos la **distribución de la población de Madrid** por grupos de edad durante el año **2023**.\n\n```r\n# Ordenar por rango de edad\nage_population$Age \u003c- ordered(age_population$Age, levels=c(\"0-4\", \"5-9\", \"10-14\", \"15-19\",\n                                                   \"20-24\", \"25-29\", \"30-34\", \"35-39\",\n                                                   \"40-44\", \"45-49\", \"50-54\", \"55-59\",\n                                                   \"60-64\", \"65-69\", \"70-74\", \"75-79\",\n                                                   \"80-84\", \"85-89\", \"90-94\", \"95-99\"  ,\n                                                   \"100\u0026more\"))\n\n# Población por Edad (2023)\nggplot(data=age_population, aes(x=Age, fill=Gender)) +\n  geom_bar(data=filter(age_population, Gender==\"Female\"), aes(y=Number), stat=\"identity\") + \n  geom_bar(data=filter(age_population, Gender==\"Male\"), aes(y=Number*(-1)), stat=\"identity\") +\n  scale_y_continuous(breaks=seq(-100000, 100000, 20000), \n                     labels=comma(abs(seq(-100000, 100000, 20000)))) + \n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  labs(x=\"Age\", y=\"Population\", title=\"Population by age (2023)\") +\n  coord_flip() +\n  theme_minimal() + # Cambiado a theme_minimal()\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA)\n  ) +\n  theme(\n    panel.border = element_blank(),\n    panel.grid = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\") \n  )\n```\n![2 Age_population](https://github.com/user-attachments/assets/26ecc0e6-7790-45f4-8544-c06fae346be3)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\nLa distribución de la población se centra principalmente en el rango de **45 a 65 años**. Un hallazgo interesante es que la población masculina muestra una disminución considerable a partir del rango de **60-65 años**, mientras que en la población femenina esta disminución es **menos pronunciada**. Este patrón podría reflejar diferencias en la esperanza de vida y otros factores demográficos que afectan de manera distinta a ambos géneros.\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n### **Mapa de los distritos de la ciudad de Madrid**\nAhora vamos a analizar la población por distritos. Podemos obtener una idea del tamaño y la ubicación de cada distrito utilizando el siguiente mapa.\n\n\n![Madrid_district_map](https://github.com/BORJAMOME/Madrid_I/assets/19588053/5776fd01-d1bb-4695-b02c-e6313afc5507)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n### **Población de Madrid por distrito**\n\n```r\n# Población por distrito (2023)\npopulation %\u003e%\n  filter(Year==\"2023\") %\u003e%\n  group_by(District, Gender) %\u003e%\n  summarise(count = sum(Number)) %\u003e%\n  mutate(percent = paste0(round((count / sum(count)) * 100, 2), \"%\")) %\u003e%\n  ggplot(aes(x = reorder(District, count), y = count)) +\n  coord_flip() +\n  geom_bar(stat = \"identity\", aes(fill = Gender)) +\n  geom_text(aes(label = percent, group = Gender), position = position_stack(vjust = 0.5), size= 3) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  scale_y_continuous(labels = comma) +\n  labs(x = \"District\", y = \"Population\", title = \"Population by District (2023)\") +\n  theme_minimal() + \n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA) \n  ) +\n  theme(\n    panel.border = element_blank(), \n    panel.grid = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\")\n  )\n````\n\u003cbr/\u003e\u003cbr/\u003e\n![3 population_district](https://github.com/user-attachments/assets/10ab5b72-f67a-4981-aa44-6b0811759b2e)\n\n**Carabanchel** lidera como el distrito más poblado de Madrid, seguido de cerca por **Fuencarral-El Pardo**, **Latina** y **Puente de Vallecas**. En contraste, **Barajas** es el distrito menos poblado. Observamos una tendencia en la que la población femenina supera a la masculina en todos los barrios, con la excepción de **Centro**. Vamos a profundizar más y desglosar la población por barrios, con más de **131** en total.\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n### **Población de Madrid por barrios**\n\n```r\n# Población de Madrid por barrios (2023)\npopulation %\u003e%\n  filter(Year==\"2023\") %\u003e%\n  group_by(Neighborhood, Gender) %\u003e%\n  summarise(count = sum(Number)) %\u003e%\n  mutate(percent = paste0(round((count / sum(count)) * 100, 2), \"%\")) %\u003e%\n  ggplot(aes(x = reorder(Neighborhood, count), y = count)) +\n  coord_flip() +\n  geom_bar(stat = \"identity\", aes(fill = Gender)) +\n  geom_text(aes(label = percent, group = Gender), position = position_stack(vjust = 0.5), size= 1.5) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  scale_y_continuous(labels = comma) +\n  labs(x = \"Neighborhood\", y = \"Population\", title = \"Population by Neighborhood (2023)\") +\n  theme_minimal() + \n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA) \n  ) +\n  theme(\n    panel.border = element_blank(), \n    panel.grid = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 6, color = \"black\")\n  )\n```\n\u003cbr/\u003e\u003cbr/\u003e\n![4 population_neighborhood](https://github.com/user-attachments/assets/431628d2-4233-447b-bf0f-6c19b01592f2)\n\nEn los **50 principales barrios**, la población femenina es mayor que la masculina, excepto en **Embajadores**.\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n# Inmigración y Emigración\n\nEn esta sección, presentaremos visualizaciones que nos permitirán desentrañar las complejas dinámicas de la **inmigración** y **emigración** en Madrid. El análisis se organiza de manera **anual**, lo que nos permitirá observar las fluctuaciones y tendencias a lo largo del tiempo. \n\n### **Inmigración y Emigración por año (2017-2021)**\n\n```r\nimmigrants_emigrants_by_sex \u003c- gather(immigrants_emigrants_by_sex, `Immigrants/Emigrants`,\n                                      value, Immigrants:Emigrants, na.rm=TRUE)\nimmigrants_emigrants_by_sex %\u003e%\n  group_by(Gender, `Immigrants/Emigrants`, Year) %\u003e%\n  summarise(count = sum(value)) %\u003e%\n  ggplot(aes(x = `Immigrants/Emigrants`, y = count, fill = Gender)) +\n  geom_bar(stat = \"identity\", position = \"stack\") + \n  facet_grid(~Year) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  labs(y = \"Population\", title = \"Immigration and Emigration by Year (2017-2021)\") \n  scale_y_continuous(labels = comma) +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA), \n    panel.border = element_blank(), \n    panel.grid = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 10, color = \"black\"), \n    axis.text.x = element_text(angle = 45, hjust = 1),\n    axis.title.x = element_blank()\n  )\n````\n![5 immi_emi_sex](https://github.com/user-attachments/assets/9faea70f-65e9-41d7-8265-f0b7cc77f6da)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n\nSegún los últimos datos proporcionados por la **Ciudad de Madrid** hasta **2021**, la ciudad ha experimentado un **aumento progresivo** desde **2017** hasta **2019**, seguido de una **disminución** en **2020** debido a la **pandemia de Covid**, y ha vuelto a registrar aumentos en **2021**. En cuanto a la **emigración de los madrileños**, se puede observar un **aumento progresivo** en los últimos años.\n\u003cbr/\u003e\u003cbr/\u003e\n\n### **Inmigración y Emigración por rango de edad (2021)**\n\n```r\nimmigrants_emigrants_by_age \u003c- gather(immigrants_emigrants_by_age, `Immigrants/Emigrants`, \n                                      value, Immigrants:Emigrants, na.rm=TRUE)\n\n# Ordenar según rango de edad\nimmigrants_emigrants_by_age$Age \u003c- ordered(immigrants_emigrants_by_age$Age, \n                                           levels=c(\"0-4\", \"5-9\", \"10-14\", \"15-19\",\n                                                    \"20-24\", \"25-29\", \"30-34\", \"35-39\",\n                                                    \"40-44\", \"45-49\", \"50-54\", \"55-59\",\n                                                    \"60-64\", \"65\u0026more\"))\n# Inmigración y Emigración por rango de edad (2021)\n\nimmigrants_emigrants_by_age_2021 \u003c- immigrants_emigrants_by_age %\u003e%\n  filter(Year==\"2021\")\n\nggplot(data=immigrants_emigrants_by_age_2021, aes(x=Age, fill=`Immigrants/Emigrants`)) +\n  geom_bar(data=filter(immigrants_emigrants_by_age_2021, `Immigrants/Emigrants`==\"Immigrants\"), \n           aes(y=value), stat=\"identity\") + \n  geom_bar(data=filter(immigrants_emigrants_by_age_2021, `Immigrants/Emigrants`==\"Emigrants\"), \n           aes(y=value*(-1)), stat=\"identity\") +\n  scale_y_continuous(breaks=seq(-30000, 30000, 5000), labels=comma(abs(seq(-30000, 30000, 5000)))) + \n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  labs(x=\"Age\", y=\"Population\", title=\"Immigration and emigration by age (2021)\") +\n  coord_flip() +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA),\n    panel.border = element_blank(), \n    panel.grid = element_blank(), # \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\"), \n    axis.text.x = element_text(angle = 45, hjust = 1),\n    axis.title.x = element_blank()\n  )\n\n```\n![6 immi_emi_age](https://github.com/user-attachments/assets/e362ad81-68b1-4603-b4a6-ed0eb23bd8f3)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\nComo es evidente a partir de los datos, cerca de **30,000 inmigrantes** de **25 a 29 años** llegaron en **2021**. En términos de **emigración**, surgen **grupos de edad** distintos: uno entre **25 y 39 años**, y otro entre las personas de **65 años en adelante**. Esto sugiere un desafío para los **jóvenes** en la obtención de empleo en Madrid, mientras que los residentes mayores optan por **jubilación** en otros lugares.\n\n\u003cbr/\u003e\u003cbr/\u003e\n### **Emigración por destino**\n\n\nEn la siguiente **visualización**, analizaremos la **emigración por destino** (2021) utilizando un **diagrama de Sankey** (Un **diagrama de Sankey** muestra los **flujos** y sus **cantidades**, relativas entre sí, utilizando el **ancho de las flechas** o **líneas** para mostrar sus magnitudes)\n\n---\n```r\nnodes \u003c- as.data.frame(unique(immigrants_emigrants_by_destination2$from))\nnodes$id \u003c- 1:nrow(nodes)\nnodes \u003c- nodes[, c(2,1)]\nnames(nodes) \u003c- c(\"id\", \"label\")\n\n# Emigrantes \nemigrants_by_destination2 \u003c- immigrants_emigrants_by_destination2 %\u003e%\n  filter(from %in% c(\"Centro\", \"Arganzuela\", \"Retiro\", \"Salamanca\", \n                     \"Chamartín\", \"Tetuán\", \"Chamberí\", \"Fuencarral-El Pardo\",\n                     \"Moncloa-Aravaca\", \"Latina\",\"Carabanchel\", \"Usera\", \"Puente de Vallecas\", \n                     \"Moratalaz\", \"Ciudad Lineal\", \"Hortaleza\", \"Villaverde\", \"Villa de Vallecas\",\n                     \"Vicálvaro\", \"San Blas-Canillejas\", \"Barajas\"))\n\n# Edges\nedges \u003c- emigrants_by_destination2 %\u003e% \n  left_join(nodes, by=c(\"from\"=\"label\")) %\u003e%\n  select(-from) %\u003e%\n  dplyr::rename(from=id)\n\nedges \u003c- edges %\u003e% \n  left_join(nodes, by=c(\"to\"=\"label\")) %\u003e%\n  select(-to) %\u003e%\n  dplyr::rename(to=id)\n\nnodes_d3 \u003c- mutate(nodes, id=id-1)\nedges_d3 \u003c- mutate(edges, from=from-1, to=to-1)\n\n# sankeyNetwork - Destino emigrantes\n\nsankeyNetwork(Links=edges_d3, Nodes=nodes_d3, Source=\"from\", Target=\"to\", \n              NodeID=\"label\", Value=\"weight\", fontSize=16, unit=\"Letter(s)\")\n````\n\u003cimg width=\"1270\" alt=\"8 emigrants_destination_district\" src=\"https://github.com/BORJAMOME/Madrid_I/assets/19588053/39d559bc-4c4e-449b-ac8c-bafaf2504786\"\u003e\n\n\nEs importante señalar que el **conjunto de datos** utilizado para esta **visualización** no especifica los **destinos fuera de España** bajo la categoría \"Exteriores\". Sin embargo, se pueden hacer algunas observaciones sobre los destinos de emigración:\n\n- **Comunidad de Madrid**: La gran mayoría de los habitantes se trasladan a otras áreas dentro de la **Comunidad de Madrid**. Este patrón podría reflejar el deseo de las personas de **mejorar su calidad de vida** fuera del centro de la ciudad, buscando entornos más tranquilos o económicos.\n\n- **Castilla y León, Castilla-La Mancha, Extremadura y Andalucía**: Otro grupo significativo de personas emigra hacia estas regiones. Es probable que estos individuos sean aquellos que emigraron años atrás y ahora regresan a sus lugares de origen, especialmente para **jubilarse**.\n\n- **Destinos Internacionales**: Finalmente, una porción de la población se traslada al **extranjero** en busca de **mejores oportunidades laborales**, lo que refleja las tendencias migratorias hacia países con economías más desarrolladas o con sectores laborales en expansión.\n\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n### **Distribución de Inmigrantes por Barrios en Madrid (2023)**\n\nEn la siguiente **visualización**, se muestra cómo los **inmigrantes** se distribuyen por los diferentes **barrios** de la ciudad de **Madrid**, reflejando las concentraciones y movimientos más significativos de la población. Este análisis ofrece una visión detallada de cómo los inmigrantes se agrupan en áreas específicas, lo que puede estar influenciado por factores como la disponibilidad de viviendas, el acceso a servicios o las oportunidades laborales en cada barrio.\n\n```r\n\n# Nodes\nnodes \u003c- data.frame(label = unique(c(immigrants_emigrants_by_destination2$from, immigrants_emigrants_by_destination2$to)))\nnodes$id \u003c- 1:nrow(nodes)\n\n# Inmigrantes\nimmigrants_by_destination2 \u003c- immigrants_emigrants_by_destination2 %\u003e%\n  filter(to %in% c(\"Centro\", \"Arganzuela\", \"Retiro\", \"Salamanca\", \n                   \"Chamartín\", \"Tetuán\", \"Chamberí\", \"Fuencarral-El Pardo\",\n                   \"Moncloa-Aravaca\", \"Latina\",\"Carabanchel\", \"Usera\", \"Puente de Vallecas\",  \n                   \"Moratalaz\", \"Ciudad Lineal\", \"Hortaleza\", \"Villaverde\", \"Villa de Vallecas\",\n                   \"Vicálvaro\", \"San Blas-Canillejas\", \"Barajas\"))\n\n# Edges\nedges \u003c- immigrants_by_destination2 %\u003e% \n  left_join(nodes, by=c(\"from\"=\"label\")) %\u003e%\n  select(-from) %\u003e%\n  dplyr::rename(from=id)\n\nedges \u003c- edges %\u003e% \n  left_join(nodes, by=c(\"to\"=\"label\")) %\u003e%\n  select(-to) %\u003e%\n  dplyr::rename(to=id)\n\nnodes_d3 \u003c- mutate(nodes, id=id-1)\nedges_d3 \u003c- mutate(edges, from=from-1, to=to-1)\n\n# sankeyNetwork - Destino emigrantes\nsankeyNetwork(Links=edges_d3, Nodes=nodes_d3, Source=\"from\", Target=\"to\", \n              NodeID=\"label\", Value=\"weight\", fontSize=16, unit=\"Letter(s)\")\n```\n\n\u003cimg width=\"1260\" alt=\"9 immigrants_destination_district\" src=\"https://github.com/BORJAMOME/Madrid_I/assets/19588053/b62ee49c-92b7-41fd-a883-a527f35c0360\"\u003e\n\n\u003cbr/\u003e\u003cbr/\u003e\nComo era de esperar, la gran mayoría de los **inmigrantes** provienen de fuera de **España**, con otra gran parte originaria de la **Comunidad de Madrid**. En la siguiente **visualización**, podemos ver de qué otros **países** provienen en el año **2020**.\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n### **Inmigrantes por nacionalidad**\n\n```r\n# Inmigrantes por nacionalidad\n\nimmigrants_by_nationality %\u003e%\n  filter(Year == 2020, Nationality != \"Spain\") %\u003e%\n  group_by(Nationality) %\u003e%\n  summarise(count = sum(Number)) %\u003e%\n  top_n(25, count) %\u003e%\n  \n  ggplot(aes(x = fct_reorder(Nationality, count), y = count)) +\n  geom_col(aes(fill = count), show.legend = FALSE) +\n  geom_text(aes(label = count), vjust = 0.5) +\n  scale_y_continuous(labels = comma) +\n  scale_fill_gradient(low = \"#D2E3C8\", high = \"#86A789\") +\n  labs(x = \"Nationality\", y = \"Population\", title = \"Immigrants by nationality (2020)\") +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA), \n    panel.border = element_blank(), \n    panel.grid.major = element_blank(), \n    axis.line = element_blank(), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\"), \n    axis.text.x = element_text(angle = 45, hjust = 1),\n    axis.title.x = element_blank()\n  ) + \n  coord_flip()\n````\n![10 emigrants_destination](https://github.com/user-attachments/assets/62fa3415-3904-4a54-9b32-1b2e9f57a766)\n\n# Nacimientos\n\nAnalicemos los **nacimientos** por **año** de la **ciudad de Madrid** (2018-2019).\n\n### **Nacimientos por año**\n\n```r\n# Nacimientos por año\n\nbirths %\u003e%\n  group_by(Year, Gender) %\u003e%\n  summarise(Count=sum(Number)) %\u003e%\n  mutate(percent=paste0(round((Count/sum(Count))*100, 2), \"%\")) %\u003e%\n  filter(Year %in% c(2018, 2019)) %\u003e%\n  mutate(Year = factor(Year, levels = c(2018, 2019))) %\u003e%\n  ggplot(aes(x=Year, y=Count, fill=Gender)) +\n  geom_bar(stat=\"identity\", position=\"stack\") + \n  geom_text(aes(label=percent, group=Gender), position=position_stack(vjust=0.5)) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  labs(x=\"Year\", y=\"Births\", title=\"Births by year (2018-2019)\") +\n  scale_y_continuous(labels=comma) +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA),\n  ) +\n  theme(\n    panel.border = element_blank(), \n    panel.grid = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\") \n  )\n````\n![11 births_by_year](https://github.com/user-attachments/assets/ce2ca71a-5692-496e-baea-e51b6e6a7cac)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\nEl número de **nacimientos** ha mantenido una **estabilidad constante** en los últimos años. Se observa un ligero predominio de los **nacimientos masculinos** sobre los **femeninos**. A continuación, profundizaremos en el análisis de los **nacimientos** por **distrito** en **2019**.\n\u003cbr/\u003e\u003cbr/\u003e\n\n### **Nacimientos por distrito (2017)**\n```r\n# Nacimientos por distrito (2017)\nbirths %\u003e%\n  filter(Year==\"2019\") %\u003e%\n  group_by(District, Gender) %\u003e%\n  summarise(count=sum(Number)) %\u003e%\n  mutate(percent=paste0(round((count/sum(count))*100, 2), \"%\")) %\u003e%\n  ggplot(aes(x=reorder(District, count), y=count)) +\n  geom_bar(stat=\"identity\", aes(fill=Gender)) +\n  geom_text(aes(label=percent, group=Gender), position=position_stack(vjust=0.5), size=3) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  scale_y_continuous(breaks=seq(0, 5000, 500), labels=comma) +\n  labs(x=\"District\", y=\"Births\", title=\"Births by district (2019)\") +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA), \n  ) +\n  theme(\n    panel.border = element_blank(), \n    panel.grid = element_blank(),\n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\") \n  ) + \n  coord_flip()\n````\n![12 births_by_district](https://github.com/user-attachments/assets/afd57c4a-3d8a-4735-8ca9-4d8ca167fc8e)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n### **Nacimientos por barrio (2017)**\n```r\n# Nacimientos por barrio (2017)\nbirths %\u003e%\n  filter(Year==\"2019\") %\u003e%\n  group_by(Neighborhood, Gender) %\u003e%\n  summarise(count=sum(Number)) %\u003e%\n  mutate(percent=paste0(round((count/sum(count))*100, 2), \"%\")) %\u003e%\n  ggplot(aes(x=reorder(Neighborhood, count), y=count)) +\n  geom_bar(stat=\"identity\", aes(fill=Gender)) +\n  geom_text(aes(label=percent, group=Gender), position=position_stack(vjust=0.5), size = 1.5) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  scale_y_continuous(breaks=seq(0, 5000, 500), labels=comma) +\n  labs(x=\"Neighborhood\", y=\"Births\", title=\"Births by neighborhood (2019)\") +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA), \n  ) +\n  theme(\n    panel.border = element_blank(), \n    panel.grid = element_blank(),\n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 4.5, color = \"black\") \n  ) + \n  coord_flip()\n````\n![13 births_by_neighborhood](https://github.com/user-attachments/assets/e46c79ff-edd4-4bc1-8317-ae80d03177c5)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n# Muertes\nEn esta sección, analizaremos la **distribución de género** de los **fallecimientos** en la **ciudad de Madrid** en **2019**.\n\n\n```r\n# Muertes en 2019\ndeaths %\u003e%\n  group_by(Year, Gender) %\u003e%\n  summarise(Count=sum(Number)) %\u003e%\n  mutate(percent=paste0(round((Count/sum(Count))*100, 2), \"%\")) %\u003e%\n  filter(Year %in% c(2019)) %\u003e%\n  mutate(Year = factor(Year, levels = c(2019))) %\u003e%\n  ggplot(aes(x=Year, y=Count, fill=Gender)) +\n  geom_bar(stat=\"identity\", position=\"stack\") + \n  geom_text(aes(label=percent, group=Gender), position=position_stack(vjust=0.5), size=3) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  labs(x=\"Year\", y=\"Deaths\", title=\"Deaths by year (2019)\") +\n  scale_y_continuous(labels=comma) +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA), \n  ) +\n  theme(\n    panel.border = element_blank(), \n    panel.grid = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\") \n  )\n```\n![14 deaths_by_year](https://github.com/user-attachments/assets/8b8c06e2-9ae8-49aa-8323-20797b38a786)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\nComo era de esperar, el número de **fallecimientos masculinos** supera al de **fallecimientos femeninos**. Ahora, profundicemos en el análisis del número de **fallecidos** por **distrito** y **barrio** en la **ciudad de Madrid**.\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n### **Muertes por distrito (2019)**\n\n```r\n# Muertes por distrito (2019)\ndeaths %\u003e%\n  filter(Year==\"2019\") %\u003e%\n  group_by(District, Gender) %\u003e%\n  summarise(count=sum(Number)) %\u003e%\n  mutate(percent=paste0(round((count/sum(count))*100, 2), \"%\")) %\u003e%\n  ggplot(aes(x=reorder(District, count), y=count)) +\n  geom_bar(stat=\"identity\", aes(fill=Gender)) +\n  geom_text(aes(label=percent, group=Gender), position=position_stack(vjust=0.5), size = 3) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  scale_y_continuous(breaks=seq(0, 5000, 500), labels=comma) +\n  labs(x=\"District\", y=\"Deaths\", title=\"Deaths by district (2019)\") +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA), \n  ) +\n  theme(\n    panel.border = element_blank(), \n    panel.grid = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\") \n  ) + \n  coord_flip()\n````\n![15 deaths_by_district](https://github.com/user-attachments/assets/10b80275-ebf9-4962-b8e4-983bd29d9e7b)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n### **Muertes por barrio (2017)**\n```r\n# Muertes por barrio (2017)\n\ndeaths %\u003e%\n  filter(Year==\"2019\") %\u003e%\n  group_by(Neighborhood, Gender) %\u003e%\n  summarise(count=sum(Number)) %\u003e%\n  mutate(percent=paste0(round((count/sum(count))*100, 2), \"%\")) %\u003e%\n  ggplot(aes(x=reorder(Neighborhood, count), y=count)) +\n  geom_bar(stat=\"identity\", aes(fill=Gender)) +\n  geom_text(aes(label=percent, group=Gender), position=position_stack(vjust=0.5), size = 1) +\n  scale_fill_manual(values = c(\"#91C8E4\", \"#FFABAB\"), name = \"Gender\") +\n  scale_y_continuous(breaks=seq(0, 5000, 500), labels=comma) +\n  labs(x=\"Neighborhood\", y=\"Deaths\", title=\"Deaths by neighborhood (2019)\") +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA), \n  ) +\n  theme(\n    panel.border = element_blank(), \n    panel.grid = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 5, color = \"black\") \n  ) + \n  coord_flip()\n````\n![16 deaths_by_neighborhood](https://github.com/user-attachments/assets/4dd93eae-65fe-4e8b-ac51-889efde09dce)\n\u003cbr/\u003e\u003cbr/\u003e\n\nEste gráfico muestra las **20 principales causas de fallecimiento** en el año **2019**, destacándose entre ellas las **enfermedades respiratorias**, la **vejez** y las **enfermedades cardíacas**.\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n### **Causas de muerte en Madrid (2019)**\n\n```r\n# Causas de muerte en Madrid (2019)\ndeath_causes %\u003e%\n  filter(Year == \"2019\") %\u003e%\n  group_by(Cause) %\u003e%\n  summarise(total = sum(Number)) %\u003e%\n  top_n(15, total) %\u003e%\n  \n  ggplot(aes(x = reorder(Cause, total), y = total, fill = total)) +\n  geom_bar(stat = \"identity\", show.legend = FALSE) +\n  geom_text(aes(label = total), vjust = 0.5, size = 3) +\n  scale_y_continuous(labels = scales::comma) +\n  scale_fill_gradient(low = \"#DADAEB\", high = \"#9E9AC8\") +\n  labs(x = \"Cause\", y = \"Total\", title = \"Top 20 causes of death (2019)\") +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA),\n    panel.border = element_blank(), \n    panel.grid.major = element_blank(), \n    axis.line = element_blank(), \n    text = element_text(family = \"Oswald\", size = 10, color = \"black\"), \n    axis.text.x = element_text(angle = 45, hjust = 1),\n    axis.title.x = element_blank()\n  ) + \n  coord_flip()\n```\n![17 cause_of_death](https://github.com/user-attachments/assets/925bd5e0-442b-4dda-8124-fa23e3e6631a)\n\n# Desempleo \nEl **desempleo** representa uno de los mayores desafíos para los ciudadanos de **Madrid**. Como se puede observar, ha habido una **reducción significativa** del desempleo desde **2021** hasta **2022**, resultado tanto de la disminución de la **pandemia** como de la **reestructuración económica**.\n\nEn el análisis mensual, se observa una ligera **disminución** del desempleo durante los meses de verano (**junio**, **julio**, **agosto** y **septiembre**) y en **diciembre**, probablemente influenciada por las **campañas navideñas**.\n\n### **Desempleo por mes y año**\n\n```r\n# Desempleo por mes y año (2021-2023)\nmonth_order \u003c- c(\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\")\n\nunemployed \u003c- unemployed %\u003e%\n  mutate(Month = factor(Month, levels = month_order))\n\nggplot(unemployed, aes(x = Month, y = Number, fill = factor(Year))) +\n  geom_bar(stat = \"identity\", position = \"dodge\") +\n  geom_text(aes(label = comma(Number)), vjust = -0.5, size = 2, position = position_dodge(width = 0.9)) +\n  labs(x = \"Month\", y = \"Number of unemployed\", title = \"Unemployment by month and year (2021-2023)\", fill = \"Year\") +\n  scale_fill_manual(values = c(\"#EFBC9B\", \"#FBF3D5\", \"#D6DAC8\")) +  \n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = \"#f6f0ec\", color = NA), \n    panel.grid.major = element_blank(), \n    axis.line = element_line(color = \"#f6f0ec\"), \n    text = element_text(family = \"Oswald\", size = 15, color = \"black\"), \n    axis.text.x = element_text(angle = 45, hjust = 1) \n  )\n````\n![18 unemployed](https://github.com/user-attachments/assets/6b3929c6-2003-4aae-bb1e-a7569d1eacc4)\n\n# Nombres más frecuentes entre los madrileños\n\nEn la bulliciosa **ciudad de Madrid**, los nombres más comunes entre **hombres** y **mujeres** incluyen **David**, **María**, **Javier**, **Carmen**, **Antonio** y **José**, cada uno de ellos con una rica **historia** y un sentido de **identidad** profundamente arraigado en la **cultura madrileña**. Estos nombres, llenos de **carácter** y **tradición**, han resonado en las calles de la **capital española** durante generaciones, formando parte de la **diversidad** y **vitalidad** de la comunidad madrileña.\n\n\n```r\n#Nombre del wordcloud\n\nnames \u003c- names %\u003e%\n  group_by(Name) %\u003e%\n  summarise(count = sum(Frecuency)) %\u003e%\n  arrange(desc(count))\n\n\nmin_freq \u003c- 10\nnames_filtered \u003c- names %\u003e%\n  filter(count \u003e= min_freq)\n\n\nwordcloud2(names_filtered, size = 1.5, fontFamily = \"Oswald\", color = \"random-light\",\n           backgroundColor = \"#f6f0ec\", rotateRatio = 0.3, minRotation = -pi/4, maxRotation = pi/4,\n           gridSize = 10, minSize = 10, shuffle = TRUE)\n```\n![19 name_wordcloud](https://github.com/user-attachments/assets/ff9ec008-0c37-4cfc-ba93-94f921f8e187)\n\n# Apellidos más frecuentes\n\n\n```r\n\n#Apellidos wordcloud\nsurname \u003c- surname %\u003e%\n  group_by(Surname) %\u003e%\n  summarise(count = sum(Frecuency)) %\u003e%\n  arrange(desc(count))\nmin_freq \u003c- 10\nsurname_filtered \u003c- surname %\u003e%\n  filter(count \u003e= min_freq)\n\nwordcloud2(surname_filtered, size = 1.5, fontFamily = \"Oswald\", color = \"random-light\",\n           backgroundColor = \"#f6f0ec\", rotateRatio = 0.3, minRotation = -pi/4, maxRotation = pi/4,\n           gridSize = 10, minSize = 10, shuffle = TRUE)\n````\n![20 surname_wordcloud](https://github.com/user-attachments/assets/ea318c85-a342-4fae-ba7d-5cd05d29ec77)\n\n# Nombres de bebes más frecuentes\n\n\n```r\n#  Nombres de bebes más wordcloud\n\nbaby_names \u003c- baby_names %\u003e%\n  group_by(Name) %\u003e%\n  summarise(count = sum(Frecuency)) %\u003e%\n  arrange(desc(count))\n\nmin_freq \u003c- 10\nbaby_names_filtered \u003c- baby_names %\u003e%\n  filter(count \u003e= min_freq)\n\nwordcloud2(baby_names_filtered, size = 1.5, fontFamily = \"Oswald\", color = \"random-light\",\n           backgroundColor = \"#f6f0ec\", rotateRatio = 0.3, minRotation = -pi/4, maxRotation = pi/4,\n           gridSize = 10, minSize = 10, shuffle = TRUE)\n\n```\n![21 baby_names_wordcloud](https://github.com/user-attachments/assets/2447ab61-fdc4-4730-9eda-ed9069ad6a75)\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n\n# Referencias\n\nEste proyecto está inspirado en el trabajo realizado por **[Xavier](https://www.kaggle.com/xvivancos)** en **Kaggle** sobre la **ciudad de Barcelona**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborjamome%2Fexplorando-madrid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fborjamome%2Fexplorando-madrid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborjamome%2Fexplorando-madrid/lists"}