Percentuale di pixel del cane
L’ultimo compito per l’analisi dei dati di annotazione dei cani è determinare la percentuale di pixel in ogni immagine che rappresenta un cane (o più cani). Dovrai usare le varie tecniche che hai imparato in questo corso per calcolare queste informazioni e aggiungerle come colonne per analisi successive.
Per calcolare la percentuale di pixel, calcola prima il numero totale di pixel che rappresentano ciascun cane e poi somma per immagine. Puoi calcolare il bounding box con la formula:
(Xend - Xstart) * (Yend - Ystart)
NOTA: In questo caso puoi ignorare la possibilità di bounding box sovrapposti.
Per la percentuale, calcola il totale dei pixel "dog" diviso per la dimensione totale dell’immagine, moltiplicato per 100.
Il DataFrame joined_df è come lo hai usato l’ultima volta. pyspark.sql.functions è alias a F.
Questo esercizio fa parte del corso
Pulizia dei dati con PySpark
Istruzioni dell'esercizio
- Definisci una funzione Python che prenda una lista di tuple (gli oggetti cane) e calcoli il numero totale di pixel "dog" per immagine.
- Crea una UDF della funzione e usala per creare una nuova colonna chiamata
'dog_pixels'nel DataFrame. - Crea un’altra colonna,
'dog_percent', che rappresenti la percentuale di'dog_pixels'nell’immagine. Assicurati che sia compresa tra 0 e 100%. Usa solo il nome della colonna come stringa (cioè, "columnname" invece di df.columnname). - Mostra le prime 10 righe con più del 60% di
'dog_pixels'nell’immagine. Usa una stringa in stile SQL per questo (cioè, 'columnname > ____').
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# 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
____