2018-12-28

Las entradas más visitadas en 2018

Las 10 entradas más visitadas en 2018 en las categorías de R, Excel, Access y VBA han sido:

R

  1. Eliminar duplicados de un data frame en R
  2. Calcular la moda en R usando el paquete modeest
  3. Calcular el porcentaje del total de la columna en R
  4. Distribución de frecuencias en R
  5. Tablas de contingencia en R
  6. Test de normalidad Shapiro–Wilk en R
  7. Cómo comparar dos data frames en R
  8. Superponer gráficos en R: distribución normal
  9. Medir el tiempo de ejecución de procesos en R
  10. Contar el número de ocurrencias basado en dos columnas en R

Excel

  1. Convertir horas en un número decimal en Excel
  2. Concatenar comillas en Excel
  3. Cómo usar BUSCARV y SUMAR conjuntamente en Excel
  4. Generar números aleatorios entre dos valores con decimales
  5. Invertir lista en Excel
  6. Omitir todos los errores de una hoja
  7. Números aleatorios de una lista o rango de opciones
  8. Listas desplegables que permiten seleccionar múltiples elementos
  9. Calcular el primer y último día del mes en Excel
  10. Pegar una lista filtrada con Excel en las celdas visibles

Access

  1. Ocultar Access al usuario salvo el formulario
  2. Crear una consulta de UNION y de UNION ALL en Ms Access
  3. Cuadros combinados en cascada en Ms Access
  4. Usar un cuadro combinado para buscar al teclear en Access
  5. Cambiar programáticamente la ruta de tablas vinculadas en Access
  6. Generar números aleatorios entre dos valores en Ms Access
  7. Convertir texto en número conservando los decimales en Access
  8. Consulta para generar una muestra aleatoria en Ms Access
  9. La función redondear en Access, redondeo del banquero
  10. Porcentaje del total de la columna en una consulta de Access

VBA

  1. Importar ficheros CSV en Excel mediante VBA
  2. Cambiar origen de datos de múltiples tablas dinámicas con VBA
  3. Medir el tiempo de ejecución de subrutinas en VBA
  4. Sucesión de Fibonacci en Excel y VBA
  5. Obtener el nombre de usuario de Windows con VBA en Excel
  6. VBA: cambiar el texto a mayúsculas, minúsculas o nombre propio
  7. Mostrar u ocultar formas en Excel mediante VBA
  8. Ocultar o mostrar todas las hojas de un libro de Excel (VBA)
  9. Exportar tabla o consulta de Access como CSV
  10. Insertar un reloj en Excel usando VBA

Entradas relacionadas

2018-12-27

Obtener datos geoespaciales por países con R: elevación

Problema

En la entrada anterior obtuvimos las divisiones administrativas con el paquete raster en R. En esta ocasión extraeremos datos de altitud o elevación del terreno.

Solución

Empleamos la función getData del paquete raster. Necesitamos suministrar el argumento country con un código ISO de 3 letras.

library(raster)
# Países disponibles
library(psych) # Función HeadTail 
headTail(getData('ISO3'))
    ISO3                  NAME
1    AFG           Afghanistan
2    XAD Akrotiri and Dhekelia
3    ALA                 Åland
4    ALB               Albania
...                   
253  ESH        Western Sahara
254  YEM                 Yemen
255  ZMB                Zambia
256  ZWE              Zimbabwe
Suministramos el argumento 'alt' (altitude). Computamos slope y aspect con la función terrain para poder suministrarlos posteriormente a la función hillShade.

alt <-  getData('alt', country = 'ESP')
slope <-  terrain(alt, opt = 'slope')
aspect <-  terrain(alt, opt = 'aspect')
hill <-  hillShade(slope, aspect, 40, 270)

library(tmap)
tm_shape(hill) +
  tm_raster(palette = gray(0:100 / 100),
            n = 100,
            legend.show = FALSE)  +
  tm_shape(alt) +
  tm_raster(alpha = 0.5,
            palette = terrain.colors(25),
            legend.show = FALSE)

Mapa

Entradas relacionadas

Referencias

2018-12-25

Obtener datos geoespaciales por países con R: divisiones administrativas

Problema

Deseamos obtener datos espaciales de las áreas administrativas de un país con el paquete raster de R. Con estos datos, SpatialPolygonDataFrame (polígonos espaciales en un data frame), podremos dibujar mapas en R.

Solución

Empleamos la función getData del paquete raster. Necesitamos suministrar el argumento country con un código ISO de 3 letras.

library(raster)
# Países disponibles
library(psych) # Función HeadTail 
headTail(getData('ISO3'))
    ISO3                  NAME
1    AFG           Afghanistan
2    XAD Akrotiri and Dhekelia
3    ALA                 Åland
4    ALB               Albania
...                   
253  ESH        Western Sahara
254  YEM                 Yemen
255  ZMB                Zambia
256  ZWE              Zimbabwe
El primer argumento es 'GADM' que es una base de datos de divisiones administrativas. También necesitamos especificar el nivel de la subdivisión administrativa (0 = país, 1 = primer nivel). Por ejemplo, para España: 0 = país, 1 = comunidades autónomas, 2 = provincias, 3 = comarcas, 4 = municipios.

# Descargamos el nivel 4
df4 <- getData("GADM", country = "ES", level = 4)
View(df4)
Vista de la pestaña Environment tras importar todos los niveles.

Mapas

Representamos las divisiones administrarivas del nivel 1. Separamos península y Baleares de Canarias para apreciar mejor los mapas.

df11 <- df1[df1@data$NAME_1 != "Islas Canarias",]
df12 <- df1[df1@data$NAME_1 == "Islas Canarias",]
plot(df11, main = "Península y Baleares - Divisiones administrativas nivel 1")
plot(df12, main = "Canarias- Divisiones administrativas nivel 1")

Descarga manual

Tammbién podemos acceder y descargar manualmente los ficheros de los diferentes niveles aquí.

Entradas relacionadas

Referencias

2018-12-17

Gráficos de An Introduction to Statistical Learning con ggplot2 - Figura 3.1.

Gráfico a replicar

Continuamos con la serie iniciada sobre la creación de gráficos del libro An Introduction to Statistical Learning. En esta ocasión replicaremos el gráfico de la figura 3.1. Utiliza el conjunto de datos Advertising.Los puntos rojos representan los valores observados de ventas (sales) y los presupuestos de televisión (TV). La línea azul representa la recta de regresión. Las líneas grises verticales representan el error asociado con cada observación. Hay errores positivos (si la observación se sitúa por encima de la líneaazul) y negativos (si la observación se sitúa por debajo de la curva).

Solución

Con la función theme personalizamos el formato: rotamos las etiquetas del eje y, eliminamos el color de fondo, y añadimos el borde.

library(tidyverse)
ggplot(ad_fitted, aes(x = budgets, y = sales)) +
  geom_point(colour = "red") +
  geom_smooth(se = FALSE, method = lm) +
  geom_segment(aes(
    x = budgets,
    y = sales,
    xend = budgets,
    yend = fitted
  )) +
  scale_x_continuous(breaks = seq(0, 300, by = 50)) +
  scale_y_continuous(breaks = seq(0, 25, by = 5)) +
  theme(
    axis.text.y = element_text(angle = 90, hjust = 1),
    panel.background = element_blank(),
    panel.border = element_rect(fill = NA)
  )
Si deseamos mantener la cuadrícula, pero eliminar el color de fondo (theme_bw) y modificar el título del eje x (labs):

ggplot(ad_fitted, aes(x = budgets, y = sales)) +
  geom_point(colour = "red") +
  geom_smooth(se = FALSE, method = lm) +
  geom_segment(aes(
    x = budgets,
    y = sales,
    xend = budgets,
    yend = fitted
  )) +
  labs(x = "TV")+
  scale_x_continuous(breaks = seq(0, 300, by = 50)) +
  scale_y_continuous(breaks = seq(0, 25, by = 5)) +
  theme_bw()+
  theme(axis.text.y = element_text(angle = 90, hjust = 1))

Entradas relacionadas

Referencias

2018-12-10

Listar conjuntos de datos disponibles en R

Problema

Queremos conocer los conjuntos de datos disponibles en R, tanto cargados en un determinado momento como los de todos paquetes disponibles.

Solución

  1. Listar los conjuntos de datos disponibles en ese momento
  2. data()
    
    Data sets in package ‘datasets’:
    
    AirPassengers           Monthly Airline Passenger Numbers 1949-1960
    BJsales                 Sales Data with Leading Indicator
    BJsales.lead (BJsales)
                            Sales Data with Leading Indicator
    BOD                     Biochemical Oxygen Demand
    CO2                     Carbon Dioxide Uptake in Grass Plants
    ChickWeight             Weight versus age of chicks on different diets
    DNase                   Elisa assay of DNase
    EuStockMarkets          Daily Closing Prices of Major European Stock
                            Indices, 1991-1998
    Formaldehyde            Determination of Formaldehyde
    HairEyeColor            Hair and Eye Color of Statistics Students
    ...                    ...
    
  3. Listar los conjuntos de datos de todos los paquetes disponibles
  4. data(package = .packages(all.available = TRUE))
    
    Data sets in package ‘aqp’:
    
    amarillo                Amarillo Soils
    ca630                   Soil Data from the Central Sierra Nevada Region
                            of California
    munsell                 Munsell to sRGB Lookup Table for Common Soil
                            Colors
    rruff.sample            Sample XRD Patterns
    soil_minerals           Munsell Colors of Common Soil Minerals
    sp1                     Soil Profile Data Example 1
    sp2                     Honcut Creek Soil Profile Data
    sp3                     Soil Profile Data Example 3
    sp4                     Soil Chemical Data from Serpentinitic Soils of
                            California
    sp5                     Sample Soil Database #5
    sp6                     Soil Physical and Chemical Data from
                            Manganiferous Soils
    
    Data sets in package ‘beeswarm’:
    
    breast                  Lymph-node-negative primary breast tumors
    
  5. Listar los conjuntos de datos de un paquete específico
  6. data(package = "ISLR")
    
    Data sets in package ‘ISLR’:
    
    Auto                    Auto Data Set
    Caravan                 The Insurance Company (TIC) Benchmark
    Carseats                Sales of Child Car Seats
    College                 U.S. News and World Report's College Data
    Credit                  Credit Card Balance Data
    Default                 Credit Card Default Data
    Hitters                 Baseball Data
    Khan                    Khan Gene Data
    NCI60                   NCI 60 Data
    OJ                      Orange Juice Data
    Portfolio               Portfolio Data
    Smarket                 S&P Stock Market Data
    Wage                    Mid-Atlantic Wage Data
    Weekly                  Weekly S&P Stock Market Data
    

Referencias

2018-12-08

Discretización de variables en R

Problema

Deseamos discretizar una variable, es decir, convertir una variable continua en discreta. Utilizamos el conjunto de datos College del paquete ISLR. Crearemos una nueva variable cualitativa llamada Elite, discretizando la variable Top10perc. Vamos a dividir las universidades en dos grupos basados en si la proporción de nuevos estudiantes provienen de entre el 10% de los mejores alumnos de sus institutos excede o no el 50%.

library(ISLR)
library(tidyverse)
glimpse(College)
Observations: 777
Variables: 18
$ Private      Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Ye...
$ Apps         1660, 2186, 1428, 417, 193, 587, 353, 1899, 1038, 582, 17...
$ Accept       1232, 1924, 1097, 349, 146, 479, 340, 1720, 839, 498, 142...
$ Enroll       721, 512, 336, 137, 55, 158, 103, 489, 227, 172, 472, 484...
$ Top10perc    23, 16, 22, 60, 16, 38, 17, 37, 30, 21, 37, 44, 38, 44, 2...
$ Top25perc    52, 29, 50, 89, 44, 62, 45, 68, 63, 44, 75, 77, 64, 73, 4...
$ F.Undergrad  2885, 2683, 1036, 510, 249, 678, 416, 1594, 973, 799, 183...
$ P.Undergrad  537, 1227, 99, 63, 869, 41, 230, 32, 306, 78, 110, 44, 63...
$ Outstate     7440, 12280, 11250, 12960, 7560, 13500, 13290, 13868, 155...
$ Room.Board   3300, 6450, 3750, 5450, 4120, 3335, 5720, 4826, 4400, 338...
$ Books        450, 750, 400, 450, 800, 500, 500, 450, 300, 660, 500, 40...
$ Personal     2200, 1500, 1165, 875, 1500, 675, 1500, 850, 500, 1800, 6...
$ PhD          70, 29, 53, 92, 76, 67, 90, 89, 79, 40, 82, 73, 60, 79, 3...
$ Terminal     78, 30, 66, 97, 72, 73, 93, 100, 84, 41, 88, 91, 84, 87, ...
$ S.F.Ratio    18.1, 12.2, 12.9, 7.7, 11.9, 9.4, 11.5, 13.7, 11.3, 11.5,...
$ perc.alumni  12, 16, 30, 37, 2, 11, 26, 37, 23, 15, 31, 41, 21, 32, 26...
$ Expend       7041, 10527, 8735, 19016, 10922, 9727, 8861, 11487, 11644...
$ Grad.Rate    60, 56, 54, 59, 15, 55, 63, 73, 80, 52, 73, 76, 74, 68, 5...

Solución

  1. Opción 1:Propuesta en el libro ISLR.
  2. Elite = rep("No", nrow(College))
    Elite[College$Top10perc > 50] = "Yes"
    Elite <- as.factor(Elite)
    college <- data.frame(College,  Elite)
    summary(college[, c("Top10perc", "Elite")])
    
    Podemos observar como 78 universidades contienen alumnos pertenecientes a la élite.

      Top10perc     Elite    
     Min.   : 1.00   No :699  
     1st Qu.:15.00   Yes: 78  
     Median :23.00            
     Mean   :27.56            
     3rd Qu.:35.00            
     Max.   :96.00    
    
  3. Opción 2: ifelse con paquete base y dplyr
  4. # base 
    College$Elite <- factor(ifelse(College$Top10perc > 50, "Yes", "No"))
    # dplyr
    library(dplyr)
    College <-
      college %>%
      mutate(Elite = factor(ifelse(College$Top10perc > 50, "Yes", "No")))
    
  5. Opción 3: vector lógico.
  6. Hay múltiples opciones. Presento dos ejemplos.

    college$Elite <- transform(College, Elite = Top10perc > 50)
    College$Elite <- College$Top10perc > 50
    

Entradas relacionadas

Nube de datos