Proyecto: Reto datos misteriosos

Facultad de Ciencias, UNAM

Asignatura: Técnicas experimentales

Profesores:

Ana Karina Ramos Musalem

Ernesto Eduardo Gómez de la Peña

Iván Esau Arenas Ortíz

Integrantes del equipo 6:

Blas Ortega Alondra

Díaz Espinosa Kenya

Larson Rivero Lucía Kirene

Fecha de entrega: 29/ 10/ 2020

1.- Campamento base.

Analizar el archivo para encontrar los metadatos.

Nuestro archivo tiene 54 líneas de encabezado, y el valor nulo es 8989. Esto lo sabemos después de haber revisado el archivo en Excel.

Importamos pandas para leer el archivo

In [1]:
import pandas as pd
In [2]:
data = pd.read_csv('datos/archivo04.csv', header=54, na_values=8989)

Para ver el tipo de datos que tenemos usamos data.dtypes

In [6]:
data.dtypes
Out[6]:
Tiempo          object
Temperatura    float64
Bandera          int64
Cuenta           int64
dtype: object

data.describe nos da un resumen de la estadística del conjunto de datos

In [3]:
data.describe()
Out[3]:
Temperatura Bandera Cuenta
count 7048.000000 8760.000000 8760.000000
mean -12.607884 7.081621 49.551370
std 15.144570 0.682554 20.411776
min -40.496792 6.000000 0.000000
25% -25.870165 7.000000 55.000000
50% -12.882536 7.000000 60.000000
75% 0.986746 7.000000 60.000000
max 17.698325 9.000000 61.000000

Pedimos que imprima data

In [10]:
print(data)
                   Tiempo  Temperatura  Bandera  Cuenta
0     2019-01-01 00:30:00   -25.102567        7      60
1     2019-01-01 01:30:00   -24.406491        7      60
2     2019-01-01 02:30:00   -24.214873        7      60
3     2019-01-01 03:30:00   -24.700724        7      52
4     2019-01-01 04:30:00   -25.655208        7      60
...                   ...          ...      ...     ...
8755  2019-12-31 19:30:00   -28.990197        7      60
8756  2019-12-31 20:30:00   -29.290185        7      60
8757  2019-12-31 21:30:00   -29.437079        7      60
8758  2019-12-31 22:30:00   -29.393909        7      60
8759  2019-12-31 23:30:00   -29.631943        7      60

[8760 rows x 4 columns]

Debido la gran cantidad de datos es más práctico visualizarlos por secciones. Visualisamos las primeras 10 y las últimas 10 líneas de datos con data.head y data.tail

In [7]:
data.head(10)
Out[7]:
Tiempo Temperatura Bandera Cuenta
0 2019-01-01 00:30:00 -25.102567 7 60
1 2019-01-01 01:30:00 -24.406491 7 60
2 2019-01-01 02:30:00 -24.214873 7 60
3 2019-01-01 03:30:00 -24.700724 7 52
4 2019-01-01 04:30:00 -25.655208 7 60
5 2019-01-01 05:30:00 -26.124568 7 60
6 2019-01-01 06:30:00 -25.914960 7 60
7 2019-01-01 07:30:00 -25.874440 7 60
8 2019-01-01 08:30:00 -25.935127 7 60
9 2019-01-01 09:30:00 -25.739856 7 60
In [8]:
data.tail(10)
Out[8]:
Tiempo Temperatura Bandera Cuenta
8750 2019-12-31 14:30:00 -27.888567 7 60
8751 2019-12-31 15:30:00 -28.119507 7 60
8752 2019-12-31 16:30:00 -27.906883 7 60
8753 2019-12-31 17:30:00 -27.964474 7 60
8754 2019-12-31 18:30:00 -28.614777 7 47
8755 2019-12-31 19:30:00 -28.990197 7 60
8756 2019-12-31 20:30:00 -29.290185 7 60
8757 2019-12-31 21:30:00 -29.437079 7 60
8758 2019-12-31 22:30:00 -29.393909 7 60
8759 2019-12-31 23:30:00 -29.631943 7 60

Con esta información y la encontrada en el encabezado respondemos:

a) ¿Qué información hay en el archivo a simple vista?

R:

  • Fuente de donde se obtuvieron los datos: "Ocean Networks Canada Data Archive".
  • Institución que realizó las mediciones: University of Victoria.

  • Ubicación del lugar en donde se midieron los datos

  • Latitud:69.114233 Norte
  • Longitud:-105.058967 Este
  • Profundidad: 0.0 (m).

  • Valores de temperatura.

  • Fecha y hora en la que fueron tomadas las mediciones.

  • Banderas, las cuales nos indican la calidad de la medición.

  • Periodo de mediciones: Del 2019-01-01 00:00:00.000 al 2020-01-01 00:00:00.000.

b) ¿Qué unidades de medición se reportan?

R:

  • Temperatura del aire en superficie: Temperatura en grados centígrados (°C).

  • Bandera: Es una variable estadística de tipo cualitativo ordinal.

c) ¿Estas unidades corresponden al Sistema Internacional de Unidades? Si no es así, ¿cuáles son las unidades equivalentes en el SI?

R: No, porque la unidad básica en el SI para la temperatura es el Kelvin: La fórmula para convertir grados centígrados a kelvin es °C +273.15=K. Por otro lado, la bandera es la que presenta estados y se ocupa en programación, por lo tanto, sus unidades no corresponden al SI.

2. Sumidero de la incertidumbre.

Graficar los datos

Graficamos las tres columnas de variables (Temperatura, bandera y cuenta) con respecto a la fecha a lo largo de todo el periodo de medición (2019-2020)

Importamos matplotlib para graficar

In [3]:
import pandas as pd
import matplotlib.pyplot as plt

data=pd.read_csv("datos/archivo04.csv",header=54,na_values=8989)

fig=plt.figure(figsize=(30,25))
ax = fig.add_subplot(3,1,1)
fechas_datetime=pd.to_datetime(data["Tiempo"])
ax.plot(fechas_datetime,data["Temperatura"],color="b",alpha=0.5, label="temperatura")

ax.set_ylabel("Temperatura(°C)")
ax.set_title("Temperatura a lo largo del año 2019")
ax.set_xlim(fechas_datetime[0], fechas_datetime[8759])
ax.legend()
fig.autofmt_xdate
Out[3]:
<bound method Figure.autofmt_xdate of <Figure size 2160x1800 with 1 Axes>>

En estas gráficas podemos comparar las mediciones de temperatura durante todo el año 2019. Se realizan 23 mediciones cada día, desde 0:30 am hrs hasta las 23:30, durante todo del año. En la gráfica, es visible una discontinuidad de datos, esto es porque por las condiciones no fue posible que la estación recopilara los datos de esas horas. Esto es posible de verificar con los metadatos proporcionados por las banderas. Las banderas nos indican la calidad o confiabilidad del dato, en el encabezado nos indica el significado de cada badera: "QC Flag (0-9): 0 = no QC; 1 = good; 2 = probably good, use with caution; 3 = probably bad; 4 = bad; 6 = bad down-sampling; 7 = Averaged value; 8 = Interpolated Value; 9 = Missing Value (8989)"

Ahora graficaremos los datos por tres periodos de tiempo: Los meses fríos de enero a mayo, que corresponden a la primera parte del invierno del año, los meses cálidos de junio a septiembre que son los correpondientes al "verano", y los meses fríos de octubre a diciembre, que son la segunda parte del invierno. Escogimos estos intervalos tomando en cuenta que en el punto geográfico donde se tomaron las mediciones (Canadá) en los meses de verano las temperaturas van entre los 0 ºC a 10ºC,y en los meses de invierno son menores a 0ºC hasta los -50°C.

Encontramos la fila donde termina el mes requerido dividiendo el número total de datos(obteniendo el número de datos por mes) y multiplicando este resultado por el número del mes buscado. Dado que no tenemos la certeza de que todos los meses abarquen exactamente el mismo número de datos, el resultado será un aproximado

Por último, se gráfico un día representativo de cada estación (invierno y verano). Para tratar de identificar, si existía alguna oscilación ciclíca durante el día. A partir de las gráficas, no es observable ningún ciclo, esto es probable ya que la incidencia de la luz solar en las zonas polares, en invierno no es constante o casí nula, y en verano es casí constante durante todo el día.

In [27]:
8760/12
Out[27]:
730.0

Dado que el primer dato se encuentra en la fila 0, no 1, enero termina en la fila 729, y cada mes abarca 730 filas.

In [51]:
print('mayo termina aproximadamente en la fila', 729+(730*4))
print('septiembre termina aproximadamente en la fila', 729+(730*8))
print('diciembre termina en la fila', 729+(730*11))
mayo termina aproximadamente en la fila 3649
septiembre termina aproximadamente en la fila 6569
diciembre termina en la fila 8759

Con esto podemos definir aproximadamente el inicio y fin de nuestros meses,para encontrar la frontera exacta buscamos directamente en el archivo, teniendo como referencia los valores obtenidos anteriormente para agilizar la búsqueda

In [50]:
print("Graficamos desde",data["Tiempo"][0],"hasta",data["Tiempo"][3623])

fig = plt.figure(figsize=(18,15))
ax = fig.add_subplot(3,1,1)
ax.plot(pd.to_datetime(data['Tiempo'][0:3623]),data['Temperatura'][0:3623], color='blue',
        alpha=0.5, label='Temperatura')
ax.set_ylabel('Temperatura (°C)')
ax.set_title('Temperatura de Invierno I 2019')
ax.legend()
fig.autofmt_xdate()
Graficamos desde 2019-01-01 00:30:00 hasta 2019-05-31 23:30:00

Obtenemos el resumen estadístico de los primeros meses fríos

In [22]:
data[0:3623].describe()
Out[22]:
Temperatura Bandera Cuenta
count 2717.000000 3623.000000 3623.000000
mean -22.925506 6.821143 48.565001
std 11.055858 0.537932 19.732896
min -40.496792 6.000000 0.000000
25% -31.957431 7.000000 41.500000
50% -24.666533 7.000000 60.000000
75% -14.578719 7.000000 60.000000
max 2.583652 9.000000 61.000000
In [23]:
print("Graficamos desde",data["Tiempo"][3624],"hasta",data["Tiempo"][6551])

fig = plt.figure(figsize=(18,15))
ax = fig.add_subplot(3,1,1)
ax.plot(pd.to_datetime(data['Tiempo'][3624:6551]),data['Temperatura'][3624:6551], color='orange',
        alpha=0.5, label='Temperatura')
ax.set_ylabel('Temperatura (°C)')
ax.set_title('Temperatura de Verano 2019')
ax.legend()
fig.autofmt_xdate()
Graficamos desde 2019-06-01 00:30:00 hasta 2019-09-30 23:30:00

Obtenemos el resumen estadístico de los meses cálidos

In [41]:
data[3624:6551].describe()
Out[41]:
Temperatura Bandera Cuenta
count 2295.000000 2927.000000 2927.000000
mean 4.550105 7.373420 47.307824
std 4.659397 0.816117 23.893001
min -7.190637 6.000000 0.000000
25% 1.016876 7.000000 58.000000
50% 4.814946 7.000000 60.000000
75% 8.005744 7.000000 60.000000
max 17.698325 9.000000 61.000000
In [52]:
print("Graficamos desde",data["Tiempo"][6552],"hasta",data["Tiempo"][8759])

fig = plt.figure(figsize=(18,15))
ax = fig.add_subplot(3,1,1)
ax.plot(pd.to_datetime(data['Tiempo'][6552:8759]),data['Temperatura'][6552:8759], color='blue',
        alpha=0.5, label='Temperatura')
ax.set_ylabel('Temperatura (°C)')
ax.set_title('Temperatura de Invierno II 2019')
ax.legend()
fig.autofmt_xdate()
Graficamos desde 2019-10-01 00:30:00 hasta 2019-12-31 23:30:00

Obtenemos el resumen estadístico de los últimos meses fríos

In [54]:
data[6552:8759].describe()
Out[54]:
Temperatura Bandera Cuenta
count 2033.000000 2207.000000 2207.000000
mean -18.193737 7.122338 54.131853
std 10.056412 0.514948 15.110992
min -35.688809 6.000000 0.000000
25% -26.239280 7.000000 56.000000
50% -19.600375 7.000000 60.000000
75% -8.167658 7.000000 60.000000
max 2.896773 9.000000 60.000000

Para observar aún más a detalle los datos, graficaremos los datos de 24 horas de un día en los meses cálidos, y de un día en los meses fríos, y obtendremos sus respectivos resúmenes estadísticos.

In [55]:
print("Graficamos desde",data["Tiempo"][0],"hasta",data["Tiempo"][23])

fig = plt.figure(figsize=(18,15))
ax = fig.add_subplot(3,1,1)
ax.plot(pd.to_datetime(data['Tiempo'][0:23]),data['Temperatura'][0:23], color='violet',
        alpha=0.5, label='Temperatura')
ax.set_ylabel('Temperatura (°C)')
ax.set_title('Temperatura en 24 hrs  Invierno (enero)')
ax.legend()
fig.autofmt_xdate()
Graficamos desde 2019-01-01 00:30:00 hasta 2019-01-01 23:30:00
In [56]:
data[0:23].describe()
Out[56]:
Temperatura Bandera Cuenta
count 23.000000 23.0 23.000000
mean -26.865261 7.0 59.652174
std 1.591687 0.0 1.668115
min -29.476618 7.0 52.000000
25% -28.099950 7.0 60.000000
50% -27.024106 7.0 60.000000
75% -25.807148 7.0 60.000000
max -24.214873 7.0 60.000000
In [57]:
print("Graficamos desde",data["Tiempo"][4344],"hasta",data["Tiempo"][4367])

fig = plt.figure(figsize=(18,15))
ax = fig.add_subplot(3,1,1)
ax.plot(pd.to_datetime(data['Tiempo'][4344:4367]),data['Temperatura'][4344:4367], color='y',
        alpha=0.5, label='Temperatura')
ax.set_ylabel('Temperatura (°C)')
ax.set_title('Temperatura en 24 hrs Verano (julio)')
ax.legend()
fig.autofmt_xdate()
Graficamos desde 2019-07-01 00:30:00 hasta 2019-07-01 23:30:00
In [58]:
data[4344:4367].describe()
Out[58]:
Temperatura Bandera Cuenta
count 23.000000 23.0 23.0
mean 12.394339 7.0 60.0
std 2.837681 0.0 0.0
min 9.122886 7.0 60.0
25% 10.018096 7.0 60.0
50% 11.529581 7.0 60.0
75% 14.418641 7.0 60.0
max 17.648461 7.0 60.0

Ascenso a la cima

Análisis de datos y gráficas

¿La variable dependiente es directamente proporcional al tiempo transcurrido, inversamente proporcional, o ninguna? ¿Observan algún ciclo? R: La variable no es directamente proporcional, ni inversamente proporcional al tiempo. Los datos corresponden al ciclo de las estaciones del año para un clima subpolar o siberiano en la clasificación de Köppen, el cual se genera en las latitudes de 50° a 70°. Se caracteriza por invierno largos, “veranos” cortos frescos o fríos, y nieve presente durante gran parte del año (Gabler, Petersen & Trapasso, 2007) Las temperaturas representadas, van de -40ºC a 0ºC de enero a mayo, toman valores de 0ºC a 10ºC de junio a septiembre, y vuelven a bajar de 0ºC a -40ºC de octubre a diciembre. El máximo valor es 17.698325ºC, y se alcanza en el mes de junio, mientras que el mínimo es -40.496792ºC y se alcanza en enero.

A partir de los metadatos, ¿pueden saber el lugar en donde se realizaron las mediciones? ¿Cuánto tiempo abarcan? R: Sí, las medidas se realizaron en las siguientes coordenadas: 69° 8'57.30"N y 105°55' 50.10"O, tal ubicación se encuentra en Canadá, cerca del Estrecho de Victoria. Las mediciones mostradas, son durante todo el año 2019, y cada día se generaron 23 mediciones (desde 00:30 am hasta las 23:30 pm).

¿Pueden pensar en algún fenómeno físico que se explique a partir de estos datos? R: La medición de los datos, representan las características climatológicas y meteorológicas de la zona. También, este tipo de mediciones de la oscilación de la temperatura del aire durante años, son utilizados como registro, para evaluar el cambio climático, y de igual forma como evidencia del calentamiento global.

¿Con qué instrumentos fueron realizadas estas mediciones? ¿Cómo funciona este aparato? R: Las mediciones fueron realizadas con Lufft WS501.Este es un sensor meteorológico compacto que mide temperatura del aire, humedad relativa, dirección y velocidad del viento y radiación. La tecnología que usa para efectuar las mediciones, son las siguientes: Ultrasónico / Viento, NTC / T, Capacitivo / RH, MEMS capacitivo / Presión, Kipp & Zonen Piranómetro / Radiación. Un sensor meteorológico, atendiendo a la definición de la Agencia Estatal de Meteorología (AEMET) (1), es un «dispositivo diseñado para recibir información de una magnitud meteorológica y transformarla en otra, en muchos casos eléctrica, que se pueda cuantificar y procesar» para facilitar su comprensión.

Fotografía: Sensor meteorológico inteligente WS501-UMB

Referencias:

-Gabler, R., Petersen, J. y Trapasso, L. (2007). Fundamentos de la geografía física . Belmont, CA: Thomson Brooks / Cole.

-WS501-UMB Smart Weather Sensor. (s. f.). Lufft. Recuperado 29 de octubre de 2020, de https://www.lufft.com/products/compact-weather-sensors-293/ws501-umb-smart-weather-sensor-1839/

-Cambridge Bay Community Observatory Backgrounder (2012). En Ocean Networks Canada. Recuperado de https://www.oceannetworks.ca/cambridge-bay-community-observatory-backgrounder (octubre, 2020).

-Enviraiot. Qué son y para qué sirven los sensores meteorológicos. Recuperado 29 de octubre del 2020, de https://enviraiot.es/que-son-sensores-meteorologicos/#:~:text=Un%20sensor%20meteorol%C3%B3gico%2C%20atendiendo%20a,procesar%C2%BB%20para%20facilitar%20su%20comprensi%C3%B3n.

In [ ]: