<jupyter_start><jupyter_text>IntroDurante el año 2018 era la primera vez que se dictaba esta unidad en la materia. En la primer clase realicé la pregunta sobre si les interesaba algunos datos en particular para analizar o algún dataset. Un alumno nos acercó su inquietud y compartió el dataset que es el que vamos a usar en este laboratorio.El dataset contiene mediciones de una toma de corriente trifásica. El objetivo es visualizarlo (¿Qué forma tiene la onda?) y si la misma presenta ruido.Vea más sobre corrienta alterna en https://es.wikipedia.org/wiki/Corriente_alternaNotará que las señales son senoidales.  Carga del dataset  por pasos: chusmeando con la CLI primero, luego importar con pandas<jupyter_code>!wget  https://github.com/anadiedrichs/time-series-analysis/raw/master/datasets/forma_de_onda/forma_de_onda.csv
!ls -lh<jupyter_output>total 140M
-rw-r--r-- 1 root root  47M Oct 10 15:17 forma_de_onda.csv
-rw-r--r-- 1 root root  47M Oct 10 16:03 forma_de_onda.csv.1
-rw-r--r-- 1 root root  48M Oct 10 15:11 forma_de_onda.txt
drwxr-xr-x 1 root root 4.0K Aug 27 16:17 sample_data<jupyter_text>Notamos que forma_de_onda.csv pesa unos 47 Megabytes.Chusmeo las primeras líneas<jupyter_code>!head forma_de_onda.csv<jupyter_output>"Fecha","Hora","AN(V)","A(A)","BN(V)","B(A)","CN(V)","C(A)","NG(V)","N(A)"
09/20/18,"18:38:36.120",313.6751,-154.1138,-66.1186,78.2013,-240.5648,64.4684,0,42.3431
09/20/18,"18:38:36.120",311.6035,-144.1956,-42.252,71.3348,-258.9934,68.6646,-0.0863,28.2288
09/20/18,"18:38:36.121",305.216,-128.1738,-16.2275,64.0869,-275.9115,70.5719,-0.2158,6.8665
09/20/18,"18:38:36.121",291.7506,-111.7706,8.5885,58.7463,-289.3769,72.4792,-0.2158,-17.5476
09/20/18,"18:38:36.121",273.8831,-102.9968,31.8509,54.5502,-299.6054,79.3457,-0.1295,-39.2914
09/20/18,"18:38:36.121",254.6344,-99.9451,54.8111,47.3022,-305.6908,90.7898,-0.0432,-51.1169
09/20/18,"18:38:36.122",235.4721,-98.8007,79.3682,36.2396,-309.1434,106.8115,-0.0863,-57.9834
09/20/18,"18:38:36.122",215.0582,-94.986,105.6085,23.6511,-311.4308,122.8333,-0.259,-68.6646
09/20/18,"18:38:36.122",191.4074,-85.8307,132.3236,12.97,-312.9414,134.6588,-0.3884,-85.8307<jupyter_text>Observe como están separados los campos de información (por coma), el formato de la fecha y la hora.Importamos usando la funcion read_csv, puede demorar un poco en ejecutarse.<jupyter_code>import pandas as pd
from pandas import Series
data = pd.read_csv('forma_de_onda.csv',header=0, parse_dates=[0],squeeze=True) #index_col=0,<jupyter_output><empty_output><jupyter_text>index_col es 0 : toma la primer columna como indice por defecto header es 0, la primer fila es usada como cabeceraparse_dates es True, intenta convertir los tipos de datos a tipo DateTimeLa option squeeze=True regresa tipo Series Mostramos las primeras 10 líneas del dataset<jupyter_code>data.head(10) 
type(data) #el tipo de variable que es data, es un DataFrame<jupyter_output><empty_output><jupyter_text>Accediendo a pedacitos del dataset Veo desde la fila 1 a la 20, las columnas 2 a la 7<jupyter_code>data.iloc[1:20,2:7]<jupyter_output><empty_output><jupyter_text>Grafico un rango del dataset<jupyter_code>data.iloc[1:100,2:7].plot()<jupyter_output><empty_output><jupyter_text>Propiedades del dataset Cuántas filas y columnas tiene<jupyter_code>data.shape<jupyter_output><empty_output><jupyter_text>Son las mismas columnas que miramos ejecutando *head*<jupyter_code>data.head(10)<jupyter_output><empty_output><jupyter_text>¿Lo siguiente muestra número de filas o columnas?<jupyter_code>data.shape[0]<jupyter_output><empty_output><jupyter_text>¿Lo siguiente muestra número de filas o columnas?<jupyter_code>data.shape[1]<jupyter_output><empty_output><jupyter_text>Podemos observar de cada DataFrame algunas características estadísticas usando *describe()*<jupyter_code>data.describe()<jupyter_output><empty_output><jupyter_text>Valores perdidos Chusmeamos el dataset nuevamente<jupyter_code>data.iloc[50:60,0:5]
data.iloc[1:100,2:7].plot()<jupyter_output><empty_output><jupyter_text>[Actividad]Habrá notado que hay valores pedidos en la serie. Determine si reconstruye la señal compleando los valores perdidos e indicados como NaN o los ignora. Justifique SU RESPUESTA AQUI<jupyter_code>df = data.interpolate(method="linear")
df2 = data.dropna()
df.shape
df2.shape
df.shape[0] - df2.shape[0]<jupyter_output><empty_output><jupyter_text>[actividad] Intervalos de muestreo¿Cada cuánto tenemos una medición? ¿Qué nos puede decir sobre el intervalo de muestreo? **SU RESPUESTA AQUI**  [actividad] Análisis de la señal¿Son todas las ondas "perfectamente" senoidales?¿Por qué cree que alguna no? **SU RESPUESTA AQUI**  [actividad] Calcule y grafique la FFT de la señal  ESCRIBA SUS COMENTARIOS AQUI<jupyter_code>from scipy.fftpack import fft
yf = fft(df.iloc[:,3])
N=df.shape[0]
T=0.02
import numpy as np
xf = np.linspace(0.0, 1.0/(2.0*T), N//2) # N//2
import matplotlib.pyplot as plt

# fig = plt.figure()

plt.xlabel('xlabel')  # etiquete correctamente el eje x
plt.ylabel('ylabel') # etiquete correctamente el eje y
plt.plot(xf, 2.0/N * np.abs(yf[0:N//2])) #N//2
plt.grid()
plt.show()

# fig.savefig('test.jpg')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1339907192575406, 'fraction_numerical': 0.13225058004640372, 'mean_word_length': 6.2248603351955305, 'pattern_counts': {'":': 0, '<': 55, '<?xml version=': 0, '>': 55, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '14', 'dir': 'jupyter-structured-clean-dedup', 'id': '505856', 'license': 'Apache-2.0', 'n_tokens_mistral': 2508, 'n_tokens_neox': 2138, 'n_words': 447, 'path': 'proyecto_forma_de_onda_2019_codigo.ipynb', 'repo_name': 'anadiedrichs/time-series-analysis', 'size': '5172'}