Відсоток пікселів із собакою
Останнє завдання з розбору анотацій про собак — визначити, який відсоток пікселів на кожному зображенні відповідає собаці (або кільком собакам). Вам знадобляться прийоми, які ви вивчили в цьому курсі, щоб обчислити це та додати як стовпці для подальшого аналізу.
Щоб обчислити відсоток пікселів, спершу порахуйте загальну кількість пікселів, що представляють кожну собаку, а потім підсумуйте їх для зображення. Обмежувальну рамку можна порахувати за формулою:
(Xend - Xstart) * (Yend - Ystart)
ПРИМІТКА: У цьому завданні можна ігнорувати можливе перекривання обмежувальних рамок.
Для відсотка обчисліть загальну кількість «собачих» пікселів, поділену на загальний розмір зображення, помножену на 100.
Датафрейм joined_df — у тому стані, в якому ви використовували його востаннє. pyspark.sql.functions має псевдонім F.
Ця вправа є частиною курсу
Очищення даних у PySpark
Інструкції до вправи
- Визначте функцію Python, яка приймає список кортежів (об'єкти собак) і обчислює загальну кількість «собачих» пікселів на зображення.
- Створіть UDF на основі цієї функції та використайте його, щоб створити новий стовпець
'dog_pixels'у DataFrame. - Створіть ще один стовпець,
'dog_percent', що представляє відсоток'dog_pixels'на зображенні. Переконайтеся, що значення в межах 0–100%. Використовуйте лише рядкову назву стовпця (тобто «columnname», а не df.columnname). - Показати перші 10 рядків, де на зображенні понад 60%
'dog_pixels'. Для цього використайте рядок у стилі SQL (тобто 'columnname > ____').
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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
____