2022/07/31

S4 Cierre

Cierre Semana 4

Muchos de los problemas actuales a los que se enfrenta un científico de datos involucran el manejo de grandes cantidades de información, por lo que es necesario que se organicen bases de datos donde es posible almacenar y consultar la información de una forma práctica y sencilla.

En esta semana hemos explorado los conceptos fundamentales relacionados con las bases de datos, así como los principales tipos de bases de datos que se utilizan actualmente. También trabajamos con pocas instrucciones del lenguaje SQL, para poder manipular bases de datos ya existentes o crear nuevas bases de datos. Gracias a la paquetería Pandas pudimos integrar el nuevo conocimiento a Python con lo que podremos generar nuevos y más complejos códigos.

Tu carrera de científico de datos sigue creciendo y esperamos que a esta altura ya cuentes con herramientas que te permitan empezar a desarrollar tus primeros proyectos donde puedas utilizar Python para obtener información desde sitios web, manipular grandes volúmenes de datos e incluso visualizar de forma clara y precisa la información más valiosa de un conjunto de datos.

Muchos de los problemas actuales a los que se enfrenta un científico de datos involucran el manejo de grandes cantidades de información.

Generalmente las empresas almacenan la mayoría de su información en una base de datos.
Por ello es indispensable para nosotros como científicos de datos consultar esa información de manera eficaz.

En esta semana hemos explorado los conceptos fundamentales relacionados con las bases de datos así como los principales tipos de bases de datos que se utilizan actualmente.

También trabajamos con unas cuantas instrucciones del lenguaje SQL para poder manipular bases de datos ya existentes o crear nuevos registros en las bases de datos.

Gracias a la paquetería Pandas pudimos integrar el nuevo conocimiento a Python con lo que podemos generar nuevos y más complejos códigos.

Tu carrera de científico de datos sigue creciendo y esperamos que a esta altura ya cuentes con las herramientas que te permiten empezar a desarrollar tus primeros proyectos donde puedes utilizar python para poder obtener información desde sitios web, manipular grandes volúmenes de datos e incluso visualizarlos de una forma clara y precisa, y que sepas encontrar la información más valiosa de un conjunto de datos de la manera más eficaz.

S4 Qué es una Base de Datos NOSQL

¿Qué Es Una Base De Datos NOSQL?

Cuando se habla de entornos de base de datos o de desarrollo de aplicaciones web, cada vez es más frecuente el uso del término NoSQL. Pero, ¿qué es una base de datos NoSQL? 

Las bases de datos NoSQL están diseñadas para varios patrones de acceso a datos que incluyen aplicaciones de baja latencia. Las bases de datos de búsqueda NoSQL están diseñadas para hacer análisis sobre datos semiestructurados. El modelo relacional normaliza los datos en tablas conformadas por filas y columnas.


NoSQL (a veces llamado "no solo SQL") es una amplia clase de sistemas de gestión de bases de datos que difieren del modelo clásico de SGBDR (Sistema de Gestión de Bases de Datos Relacionales) en aspectos importantes, siendo el más destacado que no usan SQL como lenguaje principal de consultas. Los datos almacenados no requieren estructuras fijas como tablas, normalmente no soportan operaciones JOIN, ni garantizan completamente ACID (atomicidad, consistencia, aislamiento y durabilidad) y habitualmente escalan bien horizontalmente. Los sistemas NoSQL se denominan a veces "no solo SQL" para subrayar el hecho de que también pueden soportar lenguajes de consulta de tipo SQL.


los investigadores académicos se refieren a este tipo de bases de datos como almacenamiento estructurado, término que abarca también las bases de datos relacionales clásicas. A menudo, las bases de datos NoSQL se clasifican según su forma de almacenar los datos, y comprenden categorías como clave-valor, las implementaciones de BigTable, bases de datos documentales, y bases de datos orientadas a grafos.

Los sistemas de bases de datos NoSQL crecieron con las principales redes sociales, como Google, Amazon, Twitter y Facebook. Estas tenían que enfrentarse a desafíos con el tratamiento de datos que las tradicionales SGBDR no solucionaban. Con el crecimiento de la web en tiempo real existía una necesidad de proporcionar información procesada a partir de grandes volúmenes de datos que tenían unas estructuras horizontales más o menos similares. Estas compañías se dieron cuenta de que el rendimiento y sus propiedades de tiempo real eran más importantes que la coherencia, en la que las bases de datos relacionales tradicionales dedicaban una gran cantidad de tiempo de proceso.

En ese sentido, a menudo, las bases de datos NoSQL están altamente optimizadas para las operaciones recuperar y agregar, y normalmente no ofrecen mucho más que la funcionalidad de almacenar los registros (p.ej. almacenamiento clave-valor). La pérdida de flexibilidad en tiempo de ejecución, comparado con los sistemas SQL clásicos, se ve compensada por ganancias significativas en escalabilidad y rendimiento cuando se trata con ciertos modelos de datos.

El siguiente artículo te será útil para complementar el tema.

https://blogs.oracle.com/


S4 Qué es NOSQL

¿Qué es NOSQL?

Ahora vera qué son las bases de datos NOSQL.

Ya ha visto las SQL, las has trabajado en Python.

Ahora vera otro tipo de formas en las que se representa nuestra información.

Para eso preparamos una libreta igual que la de cuando abordamos el tema de base de datos SQL, es una libreta teórica que contiene pequeños ejemplos que te permiten visualizar cómo funciona las base de datos NOSQL.

Bueno, en esta libreta se presentan una, dos, tres formas diferentes de administrar tu información en bases de datos del tipo NOSQL.

Las bases de datos Clave - Valor, mejor conocidas por su nombre en inglés "Key Value" son las bases de datos NOSQL donde a cada elemento conocido como valor se le asocia una llave única que permite el acceso a esa información, conocido como "llave".

Entonces, este ejemplo que tiene en particular la llave que el usuario 1 está asociada a un valor, el valor número 14 que contiene el elemento Mary, la llave usuario 2 está asociada al elemento 1 que contiene el valor Mike y la llave usuario 3 está asociada al elemento 2 que contiene el valor de John.

Entonces, a cada una de las llaves se le asigna específicamente un elemento que tiene un valor.

Este tipo de base de datos permite la recuperación de la información de una manera muy rápida y además se caracterizan por ser muy eficientes no solo para leer información sino también para escribir la nueva información en la base de datos.

Otro tipo de base de datos es la base de datos grafo.

Las bases de datos de grafos representa la información a través de la teoría de grafos.
A cada elemento se le asigna un grafo y las relaciones entre ese elemento y otros quedan representados por las aristas o conexiones entre los nodos del grafo.

Entonces, este tipo de bases de datos no solo me permiten visualizar de una manera sencilla la información sino que su principal fuerza es que nos permiten visualizar de manera sencilla las relaciones que existen entre esa información.

Nos permiten saber exactamente cómo un dato se relaciona con otro, en qué sentido se relacionan o de qué manera se relacionan.

A las aristas se les puede muchas veces incluir una especie de etiqueta en la que se definan más visualmente de qué forma está relacionada la información.

El último ejemplo de base de datos SQL que veremos son las bases de datos documentales.

En las bases de datos documentales, como su nombre lo dice, toda la información se escribe en un solo documento que usualmente es en algún formato sencillo.

Por ejemplo, xml.

Pero bueno, a través de una clave única se puede accesar a cada registro de este documento.

En este caso nuestra ilustración nos dice que hay un documento de fondo en el que está toda la información y al accesar a un registro nosotros podemos ver cierta información en específico.

Esa información puede contener diferentes datos similar a como funcionaría un objeto en programación.

Este tipo de bases de datos no sólo permite realizar búsquedas similares a las bases de datos clave - valor que vimos anteriormente sino que también nos permite realizar consultas más avanzadas sobre el contenido del documento.

El objetivo de este curso escapa un poco de las dimensiones de explorar estas de una manera práctica pero nos interesa que sepas que las bases de datos NOSQL han cobrado popularidad debido a que las bases de datos SQL se ven un poco limitados al momento de escalar para resolver problemas del tipo de big data.

Entonces, ahora que estás iniciando tu carrera de analista de datos es conveniente que sepas que existen alternativas para cada una de las bases de datos a las que tú te enfrentes, hazlo con la misma confianza, toma tu tiempo, busca alternativas, busca una forma cómoda y no olvides que limpiar los datos, visualizarlos, te va a permitir a ti entender qué es lo que quieres analizar de estas bases de datos.

S4 PANDAS con SQL

PANDAS CON SQL

Vamos a ver lo que es Pandas conectado a SQL.

Para ello vamos a abrir el cuaderno "Pandas con SQL".

Lo que es importar para la base de datos en este momento, que sigue siendo la misma, la de fútbol soccer, y se va hacer una consulta.

Seleccionar de la tabla liga, el nombre de la liga.

Va a decirle a la tabla partidos: los goles como equipo de casa, los goles como equipo de visitante y la fecha de ese partido.

¿De dónde? De un join, es decir, una combinación de tablas de la tabla liga y de la tabla partidos.

¿Con respecto a qué campo? Al campo league_id de match y id de liga.

Estos dos tienen que ser iguales para que se puedan asociar los registros de las dos tablas.

Ahora, se va a utilizarlo con Pandas.

Lo que ha estado haciendo en ese momento es decirle: SQL lite3, crea una conexión y con el cursor ejecuta esta consulta.

Pandas puede hacer todo eso de forma automática, solamente se le dice qué consulta va a ejecutar y cuál es la conexión que va a utilizar para ejecutar la consulta.

Importar Pandas como lo hace normalmente, que es import Pandas as pd, y le dice "Pandas, lee SQL", es decir, va a ejecutar la consulta en una conexión.

Si se tiene un motor de base de datos ya más pesado el cual da consultas de gran nivel simplemente va a reemplazar los datos de la conexión.

Por eso es conveniente utilizar SQL lite porque al final de cuentas con Pandas solamente hay que cambiar eso, y se tiene una conexión lista para producción.

Entonces, lo ejecuta, tarda un poquito en cargar Pandas la primera vez que lo importamos, y ahora sí, ya guardó la consulta en la variable "df".

Al darle la función head y va a imprimir los cinco primeros registros, ya en una forma tabulada en Pandas como esta acostumbrado a verlo, va a decir que hay un nombre de la liga, el número de goles como el equipo de casa y el número de goles como visitante y aparte una fecha.

Entonces ya indica la consulta SQL, ya lo ejecutó y el data frame de Pandas como ya los sabe se puede hacer mil cosas.

Se puede transformarlo como quiera.

Por ejemplo, va a agregar una quinta columna la cual sea la diferencia de goles.

Puede decirle "de df dame los goles como equipo de casa y restarle los goles como visitante y da un valor absoluto de esos dos".

Se guarda, seimprime otra vez los cinco primeros registros, y ahora sí, ya da las diferencias de goles.

Una vez que calculamos la diferencia entre los goles de casa con visitante podemos imprimirlos fácilmente con, otra vez, la función head.

Lo generamos, y podemos ver, por ejemplo, en el primer caso, que fue un partido 1 - 1.
La diferencia de goles es 0.
En el caso del tercero, por ejemplo, fue 0 goles en casa y 3 como visitante, entonces la diferencia de goles es 3.
Entonces, ya estamos haciendo ingeniería de datos, estamos agregando datos a la tabla de una forma sencilla gracias a Pandas, y esto lo podemos manipular a la escala que queramos porque podemos escalarlo a múltiples tablas, a múltiples consultas, múltiples manipulaciones.
Ahora, como tenemos Pandas como nuestro respaldo podemos utilizar los ordenamientos que hemos estado utilizando.
Por ejemplo, vamos a ordenar a través de esta nueva columna que acabamos de generar y vamos a decirle que los ordene de mayor diferencia de goles a menor diferencia de goles.
Entonces, aquí tenemos los partidos.
Por ejemplo, en la liga de Holanda tenemos un partido que fue 10 - 0, una super goliza, en la liga francesa tenemos un 0 - 9 que curiosamente fue como visitantes, tenemos en la liga escocesa un 9 - 0.
Entonces estos son diferentes partidos que pudimos hacer una selección específica gracias a la diferencia de goles que utilizamos o que agregamos.
Además también podemos, como estamos trabajando junto con Pandas, podemos hacer graficaciones.
Vamos a importar matplotlib, que ya hemos estado utilizando, y podemos utilizar además seaborn, que son estilos de gráficas un poquito más estilizadas, y vamos a hacer una gráfica la cual en el eje de las "x" tiene los goles de casa, en el eje de las "y" los de visitante y nuestro conjunto de datos es el data frame.
Entonces, si nosotros lo graficamos, tarda un poquito porque está procesando.
Aquí está.
Hacemos la gráfica y nos da estos valores.
Nos dice dónde está la concentración de los goles en casa, nos da la concentración de los partidos...
de los goles como visitante y nos da la distribución de estos dos ejes que son goles como casa contra visitante.
Se puede ver por las manchitas que tenemos aquí que la mancha más intensa está alrededor del 1 - 1.

Esto nos dice que el resultado más común en los partidos europeos es el 1 - 1, seguido del 1 - 0 donde el equipo de casa anota al menos un gol.

Esta escala se crece hasta acá por los datos que teníamos de golizas, por ejemplo, el 10-0, el 9-0, todo eso se va a hacia los extremos, que son valores muy alejados del grueso de los datos, por lo tanto pues no se alcanzan a percibir.

Pero ahí están, por eso sale la gráfica con estos tamaños.

Este concluye los ejercicios que hemos tenido preparados para ustedes donde hacemos consultas a la base datos, hacemos inserciones, hacemos actualizaciones, incluso eliminamos campos de la base de datos, los pudimos traer a Pandas y pudimos trabajarlos ya en el entorno con el que estamos más familiarizados: con Pandas.

SQL es necesario en el data science porque cuando llegamos a la industria por lo general ahí es donde están las colecciones de datos importantes: en SQL.

Entonces, es importante poder conocer cómo extraer la información de ahí, traerla a nuestro ambiente de trabajo, que es Python, poderlo procesar con Pandas y poder hacer nuestro análisis de datos.

S4 Modificando Tabla con Update y Delete

Modificando La Tabla Con Update Y Delete

Ya hemos hecho inserciones a la base de datos.

Además hemos hecho selección de qué es la información que queremos ver, hemos hecho joins.

Ahora, ¿qué tal si ya tenemos información en la base de datos y queremos actualizarla o digamos que la queremos eliminar? Entonces esas son instrucciones que nos faltan.

Para ello vamos a utilizar el cuaderno "modificando con update y delete".

Vamos a abrirlo.

Vamos a ver la cláusula update, en esta la sintaxis varía un poco pero en realidad es muy sencilla de entender.
Update nos ayuda para realizar una consulta que en realidad de seleccionada información va a actualizar la información que está en la base de datos.
Entonces, estas update también se pueden utilizar con la cláusula where.
Nos va a especificar qué registros de la base de datos queremos modificar para no tener que modificar toda la tabla.
La sintaxis similar es la siguiente: tenemos la palabra update que hace referencia a una tabla en específico, luego sigue acompañado de la palabra reserva set, que la traducción sería asignar, entonces le podemos decir "en la columna 1 asigna el valor 1, en la columna 2 asigna el valor 2".
Todo esto separado por comas y utilizando el operador igual para poder asignar.
Eso lo vamos a hacer para el número de columnas que queremos modificar los valores y le vamos a decir que solamente modifique a aquellos registros donde la condición se cumpla.
Vamos a utilizar SQL lite otra vez, la conexión es idéntica a como lo hemos estado utilizando, vamos a importar la base de datos del fútbol soccer y tenemos nuestro objeto conexión.
La conexión vamos otra vez a extraer un cursor que nos va a decir en dónde está de la base de datos y le vamos a hacer una selección para nosotros visualizar qué es lo que contiene nuestra base de datos.
Entonces vamos a seleccionar todos los jugadores.
Nos los imprime de esta manera.
entonces vamos a seleccionar algún jugador en específico.
Vamos a seleccionar el 103.
Vamos a escoger a Adam Federici.
Y a el vamos a tratar de cambiarle los valores, tal vez hubo un error a la hora de tipearlo y hay que actualizarlo.
Entonces le vamos a decir "update (actualiza) en la tabla player", y le vamos a asignar una altura de 190 y un peso de 170, ¿a quién? Bueno, a aquellos registros que tengan un Id de 103, nosotros sabemos que el 103 corresponde a Adam Federici, que él tiene un peso de 187 y una altura de 198.
Entonces, vamos a ver si se actualizan, lo hacemos si nos da el cursor no hay nada que nos haga referencia a que se hizo efectivamente o no pero podemos volver a hacer el select.
Vamos a usar un select más específico, vamos a decirle "donde Id es igual a 103".
Notarán que aquí utilizamos web en mayúsculas y acá abajo where con minúsculas, SQL lo interpreta exactamente igual, no hay ningún problema, pero es costumbre utilizarlo en mayúsculas todas estas palabras reservadas de SQL.
Entonces vamos a corregirlo, y ahora sí.
Vamos a seleccionar de la tabla player en donde el Id sea igual a 103 y eso nos trae a Adam Federici ya con los datos actualizados: la altura es de 190 y el peso es de 170.
Entonces, la cláusula update es muy sencilla de utilizar, simplemente le decimos reemplaza estos valores en estos registros y se acabó.
Es muy sencillo.
Por otro lado tenemos delete.
Delete se utiliza para eliminar los registros que ya no queremos en nuestra base de datos.
La estructura es muy similar a select, simplemente le decimos "delete ( o sea, elimina) de la tabla name donde se cumple esta condición".
Entonces le vamos a decir a la conexión ejecuta este, si se fijan aquí ya no estamos utilizando el cursor, nada más le estamos diciendo directamente a la conexión, "elimina de la tabla player donde el Id es igual a 103", es decir, nos vamos a deshacer de Federeci, lo ejecutamos y nos da pues simplemente un cursor, no nos dice bien, mal, no nos dice nada.
Lo que podemos hacer es consultarli Vamos a hacer la misma consulta de arriba: select (selecciona) from la tabla player donde (where) Id es igual a 103.
Lo imprimimos y vemos que no nos imprimió nada.
Lo que pasa es que cuando fue a buscar el Id 103 no lo encontró, y como no encontró nada pues no nos imprime nada.
No nos va a decir "no existe".
Simplemente nos va a decir nada.
Estos cambios, como los estamos haciendo en SQL, hay que buscar la manera de que sean permanentes, esto lo está haciendo en memoria.

Esto lo hacemos con esta función "conexión commit (conn_commit)", ahorita no la vamos a ejecutar porque no queremos alterar nuestros archivos de forma permanente, pero si ustedes están modificando los archivos, bueno, su base de datos en algún proyecto pues seguramente quieren los cambios permanentemente.

Ya se vio dos funciones nuevas que es update y delete, que son indispensables en el uso de bases de datos que nos van a servir de mucho cuando empecemos a administrar información de ahí.

Tal vez queremos eliminar información que está mal tipeada, que es información sucia, o tal vez queremos actualizarla y corregirla para que nuestra base de datos quede lista para poder hacer nuestro proceso de data mining o de data science.
Los espero en el próximo video para poder ver cómo podemos implementar todo esto que hemos estado viendo en SQL y verlo con lo que nosotros ya sabemos hacer en nuestras carpetas de Pandas.
 

S4 SELECT WHERE y JOIN

SELECT, WHERE Y JOIN

Ahora veremos las funcionalidad de select de una forma más avanzada.
Lo utilizaremos con la cláusula where.
Además empezaremos a utilizar unos conceptos llamados join.
Vamos a empezar.
La carpeta que vamos a estar utilizando, si lo recuerdan, la llamada cuadernos,C en su caso está guardado en el escritorio.
Entonces nosotros ya lo tenemos abierto aquí con Jupyter.
Entonces vamos a "Select, Where y Join".
Lo abrimos, esperamos un momento a que cargue.
Y ahora sí, ya lo tenemos.
Where, lo específico de where es que nos permite seleccionar ya más específico qué registros queremos de la base de datos, no nada más obtener todo.
Ya cuando escalamos a niveles grandes de industria, digamos, no vamos a estar jalando la base de datos completa en nuestra computadora, es más, ni siquiera va a caber en nuestra memoria RAM.
La función where nos va a ayudar a delimitar un poco qué es lo que nos podría servir y qué es lo que no nos podría servir.
Tiene una sintaxis muy similar a select, es más, es un agregado a la sintaxis de select donde tenemos select, seleccionar, columna 1, 2, hasta n, de tabla tal, donde hay una condición.
Esta condición por lo general hace referencia a los elementos de la tabla que estamos seleccionando.
Las base de datos que hemos estado utilizando es la european soccer data base, como en videos anteriores, y la vamos a seguir utilizando.
Para ello vamos a utilizar import SQL Lite 3, la versión reducida de motor de base de datos que nos funciona para nuestros ejemplos, y de forma similar vamos a utilizar la ruta de nuestro archivo: data/soccer/database.sqlite y vamos a hacer la conexión.
Una vez que ya está realizado ese elemento de la conexión ya empezamos a hacer consultas, y vamos a empezar a construirlas de forma similar a como lo hemos hecho, con select.
Vamos a decir "selecciona todo de la tabla player", pero hay una restricción, le vamos a decir "dónde height es mayor a 200", este height ¿a qué hace referencia? Bueno, recordemos nuestra tabla player, nuestra tabla player dice que tiene la columna player id, player name, player fifa api, birthday, height y weight.
Este height específico de aquí se llama idéntico a como lo tenemos acá.
Es más, nosotros podemos decirle explícitamente player.height, el cual no le va a indicar a SQL que este height al que no estamos refiriendo es de la tabla player.
Al ser la única tabla en nuestra consulta pues esto lo podemos omitir y simplemente llamarle height y va a funcionar exactamente igual.
Ok, entonces ¿cuáles son los elementos que nos arrojó? Nos arrojó este jugador, por ejemplo, Abdoul Ba que tiene una altura de 200.66, que apenitas pasa el filtro que nosotros impusimos que era mayor a 200, pero entró.
Es es una condición verdadera, entonces lo tomamos.
Así mismo pasaron todos estos jugadores.
Ya están filtrados de nuestra base completa que era de 11,060 jugadores en total.
Entonces de todos esos, nada más estos que nos presentó tienen una altura mayor a 200.
Entonces a partir de ahí ya se empieza a ver un poco el valor de la cláusula where.
Bueno, pero ¿qué más podemos hacer? Lo que podemos hacer es tomar dos tablas y combinarlas, pero sólo se van a combinar si ciertos parámetros son verdaderos o ciertas restricciones, por ejemplo, podemos tomar select con el asterisco, selecciona todo, de country y league.
Si recuerdan son dos tablas diferentes: country y league, aquí están cada una con sus respectivas columnas.
Donde el country Id, es decir el Id de la tabla country, sea igual al country Id de la liga, es decir que este de aquí, country Id, sea igual a este de acá.
Ok.
Una vez hecho eso lo imprimimos y nos va a dar esta consulta ya construida que nos va a decir: para el país Bélgica tiene una liga Jupiler Bélgica.
Entonces, ya corresponde el país a la liga de donde corresponde, pero pues esto se ve un poco sucio, verdad, porque tenemos estos...
unos regados, tenemos el 1,729, son valores que no necesitamos realmente.
Entonces, aquí yo les comenté esta parte de aquí que podemos decir que nada más queremos country.name y league.name.
No queremos lo demás, no nos interesa, nada más queremos esos dos valores.
Ok.
A ver, aquí hay un error.
Es...
Hay un error.
Ahora sí.
Nos dice que Bélgica tiene la liga Jupiler, Inglaterra tiene la liga Premier, Francia tiene la France League 1 y así en adelante.
Entonces, con esto, con select, where, ya podemos combinar valores de dos tablas que nos interesan.
Bueno, pero esto, aparte de hacerlo con la cláusula where, se puede hacer con un join.
Join es una cláusula muy especial en SQL la cual nos permite combinar valores de varias tablas (dos, tres o más tablas), en específico vamos a hablar de dos.
Entonces, como se ve esta relación ya gráficamente es, tenemos todos los elementos que se encuentran en la tabla A y todos los elementos que se encuentran en la tabla B, el join solamente nos va a dar los valores donde los elementos de la tabla A y los elementos de tabla B coinciden, que se representa en este diagrama de Venn.
Y ¿cómo se representa este join? Bueno, aquí dice la consulta compara cada fila de la tabla 1 con cada fila de la tabla 2 para encontrar todos los pares de filas que satisfacen una condición de unión.
Cuando se cumple el predicado los valores de la columna para cada par de filas coincidentes de B y B se combinan en una fila de resultados.
Este tipo de uniones, el Inner Join, es el tipo más común y es de hecho el predeterminado.
Si nosotros hablamos de un join, la gente normalmente se imagina el Inner Join.
De hecho, la palabra inner se puede usar de manera opcional, se puede omitir, simplemente utilizar el join, y la sintaxis para utilizarlo en SQL es muy simple, solamente se utiliza el select, ¿qué es lo que queremos ver?, de, ¿qué tabla?, pero unida a qué otra tabla.
Es tabla 1 unida la tabla 2.
Pero debe haber una condición, y esto le llamamos con la palabra "ON." Entonces vamos a hacer una traducción sencilla o simple de esta sintaxis: selecciona columna 1, 2, n, de la unión de tabla 1 con tabla 2 con esta condición.
Hay otros tipos de joins.
Tenemos intersección derecha o join derecho, tenemos intersección izquierda, tenemos intersección de extremos, en particular en este curso como es la más popular solamente vamos a utilizar la inner join.
Entonces vamos a ver cómo funciona.
Vamos a aplicar la sintaxis.
Utilizamos select todo de country unido...
unido a la tabla liga en una condición: que el country Id sea igual al country Id de la tabla liga.
Entonces la hacemos y lo ejecutamos y nos da este resultado que es idéntico al que teníamos acá arriba cuando nada más seleccionamos el todo.
Esto de aquí es idéntico a lo que tenemos acá abajo.
Gracias al inner join podemos hacer consultas un poco más complejas, por ejemplo, para empezar aquí hay una diferencia grande porque qué tal si empezamos a conseguir una consulta más grande, podemos utilizar estos tres caracteres que son las comillas las cuales nos van a permitir hacer una consulta en varias líneas y para ello vamos a utilizar dos tablas: vamos a utilizar la de la liga y la de los partidos.
Vamos a pedirle que nos dé los partidos donde el gol de casa sea mayor a 5.
Entonces vamos a empezar a construirla.
Le vamos a decir "selecciona el nombre de la liga, selecciona el número de goles de como equipo de casa de la tabla match, similarmente selecciona el número de iguales como visitante de la tabla match y la fecha de ese partido".
¿De dónde vamos a seleccionar esa información? De un join.
Aquí se los voy a subrayar.
Donde estamos haciendo un join de la tabla liga con la tabla partido o match pero en una variable en específico que es el Id de la liga en la tabla match junto con el Id de liga.
Aquí es donde podemos eliminar la condición where donde le vamos a decir "de la tabla match solo quiero cuando los goles de casa sean mayores a 5", no 5, solamente mayores.
Ok, entonces, si ejecutamos esto...
tarda un poquito más...
nos da los partidos.
Entonces, nos dice: de la liga de Bélgica hubo un partido en el 2008 que fue un 7 a 1.
7-1 sería porque como tenemos primero el, como goles en casa, pues nos está diciendo que ese equipo en casa metió siete goles y recibió uno en contra.

Entonces fue una goliza, podemos decir.

Asimismo empezó a darnos todo el historial de partidos donde existen que el equipo de casa tiene más de 5 goles.

Entonces, con eso podemos conseguir una consulta ya más compleja, ¿por qué? porque utilizamos un inner join para unir dos tablas diferentes y a partir de eso aplicamos un filtro con where.

Entonces así es como se empiezan a construir consultas ya más complejas.

Ya estamos utilizando select, estamos utilizando join y estamos utilizando where.

De forma similar con alguna base de datos que tengas por ahí o que hayas encontrado en kaggle puedes empezar a practicar y pueden realizar consultas complejas como esta.

S4 Select Parte 2

Select: Parte 2

Entonces, hay un montón de información relacionada a la liga de fútbol soccer.

Bueno, pero entonces ¿cómo empezamos a hacer consultas a la base de datos? Dijimos que vamos a utilizar nuestro objeto conexión.

Entonces, a conexión le podemos decir "dame un curso".

El cursor lo pueden imaginar como si fuera el puntero del mouse de una computadora, va a apuntar a una posición específica de una tabla o de una base de datos.

Entonces, podemos nosotros hacer un cursor y lo vamos a llamar objeto cursor.
Es un elemento específico.
Y le vamos a decir "objeto cursor, ejecuta la siguiente consulta SQL", y esta consulta SQL tiene que tener la estructura o la sintaxis que les mencionamos acá arriba: select estas columnas de la tabla.
Entonces, qué le estamos pidiendo, le estamos diciendo "selecciona el nombre del jugador de la tabla player".
La tabla player la tenemos aquí.
¿Qué columnas tiene? pues todas estas de aquí.
Y en específico hay una que se llama player name.
Entonces, estamos diciendo a la base de datos "dame todos los nombres de la tabla jugadores.
Una vez que se ejecutó esta consulta le tenemos que decir fetchall.
Fetchall lo que nos va a hacer es: va a ir a la base de datos y nos va a traer todos los registros, es decir, todos los jugadores pero delimitados, solamente a las columnas específicas que queremos.
Y lo vamos a meter en un ciclo for, ¿para qué? para que primero imprima el primer registro, luego el segundo registro, hasta que recorra todos los registros de la tabla, y luego los imprimimos.
Entonces, si lo hacemos nos va a dar directamente los jugadores de las diferentes ligas de la liga europa...
y ya nos da todos estos que son muchísimos.
Ahora, pero tal vez queremos no un nombre, tal vez queremos las alturas.
Bueno, repetimos el mismo proceso.
Le decimos "conexión, dame un cursor", le llamamos objeto cursor, le decimos "ejecuta la siguiente consulta: selecciona la altura de la tabla player", y decimos "dame todos y recorrelos dentro de un ciclo for", a cada registro le vamos a llamar row, y lo imprimimos.
Entonces nos da todos esos valores.
Ahora, si se dan cuenta lo que está haciendo Python es que cada registro nos lo está dando dentro de este conjunto de paréntesis, nos está dando una tupla.
Esta tupla tiene una coma, esto es lo que está identificando como una tupla.
Ese es el valor de efecto porque por lo general no estamos esperando un solo valor, estamos esperando tal vez el nombre y el peso, el nombre y la altura.
Entonces por eso la manera de dárnoslo de una manera consistente es darnos una tupla por cada registro.
Entonces podemos usar esto en nuestra ventaja, ¿por qué? porque esto estos elementos de aquí es la posición cero de la tupla.
Entonces, vamos a utilizar otra vez esa consulta vamos a usar select, seleccionar, la altura de la tabla jugador o player, y le vamos a decir "cursor, tráeme toda la información de esa consulta".
Dámela, como usualmente, en filas, pero sólo vamos a guardar el primer elemento de esa fila, es decir, el que tenga el índice 0, y eso lo vamos a guardar en una variable que es llamada player_height, o altura del jugador.
Esto ya es un arreglo...
es un arreglo de enteros.
En particular no es un arreglo como tal, es una lista, pero para nosotros, nuestro vocabulario que hemos estado utilizando, esto lo podemos ver como un conjunto de números.
Debido a eso podemos usar funciones como min o max o promedio o media o moda.
Vamos a utilizar en las primeras que mencioné: min y max.
Entonces le podemos decir "imprime el mínimo de la player_height, que es en la lista que acabamos de crear, y el máximo.
Ok, entonces ahora tenemos que de nuestra consulta en la base de datos el jugador con la menor altura es de 157 centímetros y el más alto es de 208 centímetros.
Entonces, nosotros ya tenemos la altura de los jugadores en una lista.
Nosotros podemos utilizarlo con la librería Numpy para crear un arreglo básicamente optimizado el cual podemos hacer consultas más rápidamente.
Entonces, vamos a usarlo "import numpy as np" como lo hemos estado haciendo anteriormente, y vamos a decirle "np.array, y lo vamos a pasar como parámetro la lista que ya teníamos, y lo vamos a sobreescribir, si se fijan es la misma variable, estamos sobreescribiendo la lista original con un arreglo de numpy.
Ok, lo ejecuto, lo hace sin ningún problema, no nos imprime nada, no es necesario, y ahora ya tenemos acceso a mayor número de funciones, por ejemplo, podemos usar el promedio de numpy, podemos usar el mínimo, el máximo e incluso podemos usar funciones como cuartiles.
Le estamos diciendo "de la player_height, el arreglo de alturas, dame estos cuartiles", que le estamos pidiendo el primer cuartil, el segundo cuartil y el tercer cuartil, que es 25%, 50% y 75%.
Ok, se lo pedimos y aquí están las alturas.
Entonces, podemos decir que los jugadores promedio en Europa tienen la altura de uno de 181 centímetros.
El más chaparrito es de 157, ya lo habíamos confirmado eso, el más alto de 208, y el primer cuartil es de 177, el segundo de 182 y el tercero es de 185.
Ok.
Bueno, pero hasta el momento sólo hemos consultado un valor a la vez, hemos consultado el nombre o la altura.
¿Qué pasa si queremos consultar dos elementos simultáneamente? Bueno, lo podemos hacer igualito como lo habíamos hecho, solamente le vamos a agregar coma y el segundo atributo que queremos, la segunda columna.
En este caso queremos la altura y el peso de la tabla jugador.
Entonces, lo ejecutamos y vamos a imprimir nada más los cinco primeros...
y la obtenemos directamente.
Nos da el primer elemento, que tiene una altura de 182 con un peso de 187, el segundo jugador tenemos la altura de 170 con un peso de 146, y así nos da los primeros cinco elementos.
Similarmente lo podemos pasar a una forma de arreglo con numpy y, como ya lo tenemos organizado ahí, podemos utilizar las funciones de alto nivel de numpy.
Entonces les vamos a pedir el promedio, el mínimo y el máximo de los cuartiles.
La diferencia a como lo hemos estado usando con una sola columna es que ahora hay que especificarle en qué eje queremos que aplique estas operaciones.
¿Cómo que en qué eje? Bueno, el eje 0 se refiere a los renglones, el eje 1 se refiere a las columnas.
La diferencia es que le vamos a estar pidiendo "dame el promedio de los jugadores por filas", es decir, va a tomar la fila 1, fila 2, fila 3 y de eso va a sacar promedio de la primera columna, luego va a hacer lo mismo para la segunda columna y ahí terminó.
Entonces, esto ya es algo que tenemos que empezar a pensar cuando hagamos consultas u operaciones ya en matrices de datos.
Hay que especificar cómo queremos que apliquen las funciones.
Ok, y nos dice que el promedio de los valores en su altura es de 181, que es el mismo que habíamos pedido antes.
Ahora la diferencia es el peso.
Tenemos un peso promedio de 168 kilos, un mínimo de 117, un máximo de 243, los cuartiles se encuentran en 159, 168 y 179.
¿A quién más le podemos hacer consultas? Bueno, podemos utilizar, así mismo como usamos la tabla jugadores, podemos usar la tabla países.
Podemos decirle "selecciona el nombre de país".
¿Cómo se que se usa la columna nombre? Bueno, en nuestra descripción original dice que para country tiene las columnas Id y nombre.
Entonces yo puedo hacerlo y nos va a dar sin ningún problema.
¿Qué tal si me equivoco aquí? ¿Qué es lo que va a pasar si le puse names? Pues me va a decir que no encuentra la columna names.
Entonces es algo que hay que tener en cuenta.
Siempre que no sea un error hay que leerlo y analizar qué es lo que pudo haber estado mal.
Ok.
De forma similar la liga tiene el Id del país y el nombre de la liga.
Simplemente lo ejecutamos y nos da los valores sin ningún problema.
Entonces esta es una versión resumida de lo que es la función select en cuanto es SQL.
Más adelante vamos a ver funciones como lo es insert, update, delete que hacen diferentes cosas y vamos a volver a revisar lo que es el select pero ya como una condicional: selecciona estos valores de acuerdo a esta condición.
Pero eso ya lo veremos un poco más adelante.
INSERT
Hola.
En este video vamos a ver la función insert que, acompañado con select, es una función más importante a la hora de hablar de bases de datos.
Eso nos va a permitir hacer, como dice la palabra, inserciones a la base de datos de valores nuevos.
Es como se va a llenar principalmente la base de datos y es la que nos va a permitir interactuar directamente con ella.
Entonces, para ver esta función vamos a utilizar un cuaderno en nuestra carpeta de Jupyter llamada "insert".
Entonces, vamos a abrirlo.
Ya una vez que abrió vamos a ver un poquito de la sintaxis de lo que es insert.
Insert lleva una segunda palabra llamada into que no va a decir inserta en...
y siguiente a eso lleva el nombre de la tabla en la cual vamos a hacer la inserción, a la cual le queremos agregar datos nuevos.
Seguido de eso vamos a indicarle las columnas en las cuales queremos hacer la inserción de datos, si tenemos por ejemplo...
nada más queremos insertar, regresando a lo que son los jugadores, nada más el nombre y el peso, pues nada más especificamos esas dos columnas.
En seguida de eso viene la palabra reservada values la cual me va a decir qué valores van a resaltar en las columnas que acabamos de especificar.
Ahora, aquí hay que tener mucho cuidado.
Si nosotros especificamos tres columnas hay que especificar tres valores, y hacen relación en el mismo orden, por ejemplo, para la columna 1 es el valor 1, para la columna 2 es el valor 2, etcétera.
Una vez insertados los datos podemos regresar a utilizar nuestra función select que, como recordatorio, es select más algo de la tabla, ok.
Entonces, vamos a utilizar el mismo ejemplo la vez pasada.
Si no recuerdan es el que está aquí, es el european soccer data base, es una base de datos que sacamos de kaggle y viene en formato de SQL lite, tiene diferentes tablas y diferentes columnas para cada una en las tablas.
Lo vamos a utilizar de una manera muy similar a como lo usamos en el cuaderno pasado, que era el de select, donde importamos SQL lite 3, especificamos el nombre del archivo seguido de la ruta de ese archivo.
Recordemos que lo tenemos en la carpeta data/soccer/database_sqllite si tienen dudas de donde salió este archivo en el video anterior lo hicimos.
Además usamos un archivo de conexión que es SQL 3 connect y utilizamos el archivo que hemos utilizado en la sección anterior y le llamamos conexión.
Hasta el momento es idéntico a lo que hemos estado usando.
Ahora vamos a hacer nada más una consulta de select para ver qué es lo que contiene la tabla country.
Si nosotros lo ejecutamos simplemente nos dice el ID y el país, entonces nos está diciendo que Bélgica es el 1 e Inglaterra es el 1,729, Francia es el 4,769, este número de la izquierda es solamente para identificar ese renglón, no quiere decir que uno sea más que otro tenga un orden específico.
Seguido de eso vamos a empezar a utilizar la función insert.
Como dijimos es primero insert into, estamos diciendo: inserta en la tabla country estos valores.
¿Qué valores? nosotros le pusimos pregunta pregunta.
Nosotros podemos ponerle directamente 2 y México...
México pero una manera de hacerlo más sencillo es decirle a python que sus valores los vamos a completar después.
¿Dónde es después? Pues justo aquí, nada más le estamos diciendo el primer value va a hacer 2 y el segundo va a ser México.
Entonces, si lo ejecutamos nos dice esto de aquí, nos devuelve el cursor no nos dice fue satisfactorio o no.
Entonces vamos a comprobarlo, vamos a hacer un select.
Selecciona todo de la tabla country, exactamente a la celda que tenemos acá arriba, y nos da aquí un valor, nos dice que México tiene el ID número 2.
Entonces la inserción que hicimos acá arriba fue efectiva y ya la podemos consultar gracias a nuestra instrucción select.
Bueno, vamos a insertar a otra tabla, vamos a insertar, por ejemplo, en la tabla player el nombre Pelé y vamos a darle un número identificador 120,350, es un número inventado, no sé a la altura de Pelé pero le puse 180 y un peso de 178, que obviamente no lo es, verdad, pero pues solamente es para interactuar con la base de datos.
Entonces le decimos "inserta en la tabla player, en los campos ID, player_name, altura y peso estos cuatro valores, que son signos de interrogación.
Pero ahora verán que es muy diferente no estamos pasando los valores separados por comas, le estamos pasando una variable.
Bueno, esta variable es la que creamos de acá arriba.
Le podemos pasar directamente vectores o arreglos o duplas a esta ejecución y Python sabrá que va a respetar el orden de ese arreglo y lo va a reemplazar sobre estos signos de interrogación.
Entonces nos facilita mucho las cosas.
Lo ejecutamos, nos devuelve el cursor que no representa nada significativo para nosotros pero podemos utilizar un select para ver si Pelé existe o no.
Esta cláusula web la vamos a ver en otro video que nos específica: quiero que el jugador...
el nombre del jugador sea idéntico a Pelé.
Sólo entonces selecciónalo.
Entonces, lo hacemos y nos da tres valores.
Al parecer ya había dos jugadores llamados Pelé, pero recordemos que el nuestro tiene una altura de 180 y un peso de 178.
Entonces hizo la inserción correctamente a la base de datos.
Bueno, vamos a intentar otra.
Vamos a decir inserta a Diego Maradona con el número indicador 103, una altura de 165 y un peso de 180.
Entonces, hacemos la inserción idéntico a Pelé, nos va a dar un error, nos va a decir que hay una restricción que se está incumpliendo y es esta palabra "unique".
"Unique" nos está diciendo que ese campo en específico tiene que ser único, si esa es la base datos no se puede hacer la inserción, y ¿cuál es el campo que no estaba causando conflicto? Player_id.
Eso significa que en la base de datos ya hay un jugador con ese identificador único.
Entonces, vamos a consultar quién es.
Selecciona todo de "jugador" dónde ID es igual a 103.
Y ya había uno.

Adam Federici, este ya tiene un identificador de 103, una altura de 187 y un peso de 198.

Entonces ya está ocupado ese valor, por lo tanto no podemos realizar la inserción.

Entonces, esto concluye rápidamente lo que es la función insert, más adelante vamos a ver las funciones que nos faltan pero recuerden que esto lo estamos viendo a un nivel superficial.

S4 Select Parte 1

Select: Parte 1

Vamos a empezar a utilizar SQL con nuestro entorno de Python.

Vamos a utilizar los cuernos de Jupyter y vamos a empezar a hacer algunas consultas de nuestra base de datos.

En específico, para no tener que instalar un motor de base de datos muy pesado, vamos a utilizar una versión reducida que se llama SQL lite.

Este nos va a ayudar a poder hacer todo lo que deberíamos poder hacer en SQL pero sin tener que instalar programas que no vamos a estar utilizando en este curso.

En primera instancia tenemos que abrir otra vez nuestro cuaderno Jupyter.

Entonces vamos a escribir inicio, Jupyter, damos enter y como siempre vamos a tener que estar un momento a que cargue.

Una vez que ha cargado nuestro entorno Jupyter vamos a ir a la ruta en la cual descargamos nuestros cuadernos.

En nuestro caso está en el escritorio pero recuerden que si usted lo descargaron en la carpeta Mis 
Descargas o Mis Documentos van a tener que ir ahí.

Entonces, abrimos escritorio, cuadernos y ahora sí.
El cuaderno que vamos a estar manejando en esta ocasión es como el título video: select.
Entonces, lo abrimos, y ahora sí, ya entró a nuestro cuaderno.
Entonces, para estos conjuntos de cuadernos vamos a usar una base de datos en específico que se encuentra en kaggle.
Este es el link directo a la base de datos pero vamos a buscarla para que se den una idea de cómo hacemos la búsqueda de estos archivos.
Entonces vamos a ir a kaggle.com y una vez que ya cargó podemos simplemente buscar.
Vamos a entrar a data sets.
Una vez que ya cargó nosotros podemos usar la herramienta de filtro para encontrar archivos específicos que queremos.
En particular en nuestras prácticas vamos a usar los archivos SQL lite pues nos da la opción directamente aquí.
Podemos filtrar a través de SQL lite.
Le damos.
Y lo que va a hacer es: nos va a filtrar todas las bases de datos que tengan esa estructura específica SQL en su versión lite que es la que vamos a estar utilizando.
Vamos a ordenarlas, en vez de más actualizada o más reciente, a más votada.
En particular aquí nos muestra que la más popular o la más votada es la european soccer data base.
Es una base de datos que si le damos click y no vamos a data nos va a explicar que es información referente a más de 25,000 partidos de fútbol soccer en la liga europea, tanto países involucrados, nos da liga, nos dan los partidos, nos da jugadores, nos da equipos, todo esto en diferentes tablas.
Entonces, lo que vamos a hacer con Python es poder leer directamente de esas tablas de una forma sencilla en la cual podamos obtener la información que deseamos.
Entonces, vamos a descargar esta información.
Le damos clic en download y nos va a empezar a descargar.
Una vez que haya terminado nos vamos a ir a la carpeta y lo podemos extraer.
Le damos clic derecho y aquí viene "extraer todo".
Lo extremos, y ahora sí, tenemos este archivo que se llama "database.sqllite", este lo podemos copiar la carpeta completa y la llevamos a nuestro entorno de trabajo que en nuestro caso está en cuadernos, data y soccer.
Yo ya lo tenía pero lo voy a reemplazar.
Ok.
Ahora sí, estamos listos para trabajar.
Vamos a ir de vuelta a nuestro cuaderno de Jupyter, y ahora sí, vamos a empezar con lo que es select.
La instrucción select de SQL lite y de otros motores de bases de datos nos funciona para poder seleccionar información específica dentro de las tablas o columnas de nuestra base de datos.
Resultados que obtengamos de esas consultas van a venir en forma de tablas de resultados.
Esto es ya lo que nosotros más o menos manejamos como Pandas o data frames en Pandas, o podríamos verlos como si fueran hojas de excel, pero en su naturaleza cruda, digamos, en la base de datos no se representan de forma, están distribuidos, nosotros los vamos a traer y los vamos a manejar de una manera más sencilla.
Entonces, para utilizar este tipo de consultas hay que seguir una sintaxis muy específica.
Aquí la tenemos resaltada, vamos a usar la palabra reservada "select", vamos a seleccionar columna 1, columna 2, columna N, estos son los campos que nosotros estamos requiriendo de la base de datos.
Entonces, vamos a reemplazar esos column1, column2 y columN por lo que nosotros queramos extraer.
Luego viene la palabra reservada "from", entonces, se puede leer como "selecciona estas columnas de una tabla", la tabla es la que venga de la base de datos.
Además nosotros podemos decirle, si no queremos identificar los campos, podemos poner un asterisco, lo que sería "selecciona todo de la tabla".
Ok.
Para utilizar SQL vamos a utilizar SQL lite 3, es una librería que ya está en Python, incluso la podemos buscar en su documentación oficial SQL lite Python 3, que es este de aquí, ok.
Lo abrimos y aquí nos dice cómo hacer la conexión de la base de datos, cómo hacer las consultas, cómo hacer todo.
Esta es la documentación oficial.
Nosotros vamos a utilizarla directamente.
Ok, entonces dice que la primera instrucción que hay que hacer es importar SQL lite.
Lo hacemos y no nos marcó ningún error, ya está instalado.
Entonces, simplemente lo cargamos, y luego hay que especificar la ruta para nuestro archivo de la base de datos.
Nosotros ya sabíamos que a partir de nuestra carpeta de cuadernos vamos a ir a la carpeta data y luego a la carpeta soccer, y luego a este archivo database.sqllite.
Entonces, es la ruta que le ponemos: data, soccer, database.sqllite, y lo guardamos en una variable que se va a llamar db_file, es un hombre que le quisimos dar, y luego le vamos a decir "con SQL lite conéctate a esta base de datos", y lo que nos va decir...
lo que nos va a dar es un archivo de conexión, nosotros le pusimos "conn", y es el estándar ponerle "conn" de conexión.
Entonces, esta variable va a ser nuestro principal medio de comunicación con la base de datos.

Ahora, pero ¿qué contiene la base de datos? Nosotros hicimos una extracción de esa información y se las colocamos en esta carpetita.

Ahora, ¿qué contiene la base de datos? Nosotros le hicimos una extracción de los campos o de las tablas que consideran más importantes.

Esta información no la sacamos de la manga, no la inventamos, eso ya venía en el conjunto datos original, en la página de kaggle lo pueden visualizar.

Tenemos la tabla country, league, match, player, tal, tal, tal...
hay un montón de información en esta base de datos.

Nosotros principalmente vamos a utilizar estas tablas de aquí.

Entonces, ¿qué contienen? Vamos a describirlos un poco.

Tenemos la tabla país que con dice que contiene 11 registros, es decir, 11 países, tiene dos columnas, el identificador del país y el nombre del país, tenemos por otra parte la tabla liga que dice que contiene 11 ligas con tres columnas que es el Id...
el Id del país y el nombre.

¿Por qué Id del país? Lo que pasa es que este Id lo que está buscando es hacer una referencia a nuestra tabla country que es, para cada liga hay un país asociado.

También por aquí tenemos la tabla player que nos dice su Id, su nombre, su identificador del videojuego fifa, su cumpleaños, su peso, su altura, entre otras cosas.

S4 Qué es y Por Qué Aprender SQL

¿Qué es y Por Qué Aprender SQL?

Actualmente el desarrollo de la tecnología informática y computacional produce un gran volumen de datos diariamente. Estos datos necesitan ser ordenados y almacenados para posteriormente poder ser usados o analizados, para esto se crearon grandes almacenes de datos llamados bases de datos. Para conocer un poco más lee el siguiente artículo:


S4 Que es SQL

¿QUÉ ES SQL?

Se vera qué es una base de datos SQL.

Para eso preparamos un pequeño ejemplo en una libreta de Jupyter, pero esta libreta no tiene tanta práctica sino que es un poco de conceptos para que te familiarices con eso, y veas un ejemplo pequeño sencillo y entendible.

Vamos a abrir nuestra libreta que se llama "base de datos SQL".

Es algo muy sencillo, solamente vamos a repasarlo juntos.

En la siguiente imagen que está en nuestra pantalla, aquí la seleccionando, podemos observar un ejemplo muy sencillo de una base de datos del tipo SQL.

Esta base de datos tiene tres tablas.

Nuestra primer tabla, que es la tabla de departamento...

Esta base de datos proviene de una escuela.

Entonces la información está relacionada con maestros, departamentos, clases.

Vera cómo está aquí.

Les decía, nuestra primer tabla es la tabla de departamentos.

Esta tabla tiene diferentes registros y a cada uno de esos registros debe ponérseles ciertas características o celdas.

En particular departamento tiene cuatro celdas, cuatro campos diferentes en la ID del departamento, el nombre, la dirección y la descripción.

También hay una tabla de profesores.

Esta tabla de profesores tiene cinco diferentes campos: tiene el ID del profesor, el ID del departamento del que pertenece, el nombre del profesor, la dirección y el teléfono.

Y también hay una tabla de cursos.

Esta tabla de cursos también tiene cinco campos: tiene el ID del curso, el ID del profesor, el nombre el nivel y la descripción.

Ahora, ¿que de más elementos existen en esta base de datos SQL? 

Bueno, si se dan cuenta dice aquí que el departamento_ID que esta aquí en naranjita también está en este de profesor, es el mismo dato.

Entonces, hay una forma de relacionar una tabla con otra.

Este tipo de base de datos se llaman base de datos relacionadas y en particular aquí le estamos asignando en estas flechitas un poquito más de información.

Le decimos que un departamento puede tener múltiples profesores y un profesor puede tener múltiples cursos.

Bueno este es un ejemplo muy sencillo.

En los temas posteriores a éste veremos un poco de operaciones que se pueden hacer con bases de datos a través de Python.

S4 Bases de Datos

Bases De Datos

Los sistemas gestores de bases de datos son la herramienta más adecuada para almacenar los datos en un sistema de información. Conoce un poco más del tema en el siguiente



S4 Qué es una Base de Datos

¿Qué Es Una Base De Datos?

Una base de datos es un conjunto organizado de información relacionada entre sí con el objetivo de poder utilizar datos de una manera rápida y eficiente.

La información suele organizarse en tablas donde cada tabla contiene la información relacionada sobre un elemento específico de la base de datos.

Por ejemplo, si tuviéramos una base de datos para administrar una tienda habría información relacionada con los proveedores, con los clientes o los productos.

Toda esa información se guarda en tablas.

Una tabla es similar a la que hemos manejado como data frame en Pandas.

Ahora tomaremos la tabla "vendedores" como ejemplo.

Para almacenar la información de todos los vendedores de una tienda los registros serían toda la información relevante con cada uno de los diferentes vendedores donde cada registro representa un vendedor.

Cada uno de esos registros está compuesto por varios datos llamado campos.

Un ejemplo de ellos serían el nombre, el apellido y el género.

Podemos pensarlo como toda la información relacionada con este vendedor.

El nombre de cada campo usualmente hace referencia a la información que se contendrá en dicha celda.

En esta tabla que tenemos se muestra un segmento pequeño de una tabla de una base de datos donde se guarda la información actualizada acerca de las aplicaciones disponibles en google play store, y en este segmento de la base de datos contamos con 10 registros correspondientes a 10 aplicaciones diferentes y con 7 campos.

El ID, el nombre, el género, el rating, el peso, las instalaciones y la última actualización.

Una de las ventajas fundamentales del uso de la base de datos es que la información no se encuentra organizada en una tabla única.

Por el contrario, usualmente la información se distribuye en múltiples tablas conectadas a través de relaciones.

Dichas relaciones son datos que se hacen referencia a los valores de otras tablas o campos en común entre múltiples tablas.

La información por sí sola no suele ser útil a menos de que un usuario o un analista de datos lo utilice para un fin concreto.

Por lo tanto, una de las principales actividades relacionadas con las bases de datos es la de poder extraer datos específicos dentro de toda la información disponible.

Este proceso se logra a través de consultas a las bases de datos.

En este curso exploraremos los diferentes tipos de bases de datos, las bases de datos SQL.

Las siglas SQL provienen de su nombre en inglés "structured query language" las cuales son bases de datos relacionales donde los datos recopilados se organizan en unas tablas construidas por diferentes campos y registros, comúnmente cada tabla guarda información referente a una entidad y para accesar a la información de diversas tablas es necesario que la base de datos cuente con un conjunto de reglas conocidas como relaciones las cuales determinan la interacción entre las tablas.

Las consultas tienen una estructura específica que fueron diseñadas para parecer oraciones en un inglés simplificado, por ejemplo, para obtener el nombre de los vendedores usamos la consulta "select name from vendedores", y en otro tipo de base de datos que vamos a estar usando son las bases de datos No SQL que son aquellas bases de datos donde no se utilizan estructuras en forma de tablas para almacenar los dichos datos.

El almacenamiento lo realizamos utilizando otros formatos como lo son el mapeo de columnas, los grafos y las bases de datos clave valor entre otras.

Este tipo de datos son utilizados debido a que son eficientes para trabajar problemas que relacionan miles de usuarios simultáneamente o millones de consultas diarias.

Debido a que las bases de datos SQL clásicas tienen dificultades con estos problemas esta es una alternativa que permite manejar bases de datos donde hay una gran estabilidad de tamaño.

S4 Cuaderno De Trabajo

Cuaderno De Trabajo: Semana 4

Todo el material que ocuparás durante esta semana se encuentra en una carpeta llamada “Semana 4 ”. Te recomendamos que coloques dicha carpeta en el Escritorio para que sea fácil ubicarla y utilizarla.

Los proyectos de la semana están contenidos en la carpeta adjunta, que a veces requieren de bases de datos o de imágenes adicionales para funcionar, es por eso que incluye subcarpetas de data y de img. Es importante que no muevas de lugar ningún archivo existente, pero, si lo deseas, puedes agregar contenido adicional a las carpetas.

En los próximos temas se mencionará la libreta y el material adicional que se utilizará durante las prácticas o al describir el tema. Además, se mencionará el enlace de internet del cual se obtuvo la base de datos. Ten presente que no es necesario descargar las bases de datos desde las páginas mencionadas debido a que ya se encuentran en el material de descarga.

Para acceder a la carpeta Semana 4 haz clic en el siguiente botón:
Además, te compartimos el vínculo de la base de datos "database.sqlite" que ocuparás durante esta semana.

¡Éxito en tu cuarta semana!

S4 Información Importante

Información Importante

Objetivos
  1. En esta semana lograrás lo siguiente:
  2. Te familiarizarás con los conceptos principales relacionados con las bases de datos.
  3. Conocerás los principales gestores de bases de datos.
Lo que conocerás
  1. Base de datos.
  2. Principales tipos de bases de datos.
  3. Base de datos SQL.
  4. Funciones principales dentro de una base de datos SQL.
  5. Base de datos NOSQL.
  6. Integración de bases de datos a proyectos de Python.

Habilidades que desarrollarás
  1. Distinguirás la importancia del uso de bases de datos.
  2. Aprenderás los principales tipos de bases de datos.
  3. Implementarás tus conocimientos en Python en conjunto con la paquetería Pandas para generar programas que integren bases de datos en SQL.

Contenido
  1. Introducción a bases de datos.
  2. SQL.

S4 Introducción Semana 4

Bienvenido a tu cuarta semana de curso.

Una de las principales tareas de un científico de datos es el convertir un conjunto de datos en información relevante a nivel operativo o estratégico.

Hasta este momento has aprendido a obtener información de Internet utilizando Web Scraping.

También se ha aprendido la importancia de limpiar los datos y la necesidad de una correcta visualización de datos.

Ahora abordaremos la problemática de manejar grandes cantidades de información por lo que introduciremos el concepto de Base de Datos.

En esta semana aprenderemos los conceptos relacionados con las bases de datos así como los manejadores de base de datos más utilizados.

Desarrollaremos ejercicios donde utilizaremos Pandas y Python para manejar las bases de datos de forma eficaz con la finalidad de poder obtener información, eliminar la información o actualizar las bases de datos que tenemos.

S4 4. Manejo de bases de datos

Manejo de bases de datos

¡Bienvenido a la cuarta semana de tu curso!

Una de las principales funciones del científico de datos es convertir datos en información relevante y oportuna para la toma de decisiones. En esta semana aprenderás a manejar grandes cantidades de información y te introducirás al término de Bases de datos.

Además, aprenderás los conceptos fundamentales relacionados con las bases de datos, así como los manejadores de bases de datos más utilizados.

2022/07/26

S3 Cierre Semana 3

CIERRE DE LA SEMANA 3


Se ha terminado la 3era Semana del curso.

Se ha aprendimos el concepto de: 'Visualización de Datos' haciendo énfasis en su importancia como un método de transmisión de conocimiento.

Realizamos prácticas en 'Python' con ayuda de una nueva librería llamada 'matplotlib', la cual permite tomar un conjunto de datos y construir diferentes tipos de gráficas o elementos visuales que representan la información de una manera fresca y visual.

S3 Selección del Método de Visualización

SELECCIÓN DEL MÉTODO DE VISUALIZACIÓN

Para poder transformar los datos en un gráfico, primero es necesario seleccionar el método de visualización que arroje la información que necesitas y que además sea viable de realizar, de acuerdo a la estructura de tu conjunto de datos.

Esta guía te ayudará a elegir la visualización adecuada:

S3 Práctica: Mapas de Calor

PRÁCTICA: MAPAS DE CALOR

Ahora se continua con la parte práctica, para eso se continua dentro de nuestra libreta y va a ir viendo.

De igual forma que en los Ejemplos pasados va a ocupar un Data Frame y para eso va a usar 'Pandas' Entonces nuestra primera instrucción va a importar 'pandas as pd'.

Ahora va a utilizar la misma Base de Datos de las Enfermedades del Corazón que ya ha descargado con anterioridad de Kaggle.

En este caso yo ya a tengo descargada así que voy a continuar con la práctica, le voy a decir: 'df', mi variable Data Frame va a ser igual a lo que lea a través de pandas del archivo 'heart'.

Imprimir los primeros 5 registros para ver que lo haya hecho correctamente.

A medida que te desenvuelvas más y que tengas más confianza, es probable que tú mismo decidas dejar de poner este tipo de instrucciones, como head, porque sabes que ya lo están leyendo bien pero, si son tus primeros ejemplos o son tus primeras veces que estás trabajando Python.

Se recomiendo que siga utilizándola porque no solamente te garantiza que lo importaste bien a la libreta de 'Jupyter' sino que te da rápidamente un vistazo de cómo se distribuyen los datos en ese Data Frame.

Los Mapas de Calor son muy buenos para graficar y representar la correlación entre variables, por lo tanto va a dejar que pandas de la correlación de las variables.

Para eso se le dice al Data Frame obtener la correlación con la instrucción: 'df.corr()' va a darle run y aquí está la correlación entre cada una de las variables de Data Frame, cada valor, cada par de variables.

Y ahora sí, va a empezar con hacer Mapas de Calor.

Nuestra primera aproximación, igual que los ejemplos pasados, va a ser utilizar 'matplotlib' para graficar.
Importó matplotlib, 'matplotlib.pyplot as plt' y le digo que lo voy a ocupar en esta libreta.
Con la instrucción '%matplotlib inline'.
Voy a imprimir este gráfico mostrando una imagen, matplotlib tiene esta función 'plt.imshow' Me permite mostrar una imagen construida, prácticamente cuadro por cuadro, y
¿Con qué voy a llenar esos cuadros?
Esos cuadros los voy a llenar con los valores de las correlaciones.
va a ver
¿cómo se va a ver esta gráfica?
Aquí está, le digo, en este caso en default, al valor de 1 le asigno el color 'Amarillo' y a los demás valores les fue asignando una variación de color diferente y construyó esa imagen a partir de esta tabla.
Pero a esta imagen le falta mucho para ser en verdad un Mapa de Calor, le faltan al menos un elemento indispensable, que sería la escala de color.
va a ver que se podra trabajar con esto.
La variable corelación va a ser la correlación del Data Frame y voy a hacer un sub plot, en el que voy a mostrar esa variable con relación y va a salir una imagen muy parecida a la que ya tenía pero aparte le voy a dar estas dos funciones: 'xticks' y 'yticks'.
En la primera le voy a dar desde un valor inicial por el índice de correlación cada una de las diferentes variables, va a ver que genera aquí.
Esta función de aquí, lo que está generando es que los mismos nombres que tenía mis columnas y mis renglones se los está asignando a cada uno de estas columnas y renglones
¿Por qué se le incluyó al 'Eje x' está palabra: Rotación?
va a quitársela, va a ver
¿Qué pasa?
Rotación, como su nombre lo dice, va a rotar esa etiqueta pero va a ver cómo se vería sin ella.
Los nombres como es muy pequeño el espacio se empalman bastante.
Simplemente asignamos esa variable para que sea un poquito más estético y sea más fácil de ver.
Esta variable a medida que se acerca a 90° se va a ir poniendo de manera horizontal o vertical.
y a medida que, Por Ejemplo, en 45° se va a ver inclinado, pero es muy probable que las palabras largas se empalmen.
Yo le recomendaría para este ejemplo en particular un valor de 70 pero está simplemente abierto a que ustedes experimenten en
¿cómo se vea mejor?
En su gráfica, en particular.
¿Qué otras cosas se podra hacer con estas funciones?
En la página matplotlib, que está aquí, en esta liga, existe en lo que le dicen "Mapas de Colores".
Los Mapas de Colores nos permiten diferentes temas y diferentes formas de ver nuestro mapa de calor, en particular ahorita le puse en donde poníamos normalmente: "Muestra la imagen de correlación", le agregamos el parámetro 'color map' o 'mapa de color' y escogimos uno de esta liga para que lo vean ustedes en este ejemplo.
Además incluimos la barra de colores, va a ver cómo se ve.
Este ejemplo cambió mucho la tonalidad entre el ejemplo de arriba y el ejemplo de abajo y al agregar la barra de colores es nuestra escala y así cualquier persona que no conozca nuestra tabla puede darse una idea muy aproximada ahora que ya conoce los colores de la escala.
Bueno,
¿Qué alternativas existen al trabajar con el 'imshow', bueno existe la alternativa de volver a importar 'seaborn' y va a ver como 'seaborn' si tiene una función específica que se llama 'heatmap'.
Para este ejemplo en particular, le asignamos a nuestra gráfica un tamaño en específico, le pusimos un 'heat map' con la variable correlación que era la que teníamos arriba y va a ver cómo se ve.
SEABORN es una librería mucho más sofisticada para hacer, al menos, mapas de calor y ya no le tuve que yo asignar manualmente los índices utilizando matplot Ya el los puso por default buscandolos en el Data Frame pero, tiene más funciones.
Por Ejemplo esta que estaba comentada, va a quitarle el comentario y ver
¿Qué hace?.
va a comentar esta de arriba para ver la diferencia.
Fíjense como dice "Haz un Mapa de Calor de la variable correlación pero con un ancho de línea de 0.5".
Vean la gráfica que teníamos y ahora observen la gráfica que va a tener después de darle 'run'.
Creo estas líneas de un grosor de 0.5 que me permiten ver un poco más fácil la distinción entre un cuadro y otro y entonces es mucho más fácil que por ejemplo ahora ubique
¿Cuánto es en la edad, la correlación de la edad con esta variable?
¿Qué más se podra hacer?
va ahora a ver otro parámetro diferente que es el 'annot'.
'Annot' le va a dar anotaciones a cada cuadro y para este ejemplo en particular va a ocupar otro Mapa de Color para que tú puedas observar otro diferente.
Sí le damos run, ahora nuestro Mapa de Calor tiene unos tonos más azulados y en cada celda se le puso un número que representa el valor numérico que tenía antes de ser sustituido por un color.
Hasta ahorita son todas las funciones que va a ver de 'Mapas de Calor' pero te invitamos a que pruebes nuevas.
No dejes de revisar las librerías y no dejes de preguntar en foros si tienes dudas de
¿Cómo se genera esto?

S3 Mapas de Calor

MAPAS DE CALOR

va a ver lo que se llaman "Mapas de Calor".
De igual forma que los vídeos pasados, preparamos un cuaderno que está dividido entre una parte teórica y una parte práctica.
En la parte teórica va a introducir todos los conceptos básicos y fundamentales para que entienda la gente que no está relacionada con el Área de Estadística Descriptiva o con el Área de Visualización de Datos 
'¿Qué es un un Mapa de Calor?'
va a empezar abriendo nuestro archivo que descargamos.
Yo les recomiendo que la pongan en la misma carpeta que los demás archivos debido a que en la carpeta de Data que va a compartir es probable que ocupemos información que ya hemos ocupado antes.
En este caso yo ya tengo mi archivo en el escritorio, voy a descargarlo, voy a abrirlo y mi Mapa de Calor empieza de la siguiente forma en el cuaderno.
¿Qué es un Mapa de Calor?
El mapa de calor es una visualización que representa Datos utilizando diferentes variaciones de calor.
Un Mapa de Calor es una Representación Visual de datos que utiliza diferentes variaciones de colores para describir cómo se comportan los datos en un formato tabular.
Los valores dentro de cada celda de la tabla son sustituidos por colores previamente establecidos por el investigador y se le reporta a la gente que lo está viendo una escala de color que le va a ayudar a entender
¿Qué está representando?.
En esta imagen que tiene aquí, no sabemos realmente qué información estamos trabajando, simplemente vemos muchos cuadros de colores.
Pero bueno, en este mapa se podra ver que existen 10 filas contra 12 columnas y en cada celda hay un color asociado.
Para entender qué significa más o menos este esquema va a centrarnos en un renglón, en este caso, el último.
va a analizar la variable rotulada '9' del conjunto de filas contra cada una de las 12 variables del conjunto de columnas.
Entonces si yo comparo la variable '9' de filas con la variable '0' de columnas, y tengo esta especie de rosa, puedo buscar su valor en la escala y asignarle un valor numérico.
En este caso este color está asociado con el valor numérico 0.5, el color oscuro con 0.0, el morado con 0.2 y así sucesivamente.
El 9 que es muy claro, con el 1.
Entonces en lugar de yoo ver esta representación numérica yo lo sustituí por esa representación de colores pero bueno, va a ver un ejemplo.
Un Ejemplo en el que se ha ocupado mucho este tipo de análisis.
Normalmente estos esquemas se ocupan para mostrar la varianza a través de múltiples variables revelando patrones.
El ejemplo que les va a mostrar, es un ejemplo de la literatura que busca medir la correlación entre 4 variables observadas en las flores de iris.
Las 4 variables que va a analizar son:
El largo del sépalo de la flor, 
El ancho del sépalo, 
El largo del pétalo y 
El ancho del pétalo.
Esta tabla de correlaciones fue brindada a través del Ejemplo.
Aquí se podra ver la correlación entre cada una de las variables.
Esta tabla de aquí, yo la puedo sustituir si propongo una escala de colores a las cuales voy a asignar los valores cercanos a estos valores numéricos, en este caso, el valor de '1' va a ser representado por un azul muy oscuro, el valor '- 0.25' va a ser sustituido por este color como crema claro y un intervalo de colores se va a ir ahí modificando.
Entonces a los valores de '1' de la tabla yo les voy a asignar el color de azul oscuro.
Al valor de ' - 0.1175 ', que está cercano al ' 0 ', es este de aquí, es como un verdecito.
Le asigno ese verdecito al ' 0.87 ', esta muy cerca del azul oscuro.
Y así sucesivamente cada uno de los valores se les va a ir asignando un color, de tal forma que se podra ver qué variables tienen más correlación que otras.
Pero bueno, va a llevar esto a la práctica a través de ' Python'.
Continuaremos con esta libreta pero ahora realizaremos todos los ejercicios para que tú puedas manejar y manipular datos y convertirlos en mapas de calor.

S4 Cierre

Cierre Semana 4 Muchos de los problemas actuales a los que se enfrenta un científico de datos involucran el manejo de grandes cantidades de ...