Python pandas для чего
Введение в pandas: анализ данных на Python
pandas это высокоуровневая Python библиотека для анализа данных. Почему я её называю высокоуровневой, потому что построена она поверх более низкоуровневой библиотеки NumPy (написана на Си), что является большим плюсом в производительности. В экосистеме Python, pandas является наиболее продвинутой и быстроразвивающейся библиотекой для обработки и анализа данных. В своей работе мне приходится пользоваться ею практически каждый день, поэтому я пишу эту краткую заметку для того, чтобы в будущем ссылаться к ней, если вдруг что-то забуду. Также надеюсь, что читателям блога заметка поможет в решении их собственных задач с помощью pandas, и послужит небольшим введением в возможности этой библиотеки.
DataFrame и Series
Чтобы эффективно работать с pandas, необходимо освоить самые главные структуры данных библиотеки: DataFrame и Series. Без понимания что они из себя представляют, невозможно в дальнейшем проводить качественный анализ.
Series
Структура/объект Series представляет из себя объект, похожий на одномерный массив (питоновский список, например), но отличительной его чертой является наличие ассоциированных меток, т.н. индексов, вдоль каждого элемента из списка. Такая особенность превращает его в ассоциативный массив или словарь в Python.
В строковом представлении объекта Series, индекс находится слева, а сам элемент справа. Если индекс явно не задан, то pandas автоматически создаёт RangeIndex от 0 до N-1, где N общее количество элементов. Также стоит обратить, что у Series есть тип хранимых элементов, в нашем случае это int64, т.к. мы передали целочисленные значения.
У объекта Series есть атрибуты через которые можно получить список элементов и индексы, это values и index соответственно.
Доступ к элементам объекта Series возможны по их индексу (вспоминается аналогия со словарем и доступом по ключу).
Индексы можно задавать явно:
Делать выборку по нескольким индексам и осуществлять групповое присваивание:
Фильтровать Series как душе заблагорассудится, а также применять математические операции и многое другое:
Если Series напоминает нам словарь, где ключом является индекс, а значением сам элемент, то можно сделать так:
У объекта Series и его индекса есть атрибут name, задающий имя объекту и индексу соответственно.
Индекс можно поменять «на лету», присвоив список атрибуту index объекта Series
Имейте в виду, что список с индексами по длине должен совпадать с количеством элементов в Series.
DataFrame
Объект DataFrame лучше всего представлять себе в виде обычной таблицы и это правильно, ведь DataFrame является табличной структурой данных. В любой таблице всегда присутствуют строки и столбцы. Столбцами в объекте DataFrame выступают объекты Series, строки которых являются их непосредственными элементами.
DataFrame проще всего сконструировать на примере питоновского словаря:
Чтобы убедиться, что столбец в DataFrame это Series, извлекаем любой:
Объект DataFrame имеет 2 индекса: по строкам и по столбцам. Если индекс по строкам явно не задан (например, колонка по которой нужно их строить), то pandas задаёт целочисленный индекс RangeIndex от 0 до N-1, где N это количество строк в таблице.
В таблице у нас 4 элемента от 0 до 3.
Доступ по индексу в DataFrame
Индекс по строкам можно задать разными способами, например, при формировании самого объекта DataFrame или «на лету»:
Доступ к строкам по индексу возможен несколькими способами:
Можно делать выборку по индексу и интересующим колонкам:
Фильтровать DataFrame с помощью т.н. булевых массивов:
Кстати, к столбцам можно обращаться, используя атрибут или нотацию словарей Python, т.е. df.population и df[‘population’] это одно и то же.
Сбросить индексы можно вот так:
pandas при операциях над DataFrame, возвращает новый объект DataFrame.
Добавим новый столбец, в котором население (в миллионах) поделим на площадь страны, получив тем самым плотность:
Не нравится новый столбец? Не проблема, удалим его:
Особо ленивые могут просто написать del df[‘density’].
Переименовывать столбцы нужно через метод rename:
В этом примере перед тем как переименовать столбец Country Code, убедитесь, что с него сброшен индекс, иначе не будет никакого эффекта.
Чтение и запись данных
pandas поддерживает все самые популярные форматы хранения данных: csv, excel, sql, буфер обмена, html и многое другое:
Чаще всего приходится работать с csv-файлами. Например, чтобы сохранить наш DataFrame со странами, достаточно написать:
Функции to_csv ещё передаются различные аргументы (например, символ разделителя между колонками) о которых подробнее можно узнать в официальной документации.
Считать данные из csv-файла и превратить в DataFrame можно функцией read_csv.
Аргумент sep указывает разделитесь столбцов. Существует ещё масса способов сформировать DataFrame из различных источников, но наиболее часто используют CSV, Excel и SQL. Например, с помощью функции read_sql, pandas может выполнить SQL запрос и на основе ответа от базы данных сформировать необходимый DataFrame. За более подробной информацией стоит обратиться к официальной документации.
Группировка и агрегирование в pandas
Необходимо подсчитать, сколько женщин и мужчин выжило, а сколько нет. В этом нам поможет метод .groupby.
А теперь проанализируем в разрезе класса кабины:
Сводные таблицы в pandas
В качестве индекса теперь у нас будет пол человека, колонками станут значения из PClass, функцией агрегирования будет count (подсчёт количества записей) по колонке Name.
Анализ временных рядов
В pandas очень удобно анализировать временные ряды. В качестве показательного примера я буду использовать цену на акции корпорации Apple за 5 лет по дням. Файл с данными можно скачать тут.
Здесь мы формируем DataFrame с DatetimeIndex по колонке Date и сортируем новый индекс в правильном порядке для работы с выборками. Если колонка имеет формат даты и времени отличный от ISO8601, то для правильного перевода строки в нужный тип, можно использовать метод pandas.to_datetime.
Давайте теперь узнаем среднюю цену акции (mean) на закрытии (Close):
А если взять промежуток с февраля 2012 по февраль 2015 и посчитать среднее:
А что если нам нужно узнать среднюю цену закрытия по неделям?!
Resampling мощный инструмент при работе с временными рядами (time series), помогающий переформировать выборку так, как удобно вам. Метод resample первым аргументом принимает строку rule. Все доступные значения можно найти в документации.
Визуализация данных в pandas
Для визуального анализа данных, pandas использует библиотеку matplotlib. Продемонстрирую простейший способ визуализации в pandas на примере с акциями Apple.
Берём цену закрытия в промежутке между 2012 и 2017.
И видим вот такую картину:
По оси X, если не задано явно, всегда будет индекс. По оси Y в нашем случае цена закрытия. Если внимательно посмотреть, то в 2014 году цена на акцию резко упала, это событие было связано с тем, что Apple проводила сплит 7 к 1. Так мало кода и уже более-менее наглядный анализ 😉
Эта заметка демонстрирует лишь малую часть возможностей pandas. Со своей стороны я постараюсь по мере своих сил обновлять и дополнять её.
Полезные ссылки
💌 Присоединяйтесь к рассылке
Понравился контент? Пожалуйста, подпишись на рассылку.
Библиотека Pandas в Python
Pandas – это библиотека с открытым исходным кодом на Python. Она предоставляет готовые к использованию высокопроизводительные структуры данных и инструменты анализа данных.
Установка и начало работы с Pandas
Для установки модуля Pandas вам потребуется Python 2.7 и выше.
Если вы используете conda, вы можете установить его, используя команду ниже.
Если вы используете PIP, выполните команду ниже, чтобы установить модуль pandas.
Чтобы импортировать Pandas и NumPy в свой скрипт Python, добавьте следующий фрагмент кода:
Поскольку Pandas зависит от библиотеки NumPy, нам нужно импортировать эту зависимость.
Структуры данных
Модуль Pandas предоставляет 3 структуры данных, а именно:
DataFrame
DataFrame – самая важная и широко используемая структура данных, а также стандартный способ хранения данных. Она содержит данные, выровненные по строкам и столбцам, как в таблице SQL или в базе данных электронной таблицы.
Мы можем либо жестко закодировать данные в DataFrame, либо импортировать файл CSV, файл tsv, файл Excel, таблицу SQL и т.д.
Мы можем использовать приведенный ниже конструктор для создания объекта DataFrame.
Ниже приводится краткое описание параметров:
Есть много способов создать DataFrame. Мы можем создать объект из словарей или списка словарей. Мы также можем создать его из списка кортежей, CSV, файла Excel и т.д.
Давайте запустим простой код для создания DataFrame из списка словарей.
Первый шаг – создать словарь. Второй шаг – передать словарь в качестве аргумента в метод DataFrame(). Последний шаг – распечатать DataFrame.
Как видите, DataFrame можно сравнить с таблицей, имеющей неоднородное значение. Кроме того, можно изменить размер.
Мы предоставили данные в виде карты, и ключи карты рассматриваются Pandas, как метки строк.
Индекс отображается в крайнем левом столбце и имеет метки строк. Заголовок столбца и данные отображаются в виде таблицы.
Также возможно создавать индексированные DataFrames. Это можно сделать, настроив параметр индекса.
Импорт данных из CSV
Мы также можем создать DataFrame, импортировав файл CSV. Файл CSV – это текстовый файл с одной записью данных в каждой строке. Значения в записи разделяются символом «запятая».
Pandas предоставляет полезный метод с именем read_csv() для чтения содержимого файла CSV.
Например, мы можем создать файл с именем «cities.csv», содержащий подробную информацию о городах Индии. Файл CSV хранится в том же каталоге, что и сценарии Python. Этот файл можно импортировать с помощью:
Наша цель – загрузить данные и проанализировать их, чтобы сделать выводы. Итак, мы можем использовать любой удобный способ загрузки данных.
Проверка данных
Точно так же print (df.dtypes) печатает типы данных.
print (df.index) печатает index.
print (df.columns) печатает столбцы DataFrame.
print (df.values) отображает значения таблицы.
1. Получение статистической сводки записей
Функция df.describe() отображает статистическую сводку вместе с типом данных.
2. Сортировка записей
3. Нарезка записей
Интересной особенностью библиотеки Pandas является выбор данных на основе меток строк и столбцов с помощью функции iloc [0].
Часто для анализа может потребоваться всего несколько столбцов. Мы также можем выбрать по индексу, используя loc [‘index_one’]).
Допустим, нам нужно выбрать второй элемент второго столбца. Это можно сделать с помощью функции df.iloc [1,1]. В этом примере функция df.iloc [1,1] отображает в качестве вывода «Мумбаи».
4. Фильтрация данных
Для фильтрации по условию можно использовать любой оператор сравнения.
5. Переименование столбца
Аргумент inplace = True вносит изменения в DataFrame.
6. Сбор данных
Наука о данных включает в себя обработку данных, чтобы данные могли хорошо работать с алгоритмами данных. Data Wrangling – это процесс обработки данных, такой как слияние, группировка и конкатенация.
Библиотека Pandas предоставляет полезные функции, такие как merge(), groupby() и concat() для поддержки задач Data Wrangling.
а. merge()
Мы видим, что функция merge() возвращает строки из обоих DataFrames, имеющих то же значение столбца, которое использовалось при слиянии.
b. Группировка
Поле «Employee_name» со значением «Meera» сгруппировано по столбцу «Employee_name». Пример вывода приведен ниже:
c. Конкатенация
Создание DataFrame, переход Dict в Series
Мы создали серию. Вы можете видеть, что отображаются 2 столбца. Первый столбец содержит значения индекса, начиная с 0. Второй столбец содержит элементы, переданные как серии.
Можно создать DataFrame, передав словарь Series. Давайте создадим DataFrame, который формируется путем объединения и передачи индексов ряда.
Для первой серии, поскольку мы не указали метку ‘d’, возвращается NaN.
Выбор столбца, добавление и удаление
Приведенный выше код печатает только столбец «Matches played» в DataFrame.
Заключение
В этом руководстве у нас было краткое введение в библиотеку Pandas в Python. Мы также сделали практические примеры, чтобы раскрыть возможности библиотеки, используемой в области науки о данных. Мы также рассмотрели различные структуры данных в библиотеке Python.
Python pandas для чего
Pandas – это быстрый, мощный, гибкий и простой в использовании инструмент для анализа и обработки данных с открытым исходным кодом, созданный на языке программирования Python. На данный момент библиотека Pandas является ключевой в анализе данных (Data Mining).
История
Разработка Pandas началась в 2008 году в компании AQR Capital, которая занимается инвестициями и финансами.
К концу 2009 он стал проектом с открытым исходным кодом (open source), который и по сей день поддерживается сообществом единомышленников со всего мира, которые безвозмездно вкладывают свои силы и время в развитие этой библиотеки.
С 2015 года эта библиотека спонсируется компанией NumFOCUS, которая поддерживает open source проекты.
Архитектура DataFrame — главного объекта Pandas
В основе Pandas лежит DataFrame – структура данных табличного типа. Любое табличное представление данных, например, электронные таблицы или базы данных, можно использовать как DataFrame. Объект DataFrame составлен из объектов Series — одномерных массивов, объединенных под одним названием и типом данных. Series можно рассматривать как столбец таблицы.
Представление DataFrame и Series
Pandas имеет широкий спектр возможностей для анализа данных
Библиотека Pandas используется в различных академических и коммерческих областях, включая искусственный интеллект (Artificial Intelligence), финансы, нейробиологию, экономику, статистику, рекламу, веб-аналитику и многое другое. Рассмотрим основные возможности библиотеки [1]:
Документация по модулю Python Pandas
Модуль Python Pandas представляет собой модуль с открытым исходным кодом. Он имеет широкую сферу применения в области вычислений, анализа данных, статистики и т. д.
Начало работы
Прежде чем разобраться в функциях модуля Pandas, нам необходимо установить модуль (проверка совместимости версии Python с версией модуля, который вы хотите установить, с помощью официальной документации модуля Pandas).
Есть разные способы установить модуль Python Pandas. Один из самых простых способов — установить с помощью установщика пакетов Python, то есть PIP.
Введите следующую команду в командной строке:
pip install pandas
Чтобы добавить модуль Pandas и NumPy в ваш код, нам необходимо импортировать эти модули в наш код.
Pandas — структуры данных
Pandas работает со следующими структурами данных:
Эти структуры данных быстрее по сравнению с массивами NumPy.
1 Серия
Pandas Series — это одномерная структура, напоминающая массивы, содержащие однородные данные. Это линейная структура данных, в которой элементы хранятся в одном измерении.
Примечание. Размер структуры данных серии в Pandas является неизменным, т.е. однажды установленный, он не может быть изменен динамически. При этом значения и элементы в серии можно изменять.
Синтаксис:
pandas.Series(input_data, index, data_type, copy)
В приведенном выше фрагменте кода мы предоставили ввод с использованием массивов NumPy и установили значения индекса для входных данных.
Выход:
10 John
11 Bran
12 Sam
13 Peter
dtype: object
2 DataFrame
Модуль Python Pandas предоставляет DataFrame, который представляет собой двумерную структуру, напоминающую двумерные массивы. Здесь входные данные оформляются в виде строк и столбцов.
Примечание. Размер структуры данных DataFrame в Pandas можно изменять.
Синтаксис:
pandas.DataFrame(input_data, index_value, columns, data_type, copy)
В приведенном выше коде мы предоставили ввод с помощью списков, добавили метки: «Имя» и «Город» к столбцам и установили для них значения индекса.
Выход:
Name City
1 John Pune
2 Bran Mumbai
3 Peter Delhi
3 Panel
Модуль Python Pandas предлагает панель, которая представляет собой трехмерную структуру данных и содержит 3 оси для выполнения следующих функций:
Синтаксис:
pandas.Panel(input_data, items, major_axis, minor_axis, data_type, copy)
Импорт данных из файла CSV в DataFrame
Модуль DataFrame Python Pandas также может быть построен с использованием файлов CSV. Файл CSV — это в основном текстовый файл, в котором хранятся данные для каждой строки. Элементы разделяются запятой.
Метод read_csv (file_name) используется для чтения данных из файла CSV в DataFrame.
Синтаксис:
pandas.read_csv()
Пример:
Выход:
Name Age
0 John 21
1 Bran 22
Статистический анализ в Pandas
Модуль Python Pandas предлагает большое количество встроенных методов, помогающих пользователям проводить статистический анализ данных.
Ниже приводится список некоторых наиболее часто используемых функций для статистического анализа:
Метод | Description |
---|---|
count() | Подсчитывает количество всех непустых наблюдений |
sum() | Возвращает сумму элементов данных. |
mean() | Возвращает среднее значение всех элементов данных. |
median() | Возвращает медианное значение всех элементов данных. |
mode() | Возвращает режим всех элементов данных |
std() | Возвращает стандартное отклонение всех элементов данных. |
min() | Возвращает минимальный элемент данных среди всех входных элементов. |
max() | Возвращает максимальный элемент данных среди всех входных элементов. |
abs() | Возвращает абсолютное значение. |
prod() | Возвращает произведение значений данных. |
cumsum() | Возвращает кумулятивную сумму значений данных. |
cumprod() | Возвращает совокупное произведение значений данных. |
describe() | Он отображает статистическую сводку всех записей за один снимок, т.е. (сумма, количество, мин, среднее и т. Д.) |
Для начала давайте создадим DataFrame, который мы будем использовать в этом разделе для понимания различных функций, предоставляемых для статистического анализа.
Функция sum()
Как видно выше, функция sum() добавляет данные каждого столбца отдельно и добавляет строковые значения везде, где они есть.
функция mean()
Выход:
Marks 59.8
Roll_num 3.0
dtype: float64
Функция mean не будет воздействовать на строки, найденные в данных, в отличие от функции sum().
Аналитикам: большая шпаргалка по Pandas
Привет. Я задумывал эту заметку для студентов курса Digital Rockstar, на котором мы учим маркетологов автоматизировать свою работу с помощью программирования, но решил поделиться шпаргалкой по Pandas со всеми. Я ожидаю, что читатель умеет писать код на Python хотя бы на минимальном уровне, знает, что такое списки, словари, циклы и функции.
Что такое Pandas и зачем он нужен
Pandas — это библиотека для работы с данными на Python. Она упрощает жизнь аналитикам: где раньше использовалось 10 строк кода теперь хватит одной.
Например, чтобы прочитать данные из csv, в стандартном Python надо сначала решить, как хранить данные, затем открыть файл, прочитать его построчно, отделить значения друг от друга и очистить данные от специальных символов.
В Pandas всё проще. Во-первых, не нужно думать, как будут храниться данные — они лежат в датафрейме. Во-вторых, достаточно написать одну команду:
Pandas добавляет в Python новые структуры данных — серии и датафреймы. Расскажу, что это такое.
Структуры данных: серии и датафреймы
Серии — одномерные массивы данных. Они очень похожи на списки, но отличаются по поведению — например, операции применяются к списку целиком, а в сериях — поэлементно.
То есть, если список умножить на 2, получите тот же список, повторенный 2 раза.
А если умножить серию, ее длина не изменится, а вот элементы удвоятся.
Обратите внимание на первый столбик вывода. Это индекс, в котором хранятся адреса каждого элемента серии. Каждый элемент потом можно получать, обратившись по нужному адресу.
Еще одно отличие серий от списков — в качестве индексов можно использовать произвольные значения, это делает данные нагляднее. Представим, что мы анализируем помесячные продажи. Используем в качестве индексов названия месяцев, значениями будет выручка:
Теперь можем получать значения каждого месяца:
Так как серии — одномерный массив данных, в них удобно хранить измерения по одному. На практике удобнее группировать данные вместе. Например, если мы анализируем помесячные продажи, полезно видеть не только выручку, но и количество проданных товаров, количество новых клиентов и средний чек. Для этого отлично подходят датафреймы.
Датафреймы — это таблицы. У их есть строки, колонки и ячейки.
Технически, колонки датафреймов — это серии. Поскольку в колонках обычно описывают одни и те же объекты, то все колонки делят один и тот же индекс:
Объясню, как создавать датафреймы и загружать в них данные.
Создаем датафреймы и загружаем данные
Бывает, что мы не знаем, что собой представляют данные, и не можем задать структуру заранее. Тогда удобно создать пустой датафрейм и позже наполнить его данными.
А иногда данные уже есть, но хранятся в переменной из стандартного Python, например, в словаре. Чтобы получить датафрейм, эту переменную передаем в ту же команду:
Случается, что в некоторых записях не хватает данных. Например, посмотрите на список goods_sold — в нём продажи, разбитые по товарным категориям. За первый месяц мы продали машины, компьютеры и программное обеспечение. Во втором машин нет, зато появились велосипеды, а в третьем снова появились машины, но велосипеды исчезли:
Если загрузить данные в датафрейм, Pandas создаст колонки для всех товарных категорий и, где это возможно, заполнит их данными:
Обратите внимание, продажи велосипедов в первом и третьем месяце равны NaN — расшифровывается как Not a Number. Так Pandas помечает отсутствующие значения.
Теперь разберем, как загружать данные из файлов. Чаще всего данные хранятся в экселевских таблицах или csv-, tsv- файлах.
Файлы формата csv и tsv — это текстовые файлы, в которых данные отделены друг от друга запятыми или табуляцией:
После загрузки данных в датафрейм, хорошо бы их исследовать — особенно, если они вам незнакомы.
Исследуем загруженные данные
В датафрейме 5009 строк и 5 колонок.
Теперь видим, что в таблице есть дата заказа, метод доставки, номер клиента и выручка.
Тип object — это текст, float64 — это дробное число типа 3,14.
Ожидаемо, в индексе датафрейма номера заказов: 100762, 100860 и так далее.
Получив первое представление о датафреймах, теперь обсудим, как доставать из него данные.
Получаем данные из датафреймов
Данные из датафреймов можно получать по-разному: указав номера колонок и строк, использовав условные операторы или язык запросов. Расскажу подробнее о каждом способе.
Указываем нужные строки и колонки
Обратите внимание, результат команды — новый датафрейм с таким же индексом.
Можно фильтровать датафреймы по колонкам и столбцам одновременно:
Часто вы не знаете заранее номеров заказов, которые вам нужны. Например, если задача — получить заказы, стоимостью более 1000 рублей. Эту задачу удобно решать с помощью условных операторов.
Если — то. Условные операторы
Задача: нужно узнать, откуда приходят самые большие заказы. Начнем с того, что достанем все покупки стоимостью более 1000 долларов:
Интересно, сколько дорогих заказов было доставлено первым классом? Добавим в фильтр ещё одно условие:
Язык запросов
Разобравшись, как получать куски данных из датафрейма, перейдем к тому, как считать агрегированные метрики: количество заказов, суммарную выручку, средний чек, конверсию.
Считаем производные метрики
Другое дело. Теперь видим сумму выручки по каждому классу доставки. По суммарной выручке неясно, становится лучше или хуже. Добавим разбивку по датам заказа:
Ого, получается, что это так прыгает средний чек. Интересно, а какой был самый удачный день? Чтобы узнать, отсортируем получившийся датафрейм: выведем 10 самых денежных дней по выручке:
Команда разрослась, и её теперь неудобно читать. Чтобы упростить, можно разбить её на несколько строк. В конце каждой строки ставим обратный слеш \ :
В самый удачный день — 18 марта 2014 года — магазин заработал 27 тысяч долларов с помощью стандартного класса доставки. Интересно, откуда были клиенты, сделавшие эти заказы? Чтобы узнать, надо объединить данные о заказах с данными о клиентах.
Объединяем несколько датафреймов
До сих пор мы смотрели только на таблицу с заказами. Но ведь у нас есть еще данные о клиентах интернет-магазина. Загрузим их в переменную customers и посмотрим, что они собой представляют:
Решаем задачу
Закрепим полученный материал, решив задачу. Найдем 5 городов, принесших самую большую выручку в 2016 году.
Для начала отфильтруем заказы из 2016 года:
Город — это атрибут пользователей, а не заказов. Добавим информацию о пользователях:
Cруппируем получившийся датафрейм по городам и посчитаем выручку:
Отсортируем по убыванию продаж и оставим топ-5:
Возьмите данные о заказах и покупателях и посчитайте:
Через некоторое время выложу ответы в Телеграме. Подписывайтесь, чтобы не пропустить ответы и новые статьи.
Кстати, большое спасибо Александру Марфицину за то, что помог отредактировать статью.