MAnáDINe-TIplE

Aviso: Hay que justificar todas las respuestas, detallando el razonamiento o haciendo referencia a los apuntes o a cualquier fuente de internet.

Elabora un informe con tus respuestas del examen y envíalo, junto a los anexos que consideres oportunos, a carleos@uniovi.es

  1. (1'2 puntos) ¿Qué lenguajes serían recomendables para…
    1. …programar un algoritmo que tiene que ir muy rápido?
      C, C++, Java, Fortran, Common Lisp...  porque pueden compilarse.
      
    2. …programar a alto nivel un servidor de macrodatos (hadoop, spark, flink…)?
      Python, Clojure... porque son a alto nivel y tienen interfases apropiadas.
      
    3. …obtener la derivada simbólica de una función matemática?
      Maxima porque es un sistema de cálculo simbólico (algebraico).  También Octave-symbolic.
      
    4. …acceder a un banco de datos genómico?
      Perl mediante Bioperl; Python mediente Qiime, Mothur.
      
    5. …programar a alto nivel procedimientos matemáticos, pero que vayan muy rápido?
      Julia tiene sintaxis a alto nivel (parecida a la de Octave) pero se compila.
      
    6. …usar los últimos algoritmos estadísticos?
      R.  Es un lenguaje meramente estadístico.
      
    7. …operar con matrices cómodamente?
      Octave.  Su sintaxis facilita la expresión de álgebra de matrices.
      
    8. …hallar estadísticos descriptivos de un banco de datos que quepa en la memoria RAM?
      R permite cómodos cálculos estadísticos si el objeto cabe en memoria.
      
    9. …hallar estadísticos descriptivos de un banco de datos que no quepa en la memoria RAM?
      AWK, por ejemplo.
      
    10. …buscar ficheros en un disco duro que cumplan ciertas condiciones?
      El comando "find" de las Coreutils de GNU.
      
    11. …filtrar (quedarse con ciertas filas) de un fichero muy grande?
      El comando "grep" de las Coreutils de GNU.
      
    12. …quedarse con los caracteres del décimo al vigésimo de cada renglón de un fichero muy grande?
      El comando "cut -c 10-20" de las Coreutils de GNU.
      
  2. (1'5 puntos) Crea un fichero listado.txt a partir de la salida del comando de Bash siguiente:
    find /usr/share/doc -ls
    

    La columna segunda contiene la cantidad de bloques ocupados en KiB (quibioctetos).

    La columna sétima contiene el tamaño de los ficheros en octetos.

    1. Mediante cut, obtén un fichero octetos.txt que contenga sólo las dos columnas mencionadas arriba.

      Si no están bien alineadas las columnas en el fichero original, prueba a entubarlo a través del comando column -t

      find /usr/share/doc -ls | column -t | cut -c 11-12,48-52 > octetos.txt
      
    2. Haz lo mismo que en el anterior, pero mediante awk.
      find /usr/share/doc -ls | awk '{print $2,$7}' > octetos.txt
      
    3. Mediante awk, obtén la media y la desviación típica de la segunda columna.
      find /usr/share/doc -ls | awk '{n++;suma+=$2}END{print suma/n}' # media
      find /usr/share/doc -ls | awk '{n++;suma+=$2;suma2+=$2^2}END{print sqrt(suma2/n-(suma/n)^2)}' # d.t.
      
    4. Obtén el máximo de cada columna.
      sort -n listado.txt | tail
      sort -n -f2 listado.txt | tail
      
    5. Mediante awk, obtén un fichero octetos+.txt que contenga, además, una columna con la diferencia entre octetos ocupados y octetos reales de cada fichero.
      find /usr/share/doc -ls | awk '{print $2,$7,$2*1024-$7}' > octetos+.txt
      
  3. (0'6) En el fichero paises.ods aparece la columna DENSIDAD, medida en habitantes por km2.
    1. Calcula la densidad global.
      paises$extension = 1000 * paises$poblacion / paises$densidad # "extension" en km^2
      densidad.global = sum (1000 * paises$poblacion) / sum (paises$extension)
      
    2. Calcula una nueva columna que sea la densidad en habitantes por milla cuadrada de cada país, sabiendo que cada milla es igual (más o menos) a 1'6 km.
      paises$densidad.milla2 = paises$densidad * 1.6^2
      
  4. (0'5) ¿Cuántos ficheros hay en /usr/share/doc cuyo tamaño supere los 10.000 octetos?
    awk '($2>10000)' octetos.txt | wc -l   # usando el fichero del ejercicio 2; otra forma:
    find /usr/share/doc -size +10000c      # sin usar resultados anteriores;
    
  5. (0'3) Considera los datos de R llamados mtcars. Di cómo puedes calcular el coeficiente de determinación R2 entre el peso wt y la «aceleración» qsec y usarlo en un programa.
    summary (lm (qsec ~ wt, mtcars)) $ r.squared
    
  6. (1'5) Considera los datos de R llamados AirPassengers. Es un objeto de clase ts (serie temporal) que puede parecer una matriz pero, en este caso, es un vector con algún atributo adicional. Los elementos del vector son los totales mensuales de viajeros (en miles). ¿Cómo puedes obtener un vector (más corto) de totales anuales de viajeros?
    apply (matrix(AirPassengers,12), 2, sum)
    
  7. (0'3) ¿Cómo encuentras en el sistema todos los ficheros cuyo nombre contiene la cadena BSD?
    locate BSD # rápido
    find / -name '*BSD*' # lento
    
  8. (0'5) ¿Cuáles son las cinco palabras más frecuentes del fichero GFDL?
    cat /usr/share/common-licenses/GFDL | tr '[A-Z]' '[a-z]' | tr -dc '[a-z] ' | tr ' ' '\n' | sort | uniq -c | sort -n # the of in a to or
    
  9. (1 punto) Visita la página del I.N.E.
    • Pincha a la izquierda en «INEbase, la información estadística».
    • Pincha en «censos de población y viviendas 2011».
    • Pincha a la izquierda en «resultados detallados».
    • Pincha abajo en «ficheros de microdatos».
    • Personas y hogares: Pincha en «fichero nacional» y guarda el archivo y descomprímelo.
    • Personas y hogares: Pincha en «diseño de registro y valores válidos de las variables».
    • Haz un diagrama de barras o histograma de la distribución de edades.
    zcat Microdatos_personas_nacional.zip | cut -c 40-42 > edades.txt
    R
    e = read.table("edades.txt")
    hist (e)
    
  10. (1 punto) Define una función en R que calcule la desviación mediana (la mediana de los valores absolutos de las diferencias respecto a la mediana)
    desviación.mediana <- function (x, ...) median (abs (x - median(x,...)), ...)
    

    y aplícala a todas las variables de pisa2012, sólo para los datos de España.

    system ("gunzip pisa2012.csv.gz")
    system ("head -n1 pisa2012.csv > pisa2012esp.csv")
    system ("grep ^ESP pisa2012.csv >> pisa2012esp.csv")
    pisa2012 <- read.csv ("pisa2012esp.csv")
    sapply (pisa2012, function (x) ifelse (is.numeric(x), desviación.mediana(x,na.rm=TRUE), NA))
    

    Con otra versión de desviación.mediana:

    desviación.mediana <- function (x) ifelse (is.numeric(x), median(abs(x-median(x,na.rm=TRUE)),na.rm=TRUE), NA)
    sapply (pisa2012, desviación.mediana)
    
  11. (0'6 puntos) ¿Cuáles son los tres años con más datos y los tres años con menos datos en el fichero vuelos.csv?
    zcat vuelos.csv.gz | cut -d',' -f1 | tail -n +2 | uniq -c | sort -n # ya están ordenados: no hace falta un "sort" antes del "uniq"
    
  12. (1 punto) Haz un gráfico de barras de los años de nacimiento de las vacas.csv que no tienen dato de genotipo.
    v <- read.csv2("vacas.csv")
    barplot (table (substr (v$f_nacim, 7, 10) [v$tipo == ""]))
    

Author: Examen

Created: 2016-10-25 mar 19:22

Emacs 24.4.1 (Org mode 8.2.10)

Validate