Следующая тема: БРу. Jupyter Notebook
Вернуться в раздел: Базовый Python
Вернуться в оглавление: Я.Практикум
11. Анализ данных и оформление результатов.
11.1 Введение
11.2 Задача: Обновление яндекс музыки
11.3 Яндекс музыка. Работа с предобработанными данными
Задача №1
Файл music_log_upd.csv хранит данные, которые прошли предобработку в предыдущей теме. Прочитайте данные из файла music_log_upd.csv и выведите на экран первые 15 строк.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
Задача №2
Получите список названий колонок таблицы df через атрибут columns. Результат выведите на экран.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
print(df.columns)
Задача №3
С помощью метода isna() посчитайте пустые значения в таблице df. Результат сохраните в переменной na_number и выведите на экран.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
na_number = df.isna().sum()
print (na_number)
Задача №4
Посчитайте количество дубликатов в наборе данных, сохраните результат в переменной duplicated_number. Выведите её значение на экран
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
duplicated_number = df.duplicated().sum()
print (duplicated_number)
11.4 Группировка данных
11.5 Яндекс музыка. Группировка данных
Задача №1
Сгруппируйте данные в датафрейме df по столбцу user_id, выберите столбец genre_name, а затем примените метод count(). Сохраните результат в переменную track_grouping. Так вы посчитаете количество композиций, которые слушал каждый пользователь. На экран будет выведена информация о количестве композиций для первых 30 пользователей — код вывода данных уже есть.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
# напишите ваш код здесь
track_grouping = df.groupby('user_id')['genre_name'].count()
print(track_grouping.head(30))
Задача №2
Предположим, что музыкальные вкусы разнообразнее у тех пользователей, которые слушают больше 50 песен. Нужно найти этих пользователей.
В предыдущем задании вы получили столбец-Series, содержащий целые числа — количество прослушанных композиций для каждого пользователя. С помощью логической индексации получите Series, в котором останутся только пользователи из track_grouping, которые прослушали более 50 композиций. Сохраните получившийся после индексации столбец-Series в переменную track_counting. Код вывода результата уже есть.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
track_grouping = df.groupby('user_id')['genre_name'].count()
# напишите ваш код здесь
track_counting = track_grouping[track_grouping >50]
print(track_counting)
11.6 Сортировка данных
Задача №1
У похожей на Солнце звезды телескоп Kepler открыл похожую на Землю планету.
А в прошлом уроке с практикой вы нашли в данных Яндекс Музыки меломанов с уникальными данными.
Они за день послушали больше 50 композиций.
Больше всего композиций (86) прослушал пользователь с идентификатором 174C0ED6.
Получите таблицу с прослушанными им треками.
Для этого запросите из структуры данных df строки, отвечающие сразу двум условиям:
значение в столбце 'user_id' должно быть равно значению переменной search_user_id;
время прослушивания, значение в столбце 'total_play_seconds', не должно равняться 0.
Сохраните результат в переменной music_user.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
search_user_id = '174C0ED6'
# напишите ваш код здесь
music_user = df[df['user_id']==search_user_id]
music_user = music_user[music_user['total_play_seconds']!=0]
print(music_user)
Задача №2
Сгруппируйте данные таблицы music_user по столбцу 'genre_name' и получите сумму значений столбца 'total_play_seconds'. Сохраните результат в переменной sum_music_user. Код вывода уже есть — вы увидите, сколько пользователь слушал каждый жанр.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
search_user_id = '174C0ED6'
music_user = df[df['user_id'] == search_user_id]
music_user = music_user[music_user['total_play_seconds'] != 0]
# напишите ваш код здесь
sum_music_user = music_user.groupby('genre_name')
sum_music_user = sum_music_user['total_play_seconds'].sum()
print(sum_music_user)
Задача №3
Предпочтения меломана начинают проявляться. Но, возможно, длительность композиций от жанра к жанру сильно различается.
Также важно знать, сколько треков каждого жанра он включил.
Сгруппируйте данные по столбцу genre_name и посчитайте значения в нём. Сохраните результат в переменной count_music_user. Код вывода результата уже есть.
Не удаляйте вывод из предыдущего задания. Вы увидите два столбца — с суммарной длительностью прослушиваний каждого жанра и количеством прослушанных треков каждого жанра — друг за другом.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
search_user_id = '174C0ED6'
music_user = df[df['user_id'] == search_user_id]
music_user = music_user[music_user['total_play_seconds'] != 0]
sum_music_user = music_user.groupby('genre_name')['total_play_seconds'].sum()
print(sum_music_user)
# напишите ваш код здесь
count_music_user = music_user.groupby('genre_name')['total_play_seconds'].count()
print(count_music_user)
Задача №4
Чтобы предпочтения были видны сразу, самые большие значения нужно расположить сверху.
Отсортируйте данные в группировке sum_music_user по убыванию.
Когда применяете метод sort_values() к Series с единственным столбцом, передавать аргумент в by не нужно — только порядок сортировки в ascending.
Сохраните результат сортировки в переменной final_sum.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
search_user_id = '174C0ED6'
music_user = df[df['user_id'] == search_user_id]
music_user = music_user[music_user['total_play_seconds'] != 0]
sum_music_user = music_user.groupby('genre_name')['total_play_seconds'].sum()
# напишите ваш код здесь'
final_sum = sum_music_user.sort_values(ascending=False)
print(final_sum)
Задача №5
Теперь то же самое сделайте с числом прослушанных меломаном композиций. Отсортируйте данные группировки count_music_user по убыванию и сохраните результат в переменной final_count. Код вывода уже есть.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
search_user_id = '174C0ED6'
music_user = df[df['user_id'] == search_user_id]
music_user = music_user[music_user['total_play_seconds'] != 0]
count_music_user = music_user.groupby('genre_name')['genre_name'].count()
# напишите ваш код здесь
final_count = count_music_user.sort_values(ascending=False)
print(final_count)
11.7 Яндекс музыка. Сортировка данных
11.8 Описательная статистика
11.9 Яндекс музыка. Описательная статистика
Задача №1
Получите таблицу с композициями самого популярного жанра — pop.
Затем исключите пропущенные треки — которые слушали 0 секунд.
Сохраните результат в переменной pop_music.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
pop_music = df[df['genre_name']=='pop']
pop_music = pop_music[pop_music['total_play_seconds']!=0]
Задача №2
Найдите максимальное время прослушивания песни в жанре pop.
Сохраните результат в переменной pop_music_max_total_play и выведите её значение на экран.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
pop_music = df[df['genre_name']=='pop']
pop_music = pop_music[pop_music['total_play_seconds']!=0]
pop_music_max_total_play = pop_music['total_play_seconds'].max()
print (pop_music_max_total_play)
Задача №3
Получите из таблицы pop_music строку с максимальным временем прослушивания.
Результат сохраните в переменной pop_music_max_info и выведите на экран.
Закомментируйте вывод результата предыдущей задачи.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
pop_music = df[df['genre_name']=='pop']
pop_music = pop_music[pop_music['total_play_seconds']!=0]
pop_music_max_total_play = pop_music['total_play_seconds'].max()
#print (pop_music_max_total_play)
pop_music_max_info = pop_music[pop_music['total_play_seconds'] == pop_music['total_play_seconds'].max()]
print (pop_music_max_info)
Задача №4
Найдите минимальное время прослушивания композиции в жанре pop, отличное от нуля.
Сохраните его в переменной pop_music_min_total_play, значение выведите на экран.
Вывод результата предыдущей задачи закомментируйте.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
pop_music = df[df['genre_name']=='pop']
pop_music = pop_music[pop_music['total_play_seconds']!=0]
pop_music_max_total_play = pop_music['total_play_seconds'].max()
#print (pop_music_max_total_play)
pop_music_max_info = pop_music[pop_music['total_play_seconds'] == pop_music['total_play_seconds'].max()]
#print (pop_music_max_info)
pop_music_min_total_play = pop_music['total_play_seconds'].min()
print (pop_music_min_total_play)
Задача №5
Выведите на экран строку о композиции жанра pop, которую начали слушать, но выключили быстрее всех остальных. Результат сохраните в переменную pop_music_min_info и выведите на экран. Вывод результата предыдущей задачи закомментируйте.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
pop_music = df[df['genre_name']=='pop']
pop_music = pop_music[pop_music['total_play_seconds']!=0]
pop_music_max_total_play = pop_music['total_play_seconds'].max()
#print (pop_music_max_total_play)
pop_music_max_info = pop_music[pop_music['total_play_seconds'] == pop_music['total_play_seconds'].max()]
#print (pop_music_max_info)
pop_music_min_total_play = pop_music['total_play_seconds'].min()
#print (pop_music_min_total_play)
pop_music_min_info = pop_music[pop_music['total_play_seconds'] == pop_music['total_play_seconds'].min()]
print (pop_music_min_info)
Задача №6
Рассчитайте медиану времени прослушивания произведений жанра pop. Сохраните результат в переменной pop_music_median и выведите на экран. Вывод результата предыдущей задачи закомментируйте.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
pop_music = df[df['genre_name']=='pop']
pop_music = pop_music[pop_music['total_play_seconds']!=0]
pop_music_max_total_play = pop_music['total_play_seconds'].max()
#print (pop_music_max_total_play)
pop_music_max_info = pop_music[pop_music['total_play_seconds'] == pop_music['total_play_seconds'].max()]
#print (pop_music_max_info)
pop_music_min_total_play = pop_music['total_play_seconds'].min()
#print (pop_music_min_total_play)
pop_music_min_info = pop_music[pop_music['total_play_seconds'] == pop_music['total_play_seconds'].min()]
#print (pop_music_min_info)
pop_music_median = pop_music['total_play_seconds'].median()
print(pop_music_median)
Задача №7
Рассчитайте среднее арифметическое времени прослушивания произведений жанра pop. Сохраните результат в переменной pop_music_mean и выведите на экран.
Вывод результата предыдущей задачи закомментируйте.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
pop_music = df[df['genre_name']=='pop']
pop_music = pop_music[pop_music['total_play_seconds']!=0]
pop_music_max_total_play = pop_music['total_play_seconds'].max()
#print (pop_music_max_total_play)
pop_music_max_info = pop_music[pop_music['total_play_seconds'] == pop_music['total_play_seconds'].max()]
#print (pop_music_max_info)
pop_music_min_total_play = pop_music['total_play_seconds'].min()
#print (pop_music_min_total_play)
pop_music_min_info = pop_music[pop_music['total_play_seconds'] == pop_music['total_play_seconds'].min()]
#print (pop_music_min_info)
pop_music_median = pop_music['total_play_seconds'].median()
#print(pop_music_median)
pop_music_mean = pop_music['total_play_seconds'].mean()
print(pop_music_mean)
11.10 Яндекс музыка. Решение кейса и оформление результатов
Задача №1
Рассчитайте метрику engagement после проведения эксперимента для всего набора данных. Сохраните полученный результат в переменной current_engagement и выведите на экран.
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
current_engagement = df.groupby('user_id').sum().median()
print (current_engagement)
Задача №2
Внесите результат своей работы в существующую таблицу и рассчитайте разность двух значений метрики engagement. Названия столбцов:
metrics — метрика;
before_test — до эксперимента;
after_test — после эксперимента;
absolute_difference — абсолютная разница.
Вместо нулей подставьте текущие значения параметров:
Значение метрики engagement после эксперимента: 62.344431 секунды.
Значение метрики engagement до эксперимента: 57.456 секунды.
import pandas as pd
exp = [['engagement', 57.456, 62.344431, 4.888431]]
columns = ['metrics','before_test','after_test','absolute_difference']
metrics = pd.DataFrame(data=exp,columns=columns)
print(metrics)
Задача №3
Получите выборку прослушанных композиций в жанре рок, время воспроизведения которых не равно нулю, и сохраните её в переменной genre_rock. Получите максимальное и минимальное значения времени прослушивания, сохраните соответственно в переменных genre_rock_max и genre_rock_min, выведите на экран со строками: 'Максимальное время прослушивания в жанре рок равно:' 'Минимальное время прослушивания в жанре рок равно:'
import pandas as pd
df = pd.read_csv('music_log_upd.csv')
# <введите здесь решение для поиска недостающих данных>
genre_rock = df[df['genre_name']=='rock']
genre_rock = genre_rock[genre_rock['total_play_seconds']!=0]
# максимальное время прослушивания в жанре рок
genre_rock_max = genre_rock['total_play_seconds'].max()
print ('Максимальное время прослушивания в жанре рок равно:',genre_rock_max)
# минимальное время прослушивания в жанре рок
genre_rock_min = genre_rock['total_play_seconds'].min()
print ('Минимальное время прослушивания в жанре рок равно:',genre_rock_min)
Задача №4
Соберите результаты исследования в таблицу research_genres_result, которую нужно создать конструктором DataFrame(). Его аргумент data — список с данными, аргумент columns — список названий столбцов. Выведите полученную таблицу на экран.
import pandas as pd
data = [['pop', 8663, 34.6, 1158.03, 0.000794],
['rock', 6828, 33.3, 1699.14882, 0.014183]]
columns = ['genre_name','total_track','skip_track','max_total_time','min_total_time']
research_genres_result = pd.DataFrame(data=data,columns=columns)
print (research_genres_result)
11.11 Заключение
Вы нашли ответ на интересующий вопрос.
Фундамент владения библиотекой pandas заложен и пригодится вам на всех стадиях анализа данных. Для предобработки вы умеете пользоваться методами избавления от пропусков и дубликатов, а для анализа — методами группировки и сортировки.
на иллюстрации показано, что Pandas включает в себя:
чтение данных,
предобработку данных,
анализ данных и
оформление результатов.
Теперь слово тому, чью задачу мы решали последние несколько уроков.
Менеджер Яндекс Музыки просил передать:
На иллюстрации показано сообщение менеджера Яндекс Музыки, в котором он благодарит вас за отличную работу.
Было непросто, но вы справились с неподготовленными данными и собрали полезную статистику. Вы прошли все стадии анализа — от постановки задачи до оформления результатов. Формат подачи результатов подходящий: сразу видны важнейшие цифры.
Как видите, метрика engagement выросла. Стало быть, внедрение Радио — действительно хорошая идея. На память Чтобы ничего не забыть, скачайте шпаргалку.
11.12 Проверочные задания. Анализ данных и оформление результатов
Анализ данных и оформление результатов
Чтобы пройти тест нужно правильно ответить на 5 вопросов из 10. Время на прохождение: 10 минут
Правильный ответ groupby()
Анализ данных часто начинают с группировки. Так проще сравнивать значения и искать взаимосвязи. В pandas группируют методом groupby(). В аргументе метода указывают столбец, по которому нужно группировать.
Задание 3 из 10
Сколько групп получится, если сгруппировать данные в датафрейме по столбцу country? import pandas as pd
info = [ ['Москва', 'Россия'], ['Ростов-на-Дону', 'Россия'], ['Саратов', 'Россия'], ['Париж', 'Франция'], ['Рим', 'Италия'], ['Венеция', 'Италия'], ['Милан', 'Италия'], ['Мадрид', 'Испания'], ['Барселона', 'Испания'] ]
Правильный ответ 4
Это первый этап группировки — разделение. В каждой группе окажутся города одной страны. В столбце country таких стран 4, столько будет и групп.
Задание 4 из 10
Какой код отсортирует данные по возрастанию значений столбца rating? Выберите несколько вариантов.
Правильный ответ df = df.sort_values(by='rating', ascending=True)
Правильный ответ df = df.sort_values(by='rating')
Порядком сортировки в методе sort_values() управляет параметр ascending. По умолчанию его значение True. Тогда метод отсортирует данные по возрастанию. Если нужен обратный порядок, поменяйте значение на False.
Задание 5 из 10
Какой код выдаст ошибку? Выберите несколько вариантов. import pandas as pd
tracks = [ ['Mariah Carey', 'After Tonight', 254], ['Westlife', 'Soledad', 237], ['Daft Punk', 'Instant Crush', 337] ]
titles = ['artist', 'track', 'duration']
Правильный ответ music_df = music_df.sort_values(ascending=False)
Правильный ответ music_df = music_df['duration'].sort_values(by='duration')
Если нужно отсортировать таблицу по какому-либо столбцу, не забудьте указать название столбца при вызове функции. В методе sort_values() для этого есть параметр by. Но если вы применяете метод к объекту Series, то есть к одному столбцу, аргумент указывать не нужно.
Задание 6 из 10
Какой метод посчитает элементы в столбце датафрейма?
Правильный ответ count()
Метод count() вернёт количество элементов в столбце. Обратите внимание, что пропущенные значения метод не считает. Метод sum() используют для суммы. А max() и min() найдут максимальное и минимальное значения.
Задание 7 из 10
Что такое медиана в описательной статистике?
Правильный ответ Метрика, которая делит выборку пополам.
Медиану полезно использовать, когда в данных есть нетипичные значения: очень большие или очень маленькие. Например, редкие пользователи-меломаны. Тогда среднее арифметическое сместится в ту или другую сторону. В таких случаях медиана будет более корректной характеристикой.
Задание 8 из 10
В описательной статистике используют несколько показателей. Какой из этих методов к ним не относится?
Правильный ответ sum()
Представьте, что вам предоставили данные о пользователях интернет-магазина. Можно разделить данные на группы и поискать отличия. А можно описать среднестатистического пользователя: сколько времени проводит на сайте, сколько тратит. В этом поможет описательная статистика. Основных показателей в описательной статистике четыре: максимальное и минимальное значения, медиана и среднее. Сумма к ним не относится. Но метод sum() можно использовать при группировке.
Задание 9 из 10
Что выведет такой код? import pandas as pd
tracks = [ ['Mariah Carey', 'After Tonight', 254], ['Westlife', 'Soledad', 237], ['Daft Punk', 'Instant Crush', 337] ]
titles = ['artist', 'track', 'duration']
music_df = pd.DataFrame(data=tracks, columns=titles) print(music_df['duration'].max())
Правильный ответ 337
Метод max() найдёт максимальное значение. Самый длинный трек в этом датафрейме у Daft Punk.
Задание 10 из 10
Что выведет такой код? import pandas as pd
tracks = [ ['Mariah Carey', 'After Tonight', 254], ['Westlife', 'Soledad', 237], ['Daft Punk', 'Instant Crush', 337] ]
titles = ['artist', 'track', 'duration']
music_df = pd.DataFrame(data=tracks, columns=titles) print(music_df['duration'].mean())
Правильный ответ 276.0
Метод mean() найдёт среднее арифметическое. Это сумма всех значений, разделённая на их количество. Медиану тоже можно найти — для этого используют метод median(). Медиана в этом случае будет меньше среднего — 254.0. Длинный трек группы Daft Punk сместил средний показатель вверх.
Следующая тема: БРу. Jupyter Notebook
Вернуться в раздел: Базовый Python
Вернуться в оглавление: Я.Практикум