Читать книгу Pandas без пропавших файлов. 16 задач анализа данных (Глеб Зайцев) онлайн бесплатно на Bookz
Pandas без пропавших файлов. 16 задач анализа данных
Pandas без пропавших файлов. 16 задач анализа данных
Оценить:

4

Полная версия:

Pandas без пропавших файлов. 16 задач анализа данных

Глеб Зайцев

Pandas без пропавших файлов. 16 задач анализа данных

Перед первой таблицей

Почему таблицы лучше сначала делать маленькими

Pandas часто изучают на больших файлах. Это выглядит солидно, но мешает понять ошибку: результат изменился из-за фильтра, типа данных, пропуска, дубля или порядка сортировки. В этой книге все таблицы маленькие и находятся прямо в тексте. Их можно перепечатать, изменить и сразу увидеть, что поменялось.

Задача книги — не перечислить весь pandas. Мы берём рабочие действия, которые чаще всего ломаются у новичка: прочитать данные, выбрать строки, посчитать новый показатель, сгруппировать, объединить справочник, обработать даты и вернуть компактный отчёт. Каждый раз сначала фиксируется вопрос к данным, потом код, потом проверка результата.

Примеры написаны для pandas 2.2. Они используют только память процесса: данные передаются через StringIO, файлы на компьютере не читаются и не создаются. Это осознанное ограничение. В реальной работе вы замените StringIO на путь к CSV или Excel, но логика очистки и проверки останется той же.

Как запускать примеры

Установите Python 3 и pandas в отдельное учебное окружение. Скопируйте один пример в файл task.py и запустите его. В книге ожидаемый результат напечатан через repr, чтобы были видны списки, словари, строки и округления. Если вывод отличается, сначала проверьте, не изменили ли вы исходную таблицу.

Во всех задачах таблицы синтетические: заказы, товары, просмотры, тесты и клиенты придуманы для обучения. Не подставляйте реальные персональные данные, финансовые выгрузки или клиентские базы в чужие онлайн-сервисы ради проверки. Для тренировки достаточно локального запуска.

У pandas часто есть несколько правильных способов решить одну задачу. В книге выбран один путь, который легче проверить на маленьком наборе. Если вы нашли другой вариант, сравните не только итоговое число, но и порядок строк, типы, пропуски и правила округления.

Что считать хорошим ответом

Хороший ответ в анализе данных состоит из трёх частей: что именно посчитано, на каких строках, и какие ограничения остались. Сумма продаж без статуса оплаты, среднее без обработки пропусков или конверсия без размера группы могут выглядеть убедительно, но отвечают не на тот вопрос.

Поэтому в каждом разборе есть типичная ошибка. Иногда она даёт число, которое кажется правдоподобным. Проверка маленькой таблицей помогает увидеть, почему такое число нельзя нести в отчёт.

Маршрут по задачам

1. Прочитать CSV из текста и проверить типы

2. Отфильтровать оплаченные крупные заказы

3. Посчитать выручку и маржу по строкам

4. Собрать сводную таблицу по категориям и месяцам

5. Посчитать CTR и не сломаться на пропусках

6. Объединить заказы со справочником товаров

7. Сгруппировать продажи по неделям

8. Добавить скользящее среднее

9. Оставить последний статус клиента

10. Очистить текстовые названия товаров

11. Найти выбросы через межквартильный размах

12. Посчитать простую когортную таблицу

13. Сравнить две версии по конверсии

14. Найти номер покупки внутри клиента

15. Превратить широкую таблицу в длинную

16. Собрать компактный отчёт из заказов и справочника

Шестнадцать задач

Задача 1. Прочитать CSV из текста и проверить типы

Рабочий вопрос

Нужно убедиться, что таблица загрузилась полностью, даты стали датами, сумма не потерялась, а регионы видны как отдельные значения.

Запускаемый пример

import pandas as pd

from io import StringIO


DATA = """order_id,date,region,amount

A1,2026-09-01,west,1200

A2,2026-09-01,east,850

A3,2026-09-02,west,430

A4,2026-09-03,east,900

"""


df = pd.read_csv(StringIO(DATA), parse_dates=["date"])

result = {

"rows": int(len(df)),

"amount_sum": int(df["amount"].sum()),

"first_date": df["date"].min().strftime("%Y-%m-%d"),

"regions": sorted(df["region"].unique().tolist()),

}

print(repr(result))

Ожидаемый результат

{'rows': 4, 'amount_sum': 3380, 'first_date': '2026-09-01', 'regions': ['east', 'west']}

Почему это работает

StringIO делает строку похожей на файл, но не требует внешнего CSV. Это удобно для обучения и для воспроизводимого примера в книге.

parse_dates нужен сразу при чтении: иначе минимальная дата будет строкой, и дальнейшая работа с месяцами или днями недели станет хрупкой.

Проверка количества строк и суммы — простой сторожевой тест. Если позже фильтр или merge случайно выбросят строки, такая проверка быстро покажет проблему.

Типичная ошибка

Не считайте, что read_csv всегда сам угадает нужный тип. Числа он обычно распознаёт, но даты лучше указывать явно.

Самостоятельная проверка

Добавьте строку A5 за 2026-09-04 в регион north на 700 рублей. Какими должны стать rows, amount_sum и regions?

Вернуться к маршруту

Задача 2. Отфильтровать оплаченные крупные заказы

Рабочий вопрос

Нужно выбрать только оплаченные заказы от 1000 рублей и показать их в порядке убывания суммы.

Запускаемый пример

import pandas as pd

from io import StringIO


DATA = """order_id,status,amount

A1,paid,1200

A2,cancelled,2100

A3,paid,650

A4,paid,1000

A5,paid,3100

"""


df = pd.read_csv(StringIO(DATA))

chosen = df[(df["status"] == "paid") & (df["amount"] >= 1000)].copy()

chosen = chosen.sort_values(["amount", "order_id"], ascending=[False, True])

result = chosen["order_id"].tolist()

print(repr(result))

Ожидаемый результат

['A5', 'A1', 'A4']

Почему это работает

Условия объединены через &: первое отвечает за статус, второе — за нижнюю границу суммы. Скобки вокруг каждого сравнения обязательны.

copy отделяет выбранный фрагмент от исходной таблицы. В простом примере это не меняет результат, но избавляет от предупреждений и неоднозначности при дальнейших правках.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.

Вы ознакомились с фрагментом книги.

Для бесплатного чтения открыта только часть текста.

Приобретайте полный текст книги у нашего партнера:


Полная версия книги

Всего 10 форматов

bannerbanner