1. Introducción a Análisis de Datos (Curso de Pregrado)

Durante el desarrollo de la materia se presentaran herramientas para el análisis principalmente de información presentada en series de tiempo, así como un poco de análisis espacial (este no es un curso de Modelación!), a continuación se detallan los temas que se desarrollaran.

  1. Medidas de localización (3 clases)
    • 1.1. Medidas estadísticas.
    • 1.2. Robustez.
    • 1.3. Resistencia.
    • 1.4. Quantiles.
  2. Teorema de bayes (1 Clase)
    • 2.1. Estadística Fisheriana.
    • 2.2. Estadística Bayesiana.
  3. Información entre variables (4 Clases)
    • 3.1. Correlaciones paramétricas.
    • 3.2. Correlaciones no paramétricas.
    • 3.3. Histogramas conjuntos.
    • 3.4. Información mutua.
  4. Distribuciones de probabilidad (2 Clases)
    • 3.1. Discretas.
    • 3.2. Continuas (funciones definidas).
    • 3.3. Distribución empírica.
  5. Pruebas de Hipótesis (4 Clases).
    • 4.1. Pruebas paramétricas.
    • 4.2. Pruebas no paramétricas.
  6. Ajuste estadístico (3 Clases).
    • 5.1. Paramétricas.
    • 5.2. No Paramétricas.
    • 5.3. Redes neuronales.
  7. Analisis de señales (6 Clases).
    • 6.1. Fourier.
    • 6.2. Onditas.
    • 6.3. EOF.

1.1. Evaluación del curso

Tareas: 70%

  • La nota se divide en 6 tareas cada una con un porcentaje de acuerdo a su dificultad.

Trabajo Final: 30%

  • 10% Presentación oral de avance.
  • 20% Presentación oral y escrita al final.

1.2 Herramientas requedias para la materia

Para el desarrollo de la materia es indispensable que nos olvidemos de Excel y todos sus derivados y primos. Esto requiere el uso de herramientas un poco más avanzadas, en donde el ususario (ustedes) pueden programar y llevar un poco más de control sobre los datos.

La herramienta recomendada es Python 2.7, pero tambień pueden usar algún lenguaje de su preferencia:

  • Matlab.
  • IDL.
  • Visual.
  • etc...

Nota: Con respecto al lenguaje, los dos profesores les podemos dar un buen apoyo en Python y en el uso de sus paquetes derivados, en Matlab les podemos ayudar un poco, y en los demás lenguajes no tenemos ni idea.

1.2.1 Paquetes requeridos de Python.

Para el trabajo del curso es importante contar con los siguientes paquetes de Python:

  • Numpy (Trabajo con arreglos)
  • Matplotlib (conocido tambien como Pylab)
  • Pandas (Trabajo con series de tiempo)
  • NetCDF (Lectura y escritura de información meteorológica)
  • Scipy (Conjunto de herramientas estadísticas avanzadas)
  • GDAL y osgeo (Uso de mapas).
  • SKlearn

Estos paquetes (y otros) los iremos instalando en la medida en que sean necesarios, lo importante es aprender a hacerlo.

Acá encontrarán una buena introducción a Python y un buen ejemplo de instalación y manejo de paquetes: Link al manejo basico de python

De acuerdo al tipo de usuario se recomienda lo siguientes gestores:

  • Windows: Usar PythonXY o Anaconda.
  • Mac: Pip y Anaconda.
  • Linux: Pip o el mismo gestor de paquetes aptitude (Ubuntu, Debian) o rpm (Fedora, Red Hat).

1.2.2 Edición de código

Para la edición de código existen múltiples alternativas, algunas pueden ser:

  • Spyder (La preferida por los estudiantes).
  • Geany.
  • Nano o Vim.
  • Notebook (esta herramienta).
  • Ecplise.
  • etc ...

Es recomendable cuando elijan que la herramienta de edición elegida tenga por lo menos las siguientes características:

  • Auto-completado.
  • Coloreado de código.
  • Auto indentación.
  • Numeración de líneas

1.2.3 Ejecución de código

Python es un lenguaje interpretado (no compilado), por lo tanto el código una ves hecho pasa a ser interpretado por un Intérprete, el cual convierte en ordenes para la máquina las instrucciones escritas.

El código de python se ejecuta en terminales o consolas, a continuación se describen algunas:

  • Terminal de Spyder (Recomendada para los Giundowseros).
  • Terminal de Python (Esta en todas los OS).
  • Terminal Ipython (La mejor!!!).
  • Por aca en notebook (Jupyter)

Similar al tema del editor, un buen intérprete debe auto-completar y ojala colorear.

Tarea 1 [10%]

De acuerdo a la ecuación presentada a continuación genere:

  • N números aleatorios distribuidos uniformemente, con $N$ siendo igual a: 25, 50, 100, 500, 1000.
  • Haga otra función que genere números que se distribuyan normal (averigue como), genere la misma cantidad de números para $N$.
  • Para ambos casos represente los valores de $N$ como histogramas (Figura).
  • Presente deciles para cada caso (Figura).
  • Cual de los casos es más estable si se introducen 10 números outliers?, demuestrelo.

Ecuación para generación de números psuedo-aleatorios que se distribuyen uniformemente

$X_{n+1} = (a X_{n} + b) \setminus m$

Nota: Esta ecuación entrega los números entre $0$ a $m$, en el caso de los uniformes deben quedar escalados de $0$ a $1$, en el caso de los normales, deben tener $\sigma = 1$ y $\mu = 0$.

Ojo. No pueden usar ningún módulo random de python o de su lenguaje de programación

Ejemplo de lo que más o menos debe dar:


In [5]:
#paquetes importados de python
%matplotlib inline
import numpy as np 
import pylab as pl

#Definición de 1000 números aleatorios 
Uniformes = np.random.uniform(-4,4,100)
Normales = np.random.normal(0,1,100)

In [8]:
#Obtenciónd e histogramas
hU,bU = np.histogram(Uniformes,bins=7)
hN,bN = np.histogram(Normales,bins=7)
hU=hU.astype(float); hU=hU/hU.sum()
hN=hN.astype(float); hN=hN/hN.sum()

#Generación de la figura 
fig=pl.figure()
ax=fig.add_subplot(111)
ax.plot(bU[1:],hU,'b',lw=2,label='Uniformes')
ax.plot(bN[1:],hN,'r',lw=2,label='Normales')
ax.fill_between(bU[1:],hU,color='b',alpha=0.2)
ax.fill_between(bN[1:],hN,color='r',alpha=0.2)
ax.set_xlabel('$X$',size=15)
ax.set_ylabel('$f(x)$',size=15)
ax.set_xlim(-3,3)
ax.grid(True)
ax.legend(loc=0)
pl.show()



In [3]:
Uniformes


Out[3]:
array([-1.86373762, -3.91271825,  0.36878211, ..., -3.3639115 ,
        3.13880543,  2.36135887])

In [7]:
pl.plot(Uniformes)


Out[7]:
[<matplotlib.lines.Line2D at 0x7f30d16cadd0>]

In [ ]: