Что такое pandas в python
Что такое pandas в python
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]:
Введение в 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 — обработка и анализ данных в 2021 году
Подробный обзор библиотеки Pandas. Гибкая и мощная библиотека для анализа и обработки данных, разработанная на языке программирования Python.
Введение
Для того чтобы эффективно работать с этой библиотекой, нужно понять основные структуры данных. Пусть вас это не пугает, их всего две и разобраться с ними проще простого.
Series — это структура данных принципиально похожая на список и словарь в Python. Используется в качестве столбцов в таблице.
DataFrame — если говорить простыми словами, то эта структура данных представляет из себя обычную таблицу. Иными словами табличная структура данных. Как и во всех таблицах она состоит из строк и столбцов. Столбцами выступают объекты Series, а строки его элементы.
Установка
Pandas как и все библиотеки в Python устанавливаются стандартным методом через пакетный менеджер pip.
Использование
Чтобы показать библиотеку в работе, нам нужны какие нибудь статистические данные, для примера давайте возьмем данные ВВП 5 разных стран по версии всемирного банка и попробуем сформировать из них таблицу. Передавать данных в DataFrame мы будем используя знакомый синтаксис словаря Python.
Объект DataFrame имеет два индекса по столбцам и строкам. Если индекс по строкам не указан вручную, то pandas задает его автоматически.
Индексы
Назначать индексы объекту DataFrame можно при его создании или в процессе работы с ним.
Вызывая метод DataFrame мы передали ему аргумент index со списком именованных индексов.
Фильтрация данных
Pandas позволяет производить фильтрацию вывода по индексам и столбцам. Так же можно комбинировать индексы и колонки, использовать слайсы и логические выражения.
По столбцу
Обращение к столбцам в pandas реализовано стандартным образом, так как будто вы обращаетесь к ключу словаря, или же к методу объекта. В моем случае обращение как к методу объекта невозможно, я выбрал кириллическое название столбца, а работает только с латиницей 🙂
По строковому индексу
Для обращения к строковым индекса существуют два метода
Обращение к именованному индексу RU
Обращение к числовому индексу
По срезами
Объект DataFrame поддерживает использование срезов.
Отобразим все строки начиная с 3.
С использованием условий
Мы так же можем использовать логику в фильтрации данных. Давайте отобразить странны, в которых ВВП на душу населения в 2018 году был больше 100$
Работа с столбцами
Вы можете создавать, удалять и переименовывать ваши столбцы в любой момент времени.
Давайте рассмотрим каждый момент по внимательнее.
Переименование
Для переименования столбца существует метод rename
Давайте переименуем наши столбцы с указанием года.
Метод rename на вход принимает обычный словарь, ключ который является текущем названием столбца, а значение — новым. За один раз мы можем переименовать сколько угодно столбцов, главное не забывайте разделять элементы словаря запятой.
Важно: результат выполнение метода rename возвращает новый измененный объект DataFrame, поэтому переназначь основной экземпляр DataFrame.
Создание
Создадим новую колонку «Рост» и наполним ее значениями высчитанными из разницы 2018 к 2017 году.
В этой ситуации объект изменяется и переназначать экземпляр нам не нужно.
Удаление
Для удаления столбца существует метод drop, так же необходимо передать в аргумент axis значение index или columns.
Важно: результат выполнение метода drop возвращает новый измененный объект DataFrame, поэтому не забудьте переназначить DataFrame.
Загрузка данных
API загрузки данных имеет поддержку множество структурированных форматов. Для примера возьмем информацию из реестра специалистов в области ветеринарии, занимающихся предпринимательской деятельностью на территории Санкт-Петербурга. На сайте есть ссылочка для скачивания таблиц в формате CSV и MS Excel эти два формата мы и рассмотрим.
Из таблицы CSV
Осуществить загрузку данных в таблицу можно используя метод read_csv
Из таблицы MS Excel
За загрузку данных из excel таблицы отвечает метод read_excel
Установка библиотеки xlrd
Для загрузки данных из таблицы MS Excel необходимо установить дополнительную библиотеку xlrd
Загрузка данных
После установки необходимых зависимостей мы можем приступать к загрузке данных.
Список всех поддерживаемых форматов
Pandas поддерживает огромное количество форматов импорта данных, приведу полный список из официальной документации
Тип данных | Формат данных | Используемый метод |
---|---|---|
Текстовый | CSV | read_csv |
Текстовый | Fixed-Width Text File | read_fwf |
Текстовый | JSON | read_json |
Текстовый | HTML | read_html |
Текстовый | Буфер обмена | read_clipboard |
Бинарный | MS Excel | read_excel |
Бинарный | OpenDocument | read_excel |
Бинарный | HDF5 Format | read_hdf |
Бинарный | Feather Format | read_feather |
Бинарный | Parquet Format | read_parquet |
Бинарный | ORC Format | read_orc |
Бинарный | Msgpack | read_msgpack |
Бинарный | Stata | read_stata |
Бинарный | SAS | read_sas |
Бинарный | SPSS | read_spss |
Бинарный | Python Pickle Format | read_pickle |
SQL | SQL | read_sql |
SQL | Google BigQuery | read_gbq |
Сохранение данных
Так же как и в импорте API поддерживает множество форматов для экспорта данных. Воспользуемся данными о ВВП для демонстрации работы.
В таблицу CSV
За запись данных в таблицу CSV отвечает метод to_csv
так выглядят наши экспортированные данные
В таблицу MS Excel
За запись данных в таблицу MS Excel отвечает метод to_excel
Установка библиотеки openpyxl
Для записи в таблицу нам понадобиться установить библиотеку openpyxl
Сохранение данных
Запускаем наш скрипт
На выходе получаем такую таблицу
Список всех поддерживаемых форматов
К сожалению, pandas не в полном объеме поддерживает запись во все форматы, которые он умеет читать, но с большинством из них нет никаких проблем.
Тип данных | Формат данных | Используемый метод |
---|---|---|
Текстовый | CSV | to_csv |
Текстовый | JSON | to_json |
Текстовый | HTML | to_html |
Текстовый | Буфер обмена | to_clipboard |
Бинарный | MS Excel | to_excel |
Бинарный | HDF5 Format | to_hdf |
Бинарный | Feather Format | to_feather |
Бинарный | Parquet Format | to_parquet |
Бинарный | Msgpack | to_msgpack |
Бинарный | Stata | to_stata |
Бинарный | Python Pickle Format | to_pickle |
SQL | SQL | to_sql |
SQL | Google BigQuery | to_gbq |
Визуализация данных
Визуализация это большая часть работы в анализе и обработке данных. Не будем сильно углубляться и рассмотрим простой пример визуализации наших данных.
Установка библиотеки matplotlib
Для рисования графиков нам понадобится эта библиотека
Создание графиков
Самый просто способ сгенерировать график, это передать обработчику данные для одной из координат, для второй он возьмет информацию из индекса.
После выполнения программы мы увидим вот такой график
Можно повторить тоже самое но только для 2018 года
Объединение данных на одном графике
У нас есть отдельный график для 2017 и 2018 года, но как их объединить в одной диаграмме? Очень просто, нужно использовать метод pivot из библиотеки pandas.
Заключение
На это обзор библиотеки pandas подошел к концу, если у вас возникли вопросы, не стесняйтесь задавать их в комментариях.
Pandas
Pandas — это библиотека Python для обработки и анализа структурированных данных, её название происходит от «panel data» («панельные данные»). Панельными данными называют информацию, полученную в результате исследований и структурированную в виде таблиц. Для работы с такими массивами данных и создан Pandas.
Работа с открытым кодом
Pandas — это opensource-библиотека, то есть ее исходный код в открытом доступе размещен на GitHub. Пользователи могут добавлять туда свой код: вносить пояснения, дополнять методы работы и обновлять разделы. Для работы потребуется компилятор (программа, которая переводит текст с языка программирования в машинный код) C/C++ и среда разработки Python. Подробный процесс установки компилятора С для разных операционных систем можно найти в документации Pandas.
В каких профессиях понадобится библиотека?
Навык работы с этой библиотекой пригодится дата-сайентистам или аналитикам данных. С помощью Pandas эти специалисты могут группировать и визуализировать данные, создавать сводные таблицы и делать выборку по определенным признакам.
Как установить Pandas
Шаг 1. На официальном сайте Pandas указан самый простой способ начать работу с библиотекой. Для этого потребуется установить Anaconda — дистрибутив (форма распространения программного обеспечения, набор библиотек или программного кода для установки программы) для Python с набором библиотек. Безопасно скачать его можно на официальном сайте.
Вот несколько советов по установке Anaconda для новичков:
Шаг 2. В командной строке Anaconda запустите JupyterLab — это интерактивная среда для работы с кодом, данными и блокнотами, которая входит в пакет дистрибутива.
Шаг 3. Создайте в JupyterLab новый блокнот Python3.
Шаг 4. В первой ячейке пропишите: import pandas as pd, после этого в следующих ячейках можно писать код.
DataFrame и Series
Чтобы анализировать данные с помощью Pandas, нужно понять, как устроены структуры этих данных внутри библиотеки. В первую очередь разберем, что такое DataFrame и Series.
Pandas Series (серия) — это одномерный массив. Визуально он похож на пронумерованный список: слева в колонке находятся индексы элементов, а справа — сами элементы.
Индексом может быть числовой показатель (0, 1, 2…), буквенные значения (a, b, c…) или другие данные, выбранные программистом. Если особое значение не задано, то числовые индексы проставляются автоматически. Например, от 0 до 5 как в примере выше.
Такая нумерация называется RangeIndex, в ней всегда содержатся числа от 0 до определенного числа N, которое обозначает количество элементов в серии. Собственные значения индексов задаются в квадратных скобках через index, как в примере ниже:
Индексы помогают обращаться к элементам серии и менять их значения. Например, чтобы в нашей серии [5, 6, 7, 8, 9, 10] заменить значения некоторых элементов на 0, мы прописываем индексы нужных элементов и указываем, что они равны нулю:
Можно сделать выборку по нескольким индексам, чтобы ненужные элементы в серии не отображались:
Pandas DataFrame — это двумерный массив, похожий на таблицу/лист Excel (кстати, данные из Excel можно читать с помощью команды pandas.read_excel(‘file.xls’)). В нем можно проводить такие же манипуляции с данными: объединять в группы, сортировать по определенному признаку, производить вычисления. Как любая таблица, датафрейм состоит из столбцов и строк, причем столбцами будут уже известные объекты — Series.
Чтобы проверить, действительно ли серии — это части датафрейма, можно извлечь любую колонку из таблицы. Возьмем набор данных о нескольких странах СНГ, их площади и населении и выберем колонку country:
… ‘country’: [‘Kazakhstan’, ‘Russia’, ‘Belarus’, ‘Ukraine’],
… ‘population’: [17.04, 143.5, 9.5, 45.5],
… ‘square’: [2724902, 17125191, 207600, 603628]
country population square
0 Kazakhstan 17.04 2724902
1 Russia 143.50 17125191
2 Belarus 9.50 207600
3 Ukraine 45.50 603628
В итоге получится простая серия, в которой сохранятся те же индексы по строкам, что и в исходном датафрейме.
Name: country, dtype: object
Аналитика данных с нуля
Получите востребованные навыки и освойте профессию аналитика данных за 6 месяцев. Дополнительная скидка 5% по промокоду BLOG.
Кроме этого, у датафрейма есть индексы по столбцам, которые задаются вручную. Для простоты написания кода обозначим страны индексами из двух символов: Kazakhstan — KZ, Russia — RU и так далее:
… ‘country’: [‘Kazakhstan’, ‘Russia’, ‘Belarus’, ‘Ukraine’],
… ‘population’: [17.04, 143.5, 9.5, 45.5],
… ‘square’: [2724902, 17125191, 207600, 603628]
country population square
KZ Kazakhstan 17.04 2724902
RU Russia 143.50 17125191
BY Belarus 9.50 207600
UA Ukraine 45.50 603628
>>> df.index = [‘KZ’, ‘RU’, ‘BY’, ‘UA’]
>>> df.index.name = ‘Country Code’
country population square
KZ Kazakhstan 17.04 2724902
RU Russia 143.50 17125191
BY Belarus 9.50 207600
UA Ukraine 45.50 603628
>>> df.loc[[‘KZ’, ‘RU’], ‘population’]
Name: population, dtype: float64
Также в DataFrame производят математические вычисления. Например, рассчитаем плотность населения каждой страны в нашем датафрейме. Данные в колонке population (численность населения) делим на square (площадь) и получаем новые данные в колонке density, которые показывают плотность населения:
>>> df[‘density’] = df[‘population’] / df[‘square’] * 1000000
country population square density
KZ Kazakhstan 17.04 2724902 6.253436
RU Russia 143.50 17125191 8.379469
BY Belarus 9.50 207600 45.761079
UA Ukraine 45.50 603628 75.377550
Data Science с нуля
Закрепите навыки Data Science и получите перспективную профессию за 13 месяцев. Дополнительная скидка 5% по промокоду BLOG.
Чтение и запись данных
Доступ по индексу в DataFrame
>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
Name: viper, dtype: int64
2 1000 2000 3000 4000
Name: 0, dtype: int64
Группировка и агрегирование данных
Обратите внимание на as_index=False, эта часть кода отвечает за то, чтобы сохранить числовые индексы в результатах группировки и вычисления.
Сводные таблицы в Pandas
Для примера возьмем условный набор данных с простыми категориями one / two, small / large и числовыми значениями. В столбце A две категории foo / bar складываются в слово foobar — текст, который используется в программировании для условного обозначения. В этом случае он указывает, что мы делим данные на две группы по неопределенному признаку.
0 foo one small 1 2
1 foo one large 2 4
2 foo one large 2 5
3 foo two small 3 5
4 foo two small 3 6
5 bar one large 4 6
6 bar one small 5 8
7 bar two small 6 9
8 bar two large 7 9
>>> table = pd.pivot_table(df, values=’D’, index=[‘A’, ‘B’],
Мы разбиваем данные на две категории: bar и foo, в каждой из них будут подгруппы со значениями one и two, которые в свою очередь делятся на small и large. В сводной таблице мы вычисляем, сколько объектов будет в каждой группе. Для этого используем методы values, index, columns и aggfunc:
Аналитика данных с нуля
Получите востребованные навыки и освойте профессию аналитика данных за 6 месяцев. Дополнительная скидка 5% по промокоду BLOG.
Визуализация данных в Pandas
Дата-аналитики составляют наглядные графики с помощью Pandas и библиотеки Matplotlib. В этой связке Pandas отвечает за вычислительную часть работы, а вспомогательная библиотека «создает» картинку.
Посмотрим на данные о продажах в одной из компаний:
В таблице видно, что одни пользователи совершили уже более 7 000 покупок, а некоторые — сделали первую. Чтобы увидеть подробную картину, составляем график sns.distplot. На горизонтальной оси будет отображаться число покупок на одного покупателя, а на вертикальной — количество покупателей, которые совершили именно столько покупок в этой компании. Так по графику можно определить, что самой многочисленной оказалась группа клиентов, которая совершила всего несколько покупок, а группа постоянных клиентов немногочисленная.
distplot — это график, который визуализирует гистограммы, то есть распределяет данные по столбцам. Каждому столбцу соответствует доля количества объектов в данной группе. Также distplot показывает плотность распределения — плавный линейный график, в котором самая высокая точка указывает на наибольшее количество объектов.
Кроме этого, в Pandas есть другие виды графиков:
Например, можно отследить взаимосвязь между тем, сколько минут посетитель проводит в торговом центре и сколько магазинов успевает посетить за это время: кто-то за 30 минут успеет зайти в 5 бутиков, а кто-то обойдет 16. При этом каждый посетитель на графике будет отображаться отдельной точкой.
Data Science с нуля
Закрепите навыки Data Science и получите перспективную профессию за 13 месяцев. Дополнительная скидка 5% по промокоду BLOG.