Следующая тема: БРу. 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 минут

Задание 1 из 10
Расположите этапы группировки в правильном порядке.
Разделить 1
Применить 2
Объединить 3
 
Казалось бы, зачем запоминать стадии группировки, если можно просто знать методы в pandas. Но теперь вы понимаете, как устроена группировка. И если понадобится сгруппировать по нескольким столбцам сразу, вы не запутаетесь. До успешной группировки всего три шага: split, apply, combine.
 
Задание 2 из 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

Вернуться в оглавление: Я.Практикум