Модуль 2.3 Робота з даними

PANDAS ДЛЯ ТАБЛИЦЬ

Курс: Python для аналітиків з нуля

1. ЩО НАВЧИМОСЯ РОБИТИ

Аналізувати журнал перехоплень: топ-10 частот, активність по годинах, відфільтрувати сильні сигнали.

Pandas — це Excel на стероїдах. Все що ти робив формулами, тут робиться кодом. Але швидше, масштабніше, воспроизводимо.

2. ТЕРМІНОЛОГІЯ

DataFrame

Таблиця даних. Рядки та колонки з індексами. Основний об'єкт pandas.

Series

Одна колонка DataFrame. Вектор даних.

df['column']

Доступ до колонки. Повертає Series.

df[df['signal'] > -50]

Фільтрація рядків за умовою. Булева індексація.

groupby()

Групування. Аналог SUMIF, AVERAGEIF в Excel.

agg()

Агрегація: сума, середнє, мінімум, максимум, кількість.

3. ТЕОРІЯ

3.1 Створення DataFrame

import pandas as pd

3.2 Базові операції

# Інформація про таблицю

3.3 Фільтрація

Як WHERE у SQL або фільтр у Excel:

# Сильні сигнали (більше -50 dBm)
Важливо: кожну умову в дужки! (df['a'] > 5) & (df['b'] < 10)

3.4 Групування та агрегація

Аналог зведених таблиць Excel:

# Кількість перехоплень на кожній частоті

3.5 Сортування

# За однією колонкою

4. КОД З КОМЕНТАРЯМИ

Повний аналіз журналу перехоплень:

import pandas as pd

5. РОЗБІР ПО РЯДКАХ

df['freq'].value_counts() — порахувати скільки разів кожне значення зустрічається. Повертає Series, відсортований за кількістю.
.items() — ітерація по Series як по словнику: (ключ, значення)
df.groupby('freq')['signal'] — групувати по freq, взяти колонку signal
.mean() — середнє арифметичне. Можна .sum(), .min(), .max(), .count()

.reset_index() — перетворити індекс у звичайну колонку. Потрібно для збереження у файл.

6. ЗАВДАННЯ 1: ЗНАЙТИ ПОМИЛКУ

Код має фільтрувати частоту 145.5 та сигнал сильніше -50:

filtered = df[df['freq'] == 145.5 & df['signal'] > -50]

Відповідь:

Помилка: немає дужок навколо умов. Python спочатку виконає 145.5 & df['signal'], що помилка.

Виправлено:

filtered = df[(df['freq'] == 145.5) & (df['signal'] > -50)]

7. ЗАВДАННЯ 2: ПРОМПТ ДЛЯ AI

Задача: знайти аномальну активність (відхилення >3σ)

Є CSV з колонками: timestamp, freq, signal. Потрібно знайти години де кількість перехоплень аномально велика (статистичний викид).

Приклад промпту:

Завантаж CSV з pandas. Додай колонку hour (витяг з timestamp). Групуй по hour, порахуй кількість. Обчисли середнє та стандартне відхилення. Знайди години де count > mean + 3*std. Виведи ці години та їх кількість. Використай df['timestamp'].dt.hour для витягу години.

8. ЗАВДАННЯ 3 (ОПЦІОНАЛЬНО)

Побудувати таблицю: частота × година дня (heatmap даних)

Рядки — частоти, колонки — години (0-23), значення — кількість перехоплень.

Підказка:

# Створити колонку hour
.unstack() — перетворити індекс у колонки (з довгого формату у широкий)

9. ЗАВДАННЯ 4: ВИПРАВИТИ РЕАЛЬНИЙ КОД

Код працює, але повільно та незручно:

import pandas as pd

Що не так:

  • Ручний цикл замість pandas методів
  • iloc у циклі — дуже повільно
  • Ручне сортування словника

Виправлено (pandas way):

import pandas as pd

Швидше у 100+ разів, код у 1 рядок замість 10.

10. РЕФЛЕКСІЯ

Я розумію DataFrame та Series

Я вмію фільтрувати рядки за умовою

Я знаю groupby() та агрегації

Я вмію сортувати та брати топ-N

Я можу зберегти результати у Excel

Я пишу код "pandas way" а не циклами

11. ЩО ДАЛІ

Модуль 2.4: Requests та API — завантажити дані з інтернету

Головна думка: Pandas = Excel + програмування. Все що Excel робить кліками, pandas робить кодом. Але швидше, масштабніше, повторюваніше.

Рефлексія

Прогрес модуля 0%