Introducción

Queremos generar unos datos que simulen un sistema de lecturas RFID. Estos sistemas están formados por dos componentes principalmente: 1. Etiqueta o tag: almacen un número de identificación único. 2. Lectores: son los encargados de leer las etiquetas cuando están en su radio de alcance.

Cuando se realiza una lectura los datos que se generan
tienen la siguiente estructura.

a. Identificador único de etiqueta: serie de 6 dígitos. Max: 999.999)
b. Identificador del lector: serie de tres dígitos. 999
c. Timestamp: indica el tiempo en el que se ha producido la lectura.
d. Tipo de evento: booleano. El 0 indica que ha entrado en el rango del lector
y 1 que ha salido del rango del lector. 

Capitulo 1:

Generación de datos de una persona con el PATRÓN1.

Para hacer mas sencilla la generación de datos vamos a suponer que las personas ven una media de 50 animales en su visita y que se definen unos intervalos de tiempo para ver cada animal que posteriormente se describen.

PATRON1

Vamos a definir unas constantes para facilitar el cambio de patrones y comportamientos.

Primero definimos el número total de animales de los que obtenemos lecturas. numero_total_animales

Como no todos los asistentes van a ver el mismo número de animales vamos a definir el número de animales que ven en su visita y almacenarlo en numero_animales_vistos

library(dplyr)
library(lattice)

set.seed(21) # Siempre utilizamos el mismo para poder repetir los resultados.
numero_total_animales <- 90
numero_animales_vistos <- 70

Generamos el primer identificador del visitante número 1.

id_visitante1 <- rep(1, numero_animales_vistos)

De los 70 posibles animales que puede ver vamos a coger 50 al azar y vamos a guardarlo en id_animales_vistos (Dar mas probabilidad a los animales más típicos como leon, tigre,…)

id_animales_vistos <- sample(1:numero_total_animales, numero_animales_vistos, 
                             replace = FALSE)

unique(id_animales_vistos)
##  [1] 71 23 62 17 83 79  9 15 81 69 54 74  5 48 14  3 39 21 36 46  1 42 53
## [24] 88 20 52 37 50 45 41 57 30 44 77 49 11 12 35 18 26 33 60 25 75  7 29
## [47] 78 34 65 72 31 51 24 40 58 64 84 22  8 47 70 27 10 85 76  4 66 63 73
## [70] 80
length(id_animales_vistos)
## [1] 70

Ahora vamos a crear otra parte del patrón. Vamos a definir los posibles intervalos de tiempo para ver un animal.

1. No interesa: menos de 60 segundos.
2. Me llama la atención. Entre 60 segundos y 180segundos
3. Me gusta, voy a leerme la descripción. Entre 180sg y 300sg
4. Me encanta, quiero una foto. 300sg y 420
5. Me lo llevo al salón de mi casa como sea. Más de 420sg
intervalo1 <- 1:59
intervalo2 <- 60:179
intervalo3 <- 180:299
intervalo4 <- 300:419
intervalo5 <- 420:740

Una vez definidos los intervalos, vamos a definir la probabilidad de estar en cada intervalo.

Probabilidad del intervalo1: 12/70= 17% Probabilidad del intervalo2: 25/70 = 35% Probabilidad del intervalo3: 18/70 = 26% Probabilidad del intervalo4: 12/70 = 17% Probabilidad del intervalo5: 3/70 = 5%

probabilidades <- c(0.17, 0.35, 0.26, 0.17, 0.05)

Cada intervalo se va a definir por un número del 1 al 5. Como vamos a suponer un total de 50 animales vistos, vamos a generar 50 intervalos con las probabilidades anteriores.

intervalos_generados_persona <- sample(1:5, numero_animales_vistos, 
                                       replace = TRUE, prob = probabilidades )
intervalos_generados_persona
##  [1] 3 3 5 3 3 4 1 2 1 1 3 5 2 1 3 3 3 2 5 4 3 2 4 4 5 2 4 4 2 2 2 4 5 1 3
## [36] 3 3 2 4 1 1 2 3 4 2 2 1 1 1 1 2 2 1 2 2 2 2 5 5 4 1 4 2 3 5 3 3 5 2 2
summary(intervalos_generados_persona)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.000   3.000   2.743   4.000   5.000

En el siguiente bucle vamos a generar un vector con el tiempo de visualización de cada intervalo. Los limites inferior y superior estan definidos en intervaloX

tiempo_sg_intervalos <- numeric()
for(i in 1:length(intervalos_generados_persona)) {
    if (intervalos_generados_persona[i] == 1)
        tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo1, 1, replace = TRUE))
    else if (intervalos_generados_persona[i] == 2)
        tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo2, 1, replace = TRUE))
    else if (intervalos_generados_persona[i] == 3)
        tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo3, 1, replace = TRUE))
    else if (intervalos_generados_persona[i] == 4)
        tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo4, 1, replace = TRUE))
    else if (intervalos_generados_persona[i] == 5)
        tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo5, 1, replace = TRUE))
}
tiempo_sg_intervalos
##  [1] 250 201 460 240 262 392   3 161  41  44 244 491 129  32 275 206 209
## [18] 160 617 335 284 102 376 403 546 103 350 363 123 100  83 396 535  58
## [35] 195 274 204  89 408   8  24 147 267 307 134 125  31  55  52  33  94
## [52] 144  56  64 117  65 121 425 425 347  13 359  60 225 578 210 223 555
## [69] 121 135

Vamos a utilizar las variables anteriores para crear una tabla con toda la información que hemos generado.

df_visitantes <- data.frame(id_visitante = id_visitante1, 
                            id_animal = id_animales_vistos, 
                            intervalo = intervalos_generados_persona,
                            tiempo_sg = tiempo_sg_intervalos)

df_visitantes
##    id_visitante id_animal intervalo tiempo_sg
## 1             1        71         3       250
## 2             1        23         3       201
## 3             1        62         5       460
## 4             1        17         3       240
## 5             1        83         3       262
## 6             1        79         4       392
## 7             1         9         1         3
## 8             1        15         2       161
## 9             1        81         1        41
## 10            1        69         1        44
## 11            1        54         3       244
## 12            1        74         5       491
## 13            1         5         2       129
## 14            1        48         1        32
## 15            1        14         3       275
## 16            1         3         3       206
## 17            1        39         3       209
## 18            1        21         2       160
## 19            1        36         5       617
## 20            1        46         4       335
## 21            1         1         3       284
## 22            1        42         2       102
## 23            1        53         4       376
## 24            1        88         4       403
## 25            1        20         5       546
## 26            1        52         2       103
## 27            1        37         4       350
## 28            1        50         4       363
## 29            1        45         2       123
## 30            1        41         2       100
## 31            1        57         2        83
## 32            1        30         4       396
## 33            1        44         5       535
## 34            1        77         1        58
## 35            1        49         3       195
## 36            1        11         3       274
## 37            1        12         3       204
## 38            1        35         2        89
## 39            1        18         4       408
## 40            1        26         1         8
## 41            1        33         1        24
## 42            1        60         2       147
## 43            1        25         3       267
## 44            1        75         4       307
## 45            1         7         2       134
## 46            1        29         2       125
## 47            1        78         1        31
## 48            1        34         1        55
## 49            1        65         1        52
## 50            1        72         1        33
## 51            1        31         2        94
## 52            1        51         2       144
## 53            1        24         1        56
## 54            1        40         2        64
## 55            1        58         2       117
## 56            1        64         2        65
## 57            1        84         2       121
## 58            1        22         5       425
## 59            1         8         5       425
## 60            1        47         4       347
## 61            1        70         1        13
## 62            1        27         4       359
## 63            1        10         2        60
## 64            1        85         3       225
## 65            1        76         5       578
## 66            1         4         3       210
## 67            1        66         3       223
## 68            1        63         5       555
## 69            1        73         2       121
## 70            1        80         2       135

Capítulo 2

Gráficas PATRON 1.

Con las acciones anteriores hemos generado las interacciones de nuestro primer visitante. Vamos a representarla gráficamente para ver primero que nos dicen de nuestro patrón y si se cumplen nuestros requesitos.

Grafico 1: Cuánto tiempo ha empleado en ver cada animal?

df_visitantes %>%
with(xyplot(tiempo_sg ~ id_animal, type = "h",
          main = "Tiempo invertido en cada animal por el visitante1", 
          xlab = "ID Animal", 
          ylab = "Tiempo(sg)"))

Cuanto tiempo ha empleado en cada intervalo?

df_visitantes %>%
group_by(intervalo) %>%
summarise(tiempo_intervalo_min = sum(tiempo_sg/60))
## Source: local data frame [5 x 2]
## 
##   intervalo tiempo_intervalo_min
## 1         1              7.50000
## 2         2             39.61667
## 3         3             62.81667
## 4         4             67.26667
## 5         5             77.20000

Cuanto tiempo ha empleado en total?

df_visitantes %>%
summarise(tiempo_total_horas = sum(tiempo_sg/60/60),
          total_animales = n())
##   tiempo_total_horas total_animales
## 1               4.24             70

Cuáles son los animales del intervalo 5?

df_visitantes %>%    
filter(intervalo == 5) 
##   id_visitante id_animal intervalo tiempo_sg
## 1            1        62         5       460
## 2            1        74         5       491
## 3            1        36         5       617
## 4            1        20         5       546
## 5            1        44         5       535
## 6            1        22         5       425
## 7            1         8         5       425
## 8            1        76         5       578
## 9            1        63         5       555

Capítulo 3

Generación aleatorio de 1000 visitantes con el PATRON 1.

set.seed(21) # Siempre utilizamos el mismo para poder repetir los resultados.

#Constantes
numero_total_animales <- 90
numero_animales_vistos <- 70
df_visitantes <- data.frame()

for(id in 1:1000) {

    id_visitante <- rep(id, numero_animales_vistos)
    
    # Generar los identificadores de los animales
    id_animales_vistos <- sample(1:numero_total_animales, numero_animales_vistos, 
                             replace = FALSE)
    
    # Intervalos
    intervalo1 <- 1:59
    intervalo2 <- 60:179
    intervalo3 <- 180:299
    intervalo4 <- 300:419
    intervalo5 <- 420:740
    
    #Probabilidades de intervalo
    probabilidades <- c(0.17, 0.35, 0.26, 0.17, 0.05)
    
    #Generación aleatorio de intervalos con la probabilidad anterior
    intervalos_generados_persona <- sample(1:5, numero_animales_vistos, 
                                       replace = TRUE, prob = probabilidades )
    
    # Generacion aleatoria del tiempo para cada observación dependiendo de su 
    # intervalo
    tiempo_sg_intervalos <- numeric()
    for(i in 1:length(intervalos_generados_persona)) {
        if (intervalos_generados_persona[i] == 1)
            tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo1, 1, replace = TRUE))
        else if (intervalos_generados_persona[i] == 2)
            tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo2, 1, replace = TRUE))
        else if (intervalos_generados_persona[i] == 3)
            tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo3, 1, replace = TRUE))
        else if (intervalos_generados_persona[i] == 4)
            tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo4, 1, replace = TRUE))
        else if (intervalos_generados_persona[i] == 5)
            tiempo_sg_intervalos <- c(tiempo_sg_intervalos, sample(intervalo5, 1, replace = TRUE))
    }

    # Generacion de tabla para un visitante
    df_visitante <- data.frame(id_visitante = id_visitante, 
                            id_animal = id_animales_vistos, 
                            intervalo = intervalos_generados_persona,
                            tiempo_sg = tiempo_sg_intervalos)

    # Unir la tabla anterior con la tabla de todos los visitantes.
    df_visitantes <- rbind(df_visitantes, df_visitante)
}

Capítulo 4:

Gráficas y datos relevantes de 1000 visitantes con el PATRON 1.

Cual es el tiempo medio que se invierte en ver a cada animal?

df_visitantes %>%
group_by(id_animal) %>%
summarise(tiempo_medio_animal = mean(tiempo_sg)) %>%
with(xyplot(tiempo_medio_animal ~ id_animal, type = "h",
              main = "Tiempo invertido en cada animal", 
              xlab = "ID Animal", 
              ylab = "Tiempo(sg)"))

Cuanto tiempo han empleado en total en cada intervalo? Cuanto tiempo de media han estado en cada intervalo?

df_visitantes %>%
group_by(intervalo) %>%
summarise(tiempo_total_h = sum(tiempo_sg)/60/60,
            tiempo_medio_m = mean(tiempo_sg))
## Source: local data frame [5 x 3]
## 
##   intervalo tiempo_total_h tiempo_medio_m
## 1         1       99.12139       29.95358
## 2         2      807.47278      119.53705
## 3         3     1216.30639      239.62694
## 4         4     1193.72389      359.67576
## 5         5      572.63194      581.02452

Cuanto tiempo ha empleado de media cada visitante en su visita?

df_visitantes %>%
group_by(id_visitante) %>%
summarise(tiempo_media_visitante = mean(tiempo_sg))
## Source: local data frame [1,000 x 2]
## 
##    id_visitante tiempo_media_visitante
## 1             1               218.0571
## 2             2               179.7857
## 3             3               200.8714
## 4             4               220.0429
## 5             5               229.0857
## 6             6               200.2571
## 7             7               182.1429
## 8             8               192.1286
## 9             9               231.9714
## 10           10               203.1571
## ..          ...                    ...

Cuál es el tiempo medio por intervalo?

df_visitantes %>%
group_by(id_visitante) %>%    
summarise(tiempo_visitante_min = sum(tiempo_sg)/60,
          tiempo_medio_intervalo = sum(tiempo_visitante_min)/n())
## Source: local data frame [1,000 x 3]
## 
##    id_visitante tiempo_visitante_min tiempo_medio_intervalo
## 1             1             254.4000               3.634286
## 2             2             209.7500               2.996429
## 3             3             234.3500               3.347857
## 4             4             256.7167               3.667381
## 5             5             267.2667               3.818095
## 6             6             233.6333               3.337619
## 7             7             212.5000               3.035714
## 8             8             224.1500               3.202143
## 9             9             270.6333               3.866190
## 10           10             237.0167               3.385952
## ..          ...                  ...                    ...

Cuánto tiempo han empleado en total todos los visitantes?

df_visitantes %>%
summarise(tiempo_total_horas = sum(tiempo_sg/60/60),
          total_animales = n())
##   tiempo_total_horas total_animales
## 1           3889.256          70000

Cuáles son los animales del intervalo 5?

#df_visitantes %>%    
#filter(intervalo == 5) 

Para que fuera mas representativo habría que añadir una columna con el nombre que le corresponde a cada identificador del animal.

Añadir a la clase de animal que pertenece.

  1. Aguila imperial ibérica
  2. Buho Real
  3. Reno
  4. Lobo Ártico
  5. Oso Pardo
  6. Jabali
  7. Bisonte Europep
  8. Ciervo común
  9. Panda Rojo
  10. Koala
  11. Wallaby de Roca
  12. Emu - Ave
  13. Binturong
  14. Casuario - Ave
  15. Tortuga Carey - Aquarium - Reptil
  16. Tortuga Boba - Aquarium - Reptil
  17. Tortuga Verde - Aquarium - Reptil
  18. Tiburon Rojo - Aquarium - Pez
  19. Tiburon Toro - Aquarium - Pez
  20. Mero - Aquarium
  21. Reptiles - Terrario - M
  22. Ñandu - Ave
  23. Loro Yaco - Ave
  24. Ibis Sagrado - Ave
  25. Pogardo Bocinguero - Ave
  26. Pigardo Europeo
  27. Buitre Leonado - Ave
  28. Guacamayo Rojo de Alas Verdes - Ave
  29. Grulla Coronada
  30. Espectaculos - Delfines
  31. Reptiles. 7 tipos dentro.
  32. Iguana de las islas fiji - reptil
  33. Rinoceronte blanco
  34. Cocodrilo
  35. HIpopotamo
  36. Mandril
  37. Papion - mamifero mono
  38. Llama
  39. Gorila
  40. Dromedario
  41. Gacela
  42. Arrui
  43. Bongo
  44. Jirafa
  45. Cebra Damara
  46. Ñu de cola blanca
  47. Leon
  48. Avestruz - Ave
  49. Osos del Tibet malayo y baribal
  50. Dromedario
  51. Lemur
  52. Tigre de bengala
  53. Lobo
  54. Leopard
  55. Bisonte Americano
  56. Nutrias
  57. Elefante Asiatico
  58. Yak
  59. Rinoceronte indio
  60. Orangutan
  61. Oso Panda Rojo
  62. Ciervo del Padre David
  63. Cabra Montesa
  64. Tapir
  65. Sitatunga
  66. Flamencos
  67. Leones Marinos
  68. Guanaco
  69. Mapache
  70. Pinguino