Прочитайте содержимое файла returned csv и сохраните его в датафрейме purchases
Метод Pandas Read_CSV () используется для чтения файла CSV в объект dataframe. Файл CSV похож на двумерную таблицу, где значения разделены с помощью разделителя.
Отбор данных из dataframe в pandas
Это первая часть руководства, поэтому начнем с самых простых методов отбора данных, а уже в следующих углубимся и разберем более сложные.
7. Указание механизма анализатора для функции Pandas Read_CSV ()
Посмотрим, что произойдет, когда мы пытаемся прочитать этот файл CSV.
Мы можем избежать предупреждения, указав параметр «Двигатель» в функции Read_CSV ().
Есть два машинных двигателя – C и Python. Engine Parser Engine является быстрее и по умолчанию, но Engine Python Parser Engine является более полноценным.
Каждая строка таблицы содержит информацию о композициях определённого жанра в определённом исполнении, которые пользователи слушали в одном из городов в определённое время и день недели. Две проблемы, которые нужно решать: пропуски и некачественные названия столбцов. Для проверки рабочих гипотез особенно ценны столбцы time, day и City. Данные из столбца genre позволят узнать самые популярные жанры.
Получаем перечень названий столбцов. Какая наблюдается проблема — кроме тех, что уже были названы ранее?
Пустые значения свидетельствуют, что для некоторых треков доступна не вся информация. Причины могут быть разные: скажем, не назван конкретный исполнитель народной песни. Хуже, если проблемы с записью данных. Каждый отдельный случай необходимо разобрать и выявить причину.
Заменяем пропущенные значения в столбцах с названием трека и исполнителя на строку 'unknown'. После этой операции нужно убедиться, что таблица больше не содержит пропусков.
Дубликаты могли появиться вследствие сбоя в записи данных. Стоит обратить внимание и разобраться с причинами появления такого «информационного мусора».
Объявим функцию find_genre() для поиска неявных дубликатов в столбце с жанрами. Например, когда название одного и того же жанра написано разными словами.
Объявим функцию find_hip_hop(), которая заменяет неправильное название этого жанра в столбце 'genre_name' на 'hiphop' и проверяет успешность выполнения замены.
На этапе предобработки в данных обнаружились не только пропуски и проблемы с названиями столбцов, но и всяческие виды дубликатов. Их удаление позволит провести анализ точнее. Поскольку сведения о жанрах важно сохранить для анализа, не просто удаляем все пропущенные значения, но заполним пропущенные имена исполнителей и названия треков. Имена столбцов теперь корректны и удобны для дальнейшей работы.
Была выдвинута гипотеза, что в Москве и Санкт-Петербурге пользователи слушают музыку по-разному. Проверяем это предположение по данным о трёх днях недели — понедельнике, среде и пятнице.
Для каждого города устанавливаем количество прослушанных в эти дни композиций с известным жанром, и сравниваем результаты.
Группируем данные по городу и вызовом метода count() подсчитываем композиции, для которых известен жанр.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
TASK 1 |
Получите доступ к библиотеке Pandas, используйте имя переменной pd. |
SOLUTION |
import pandas as pd |
TASK 2 |
Создайте список music с 5 парами «имя вашего любимого исполнителя - название его песни». Пример такого списка - atlas из теоретического |
введения к этому уроку. |
SOLUTION |
music = [ |
['Celine Dion', 'I Surrender'], |
['Rihanna', 'Love the way you'], |
['Tom Walker', 'My way'], |
['Alex Hepburn', 'Under'], |
['Adele', 'Someone Like You'] |
] |
TASK 3 |
Создайте список entries с названиями для двух столбцов — artist и track |
SOLUTION |
entries = ['artist', 'track'] |
TASK 4 |
Используя конструктор DataFrame(), создайте таблицу из списка ваших любимых исполнителей music и списка столбцов entries. Сохраните |
таблицу в переменной playlist и выведите эту сборную таблицу на экран. |
SOLUTION |
playlist = pd.DataFrame(data=music, columns=entries) |
print(playlist) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
TASK 1 |
Прочитайте файл music_log.csv и сохраните его в переменной df. Сохраните первые 5 строк с данными из music_log.csv в переменной music_head |
и выведите значение переменной на экран. |
SOLUTION |
import pandas as pd |
df = pd.read_csv('music_log.csv') |
music_head = df.head(5) |
print(music_head) |
TASK 2 |
Прочитайте файл music_log.csv и сохраните его в переменной df. Сохраните последние 10 строк с данными из music_log.csv в переменной |
music_tail и выведите значение переменной на экран. |
SOLUTION |
import pandas as pd |
df = pd.read_csv('music_log.csv') |
music_tail = df.tail(10) |
print(music_tail) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
TASK 1 |
Получите таблицу только с жанром rock и сохраните её в переменной rock. |
SOLUTION |
import pandas as pd |
df = pd.read_csv('music_log.csv') |
rock = df[df['genre'] == 'rock'] |
TASK 2 |
Выделим время прослушивания роковых композиций в особую структуру данных. Сохраните столбец 'total play' таблицы rock в |
переменной rock_time. |
SOLUTION |
rock_time = rock['total play'] |
TASK 3 |
Обратитесь к новой Series c именем rock_time и посчитайте количество треков жанра рок, пропущенных в течение 5 секунд. Логическим |
условием укажите rock_time |
Количество пропущенных треков жанра рок равно . |
SOLUTION |
rock_haters = rock_time.loc[rock_time |
print('Количество пропущенных треков жанра рок равно', rock_haters) |
TASK 4 |
Выберите из исходной таблицы только строки с жанром 'pop' и сохраните эту новую таблицу в переменной pop. |
SOLUTION |
pop = df[df['genre'] == 'pop'] |
TASK 5 |
Теперь по аналогии с роком создайте Series, где хранятся только данные о времени воспроизведения композиций в жанре поп. Назовите его |
pop_time и сохраните в нём данные столбца 'total play' из таблицы pop . |
SOLUTION |
pop_time = pop['total play'] |
TASK 6 |
Снова по аналогии с роком обратитесь к Series, на сей раз pop_time, чтобы посчитать количество пропущенных в течение 5 секунд треков |
жанра поп. Используйте условие pop_time |
Количество пропущенных треков жанра поп равно . |
SOLUTION |
pop_haters = pop_time.loc[pop_time |
print('Количество пропущенных треков жанра поп равно', pop_haters) |
TASK 7 |
Для обоих жанров посчитайте долю быстро пропущенных пользователями композиций в процентах. Разделите количество треков, которые |
пользователи пропустили — соответственно rock_haters и pop_haters — на общее количество треков жанра рок и жанра поп. |
Общее количество треков жанра равно количеству наблюдений в таблицах rock и pop, т.е. значению атрибута shape[0] этих таблиц. |
Результаты сохраните в переменных rock_skip и pop_skip. Выведите значения новых переменных в процентах с точностью до одного знака |
после запятой в такой форме: Доля пропущенных композиций жанра рок равна: . Доля пропущенных композиций жанра поп равна: . |
SOLUTION |
rock_skip = rock_haters/rock.shape[0] |
pop_skip = pop_haters/pop.shape[0] |
print('Доля пропущенных композиций жанра рок равна: '.format(rock_skip)) |
print('Доля пропущенных композиций жанра поп равна: '.format(pop_skip)) |
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Данные исследуют в четыре стадии: |
Получение данных и ознакомление с ними |
Предподготовка данных |
Анализ данных |
Оформление результатов исследования |
В этой теме мы начнём с первой стадии. В получении данных и ознакомлении с ними важную роль выполняет библиотека Pandas. |
Чему вы научитесь |
Познакомитесь с библиотекой Pandas и её базовыми методами: чтением файла, выводом данных на экран, получением сводной информации и запросом значений из определённых ячеек таблицы. |
Сколько времени это займёт |
2 часа = 6 уроков от 2 до 30 минут. |
Постановка задачи |
Решим задачу из реальной практики сервиса Яндекс.Музыка: исследовать предпочтения пользователей и ответить на вопрос, целесообразна ли интеграция двух сервисов — Музыки и Радио. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Мы готовим к запуску новый релиз, где соединим вместе приложения Музыка и Радио. Нам важно понимать, как пользователи отреагируют на такое новшество. Для этого мы оцениваем на небольшом количестве пользователей, насколько им понравилась возможность быстрого доступа к Радио. |
Каждая компания по-разному оценивает реакцию пользователя на нововведения. Продуктовые исследования в нашем сервисе показали, что среднее время прослушивания лучше всего отражает лояльность пользователей. |
Метрика удовлетворенности пользователя сервисом называется happiness. В Яндекс.Музыке метрика happiness равна среднему времени прослушивания треков. Чем выше этот показатель, тем больше доволен пользователь. |
image |
Есть и другие метрики, которые помогают ответить на вопрос: «Как дела у нашего продукта?» |
Если метрика happiness в эксперименте повысится, команда примет решение добавить Радио всем пользователям. |
Ваша задача как аналитика Яндекс.Музыки определить текущее значение метрики happiness. Вы пройдёте все стадии – от знакомства с данными до решения бизнес-задачи. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Pandas — одна из самых популярных библиотек Python для аналитики и работы с Data Science. Это как SQL для Python. Все потому, что pandas позволяет работать с двухмерными таблицами данных в Python. У нее есть и масса других особенностей. В этой серии руководств по pandas вы узнаете самое важное (и часто используемое), что необходимо знать аналитику или специалисту по Data Science. Это первая часть, в которой речь пойдет об основах.
Примечание: это практическое руководство, поэтому рекомендуется самостоятельно писать код, повторяя инструкции!
Вывод всего dataframe
Базовый метод — вывести все данные из dataframe на экран. Для этого не придется запускать функцию pd.read_csv() снова и снова. Просто сохраните денные в переменную при чтении!
После этого можно будет вызывать значение article_read каждый раз для вывода DataFrame!
6. Пропуская строки CSV
Мы можем пройти Skiprows Параметр, чтобы пропустить строки из файла CSV. Допустим, мы хотим пропустить 3-й и 4-й строчку из нашего оригинального файла CSV.
4. Чтение файла CSV без заголовка
Не обязательно иметь ряд заголовка в файле CSV. Если файл CSV не имеет строки заголовка, мы все еще можем прочитать его, передавая заголовок = нет на функцию read_csv ().
Скажем, наши сотрудники .CSV файл имеет следующий контент.
Давайте посмотрим, как прочитать этот файл CSV в объект DataFrame.
Обратите внимание, что заголовки столбцов автоматически назначаются от 0 до N. Мы можем пройти эти значения столбца в Ушиболы Параметр для чтения определенных столбцов.
Итого
Вот и все. В следующей статье вы узнаете больше о разных методах агрегации (например, sum, mean, max, min) и группировки.
5. Указание строки заголовка в файле CSV
Мы также можем указать строку для значения заголовка. Любые строки перед строкой заголовка будут отброшены. Допустим, файл CSV имеет следующие данные.
Данные заголовка присутствуют в 3 строке. Так что мы должны пройти заголовок = 2 Чтобы прочитать данные CSV из файла.
Как открывать файлы с данными в pandas
Информация может храниться в файлах .csv или таблицах SQL. Возможно, в файлах Excel. Или даже файлах .tsv. Или еще в каком-то другом формате. Но цель всегда одна и та же. Если необходимо анализировать данные с помощью pandas, нужна структура данных, совместимая с pandas.
Вывод части dataframe
Иногда удобно вывести не целый dataframe, заполнив экран данными, а выбрать несколько строк. Например, первые 5 строк можно вывести, набрав:
Или последние 5 строк:
Или 5 случайных строк:
2. Указание разделителя с функцией Pandas Read_CSV ()
В этом случае мы можем указать Сен Параметр при вызове функции read_csv ().
1. Pandas Read_CSV () Пример
Допустим, у нас есть файл CSV «Somate.csv» со следующим контентом.
Давайте посмотрим, как прочитать его в DataFrame с использованием функции Pandas Read_CSV ().
Функции могут использоваться одна за другой
Важно понимать, что логика pandas очень линейна (как в SQL, например). Поэтому если вы применяете функцию, то можете применить другую к ней же. В таком случае входящие данные последней функции будут выводом предыдущей.
Например, объединим эти два метода перебора:
Первая строчка выбирает первые 5 строк из набора данных. Потом она выбирает колонки «country» и «user_id».
Можно ли получить тот же результат с иной цепочкой функций? Конечно:
В этом случае сначала выбираются колонки, а потом берутся первые 5 строк. Результат такой же — порядок функций (и их исполнение) отличается.
А что будет, если заменить значение «article_read» на оригинальную функцию read_csv():
Так тоже можно, но это некрасиво и неэффективно. Важно понять, что работа с pandas — это применение функций и методов один за одним, и ничего больше.
Вывод определенных колонок из dataframe
А это уже посложнее! Предположим, что вы хотите вывести только колонки «country» и «user_id».
Для этого нужно использовать команду в следующем формате:
Есть предположения, почему здесь понадобились двойные квадратные скобки? Это может показаться сложным, но, возможно, так удастся запомнить: внешние скобки сообщают pandas, что вы хотите выбрать колонки, а внутренние — список (помните? Списки в Python указываются в квадратных скобках) имен колонок.
Поменяв порядок имен колонов, изменится и результат вывода.
Это DataFrame выбранных колонок.
Примечание: иногда (особенно в проектах аналитического прогнозирования) нужно получить объекты Series вместе DataFrames. Это можно сделать с помощью одного из способов:
Чтобы разобраться со всем, необходимо…
- Установить Python3.7+, numpy и Pandas.
- Следующий шаг: подключиться к серверу (или локально) и запустить Jupyter. Затем открыть Jupyter Notebook в любимом браузере. Создайте новый ноутбук с именем «pandas_tutorial_1».
- Импортировать numpy и pandas в Jupyter Notebook с помощью двух строк кода:
Теперь все настроено! Переходим к руководству по pandas! Первый вопрос:
Фильтрация определенных значений в dataframe
Если прошлый шаг показался сложным, то этот будет еще сложнее!
Предположим, что вы хотите сохранить только тех пользователей, которые представлены в источнике «SEO». Для этого нужно отфильтровать по значению «SEO» в колонке «source»:
Важно понимать, как pandas работает с фильтрацией данных:
Шаг 1) В первую очередь он оценивает каждую строчку в квадратных скобках: является ли 'SEO' значением колонки article_read.source ? Результат всегда будет булевым значением ( True или False ).
Шаг 2) Затем он выводит каждую строку со значением True из таблицы article_read .
Выглядит сложно? Возможно. Но именно так это и работает, поэтому просто выучите, потому что пользоваться этим придется часто!
Загрузка файла .csv в pandas DataFrame
Для загрузки .csv файла с данными в pandas используется функция read_csv() .
Начнем с простого образца под названием zoo. В этот раз для практики вам предстоит создать файл .csv самостоятельно. Вот сырые данные:
затем скопируем данные выше, чтобы вставить информацию в этот текстовый файл…
…и назовем его zoo.csv!
Это ваш первый .csv файл.
Вернемся в Jupyter Notebook (который называется «pandas_tutorial_1») и откроем в нем этот .csv файл!
Для этого нужна функция read_csv()
Введем следующее в новую строку:
Готово! Это файл zoo.csv , перенесенный в pandas. Это двухмерная таблица — DataFrame. Числа слева — это индексы. А названия колонок вверху взяты из первой строки файла zoo.csv.
На самом деле, вам вряд ли придется когда-нибудь создавать .csv файл для себя, как это было сделано в примере. Вы будете использовать готовые файлы с данными. Поэтому нужно знать, как загружать их на сервер!
Если кликнуть на ссылку, файл с данными загрузится на компьютер. Но он ведь не нужен вам на ПК. Его нужно загрузить на сервер и потом в Jupyter Notebook. Для этого нужно всего два шага.
Шаг 1) Вернуться в Jupyter Notebook и ввести эту команду:
Это загрузит файл pandas_tutorial_read.csv на сервер. Проверьте:
Если кликнуть на него…
…можно получить всю информацию из файла.
Шаг 2) Вернуться в Jupyter Notebook и использовать ту же функцию read_csv (не забыв поменять имя файла и значение разделителя):
Данные загружены в pandas!
Что-то не так? В этот раз не было заголовка, поэтому его нужно настроить самостоятельно. Для этого необходимо добавить параметры имен в функцию!
Так лучше!
Теперь файл .csv окончательно загружен в pandas DataFrame .
Примечание: есть альтернативный способ. Вы можете загрузить файл .csv через URL напрямую. В этом случае данные не загрузятся на сервер данных.
Примечание: если вам интересно, что в этом наборе, то это лог данных из блога о путешествиях. Ну а названия колонок говорят сами за себя.
3. Чтение только определенных столбцов из файла CSV
Мы можем указать Ушиболы Параметр для чтения определенных столбцов из файла CSV. Это очень полезно, когда файл CSV имеет много столбцов, но мы заинтересованы только в нескольких из них.
Структуры данных Python
В pandas есть два вида структур данных: Series и DataFrame.
Series в pandas — это одномерная структура данных («одномерная ndarray»), которая хранит данные. Для каждого значения в ней есть уникальный индекс.
DataFrame — двухмерная структура, состоящая из колонок и строк. У колонок есть имена, а у строк — индексы.
В руководстве по pandas основной акцент будет сделан на DataFrames. Причина проста: с большей частью аналитических методов логичнее работать в двухмерной структуре.
Проверьте себя!
Как обычно, небольшой тест для проверки! Выполните его, чтобы лучше запомнить материал!
Выберите used_id , country и topic для пользователей из country_2 . Выведите первые 5 строк!
А вот и решение!
Его можно преподнести одной строкой:
Или, чтобы было понятнее, можно разбить на несколько строк:
В любом случае, логика не отличается. Сначала берется оригинальный dataframe ( article_read ), затем отфильтровываются строки со значением для колонки country — country_2 ( [article_read.country == 'country_2'] ). Потому берутся три нужные колонки ( [['user_id', 'topic', 'country']] ) и в конечном итоге выбираются только первые пять строк ( .head() ).
Читайте также: