Porcentaje de píxeles de perro
La tarea final para analizar los datos de anotación de perros es determinar el porcentaje de píxeles de cada imagen que representa a un perro (o perros). Tendrás que utilizar las distintas técnicas que has aprendido en este curso para ayudarte a calcular esta información y añadirla como columnas para su posterior análisis.
Para calcular el porcentaje de píxeles, calcula primero el número total de píxeles que representan a cada perro y luego súmalos para la imagen. Puedes calcular el cuadro delimitador con la fórmula:
(Xend - Xstart) * (Yend - Ystart)
NOTE: En este caso, puedes ignorar la posibilidad de que se solapen las cajas delimitadoras.
Para el porcentaje, calcula el número total de píxeles "perro" dividido por el tamaño total de la imagen, multiplicado por 100.
El DataFrame joined_df
está tal y como lo utilizaste la última vez. pyspark.sql.functions
es un alias de F
.
Este ejercicio forma parte del curso
Limpiar datos con PySpark
Instrucciones de ejercicio
- Define una función Python que tome una lista de tuplas (los objetos perro) y calcule el número total de píxeles "perro" por imagen.
- Crea un UDF de la función y utilízalo para crear una nueva columna llamada
'dog_pixels'
en el DataFrame. - Crea otra columna,
'dog_percent'
, que represente el porcentaje de'dog_pixels'
en la imagen. Asegúrate de que está entre 0-100%. Utiliza sólo el nombre de cadena de la columna (es decir, "nombrecolumna" en lugar de df.nombrecolumna). - Muestra las 10 primeras filas con más del 60%
'dog_pixels'
en la imagen. Utiliza para ello una cadena del estilo SQL (es decir, 'nombrecolumna > ____').
Ejercicio interactivo práctico
Pruebe este ejercicio completando este código de muestra.
# Calculate total pixels occupied by dogs in the image
def dogPixelCount(doglist):
totalpixels = ____
for dog in doglist:
totalpixels += (dog[____] - ____[1]) * (____[____] - ____)
return totalpixels
# Define a UDF for the pixel count
udfDogPixelCount = ____
# Add a new column 'dog_pixels' containing the pixel count for dogs in each image
joined_df = ____
# Add a column 'dog_percent' representing the percentage of the image occupied by dogs
joined_df = joined_df.____('dog_percent', (____ / (____)) * ____)
# Show the first 10 annotations with more than 60% dog
____