Capítulo 18: Análisis de Datos con Python y SQL
18.6 Ejercicios Prácticos
Ejercicio 1: Limpieza de Datos
Tienes una tabla en tu base de datos SQLite llamada employee_data
con las columnas id
, name
, age
, email
, department
, y salary
. Desafortunadamente, algunas filas contienen valores faltantes (None
en Python, NULL
en SQL), y algunas entradas de email
no están en el formato adecuado (deberían ser algo@dominio.com
).
Escribe un script de Python utilizando el módulo sqlite3 para:
- Eliminar todas las filas con alguna columna que tenga
None
/NULL
. - Validar las entradas de
email
y eliminar las filas con un formato deemail
inválido.
import sqlite3
import re
# Connect to the database
conn = sqlite3.connect('my_database.db')
# Create a cursor object
c = conn.cursor()
# Remove rows with any NULL value
c.execute("DELETE FROM employee_data WHERE id IS NULL OR name IS NULL OR age IS NULL OR email IS NULL OR department IS NULL OR salary IS NULL")
# Validate email format and remove rows with invalid emails
c.execute("SELECT * FROM employee_data")
rows = c.fetchall()
for row in rows:
if not re.match(r"[^@]+@[^@]+\.[^@]+", row[3]):
c.execute("DELETE FROM employee_data WHERE id=?", (row[0],))
# Commit the changes and close the connection
conn.commit()
conn.close()
Ejercicio 2: Transformación de Datos
Suponiendo que tienes una tabla en tu base de datos SQLite llamada sales
con las columnas id
, region
, total_sales
, y date
:
- Escribe una consulta SQL para agregar una nueva columna
profit
, que sea el 10% detotal_sales
. - Escribe un script de Python usando sqlite3 para implementar la consulta SQL.
import sqlite3
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
# Add a new column 'profit'
c.execute("ALTER TABLE sales ADD COLUMN profit REAL")
# Update 'profit' as 10% of 'total_sales'
c.execute("UPDATE sales SET profit = total_sales * 0.1")
conn.commit()
conn.close()
Ejercicio 3: Consulta a la Base de Datos SQL desde Python
Usando la tabla sales
en tu base de datos SQLite:
- Escribe un script de Python usando el módulo sqlite3 para recuperar todas las filas donde
region
sea 'West', e imprimir cada fila. - Calcula el promedio de
total_sales
para la región 'West' en Python.
import sqlite3
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
# Fetch and print rows where 'region' is 'West'
c.execute("SELECT * FROM sales WHERE region = 'West'")
rows = c.fetchall()
for row in rows:
print(row)
# Calculate the average 'total_sales' for the 'West' region
c.execute("SELECT AVG(total_sales) FROM sales WHERE region = 'West'")
average_sales = c.fetchone()[0]
print(f'Average sales in the West region: {average_sales}')
conn.close()
18.6 Ejercicios Prácticos
Ejercicio 1: Limpieza de Datos
Tienes una tabla en tu base de datos SQLite llamada employee_data
con las columnas id
, name
, age
, email
, department
, y salary
. Desafortunadamente, algunas filas contienen valores faltantes (None
en Python, NULL
en SQL), y algunas entradas de email
no están en el formato adecuado (deberían ser algo@dominio.com
).
Escribe un script de Python utilizando el módulo sqlite3 para:
- Eliminar todas las filas con alguna columna que tenga
None
/NULL
. - Validar las entradas de
email
y eliminar las filas con un formato deemail
inválido.
import sqlite3
import re
# Connect to the database
conn = sqlite3.connect('my_database.db')
# Create a cursor object
c = conn.cursor()
# Remove rows with any NULL value
c.execute("DELETE FROM employee_data WHERE id IS NULL OR name IS NULL OR age IS NULL OR email IS NULL OR department IS NULL OR salary IS NULL")
# Validate email format and remove rows with invalid emails
c.execute("SELECT * FROM employee_data")
rows = c.fetchall()
for row in rows:
if not re.match(r"[^@]+@[^@]+\.[^@]+", row[3]):
c.execute("DELETE FROM employee_data WHERE id=?", (row[0],))
# Commit the changes and close the connection
conn.commit()
conn.close()
Ejercicio 2: Transformación de Datos
Suponiendo que tienes una tabla en tu base de datos SQLite llamada sales
con las columnas id
, region
, total_sales
, y date
:
- Escribe una consulta SQL para agregar una nueva columna
profit
, que sea el 10% detotal_sales
. - Escribe un script de Python usando sqlite3 para implementar la consulta SQL.
import sqlite3
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
# Add a new column 'profit'
c.execute("ALTER TABLE sales ADD COLUMN profit REAL")
# Update 'profit' as 10% of 'total_sales'
c.execute("UPDATE sales SET profit = total_sales * 0.1")
conn.commit()
conn.close()
Ejercicio 3: Consulta a la Base de Datos SQL desde Python
Usando la tabla sales
en tu base de datos SQLite:
- Escribe un script de Python usando el módulo sqlite3 para recuperar todas las filas donde
region
sea 'West', e imprimir cada fila. - Calcula el promedio de
total_sales
para la región 'West' en Python.
import sqlite3
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
# Fetch and print rows where 'region' is 'West'
c.execute("SELECT * FROM sales WHERE region = 'West'")
rows = c.fetchall()
for row in rows:
print(row)
# Calculate the average 'total_sales' for the 'West' region
c.execute("SELECT AVG(total_sales) FROM sales WHERE region = 'West'")
average_sales = c.fetchone()[0]
print(f'Average sales in the West region: {average_sales}')
conn.close()
18.6 Ejercicios Prácticos
Ejercicio 1: Limpieza de Datos
Tienes una tabla en tu base de datos SQLite llamada employee_data
con las columnas id
, name
, age
, email
, department
, y salary
. Desafortunadamente, algunas filas contienen valores faltantes (None
en Python, NULL
en SQL), y algunas entradas de email
no están en el formato adecuado (deberían ser algo@dominio.com
).
Escribe un script de Python utilizando el módulo sqlite3 para:
- Eliminar todas las filas con alguna columna que tenga
None
/NULL
. - Validar las entradas de
email
y eliminar las filas con un formato deemail
inválido.
import sqlite3
import re
# Connect to the database
conn = sqlite3.connect('my_database.db')
# Create a cursor object
c = conn.cursor()
# Remove rows with any NULL value
c.execute("DELETE FROM employee_data WHERE id IS NULL OR name IS NULL OR age IS NULL OR email IS NULL OR department IS NULL OR salary IS NULL")
# Validate email format and remove rows with invalid emails
c.execute("SELECT * FROM employee_data")
rows = c.fetchall()
for row in rows:
if not re.match(r"[^@]+@[^@]+\.[^@]+", row[3]):
c.execute("DELETE FROM employee_data WHERE id=?", (row[0],))
# Commit the changes and close the connection
conn.commit()
conn.close()
Ejercicio 2: Transformación de Datos
Suponiendo que tienes una tabla en tu base de datos SQLite llamada sales
con las columnas id
, region
, total_sales
, y date
:
- Escribe una consulta SQL para agregar una nueva columna
profit
, que sea el 10% detotal_sales
. - Escribe un script de Python usando sqlite3 para implementar la consulta SQL.
import sqlite3
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
# Add a new column 'profit'
c.execute("ALTER TABLE sales ADD COLUMN profit REAL")
# Update 'profit' as 10% of 'total_sales'
c.execute("UPDATE sales SET profit = total_sales * 0.1")
conn.commit()
conn.close()
Ejercicio 3: Consulta a la Base de Datos SQL desde Python
Usando la tabla sales
en tu base de datos SQLite:
- Escribe un script de Python usando el módulo sqlite3 para recuperar todas las filas donde
region
sea 'West', e imprimir cada fila. - Calcula el promedio de
total_sales
para la región 'West' en Python.
import sqlite3
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
# Fetch and print rows where 'region' is 'West'
c.execute("SELECT * FROM sales WHERE region = 'West'")
rows = c.fetchall()
for row in rows:
print(row)
# Calculate the average 'total_sales' for the 'West' region
c.execute("SELECT AVG(total_sales) FROM sales WHERE region = 'West'")
average_sales = c.fetchone()[0]
print(f'Average sales in the West region: {average_sales}')
conn.close()
18.6 Ejercicios Prácticos
Ejercicio 1: Limpieza de Datos
Tienes una tabla en tu base de datos SQLite llamada employee_data
con las columnas id
, name
, age
, email
, department
, y salary
. Desafortunadamente, algunas filas contienen valores faltantes (None
en Python, NULL
en SQL), y algunas entradas de email
no están en el formato adecuado (deberían ser algo@dominio.com
).
Escribe un script de Python utilizando el módulo sqlite3 para:
- Eliminar todas las filas con alguna columna que tenga
None
/NULL
. - Validar las entradas de
email
y eliminar las filas con un formato deemail
inválido.
import sqlite3
import re
# Connect to the database
conn = sqlite3.connect('my_database.db')
# Create a cursor object
c = conn.cursor()
# Remove rows with any NULL value
c.execute("DELETE FROM employee_data WHERE id IS NULL OR name IS NULL OR age IS NULL OR email IS NULL OR department IS NULL OR salary IS NULL")
# Validate email format and remove rows with invalid emails
c.execute("SELECT * FROM employee_data")
rows = c.fetchall()
for row in rows:
if not re.match(r"[^@]+@[^@]+\.[^@]+", row[3]):
c.execute("DELETE FROM employee_data WHERE id=?", (row[0],))
# Commit the changes and close the connection
conn.commit()
conn.close()
Ejercicio 2: Transformación de Datos
Suponiendo que tienes una tabla en tu base de datos SQLite llamada sales
con las columnas id
, region
, total_sales
, y date
:
- Escribe una consulta SQL para agregar una nueva columna
profit
, que sea el 10% detotal_sales
. - Escribe un script de Python usando sqlite3 para implementar la consulta SQL.
import sqlite3
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
# Add a new column 'profit'
c.execute("ALTER TABLE sales ADD COLUMN profit REAL")
# Update 'profit' as 10% of 'total_sales'
c.execute("UPDATE sales SET profit = total_sales * 0.1")
conn.commit()
conn.close()
Ejercicio 3: Consulta a la Base de Datos SQL desde Python
Usando la tabla sales
en tu base de datos SQLite:
- Escribe un script de Python usando el módulo sqlite3 para recuperar todas las filas donde
region
sea 'West', e imprimir cada fila. - Calcula el promedio de
total_sales
para la región 'West' en Python.
import sqlite3
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
# Fetch and print rows where 'region' is 'West'
c.execute("SELECT * FROM sales WHERE region = 'West'")
rows = c.fetchall()
for row in rows:
print(row)
# Calculate the average 'total_sales' for the 'West' region
c.execute("SELECT AVG(total_sales) FROM sales WHERE region = 'West'")
average_sales = c.fetchone()[0]
print(f'Average sales in the West region: {average_sales}')
conn.close()