Tipos de uniones (join) de tablas con `Python Pandas`

Recopilación de las uniones más habituales con Python Pandas en una sola entrada. No se realiza equivalencias con sql join, la intención es tener de forma resumida los códigos para realizar left join inner join y concatenación de data frames de Pandas. Hay amplia documentación esto es una síntesis. Los data frames empleados para ilustrar el ejemplo son: import pandas as pd import numpy as np ejemplo = { "variable1": [10, 20, 30, 40], "variable2": [100, 200, 300, 400] } anio=["2011", "2012", "2013", "2014"] df1 = pd.DataFrame(ejemplo,index=anio) df1 ejemplo = { "variable1": [50, 60, 70, 80], "variable3": [5000, 6000, 7000, 8000] } anio=["2013", "2014", "2015", "2016"] df2 = pd.DataFrame(ejemplo,index=anio) df2 Uniones de data frames con índices La estructura de una join con Pandas es: ...

16 de mayo de 2020 · rvaquerizo

Mapa estático de España con Python

Faltaban mapas de España con Python en el blog y hoy ilustro como hacerlos con geopandas y matplotlib, creo que una de las formas más sencillas de hacer este tipo de mapas. No debía de ser necesaria esta entrada puesto que la realización del mapa debería hacerse con QGis pero es posible que alguien necesite hacer un mapa de España por Comunidades Autónomas de manera rápida y sencilla en su sesión de Python. Es necesario comentar que este trabajo está hecho con Ubuntu, en un entorno Windows la instalación del paquete geopandas es un dolor de cabeza. ...

11 de mayo de 2020 · rvaquerizo

Identificar los municipios costeros y limítrofes de España con R.

Otro ejercicio con spatial data R Rstats y data science para el trabajo con objetos espaciales en el ecosistema big data. Empiezo con frase ilógica y ridícula para mejorar las búsquedas de Google pero el tema que traigo hoy creo que puede ser útil para aquellos que, dado un spatial data, tienen que identificar los polígonos que bordean ese objeto, en este caso vamos a identificar los municipios que bordean España, pueden ser limítrofes con Francia y Portugal o bien municipios costeros. No se plantean algoritmos complicados, como en entradas anteriores nos centramos en la extracción de mapas de GADM: ...

27 de abril de 2020 · rvaquerizo

Mover parte de un shapefile con R. Mapa con tasa de casos de coronavirus por habitante en España

Si leéis habitualmente el blog ya conocéis la entrada sobre el mapa del COVID por Comunidades Autónomas y estaréis de acuerdo conmigo en que el mapa de España representado con Rstats es feo de solemnidad. Pero el código es «sencillo» por ahí se ve cada representación que requiere ser desarrollador de R cinturón negro. Bueno, los torpes empleamos ggplot con geom_polygon pero podemos empezar a complicar el mapa añadiendo nuevas posibilidades. La que os traigo hoy es muy interesante en el caso de España, se trata de mover las Islas Canarias en el mapa de Comunidades Autónomas pero directamente con R. Ya tenemos hecho un mapa con QGIS en otra entrada, pero ahora vamos a mover esa parte del shapefile directamente con R y la función elide como hemos hecho en otra ocasión. Estaréis pensando «Vaquerizo no tiene imaginación por eso tira de entradas anteriores y las junta», no es el caso. ...

23 de abril de 2020 · rvaquerizo

Mi breve seguimiento del `coronavirus` con R

Ya comentaré con más detenimiento el código, pero es la unión de muchos de los códigos R de días anteriores, es un buen ejemplo de uso de la librería gridExtra para poner múltiples gráficos en una sola salida: library(dplyr) library(ggplot2) library(reshape) library(gridExtra) df <- read.csv("https://raw.githubusercontent.com/datadista/datasets/master/COVID%2019/ccaa_covid19_fallecidos.csv", sep=',', check.names=FALSE, encoding = 'UTF-8') df2 <- melt(df[,-1]) names(df2) = c('CCAA','fecha','fallecidos') mm <- df2 %>% group_by(CCAA) %>% summarise(total_fallecidos = sum(fallecidos)) %>% arrange(desc(total_fallecidos)) %>% mutate(CCAA2 = ifelse(row_number()>=10,'Resto', as.character(CCAA))) %>% select(CCAA,CCAA2) df2 <- left_join(df2,mm) table(mm$CCAA2) df2 <- df2 %>% group_by(CCAA2,fecha) %>% summarise(fallecidos=sum(fallecidos)) %>% mutate(fecha = as.Date(as.character(fecha),origin='1970-01-01')) %>% as_tibble() df3 <- df2 %>% mutate(fecha=fecha+1, fallecidos_anterior=fallecidos) %>% select(-fallecidos) df2 <- left_join(df2, df3) %>% mutate(fallecidos_dia = fallecidos - fallecidos_anterior) #Función para hacer los gráficos grafica <- function(comunidad){ p <- ggplot(filter(df2,CCAA2==comunidad), aes(x=fecha)) + geom_line(aes(y=fallecidos_dia, group = 1), alpha = 0.5, color='red') + geom_smooth(aes(y=fallecidos_dia), method = "loess") + ggtitle(comunidad) + xlab("") + ylab("Fallecidos por día") return(p)} madrid = grafica('Madrid') cat = grafica('Cataluña') mancha = grafica('Castilla-La Mancha') leon = grafica('Castilla y León') pvasco = grafica('País Vasco') valencia = grafica('C. Valenciana') andalucia = grafica('Andalucía') aragon=grafica('Aragón') resto = grafica('Resto') total = grafica('Total') grid.arrange(madrid, cat, mancha, leon, pvasco, valencia, andalucia, aragon, resto, total, nrow=5,ncol=2) ...

20 de abril de 2020 · rvaquerizo

Creando un mapa en Excel con archivos SVG

Voy a traeros algo que me ha llamado mucho la atención. Una solución en Excel para pintar un mapa de España con la posibilidad de resaltar Comunidades Autónomas, Provincias o incluso un nivel inferior, con el archivo del que partimos, Secciones Censales. Una solución realmente buena que además es open-source por lo que no tenemos ningún problema para emplearla o modificarla, de verdad que creo que es una de las soluciones más interesantes que me he encontrado en Excel en muchos años. La solución la encontraréis en https://github.com/datavizforall/create-your-own-choropleth-map-in-excel en el artículo Create your own choropleth map in Excel ...

16 de abril de 2020 · rvaquerizo

Entender una blockchain con R

Una introducción de bajo nivel (sin entrar mucho en tecnología) a los blockchain con R. Es una entrada destinada a comprender que es un blockchain desde otro punto de vista, no sólo criptografía o criptomoneda, podemos poner información que sólo conoce el origen. ¿Os imagináis si pusieran a disposición de los científicos de datos información sobre todos los españoles identificados por NIF y si tiene o no coronavirus? Los científicos de datos podrían trabajar de forma anónima con esos datos y ayudar a establecer las zonas libres de covid-19, persona a persona de forma perfectamente anónima. Aunque no se descarta que algún cabestro se dedicara a desencriptar… ...

9 de abril de 2020 · rvaquerizo

Etiquetas en scatter plot. Muertes covid por millón de habitantes vs gasto en salud

He intentado permanecer ajeno a los datos del coronavirus pero es imposible, sin embargo, me gustaría aprovechar para mostrar algunos trucos con R y Python. Esta vez en una sola entrada vamos a tratar las siguientes situaciones: Importar la tabla de worldometer sobre datos de países. Problemas con la librería OECD. Importar Excel con R. Not in con R. Gráficos de ranking ordenados con ggplot. Etiquetas en los scatter plot. Importar la tabla de worldometer Esta parte es probable que ya la haya puesto en otra ocasión, scraping sobre la web que tenemos todos en favoritos https://www.worldometers.info/coronavirus/ ...

7 de abril de 2020 · rvaquerizo

Leer archivos Excel con Python

Entrada sobre la importación de Excel con Python, un aporte que sirve para mi documentación y que es posible que sea de ayuda para muchos que se estén iniciando en el uso de Python y Pandas, aunque en este caso para la lectura del Excel usaremos tanto Pandas como la librería xlrd. Lectura de Excel con Pandas Lo más sencillo para importarnos en Python un Excel y crearnos un data frame de Pandas es: ...

1 de abril de 2020 · rvaquerizo

Datos agrupados en R con dplyr

Entrada rápida para ilustrar como crear un campo autonumérico por un factor, es una duda que me plantean, tienen datos de clientes y fechas y necesitan crear un autonumérico en R que les diga el número de orden de los eventos de una fecha. Algo parecido a lo que hacemos con el retain de R. Vamos a ilustrar la tarea con un ejemplo: ```r clientes = 100 id_cliente = rpois(clientes,10) fecha = rpois(clientes, today()-rpois(clientes,5) ) eventos <- cbind.data.frame(id_cliente,fecha) eventos$fecha <- as.Date(eventos$fecha, origin="1970-01-01") eventos <- eventos %>% arrange(id_cliente,fecha) 100 clientes que aparecen una o n veces con fechas asociadas, el primer paso que sugiero hacer es eliminar duplicados con dplyr: ...

26 de marzo de 2020 · rvaquerizo