[MÚSICA] [MÚSICA] Hola. Vamos a empezar el proyecto de análisis de datos de los vuelos con retraso. En primer lugar vamos a considerar que los datos you están you están listos para ser leídos y analizados, por lo tanto los datos you están en HDFS. Luego bueno, durante este tema lo que veremos son las tareas asociadas a la lectura de datos a la inspección. Llevaremos a cabo un un breve análisis exploratorio para dar paso a al preproceso filtrado y preparación de los datos para proseguir con un análisis exploratorio más más enfocado al objetivo mismo del estudio. En siguientes temas you veríamos las tareas de modelización y herramientas predictivas y sedimentación y herramientas más específicas de machine learning. En todo caso empezando con el apartado de lectura de datos de inspección la primera tarea a llevar a cabo es definir el sparkcontext y el sqlcontext para trabajar con spark. Jupyter tal y como está instalado en esta máquina virtual incorpora el sparkcontext y el sqlcontext por defecto, por lo tanto you vienen definidos. En otras máquinas y otros sistemas podría ser necesario incluso, ejecutar estas instrucciones que aquí están están simplemente comentadas. También insistir que todo el código que aquí presentamos está pre-ejecutado para hacer el el discurso más ágil. Podemos comprobar la versión de spak instalada en la máquina con esta instrucción ecc punto versión y proseguiríamos. La primera tarea, por lo tanto es la lectura de los datos. La librería con punto data brisk punto spark punto csv es la librería que permite leer los datos directamente de fichero csv infiriendo el esquema pertinente. Ejecutada esta instrucción estaríamos leyendo esta base de datos que como le os dicho se ha descargado previamente y se ha almacenado en HDFC. Es un fichero csv correspondiente a todos los vuelos realizados en Estados Unidos durante el mes de diciembre del 2016. Esta base de datos está configurada aproximadamente por 500,000 vuelos de los cuales más o menos una cuarta parte tenían retraso. El proyecto, insisto, pretende analizar qué vuelos son, son afectados por estos retrasos. A partir de aquí proseguiríamos con una simple inspección inicial. Ejecutamos bd punto dtypes. Bd es la base de datos resultante de la lectura. Dtypes es el método que permite obtener una descripción de todas las variables contenidas en esta base de datos. Vemos que algunas son de tipo entero, otras son string, etcétera, etcétera. Aquí tenemos algunas que son de tipo doble. Hay un montón de variables asociadas a los detalles de los vuelos. Muchas de esas variables no nos sirven para nada, por lo tanto deberemos filtrar las variables de interés. Podéis consultar más información sobre las variables de trabajo en esta página web. Las variables de interés you vienen pre-selecionadas aquí. Serán pues el año y el mes de trabajo. Al final, pues, en nuestro ejemplo siempre va a ser 2016 y mes diciembre. Por lo tanto esto va a ser constante. Al final pues [INCOMPRENSIBLE] interesa. Día del mes, día de la semana, hora de departura del vuelo compañía, número del avión, retraso retraso en la partida, aeropuerto de origen, aeropuerto de destino distancia entre aeropuertos, si el vuelo fue cancelado, si el vuelo fue desviado, y el tipo de retraso a través de estas cinco variables que atribuyen el retraso a diferentes causas, you sea al tiempo, la aerolínea detalle de seguridad o, otros detalles. Spark, y pyspark en particular, permiten el manejo de bases de datos a partir de una serie de funciones y métodos aplicadas a la base de datos. Por ejemplo, la lectura de, o el listado de las columnas el listado de las primeras filas, la recolección de los datos. Esta instrucción es un poco particular, convierte los datos a lista. No tiene demasiado sentido ejecutar esta instrucción con la base de datos actual, puesto que sería un malgasto de recursos. Aquí tenemos otras instrucciones que permiten seleccionar campos, simplemente eliminando el resto o al revés, eliminar campos de la base de datos. Aquí tenemos más tareas que permiten llevar a cabo un pequeño resumen descriptivo, un recuento de datos y más tareas asociadas con la gestión que sería la aplicación de filtros y la creación de nuevas variables. Aquí vemos simplemente una especie de herramientas disponibles, luego empezaremos a emplear algunas de ellas, pues prosiguiendo con la inspección de esta base de datos. A continuación vemos de nuevo un listado de las columnas resultantes de haber aplicado el filtro pertinente que estabamos comentando antes. Aquí tenemos las columnas resultantes. La instrucción b dtypes, como hemos visto antes, pues también nos nos proporciona el tipo de variable que estamos que estamos mostrando. La función get o el método get nos lista aquí en un formato un poco, bueno, dígamos que un modo texto los tres primeros registros de la base de datos. Lo mismo que provoca el método show pero en un formato más de tabla. Lo que pasa que es una tabla de texto que en este en este visor pues quedaría un poco desconfigurada. Veremos herramientas para presentar esta información de una forma un poco más visual. Herramientas de gestión de datos, pues tenemos la función count. Aplicada esta función a la base de datos pues vemos que el número exacto de vuelos del mes de diciembre del 2016 es de 460 mil 949. Tenemos también el método drop na, que permite eliminar todos aquellos registros con al menos un dato faltante, un, un campo que sea nulo y tras encadenar métodos, pues al final lo que tenemos es un recuento de casos tras eliminar datos faltantes. Al final lo que vemos es que de los 460,000 casos iniciales tan solo 100,000 son completos. Si aplicamos estas dos funciones, drop y count, a la base de datos solo habiendo seleccionado el campo retraso bruto pues vemos que el número de datos pues es considerable. Es decir, que el número de datos faltantes para este campo vendría a ser tan solo del orden de 8,000 casos. También podemos aplicar filtros y seguido de recuentos para observar cuántos vuelos sufrieron retraso. Un retraso superior a cero minutos, pues tenemos del orden de 187,000 casos. También hay otros métodos y funciones como esta aquí, distinct, que permite capturar los valores diferentes para la base de datos o la variable seleccionada de la base de datos. Valores diferentes del campo destino son 297. Esos significa que hay 297 aeropuertos incluidos en esta base de datos como destino. Este campo, unique carrier, se corresponde con las aerolíneas operando los vuelos. En total hay 12 aerolíneas diferentes. Podemos proseguir aplicando métodos como capturar el promedio pero de forma agregada y mostrando el resultado. Necesitamos mostrar el resultado con las funciones show No necesitamos poner aquí el número de filas a mostrar, sino que necesitamos simplemente mostrar el resultado, Show, porque el resultado de cualquier de cualquier método aplicado a la base de datos continúa siendo una base de datos y la base de datos no se mostraría como tal. Algo parecido podemos hacer, por lo tanto, intentando capturar cuál es el promedio del campo Retraso, ArrDelay, agregado por destino. El resultado de esta operación consistente en, primero, seleccionar los campos de interés, agregar en función de uno de ellos, que son unas cuantas categorías y mostrar el promedio en función del otro campo de interés, pues daría como resultado esta table. Y podemos ver que, por ejemplo, pues este aeropuerto tiene un retraso promedio de 17 minutos, este de aquí tan solo de cuatro, etc., etc. La función Show mostraría todos los datos, pero la consola aquí solo nos está mostrando las veinte primeras filas. Para el campo Retraso podemos mostrar estadísticos descriptivos generales a partir de la función Describe, en donde lo que tenemos es el recuento, el promedio global, la desviación estándar, el mínimo, el máximo. Vemos en particular que hay un vuelo con un retraso de 2028 minutos. Eso es un día y medio, aproximadamente. El mismo proceso de inspección se puede llevar a cabo llevando tareas SQL, tareas y sintaxis SQL. Para ello, necesitamos llevar a cabo esta operación, registrar la base de datos como DataFrame, dándole un nombre. El nombre puede ser, obviamente, el mismo. La base de datos ahora you está registrada en SQL Context y ahora es viable aplicar instrucciones del tipo SQL empleando la base de datos de interés. Las instrucciones SQL permiten llevar a cabo las tareas vistas anteriormente. Por ejemplo, en este caso, haríamos un recuento de observaciones por aeropuerto de destino. Siguiendo un poco más, también podríamos llevar a cabo consultas para contar el número de vuelos entre pares de aeropuertos: aeropuertos de destino aeropuertos de origen y número de casos. Vemos en particular que los… la conexión origen-destino más frecuente es de San Francisco a Los Ángeles. La siguiente es al revés: de Los Ángeles de origen a San Francisco de destino. Y así podríamos identificar cuáles son las conexiones más habituales. Tareas de resumen de datos también se pueden llevar a cabo desde SQL empleando las funciones de agregación la base de datos pertinente. Como hemos visto antes, de forma parecida, podemos calcular para cada aeropuerto de destino una serie de indicadores resumen de las variables de interés, pues, para cada destino el promedio del retraso y el número de casos. Aquí veríamos el resultado. El resultado, obviamente, aquí aparece ordenado porque hay esta instrucción: queremos ordenar en función del promedio de retraso. De esta forma, el aeropuerto de destino que tiene un retraso mayor, vendría a ser de 38 minutos, para el cual hay 56 vuelos. Hasta aquí la inspección inicial de los datos. Hemos llevado a cabo la lectura y hemos empezado a hacer tareas de consulta e inspección para entender un poco más la información contenida en la base de datos. [MÚSICA] [AUDIO_EN_BLANCO]