%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

import seaborn as sns
plt.rcParams['figure.figsize']=(20,5)

#No usamos ninguan columna como índice para los datos
Puertos=pd.read_csv('/Datos/Informacion_Estadistica_Mensual_de_las_Marinas_FOP_180216.csv')

"""
Explanation: Comportamiento de los puertos
Muchos datos que se analizan son mediciones con respecto al tiempo, lo cual en general son consideradas como  series de tiempo. Su analisis permite hacer algunas predicciones a corto plazo o por lo menos detectar alguna tendencia, estacionalidad o ciclos. 
Objetivo
La finalidad es explorar el comportamiento del porcentaje de ocupación de muelles y boyas y marin seca con respecto al tiempo, primero se revisa aspectos de los datos de como tipo de datos, cantidad, etc. Luego se hace una pequeña revisión para elegir los puertos que muestran mayor ocupación y después se hace una comparación entre los puertos y por cada puerto respecto al tipo de ocupación.
Datos
Los datos analizados corresponden a los proporcionados por SECTUR. En la siguiente liga se pueden descargar o ver más detalles:
  * http://catalogo.datos.gob.mx/dataset/estadistica-mensual-marinas
Procesamiento
Primero se cargan los módulos requeridos, si se usan los gráficos tipo ggplot2 se agrega al código las líneas siguientes
~~~python
import matplotlib 
matplotlib.style.use('ggplot')
~~~
En los ejemplos usos los gráficos básicos de Pandas y al final muestro un par hechos en seaborn.
End of explanation
"""


#Se obtiene que que la tabla cuanta con 288 filas y 4 columnas.
Puertos.shape

#Se visualizan las primeras 5 filas
Puertos.head()

#Se podría no hacer esto, pero solo por explorar los últimos registros los visualizo
Puertos.tail()

#Se da una breve descripción del tipo de variables
Puertos.info()

"""
Explanation: Se revisan las cantidades de filas y columanas, se visulizan los primeros y los últimos registros.
End of explanation
"""


#Se elige la columna Marina Fonatur y se eliminan los duplicados para conocer la cantidad de puertos registrados en los datos.
Puertos['Marina Fonatur'].drop_duplicates()

"""
Explanation: Lo primero que trato de explorar es la cantidad de puertos considerados, para poder elegir entre ellos los 3 que tienen la mediana mayor de los porcentajes de ocupación.
End of explanation
"""


#Se agrupan, se calcula la mediana y se ordenan por el porcentaje de ocupación de muerlles y boyas. Las primeras filas
#de la tabla son los que registran mayor valor. 
Puertos.groupby('Marina Fonatur').median().sort_values(by='Porcentaje de ocupacion muelles y boyas',ascending=False)

"""
Explanation: Se observa que se tienen solo 8 puertos, ahora agrupo respecto a los puertos y considero la mediana de los porcentajes de ocupación para elegir los que muestran un valor mayor y posteriormente analizarlos.
End of explanation
"""


#Tabla pivor para ver el comportamiento de todos los puertos
Puertos.pivot_table(values='Porcentaje de ocupacion muelles y boyas',columns='Marina Fonatur',index='Fecha')

"""
Explanation: Los puertos analizar o explorar, son Mazatlan, La Paz y Guaymas. Para conocer como se comportan el porcentaje por fecha para todos los puertos se contruye una tabla pivot.
End of explanation
"""


#Se grafica la tabla pivot
Puertos.pivot_table(values='Porcentaje de ocupacion muelles y boyas',columns='Marina Fonatur',index='Fecha').plot()

#Se contruye la tabla y luego solo se eligen los 3 puertos a revisar.
Tabla1=Puertos.pivot_table(values='Porcentaje de ocupacion muelles y boyas',columns='Marina Fonatur',index='Fecha')
Tabla1[['Mazatlan','La Paz','Guaymas']]


#En la línea morada se observa que al final, en el último punto falta un valor, esto es por el NaN
Tabla1=Tabla1[['Mazatlan','La Paz','Guaymas']]
Tabla1.plot()

#Sustituimos el valor del Nan, si volvemos a graficar ya se muestra la línea morada con un dato en la última fecha.b
Tabla1=Tabla1.fillna(Tabla1.mean())
Tabla1.plot()

"""
Explanation: Se observa que la última fial tiene un NaN para la Paz, así que en la revisión correspondiente lo tomaré en cuanta. La tabla anterior puede graficarse directamente, solo se agrega plot() al final de la construcción de la tabla.
End of explanation
"""


# Para explorar el comportamiento de Mazatlan, tanto de la ocupación en muelles y boyas, como de la marina seca eligo desde 
# el DataFrame los datos solo relacionados con ese puerto. Y construyo su gráfica.
Mazatlan=Puertos[Puertos['Marina Fonatur'].ix[:]=='Mazatlan']
Mazatlan.plot(x='Fecha')

"""
Explanation: En la gráfica se observa que el porcentaje de ocuapción en muelles y boyas desde Febrero 2015 el puerto de Mazatlán( línea azul) es el más usado, siempre arriba del 60% de ocupación. Por otro lado, muestra que la Paz(línea morada) desde la misma fecha muestra una "tendencia" a la baja. Luego viendo el comportamiento de Guaymas(línea roja), muestra de manera "global" un crecimiento casi contante, con ligeras bajas y altas, salvo por los ultimos meses del 2015 el crecimiento era "constante". 
Nota: en todas las palabras que resalto con "", requieren alguna explicación o aclaración, no la hago para evitar pasar a temas estadísticos, que son importantes pero no es la finalidad de lo que trato de hacer con Pandas por ahora.
End of explanation
"""


#La correlación entre los dos porcentajes es de .312287, bastante bajo.
Mazatlan.corr()

#Lo anterior gráficamente se puede visualizar con una gráfica que cuente con los histogramas y el scatterplot.
sns.jointplot(x="Porcentaje de ocupacion muelles y boyas",y="Porcentaje de ocupacion marina seca",data=Mazatlan,kind="reg")

"""
Explanation: La gráfica muestra que después de Febrero 2015 se registra una "alza", tanto en la ocupación de marina seca, como en muelles y boyas. Pero también se observa como entre Diciembre 2014 y Enero 2015 hay una baja muy considerable en el porcentaje de ocupación en general.
Solo por curiosidad, se puede pensar en hacer el "cruce" entre los porcentajes, para ver su posible relación. Esto solo lo hago gráficamete, pero se puede calcular también la correlación entre ellos.
End of explanation
"""


#Matriz de correlaciones de Mazatla, la Paz y Guaymas.
Tabla1.corr()

"""
Explanation: Se muestra poca relación entre las dos tasas de porcentaje. No hago mayor exploración y se podría explorar si se comporta igua para cada uno de los puertos analizados. También se puede revisar la relación de los porcentajes de ocupación en muelles y boyas para los 3 puertos que se revisaron. Se hace esto desde los datos de la tabla 1.
End of explanation
"""


#Por último se puede visualizar la relación de las medianas de los porcentajes para cada uno de los puertos.
Puertos.groupby('Marina Fonatur').median().plot(kind='bar')


"""
Explanation: De la tabla anterior se puede revisar la relación entre Guaymas y Mazatlan, la cual es considerable para revisar estadísticamente con más cuidado. Considerando las ubicaciones geográficas de los 3 puertos, es curioso que la Paz muestra correlación negativa y con Guaymas positiva, quizás relaciones comerciales o de cercanía que salen fuera de este breve análisis.
Otra cosa que se puede revisar es la relación entre las tasas de porcentaje para todos los puertos, posible no es tan parecida a los 3 que se revisaron.
End of explanation
"""


