В библиотеке Pandas есть инструменты под разные задачи. Для анализа табличных данных существует определенная последовательность шагов и используемых решений. Их можно встретить практически в любом проекте. В этом уроке мы разберем, как решать определенные задачи с использованием методов библиотеки Pandas.
Шаги для работы с библиотекой Pandas
Аналитику важно уметь пользоваться инструментами библиотеки Pandas для решения следующих задач:
- Чтение данных из файловой системы
- Первичный анализ данных
- Трансформация данных: исправление пропусков и некорректных значений, извлечение из данных аналитических показателей
- Запись результатов обратно в файловую систему
Разберем каждую ситуацию подробнее.
Чтение данных из файловой системы
Обычно для хранения табличных данных используют формат csv. Также могут встречаться форматы xls и json. Для чтения данных из файловой системы в Pandas есть набор методов под разные типы данных.
Все методы первым параметром ожидают путь к файлу. Можно конфигурировать различные сценарии чтения. В нашем случае мы указываем, что колонка, в которой хранятся значения индексов строк, идет первой по счету. Напомним, что в программировании счет начинается с нуля:
import pandas as pd
df_clicks = pd.read_json('./data/Cite_clicks.json')
df_clicks = pd.read_csv('./data/Cite_clicks.csv', index_col=0)
Для работы с табличными данными в Pandas реализован особый тип данных — DataFrame
. Это не просто массив хранимых значений, а структура с особой формой хранения индексов строк и столбцов.
На практике ошибка в процессе чтения может и не возникнуть. При этом данные могут считаться некорректно или вовсе не быть прочитанными. После чтения данных полезно провести проверку. Для просмотра достаточно воспользоваться методом head()
. Он выводит название столбцов и значения первых пяти строк:
print(df_clicks.head())
# => SHOP1 SHOP2 SHOP3 SHOP4
# day
# 1 319.0 -265.0 319.0 328.0
# 2 292.0 274.0 292.0 301.0
# 3 283.0 301.0 274.0 283.0
# 4 328.0 364.0 328.0 NaN
# 5 391.0 355.0 373.0 337.0
В этом примере мы считали данные кликов кнопки покупки для разных магазинов за некоторый период времени.
Чтобы посмотреть последние строки таблицы, воспользуемся методом tail()
:
print(df_clicks.tail())
# => SHOP1 SHOP2 SHOP3 SHOP4
# day
# 24 295.0 321.0 282.0 NaN
# 25 360.0 412.0 360.0 347.0
# 26 NaN 399.0 425.0 373.0
# 27 529.0 490.0 477.0 529.0
# 28 581.0 464.0 581.0 -477.0
Первичный анализ данных
Для первичного анализа данных используется метод info()
. Он показывает количество считанных строк, непустых значений в каждом из столбцов и тип хранимых в них данных:
print(df_clicks.info())
# => <class 'pandas.core.frame.DataFrame'>
# Int64Index: 28 entries, 1 to 28
# Data columns (total 4 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 SHOP1 26 non-null float64
# 1 SHOP2 27 non-null float64
# 2 SHOP3 28 non-null float64
# 3 SHOP4 26 non-null float64
# dtypes: float64(4)
# memory usage: 1.1 KB
В таблице тип каждой колонки данных указан в столбце Dtype
. В данном случае все колонки типа float64
— числа с плавающей запятой. В столбце Non-Null Count
указано количество непустых ячеек в каждой колонке. По этим значениям можно судить о наличии пропусков в данных. В колонке SHOP1
26 непустых значений из 28, получается, в ней два пропуска.
Чтобы получить статистические показатели числовых значений, используем метод describe()
. С его помощью можно по каждому столбцу увидеть средние и отклонения от них, минимумы и максимумы, персентильные значения:
print(df_clicks.describe())
# => SHOP1 SHOP2 SHOP3 SHOP4
# count 26.000000 27.000000 28.000000 26.000000
# mean 343.807692 334.481481 315.785714 304.230769
# std 180.152384 136.639157 207.915823 212.219379
# min -424.000000 -265.000000 -443.000000 -477.000000
# 25% 296.250000 289.000000 298.000000 311.250000
# 50% 336.000000 355.000000 338.500000 335.000000
# 75% 439.000000 400.000000 401.500000 387.250000
# max 581.000000 490.000000 581.000000 529.000000
Иногда нужно проанализировать наличие тех или иных столбцов. Но их может быть довольно много. Чтобы получить названия всех столбцов, нужно обратиться к атрибуту columns
датафрейма:
print(df_clicks.columns)
# => Index(['SHOP1', 'SHOP2', 'SHOP3', 'SHOP4'], dtype='object')
Этот атрибут можно изменять. Так можно переименовывать столбцы, если это необходимо:
df_clicks.columns = ['shop_1', 'shop_2', 'shop_3', 'shop_4']
print(df_clicks.head())
# => shop_1 shop_2 shop_3 shop_4
# day
# 1 319.0 -265.0 319.0 328.0
# 2 292.0 274.0 292.0 301.0
# 3 283.0 301.0 274.0 283.0
# 4 328.0 364.0 328.0 NaN
# 5 391.0 355.0 373.0 337.0
Наглядное представление данных может упростить их анализ. В Pandas встроены методы визуализации данных на базе библиотеки Matplotlib. Чтобы визуализировать изменения значений в определенном столбце, воспользуемся методом plot()
:
df_clicks['shop_3'].plot()
На рисунке видны выбросы в данных. Нужно понять причины их возникновения и постараться исправить.
Трансформация данных
У библиотеки Pandas много функций, чтобы обрабатывать и трансформировать данные. Часто используются заполнения пропусков и исправление ошибок. В нашем примере есть пропущенные и отрицательные значения. Для дальнейшего анализа они могут нам помешать, поэтому исправим это:
# Блок подготовки данных
# Заполнение пропущенных значений 0
df_clicks = df_clicks.fillna(0)
# Исправление отрицательных значений — взятие модуля
df_clicks = abs(df_clicks)
Подготовка данных выполнена. Добавим аналитической информации: столбец со средними показателями кликов за день:
# Создание столбца среднедневных показателей по всей сети
# Указываем axis=1 для подсчета построчно
df_clicks['mean'] = df_clicks.mean(axis=1)
print(df_clicks.head())
# => shop_1 shop_2 shop_3 shop_4 mean
# day
# 1 319.0 265.0 319.0 328.0 281.25
# 2 292.0 274.0 292.0 301.0 289.75
# 3 283.0 301.0 274.0 283.0 285.25
# 4 328.0 364.0 328.0 0.0 258.40
# 5 391.0 355.0 373.0 337.0 364.00
Запись результатов в файловую систему
Теперь нам нужно сохранить результаты. Форматы файлов для хранения также могут быть различными. При этом интерфейс методов один и тот же:
# Сохранение данных в различные форматы
df_clicks.to_csv('./data/Cite_clicks_analyzed.csv')
df_clicks.to_json('./data/Cite_clicks_analyzed.json')
df_clicks.to_excel('./data/Cite_clicks_analyzed.xlsx')
Выводы
Для работы с данными аналитики придерживаются определенной последовательности действий. Она включает в себя чтение данных, их первичный анализ, исправление некорректных значений, статистический анализ и запись полученных результатов. Без них не обходится практически ни один проект, поэтому важно уметь работать с инструментами, которые позволяют их выполнять. Библиотека Pandas предоставляет такие методы. В этом уроке мы разобрали случаи их использования на практических примерах.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.