Python · Data Analytics
    Документація · 2026.01

    Python для
    аналізу даних

    Технічний довідник по п'яти ключових бібліотеках. 627 функцій з прикладами; 199 з них — з розширеним описом, типовими помилками і пов'язаними функціями.

    Як користуватися

    Кожна бібліотека має окрему сторінку. У сайдбарі — навігація і зміст поточної сторінки. Пошуковий рядок зверху працює глобально — знаходить функції по всіх п'яти бібліотеках одразу і показує результати у випадаючому меню. Натисніть щоб перейти до пошуку, Esc щоб закрити.

    Топ-функції позначені тегом extended. Розгорніть їх кнопкою Дізнатися більше — там розгорнуті секції: коли використовувати, ключові параметри, поширені помилки і пов'язані функції.

    Тема перемикається круглою кнопкою у правому нижньому куті екрану. Вибір зберігається між сесіями.

    Послідовність вивчення

    Якщо ви робите перші кроки в аналізі даних — ось рекомендований порядок:

    NumPy Pandas Matplotlib Seaborn Plotly

    NumPy — базис числових масивів; Pandas — робочий інструмент аналітика для табличних даних; Matplotlib — фундамент візуалізації; Seaborn — статистичні графіки поверх Matplotlib; Plotly — інтерактивні дашборди.

    Передумови

    Документація припускає базове знайомство з Python (змінні, цикли, функції, словники й списки). Не потрібен попередній досвід зі статистикою чи машинним навчанням — функції описано так, щоб ви могли орієнтуватися від простого до складного в межах кожної бібліотеки.

    Імпорти за замовчуванням

    У всіх прикладах припускаються такі імпорти, якщо явно не вказано інше:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    import plotly.express as px
    import plotly.graph_objects as go
    Бібліотека · 16 розділів · 166 функцій · 54 розширених

    Pandas

    Pandas — головний інструмент аналітика для роботи з табличними даними. Дві основні структури — Series (одновимірний масив із індексом) і DataFrame (двовимірна таблиця) — покривають практично всі повсякденні завдання: завантаження, очищення, перетворення, агрегацію та експорт даних.

    Структури даних і їх створення 8

    pd.Series()#

    extended

    Створює одновимірний масив із пов'язаним індексом. Базовий блок Pandas; кожен стовпець DataFrame — це Series.

    s = pd.Series([10, 20, 30], index=['a', 'b', 'c'], name='sales')

    Коли використовувати

    Потрібна одновимірна іменована послідовність — стовпець майбутнього DataFrame, окремий часовий ряд або результат обчислень. Усі стовпці DataFrame — це Series.

    Ключові параметри

    data
    Список, NumPy-масив, словник чи скаляр. Словник дає Series, де ключі стають індексом.
    index
    Мітки. Має бути тієї ж довжини, що data.
    name
    Ім'я Series — стане назвою стовпця при перетворенні в DataFrame.

    Поширені помилки та нюанси

    Series завжди має один тип даних — змішування чисел і рядків приведе до object dtype, що сповільнить роботу. Перевіряйте через .dtype.

    Зв'язані функції

    pd.DataFrame()#

    extended

    Створює двовимірну таблицю зі стовпцями різних типів. Найважливіша структура для аналізу даних.

    df = pd.DataFrame({'name': ['Anna', 'Ivan'], 'age': [25, 30]})

    Коли використовувати

    Створюєте таблицю з нуля — зі словника, списків, NumPy-масиву чи інших структур. Це базовий конструктор: усі завантажувачі (read_csv, read_sql тощо) під капотом будують саме DataFrame.

    Ключові параметри

    data
    Словник {стовпець: значення}, список словників, 2D-масив, інший DataFrame чи Series.
    columns
    Список імен стовпців. Потрібен лише коли data — це 2D-масив або список без імен.
    index
    Мітки рядків. Якщо не задано — RangeIndex 0, 1, 2...

    Поширені помилки та нюанси

    Словник зі скалярами (без списків) дасть помилку: 'If using all scalar values, you must pass an index'. Передавайте index= або обгортайте у список. При побудові з list[dict] стовпці впорядковуються за порядком появи ключів.

    Розширений приклад

    # З словника списків
    df = pd.DataFrame({
        'name': ['Anna', 'Ivan', 'Olena'],
        'age': [25, 30, 28],
        'city': ['Kyiv', 'Lviv', 'Odesa']
    })
    
    # Зі списку словників (типовий результат API)
    records = [{'id': 1, 'amount': 100}, {'id': 2, 'amount': 250}]
    df = pd.DataFrame(records)
    
    # З NumPy-масиву з явними стовпцями
    import numpy as np
    arr = np.random.rand(5, 3)
    df = pd.DataFrame(arr, columns=['x', 'y', 'z'])

    pd.DataFrame.from_dict()#

    Створює DataFrame зі словника, де ключі стають стовпцями (orient='columns') або рядками ('index').

    df = pd.DataFrame.from_dict({'a': [1, 2], 'b': [3, 4]}, orient='index')

    pd.DataFrame.from_records()#

    Будує DataFrame зі списку кортежів або структурованого масиву NumPy.

    df = pd.DataFrame.from_records([(1, 'a'), (2, 'b')], columns=['id', 'tag'])

    pd.Index()#

    Створює об'єкт-індекс — незмінну позначкову послідовність для рядків чи стовпців.

    idx = pd.Index(['x', 'y', 'z'], name='label')

    pd.RangeIndex()#

    Спеціалізований цілочисельний індекс типу range — пам'ятєефективна заміна стандартному діапазону.

    idx = pd.RangeIndex(start=0, stop=100, step=5)

    pd.MultiIndex.from_tuples()#

    Створює багаторівневий ієрархічний індекс із послідовності кортежів. Зручно для груп.

    mi = pd.MultiIndex.from_tuples([('UA', 2023), ('UA', 2024)], names=['country', 'year'])

    pd.MultiIndex.from_product()#

    Будує MultiIndex як декартовий добуток кількох ітерованих об'єктів.

    mi = pd.MultiIndex.from_product([['A', 'B'], [1, 2]], names=['letter', 'num'])

    Читання даних 10

    pd.read_csv()#

    extended

    Зчитує CSV-файл у DataFrame. Підтримує роздільники, кодування, типи стовпців, парсинг дат, пропуск рядків.

    df = pd.read_csv('data.csv', sep=';', encoding='utf-8', parse_dates=['date'])

    Коли використовувати

    Найчастіша операція аналітика — завантажити файл CSV/TSV у DataFrame. Підтримує URL, gzip, S3 та десятки опцій парсингу.

    Ключові параметри

    filepath
    Шлях, URL або file-like об'єкт. Розширення .gz/.zip/.bz2 розпаковуються автоматично.
    sep
    Роздільник. ',' (default), ';' для європейських CSV, '\t' для TSV, або regex.
    encoding
    'utf-8' (default), 'utf-8-sig' для файлів з BOM, 'cp1251' для старих українських.
    parse_dates
    Список стовпців-дат. Краще одразу парсити при читанні, ніж потім pd.to_datetime.
    dtype
    Словник {стовпець: тип} — економить пам'ять і пришвидшує читання.
    usecols
    Зчитати лише підмножину стовпців — корисно для великих файлів.
    nrows
    Прочитати лише перші N рядків — для швидкого ознайомлення.

    Поширені помилки та нюанси

    За замовчуванням стовпці з ID, що починаються з нулів (000123), читаються як числа і нулі втрачаються. Передайте dtype={'id': str}. Великі файли (>1ГБ) читайте через chunksize або одразу в Parquet.

    Зв'язані функції

    Розширений приклад

    # Базове читання
    df = pd.read_csv('sales.csv')
    
    # Європейський CSV з BOM, датами і потрібними стовпцями
    df = pd.read_csv(
        'report.csv',
        sep=';',
        encoding='utf-8-sig',
        parse_dates=['order_date', 'ship_date'],
        dtype={'customer_id': str, 'amount': 'float32'},
        usecols=['order_date', 'customer_id', 'amount']
    )
    
    # Великий файл — читати порціями
    chunks = []
    for chunk in pd.read_csv('huge.csv', chunksize=100_000):
        filtered = chunk[chunk['active'] == 1]
        chunks.append(filtered)
    df = pd.concat(chunks, ignore_index=True)

    pd.read_excel()#

    extended

    Завантажує лист Excel у DataFrame. Можна вказати конкретний sheet_name або '*' для всіх листів.

    df = pd.read_excel('report.xlsx', sheet_name='Q1', header=0)

    Коли використовувати

    Excel-файли (.xlsx, .xls) — стандартний формат для звітів від бухгалтерії й маркетингу. Може читати кілька листів одразу.

    Ключові параметри

    io
    Шлях або URL.
    sheet_name
    Ім'я листа, число (0 = перший), список листів, або None — повертає словник {ім'я: DataFrame}.
    header
    Номер рядка з заголовками. Якщо лист має шапку з 2-3 рядків — передайте список [0, 1]).
    skiprows
    Скільки рядків пропустити зверху. Корисно для файлів з зайвими рядками-заголовками.
    engine
    'openpyxl' для .xlsx, 'xlrd' для старих .xls, 'pyxlsb' для бінарних .xlsb.

    Поширені помилки та нюанси

    Excel автоматично перетворює числа на дати ('2024-01-15' → date), хоча у вихідній клітинці був текст. Контролюйте через dtype=. Великі Excel-файли (>50МБ) набагато повільніші за CSV — конвертуйте їх у Parquet.

    Зв'язані функції

    pd.read_json()#

    extended

    Парсить JSON-файл або JSON-рядок у DataFrame. Параметр orient контролює очікувану структуру.

    df = pd.read_json('records.json', orient='records', lines=True)

    Коли використовувати

    JSON-відповіді API, лог-файли в JSONL форматі, експорти MongoDB. Дуже гнучкий формат — параметр orient має знати, яка саме структура у вас.

    Ключові параметри

    path_or_buf
    Шлях, URL або JSON-рядок.
    orient
    'records' (список словників), 'columns' (default), 'index', 'values', 'split', 'table'.
    lines
    True для JSONL — кожний рядок окремий JSON-об'єкт.

    Поширені помилки та нюанси

    Якщо JSON має вкладені об'єкти, read_json не розгорне їх — використайте pd.json_normalize() для flat-структури.

    Зв'язані функції

    pd.read_sql()#

    extended

    Виконує SQL-запит і повертає результат як DataFrame. Працює з SQLAlchemy-з'єднанням.

    df = pd.read_sql('SELECT * FROM users WHERE active=1', con=engine)

    Коли використовувати

    Виконати SQL-запит проти бази даних і отримати результат як DataFrame. Найшвидший спосіб перенести дані з Postgres/MySQL/SQLite в Python.

    Ключові параметри

    sql
    SQL-запит або ім'я таблиці (тоді читається повністю).
    con
    SQLAlchemy engine або Connection. SQLAlchemy потрібен для більшості драйверів.
    params
    Параметри для prepared statements — захист від SQL-ін'єкцій.
    chunksize
    Розмір порції для великих результатів — повертає ітератор DataFrame.

    Поширені помилки та нюанси

    Не використовуйте f-string для підстановки значень — це SQL-ін'єкція. Передавайте через params=. Для великих таблиць завжди задавайте chunksize, інакше скрипт зависне.

    Розширений приклад

    from sqlalchemy import create_engine
    
    engine = create_engine('postgresql://user:pass@host:5432/dbname')
    
    # Простий запит
    df = pd.read_sql('SELECT * FROM users WHERE active=1', con=engine)
    
    # Параметризований (безпечно)
    df = pd.read_sql(
        'SELECT * FROM orders WHERE created_at > %(date)s',
        con=engine,
        params={'date': '2024-01-01'},
        parse_dates=['created_at']
    )
    
    # Великий результат — порціями
    for chunk in pd.read_sql('SELECT * FROM events', con=engine, chunksize=50_000):
        process(chunk)

    pd.read_html()#

    Витягує всі HTML-таблиці зі сторінки чи рядка у список DataFrame. Зручно для скрапінгу.

    tables = pd.read_html('https://en.wikipedia.org/wiki/List_of_countries')

    pd.read_parquet()#

    extended

    Читає колонковий формат Parquet — швидко й компактно зберігає типи даних.

    df = pd.read_parquet('events.parquet', columns=['user_id', 'amount'])

    Коли використовувати

    Parquet — стандартний колонковий формат для аналітики. Зберігає типи даних, стискає в 5-10 разів краще за CSV, читає в 10+ разів швидше.

    Ключові параметри

    path
    Шлях до файлу або теки з partitions.
    columns
    Прочитати лише підмножину стовпців — головна перевага Parquet.
    engine
    'pyarrow' (default, рекомендований) або 'fastparquet'.

    Поширені помилки та нюанси

    Потрібно встановити pyarrow окремо. Старі pandas (<1.5) можуть не зберігати nullable-типи коректно — оновлюйтесь до pandas 2.x.

    Зв'язані функції

    pd.read_pickle()#

    Завантажує DataFrame, серіалізований через pickle. Зберігає всі типи Pandas як є.

    df = pd.read_pickle('snapshot.pkl')

    pd.read_clipboard()#

    Читає вміст буфера обміну (наприклад, скопійовану таблицю з Excel) у DataFrame.

    df = pd.read_clipboard()

    pd.read_feather()#

    Зчитує файл у форматі Feather — швидкий бінарний обмін між Python та R.

    df = pd.read_feather('cache.feather')

    pd.read_xml()#

    Парсить XML-документ у DataFrame, витягуючи елементи певного xpath.

    df = pd.read_xml('feed.xml', xpath='.//item')

    Запис даних 8

    df.to_csv()#

    extended

    Зберігає DataFrame у CSV. index=False опускає індекс, що зазвичай бажано для експорту.

    df.to_csv('out.csv', index=False, encoding='utf-8-sig')

    Коли використовувати

    Експорт DataFrame у CSV для відправки колегам, збереження проміжних результатів, передачі в інші системи.

    Ключові параметри

    path_or_buf
    Шлях. Якщо None — повертає рядок.
    index
    False — не записувати індекс. Зазвичай так, бо отриманий файл потім читається з RangeIndex.
    encoding
    'utf-8-sig' для відкриття в Excel (з BOM).
    sep
    ',' за замовчуванням; ';' для українського/європейського Excel.
    compression
    'gzip', 'bz2', 'zip' — стискання на льоту.

    Поширені помилки та нюанси

    Без encoding='utf-8-sig' Excel неправильно покаже кирилицю. NaN-значення записуються як порожні клітинки — задайте na_rep='NULL' якщо це проблема.

    Зв'язані функції

    df.to_excel()#

    extended

    Записує DataFrame у файл Excel. Можна задати sheet_name та форматування через ExcelWriter.

    df.to_excel('report.xlsx', sheet_name='Sales', index=False)

    Коли використовувати

    Звіти для бізнес-користувачів, які не відкривають CSV. Можна формувати кілька листів через ExcelWriter, додавати форматування.

    Ключові параметри

    excel_writer
    Шлях або ExcelWriter для запису кількох листів.
    sheet_name
    Ім'я листа.
    index
    False — не записувати індекс.
    startrow / startcol
    Зміщення — корисно для запису поверх існуючого шаблону.

    Поширені помилки та нюанси

    Excel має ліміт 1,048,576 рядків. Великі датасети розбивайте на листи або експортуйте в Parquet/CSV. Запис із форматуванням (умовне форматування, формули) — через openpyxl напряму.

    Зв'язані функції

    Розширений приклад

    # Один лист
    df.to_excel('out.xlsx', sheet_name='Sales', index=False)
    
    # Кілька листів в одному файлі
    with pd.ExcelWriter('report.xlsx', engine='openpyxl') as writer:
        df_q1.to_excel(writer, sheet_name='Q1', index=False)
        df_q2.to_excel(writer, sheet_name='Q2', index=False)
        df_summary.to_excel(writer, sheet_name='Підсумок', index=False)

    df.to_json()#

    Серіалізує DataFrame у JSON. Параметр orient визначає структуру виводу.

    df.to_json('out.json', orient='records', force_ascii=False)

    df.to_sql()#

    Записує DataFrame у таблицю БД. if_exists керує поведінкою при існуванні таблиці.

    df.to_sql('sales', con=engine, if_exists='replace', index=False)

    df.to_parquet()#

    extended

    Зберігає DataFrame у Parquet — стиснений колонковий формат, ідеальний для аналітики.

    df.to_parquet('data.parquet', compression='snappy')

    Коли використовувати

    Зберігаєте проміжні результати конвеєра обробки, кешуєте дороге обчислення, готуєте дані для інших аналітиків чи систем (Spark, Dask).

    Ключові параметри

    path
    Шлях до файлу.
    compression
    'snappy' (default, швидкий), 'gzip' (менший розмір), 'zstd' (компроміс).
    index
    True зберігає індекс — корисно для часових рядів.

    Поширені помилки та нюанси

    Категоріальні типи зберігаються коректно тільки у pyarrow engine. Object-стовпці (рядки) Parquet зберігає як string — без проблем.

    Зв'язані функції

    df.to_dict()#

    Перетворює DataFrame на словник. orient='records' дає список словників — типова форма для API.

    records = df.to_dict(orient='records')

    df.to_pickle()#

    Серіалізує DataFrame через pickle, зберігаючи всі pandas-типи (категорії, dtype тощо).

    df.to_pickle('snapshot.pkl')

    df.to_clipboard()#

    Копіює DataFrame у буфер обміну — зручно для швидкого перенесення в Excel.

    df.to_clipboard(index=False)

    Огляд та інспекція 10

    df.head()#

    extended

    Повертає перші n рядків (за замовчуванням 5). Використовується для швидкого огляду структури.

    df.head(10)

    Коли використовувати

    Перший погляд на дані після завантаження. Перевірити, що стовпці правильно розпарсились, типи відповідні, кодування не зламалось.

    Ключові параметри

    n
    Скільки рядків показати. Default 5; задавайте більше для перевірки структури з різноманітними значеннями.

    Поширені помилки та нюанси

    Не плутайте з .sample() — head завжди дає перші рядки, які можуть бути нерепрезентативними (відсортовані по даті чи ID).

    Зв'язані функції

    df.tail()#

    Повертає останні n рядків. Корисно для перевірки часових рядів і свіжих записів.

    df.tail(3)

    df.info()#

    extended

    Друкує зведену інформацію: типи стовпців, кількість непустих значень, обсяг пам'яті.

    df.info(memory_usage='deep')

    Коли використовувати

    Швидка діагностика: скільки рядків, які типи, де є пропуски, скільки пам'яті займає. Це другий крок після head() при роботі з новими даними.

    Ключові параметри

    verbose
    True — повний список стовпців; False — резюме.
    memory_usage
    'deep' враховує реальний розмір рядків у object-стовпцях.

    Поширені помилки та нюанси

    Без memory_usage='deep' object-стовпці показують лише розмір вказівників (8 байт), що в 10+ разів недооцінює реальне споживання пам'яті.

    Зв'язані функції

    df.describe()#

    extended

    Видає базову статистику числових стовпців: count, mean, std, min, квартилі, max.

    df.describe(include='all')

    Коли використовувати

    Перший погляд на розподіли числових стовпців: середнє, медіана, квартилі, екстремуми. Швидко виявляє підозрілі викиди й помилки введення.

    Ключові параметри

    include
    'all' — описати всі типи (для object теж: count, unique, top, freq); список типів.
    percentiles
    Список квантилів. Default [.25, .5, .75]; додайте 0.01 і 0.99 для виявлення викидів.

    Поширені помилки та нюанси

    За замовчуванням ігнорує object-стовпці. Якщо потрібна статистика й по них — include='all' або include=['object'].

    Зв'язані функції

    df.shape#

    extended

    Кортеж (рядків, стовпців). Найшвидший спосіб дізнатися розмірність таблиці.

    n_rows, n_cols = df.shape

    Коли використовувати

    Скільки рядків і стовпців. Найшвидший спосіб після фільтрації перевірити, скільки записів залишилось.

    Ключові параметри

    (немає)
    Це атрибут, не метод. Повертає кортеж (n_rows, n_cols).

    Поширені помилки та нюанси

    Не плутайте з len(df) — len дає тільки кількість рядків.

    Зв'язані функції

    df.dtypes#

    extended

    Повертає Series із типом кожного стовпця. Перший крок діагностики при незрозумілих помилках.

    print(df.dtypes)

    Коли використовувати

    Перша річ при діагностиці незрозумілих помилок. Часто 'TypeError: cannot compare' виникає, бо стовпець-дата читається як object/string.

    Ключові параметри

    (атрибут)
    Без параметрів. Повертає Series із типом кожного стовпця.

    Поширені помилки та нюанси

    Тип 'object' зазвичай означає string, але також може містити змішаний контент — словники, списки, None. Уникайте — краще приведіть до конкретного типу через astype().

    Зв'язані функції

    df.columns#

    Об'єкт Index із назвами стовпців. Можна перепризначити для масового перейменування.

    df.columns = [c.lower().strip() for c in df.columns]

    df.index#

    Index рядків. Можна замінити, перевпорядкувати або зробити багаторівневим.

    df.index = pd.to_datetime(df.index)

    df.memory_usage()#

    Кількість байтів, що займає кожен стовпець. deep=True враховує об'єкти Python.

    df.memory_usage(deep=True).sum() / 1e6  # МБ

    df.sample()#

    Повертає випадкову вибірку рядків. Незамінно для попереднього огляду великих наборів.

    df.sample(n=100, random_state=42)

    Вибірка та індексація 12

    df.loc[]#

    extended

    Доступ за мітками: рядки за значенням індексу, стовпці за іменем. Підтримує булеві маски.

    df.loc[df['age'] > 18, ['name', 'email']]

    Коли використовувати

    Вибір за мітками — назвами стовпців і значеннями індексу. Підтримує бульові маски — основний спосіб фільтрації.

    Ключові параметри

    rows
    Мітка індексу, зріз міток (включно з обома кінцями!), список міток, бульова маска.
    cols
    Ім'я стовпця, список імен, зріз. Опційно через кому: df.loc[rows, cols].

    Поширені помилки та нюанси

    Зрізи у .loc включають обидва кінці (df.loc[2:5] поверне рядки з індексами 2, 3, 4 і 5), на відміну від .iloc та звичайних Python зрізів.

    Зв'язані функції

    Розширений приклад

    # Один рядок за міткою
    df.loc[5]
    
    # Зріз — включно!
    df.loc[2:5]  # рядки 2, 3, 4 і 5
    
    # Рядки + стовпці
    df.loc[df['age'] > 18, ['name', 'email']]
    
    # Зміна значень
    df.loc[df['country'] == 'UA', 'tax'] = 0.2
    
    # Складна умова
    mask = (df['amount'] > 1000) & (df['status'] == 'paid')
    df.loc[mask, 'category'] = 'VIP'
    
    # Нові рядки за міткою
    df.loc['summary'] = df.sum()

    df.iloc[]#

    extended

    Доступ за цілочисельною позицією — як у NumPy. Зручно, коли індекси нечислові.

    df.iloc[0:5, 1:3]  # перші 5 рядків, стовпці 2-3

    Коли використовувати

    Вибір за цілочисельною позицією, як у NumPy. Корисно, коли мітки індексу нечислові або їх немає.

    Ключові параметри

    rows
    Ціле число, зріз (без останнього!), список цілих, бульова маска.
    cols
    Ціле число, зріз, список.

    Поширені помилки та нюанси

    Зрізи .iloc[2:5] виключають останній — повертають 2, 3, 4 (як у Python). Це різниця з .loc.

    Зв'язані функції

    df.at[]#

    Швидкий доступ до окремої клітинки за міткою. Швидше, ніж .loc для одного значення.

    value = df.at[10, 'price']

    df.iat[]#

    Швидкий доступ до клітинки за цілочисельною позицією. Аналог .at для iloc.

    df.iat[0, 2] = 999

    df.query()#

    extended

    Фільтрує рядки рядковим виразом — компактніше за бульові маски, особливо при багатьох умовах.

    df.query('age > 18 and country == "UA"')

    Коли використовувати

    Складні умови фільтрації, де ланцюжок (df['a'] > 1) & (df['b'] < 5) стає важко читати. query() — як SQL WHERE.

    Ключові параметри

    expr
    Рядок з виразом. Підтримує and/or/not, in/not in, ==, !=, <, >, ., ().
    @variable
    Префікс @ для звертання до змінних Python: df.query('age > @threshold').

    Поширені помилки та нюанси

    Імена стовпців з пробілами або спецсимволами потребують backticks: df.query('`spent amount` > 100'). Не працює з мультиіндексом без додаткових налаштувань.

    Зв'язані функції

    Розширений приклад

    threshold = 1000
    
    # Прості умови
    df.query('age > 18')
    df.query('country == "UA" and age >= 18')
    
    # Зі змінними Python
    df.query('amount > @threshold')
    
    # IN
    df.query('country in ["UA", "PL", "CZ"]')
    
    # Імена з пробілами
    df.query('`order date` > "2024-01-01"')

    df.filter()#

    Відбирає стовпці чи рядки за іменами, регулярним виразом або підрядком.

    df.filter(regex='^price_')  # стовпці, що починаються з 'price_'

    df.where()#

    Зберігає значення там, де умова True; інакше підставляє NaN або задане значення.

    df.where(df > 0, other=0)  # від'ємні значення замінити на 0

    df.mask()#

    Інверсія where: підставляє значення там, де умова True. Зручно для маскування викидів.

    df['age'].mask(df['age'] > 100, other=None)

    df.isin()#

    extended

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

    df[df['country'].isin(['UA', 'PL', 'CZ'])]

    Коли використовувати

    Фільтрація за списком значень — типу SQL WHERE x IN (a, b, c). Найчистіший синтаксис для перевірки приналежності.

    Ключові параметри

    values
    Список, масив, Series, словник {стовпець: список}.

    Поширені помилки та нюанси

    При передачі словника {стовпець: список} перевіряє кожен стовпець окремо — повертає DataFrame, не Series. Для глобальної перевірки фільтруйте по конкретному стовпцю: df[df['code'].isin(['A', 'B'])].

    Зв'язані функції

    df.get()#

    Отримує стовпець за іменем; якщо немає — повертає значення за замовчуванням замість помилки.

    df.get('email', default=pd.Series(['n/a'] * len(df)))

    df.take()#

    Повертає рядки за заданими цілочисельними індексами — корисно для перестановок.

    df.take([0, 2, 5])

    df.between()#

    Метод Series: булева маска для значень, що в заданому діапазоні (включно).

    mask = df['age'].between(18, 65)

    Очищення даних 13

    df.dropna()#

    extended

    Видаляє рядки чи стовпці з пропусками. Параметр thresh задає мінімальну кількість непустих.

    df = df.dropna(subset=['email'], how='any')

    Коли використовувати

    Видалення рядків з пропущеними значеннями. Зазвичай перед моделюванням, де NaN ламає алгоритми.

    Ключові параметри

    subset
    Список стовпців — пропуски тільки в них рахуються.
    how
    'any' (default, видалити якщо хоч один NaN) чи 'all' (видалити лише повністю порожні рядки).
    thresh
    Мінімальна кількість непорожніх значень у рядку.
    axis
    0 — рядки (default), 1 — стовпці.

    Поширені помилки та нюанси

    Видалення рядків з NaN може суттєво зменшити вибірку. Спочатку оцініть масштаб через df.isnull().sum() — можливо, краще fillna() або не використовувати ці стовпці.

    Зв'язані функції

    df.fillna()#

    extended

    Заповнює пропуски — константою, методом 'ffill'/'bfill' або значеннями зі словника.

    df['age'] = df['age'].fillna(df['age'].median())

    Коли використовувати

    Заповнення пропусків — числами (медіана, нуль), сусідніми значеннями (ffill/bfill), або значеннями з іншого стовпця.

    Ключові параметри

    value
    Скаляр, словник {стовпець: значення}, Series, DataFrame.
    method
    'ffill' (forward fill), 'bfill' (backward) — застаріле, краще .ffill()/.bfill().
    limit
    Максимум послідовних пропусків для заповнення.

    Поширені помилки та нюанси

    Заповнення середнім/нулем може спотворити статистику й моделі. Для часових рядів зазвичай краще interpolate() або ffill. Для категоріальних — окрема категорія 'unknown'.

    Зв'язані функції

    Розширений приклад

    # Скаляр
    df['age'].fillna(0)
    
    # Медіана для числового стовпця
    df['salary'].fillna(df['salary'].median())
    
    # Різні значення для різних стовпців
    df.fillna({'age': df['age'].median(), 'city': 'Unknown', 'tax': 0})
    
    # Forward-fill для часового ряду
    df['price'] = df['price'].ffill()
    
    # Заповнення з іншого стовпця
    df['email'] = df['email'].fillna(df['backup_email'])

    df.drop_duplicates()#

    extended

    Видаляє рядки-дублікати. subset обмежує перевірку певними стовпцями.

    df = df.drop_duplicates(subset=['email'], keep='first')

    Коли використовувати

    Видалення дублікатів — після конкатенації джерел, при чищенні листів реєстрації, де користувачі надсилали форму двічі.

    Ключові параметри

    subset
    Стовпці для перевірки. Без нього — усі стовпці мають збігатися.
    keep
    'first' (default), 'last', або False (видалити всі дублікати, не лишаючи жодного).

    Поширені помилки та нюанси

    Дублікати визначаються точним збігом — 'Anna' і 'anna ' (з пробілом) залишаться обидва. Спочатку нормалізуйте через str.strip().str.lower().

    Зв'язані функції

    df.replace()#

    extended

    Замінює значення — окремі, списки, словники чи за регулярним виразом.

    df['status'].replace({'A': 'active', 'I': 'inactive'}, inplace=True)

    Коли використовувати

    Заміна окремих значень або патернів. Кодування статусів, виправлення помилок введення, нормалізація варіацій.

    Ключові параметри

    to_replace
    Скаляр, список, regex-патерн, словник {старе: нове} або {стовпець: {старе: нове}}.
    value
    На що заміняти (якщо to_replace не словник).
    regex
    True для regex-заміни.

    Поширені помилки та нюанси

    За замовчуванням замінює тільки точні збіги. Для часткових замін у рядках використайте regex=True або str.replace().

    Зв'язані функції

    df.drop()#

    extended

    Видаляє стовпці або рядки за мітками. axis=1 для стовпців, axis=0 для рядків.

    df = df.drop(columns=['temp_id', 'raw_value'])

    Коли використовувати

    Видалення стовпців або рядків за іменами. Найбезпечніший спосіб видалити стовпці (на відміну від del df['col']).

    Ключові параметри

    columns
    Ім'я або список імен стовпців. Сучасний синтаксис.
    index
    Мітки індексу для видалення рядків.
    axis
    Старіший синтаксис: 0 для рядків, 1 для стовпців.
    inplace
    True — змінює DataFrame на місці. Уникайте — краще присвоюйте результат.

    Поширені помилки та нюанси

    Помилка 'KeyError: not found in axis' якщо стовпця немає. Додайте errors='ignore' щоб пропустити відсутні.

    Зв'язані функції

    df.isnull()#

    extended

    Повертає булеву таблицю: True там, де NaN/None. Часто комбінується із .sum() для підрахунку.

    df.isnull().sum().sort_values(ascending=False)

    Коли використовувати

    Знайти пропуски. Зазвичай комбінується з .sum() для підрахунку: 'Скільки NaN у кожному стовпці?'

    Ключові параметри

    (немає)
    Без параметрів. Повертає булеву таблицю того ж розміру.

    Поширені помилки та нюанси

    Не плутайте з порожніми рядками '' — isnull їх не помітить. Спочатку df.replace('', np.nan).

    Зв'язані функції

    Розширений приклад

    # Скільки пропусків у кожному стовпці
    df.isnull().sum()
    
    # Відсоток пропусків
    (df.isnull().sum() / len(df) * 100).round(1)
    
    # Рядки з хоча б одним NaN
    df[df.isnull().any(axis=1)]
    
    # Стовпці, де всі значення пропущені
    df.columns[df.isnull().all()].tolist()
    
    # Хіт-мап пропусків (з seaborn)
    import seaborn as sns
    sns.heatmap(df.isnull(), cbar=False)

    df.notnull()#

    Інверсія isnull — True для непустих значень.

    valid = df[df['email'].notnull()]

    df.isna()#

    Псевдонім isnull(). Зазвичай використовують .isna() для узгодженості з .notna().

    df.isna().any(axis=1)  # рядки з хоча б одним NaN

    df.duplicated()#

    Булева маска: True для дублікатів (з другого входження). keep='last' — навпаки.

    df[df.duplicated(subset=['user_id'])]

    df.ffill()#

    Forward-fill: заповнює пропуски попереднім непустим значенням. Для часових рядів.

    df['price'] = df['price'].ffill()

    df.bfill()#

    Backward-fill: заповнює пропуски наступним непустим значенням.

    df = df.bfill(limit=2)  # не далі ніж 2 рядки назад

    df.interpolate()#

    Інтерполяція пропусків — лінійна, поліноміальна, за часом тощо.

    df['temp'] = df['temp'].interpolate(method='linear')

    df.clip()#

    Обмежує значення зверху і знизу — корисно для приборкання викидів.

    df['salary'] = df['salary'].clip(lower=0, upper=1e6)

    Перетворення 12

    df.apply()#

    extended

    Застосовує функцію до кожного стовпця (axis=0) або рядка (axis=1). Гнучко, але повільніше за векторні операції.

    df['full'] = df.apply(lambda r: f"{r['first']} {r['last']}", axis=1)

    Коли використовувати

    Кастомна логіка по стовпцях/рядках, коли немає векторного методу. Часто для row-wise обчислень — комбінувати кілька стовпців.

    Ключові параметри

    func
    Функція або lambda.
    axis
    0 — функція приймає стовпець (Series); 1 — рядок.
    result_type
    'expand' розкладає список-результат на окремі стовпці.

    Поширені помилки та нюанси

    Повільніший за векторні операції в 10-100 разів. Завжди шукайте векторну альтернативу: df['a'] + df['b'] замість df.apply(lambda r: r['a'] + r['b'], axis=1).

    Зв'язані функції

    Розширений приклад

    # Об'єднання стовпців у новий
    df['full_name'] = df.apply(lambda r: f"{r['first']} {r['last']}", axis=1)
    # Краще векторно (швидше):
    df['full_name'] = df['first'] + ' ' + df['last']
    
    # Складна логіка по рядках
    def categorize(row):
        if row['amount'] > 1000 and row['country'] == 'UA':
            return 'VIP'
        return 'standard'
    df['category'] = df.apply(categorize, axis=1)
    
    # Розкладання list-результату
    df[['min', 'max']] = df.apply(
        lambda r: [r[['a','b','c']].min(), r[['a','b','c']].max()],
        axis=1, result_type='expand'
    )

    Series.map()#

    extended

    Заміна елементів Series через функцію, словник чи іншу Series. Найпростіший спосіб мепінгу категорій.

    df['country'] = df['code'].map({'UA': 'Ukraine', 'PL': 'Poland'})

    Коли використовувати

    Заміна елементів через словник або функцію. Найшвидший спосіб закодувати категорії.

    Ключові параметри

    arg
    Словник {старе: нове}, функція або інша Series.
    na_action
    'ignore' — не передавати NaN у функцію.

    Поширені помилки та нюанси

    Якщо ключа немає у словнику — стає NaN. Щоб залишити старе значення: df['x'].map(d).fillna(df['x']).

    Зв'язані функції

    df.map()#

    У сучасному Pandas — поелементне застосування функції до DataFrame (раніше .applymap).

    df.map(lambda x: round(x, 2) if isinstance(x, float) else x)

    df.transform()#

    Повертає об'єкт тієї ж форми, що вхід. Часто з groupby для нормалізації в межах груп.

    df['z'] = df.groupby('cat')['val'].transform(lambda x: (x - x.mean()) / x.std())

    df.astype()#

    extended

    Змінює тип стовпця або всього DataFrame. Можна передавати словник {стовпець: тип}.

    df = df.astype({'age': 'int8', 'price': 'float32'})

    Коли використовувати

    Зміна типу — економія пам'яті (int64 → int8), підготовка для алгоритмів, конвертація рядків у числа після парсингу.

    Ключові параметри

    dtype
    Тип ('int32', 'float32', 'category') або словник {стовпець: тип}.
    errors
    'raise' (default) або 'ignore'.

    Поширені помилки та нюанси

    Перетворення float→int втрачає дробову частину без попередження. Перетворення з NaN у int раніше було неможливе — використайте 'Int64' (nullable int) у сучасних версіях.

    Зв'язані функції

    Розширений приклад

    # Економія пам'яті
    df = df.astype({
        'user_id': 'int32',
        'amount': 'float32',
        'status': 'category'  # для повторюваних рядків — у 10+ разів менше
    })
    
    # Nullable int (підтримує NaN)
    df['count'] = df['count'].astype('Int64')
    
    # Безпечна конверсія рядка в число
    df['price'] = pd.to_numeric(df['price_str'], errors='coerce')

    df.copy()#

    Глибока копія DataFrame. Запобігає попередженням SettingWithCopyWarning при модифікаціях.

    df_clean = df.copy()

    df.rename()#

    extended

    Перейменовує стовпці чи індекс. Приймає словник або функцію.

    df = df.rename(columns={'old_name': 'new_name'})

    Коли використовувати

    Перейменування стовпців або індексу — після злиття джерел з різними назвами, при адаптації під SQL/API контракти.

    Ключові параметри

    columns
    Словник {старе: нове} для стовпців.
    index
    Словник для індексу.
    inplace
    True — на місці.

    Поширені помилки та нюанси

    Без помилки пропускає ключі, яких немає. Перевірте набір стовпців через .columns перед і після.

    Зв'язані функції

    Розширений приклад

    # Словник
    df = df.rename(columns={'old_name': 'new_name', 'foo': 'bar'})
    
    # Функцією — для масової нормалізації
    df = df.rename(columns=str.lower)
    df = df.rename(columns=lambda c: c.strip().replace(' ', '_'))
    
    # Повна заміна — через .columns
    df.columns = ['id', 'name', 'amount', 'date']

    df.set_index()#

    extended

    Робить стовпець (або кілька) індексом DataFrame. Ключовий крок для часових рядів.

    df = df.set_index('date').sort_index()

    Коли використовувати

    Перетворити стовпець на індекс — критично для часових рядів (resample, rolling) і для оптимізації злиття за ключем.

    Ключові параметри

    keys
    Стовпець або список (для MultiIndex).
    drop
    True — видалити стовпець після переносу. False — лишити дубль як стовпець.
    append
    Додати до існуючого індексу замість заміни.

    Поширені помилки та нюанси

    Перед операціями на часовому індексі завжди робіть .sort_index() — інакше зрізи й resample працюватимуть неправильно.

    Зв'язані функції

    df.reset_index()#

    extended

    Переносить індекс назад у стовпці й створює новий цілочисельний RangeIndex.

    df = df.reset_index(drop=False)

    Коли використовувати

    Після groupby() результат має ключі групування в індексі — reset_index() повертає їх у звичайні стовпці. Готує DataFrame до експорту чи злиття.

    Ключові параметри

    drop
    True — викинути старий індекс зовсім (не зберігати як стовпець).
    level
    Скинути лише певні рівні MultiIndex.

    Поширені помилки та нюанси

    Без drop=True після кількох reset виходить безліч непотрібних стовпців 'index', 'level_0' тощо.

    Зв'язані функції

    df.assign()#

    extended

    Створює нові стовпці без модифікації вихідного DataFrame. Зручно для ланцюжків (.method chaining).

    df.assign(price_eur=lambda d: d['price_uah'] / 40, vat=lambda d: d['price_eur'] * 0.2)

    Коли використовувати

    Додавання нових обчислених стовпців у ланцюжку методів (method chaining). Залишає вихідний DataFrame незмінним.

    Ключові параметри

    **kwargs
    Іменовані аргументи: column_name=value або column_name=lambda d: ...

    Поширені помилки та нюанси

    Lambda отримує DataFrame станом ПЕРЕД assign(). Тому в одному виклику новий стовпець не може посилатися на інший новий стовпець — потрібні два assign().

    Зв'язані функції

    Розширений приклад

    # Класичний підхід
    df['total'] = df['price'] * df['qty']
    df['vat'] = df['total'] * 0.2
    
    # Функціональний - чистіший у ланцюжках
    result = (
        df
        .query('status == "paid"')
        .assign(
            total=lambda d: d['price'] * d['qty'],
            vat=lambda d: d['price'] * d['qty'] * 0.2,  # повторюємо обчислення
            full_name=lambda d: d['first'] + ' ' + d['last']
        )
        .groupby('category')
        .sum()
    )

    df.eval()#

    Обчислює рядковий вираз над стовпцями DataFrame — швидше і компактніше за конкатенацію.

    df.eval('total = price * quantity', inplace=True)

    df.pipe()#

    Передає DataFrame у функцію, повертаючи її результат. Робить ланцюжки чистими.

    result = (df.pipe(clean).pipe(enrich).pipe(aggregate))

    Сортування та ранжування 5

    df.sort_values()#

    extended

    Сортує рядки за значеннями одного або кількох стовпців.

    df.sort_values(by=['date', 'price'], ascending=[True, False])

    Коли використовувати

    Впорядкування за одним або кількома стовпцями. Для top-N запитів, для впорядкованого виведення звітів.

    Ключові параметри

    by
    Стовпець або список стовпців.
    ascending
    True (default) або список True/False для різних напрямків per стовпець.
    na_position
    'first' або 'last' — куди ставити NaN.

    Поширені помилки та нюанси

    Не плутайте з sort_index() — це різні операції. Для частих сортувань великих даних встановіть індекс і використовуйте sort_index().

    Зв'язані функції

    df.sort_index()#

    Сортує за індексом — обов'язково для зрізів часових рядів.

    df = df.sort_index(axis=0)

    df.rank()#

    Призначає ранг кожному значенню. Параметр method керує обробкою ties (дублікатів рангу).

    df['rank'] = df['score'].rank(method='dense', ascending=False)

    df.nlargest()#

    Швидко знаходить n найбільших значень за стовпцем — швидше за sort_values().head().

    top10 = df.nlargest(10, 'revenue')

    df.nsmallest()#

    Дзеркальна операція — n найменших значень.

    df.nsmallest(5, 'response_time')

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

    df.groupby()#

    extended

    Розбиває DataFrame на групи за ключем. Основа split-apply-combine — найпотужніша операція Pandas.

    df.groupby('category')['sales'].sum()

    Коли використовувати

    Найпотужніша операція Pandas — split-apply-combine. Агрегація за категоріями, обчислення в межах груп, transform для нормалізації.

    Ключові параметри

    by
    Стовпець, список стовпців, функція, або Series.
    as_index
    True (default) — ключі в індексі результату; False — як стовпці.
    dropna
    True (default) — NaN у ключі ігноруються.

    Поширені помилки та нюанси

    groupby сам по собі нічого не повертає — потрібен наступний метод (.agg, .sum, .transform). NaN у ключах за замовчуванням викидаються — задайте dropna=False якщо потрібно.

    Розширений приклад

    # Швидкі агрегації
    df.groupby('category')['sales'].sum()
    df.groupby(['region', 'product'])['revenue'].mean()
    
    # Кілька агрегацій одразу
    df.groupby('city').agg(
        total_sales=('amount', 'sum'),
        avg_order=('amount', 'mean'),
        n_orders=('order_id', 'count'),
        unique_users=('user_id', 'nunique')
    )
    
    # Нормалізація в межах групи
    df['pct_of_group'] = df.groupby('category')['amount'].transform(lambda x: x / x.sum())
    
    # Топ-3 у кожній групі
    df.sort_values('score').groupby('user').head(3)

    groupby.agg()#

    extended

    Застосовує одну чи кілька агрегацій. Словник дозволяє різні агрегації для різних стовпців.

    df.groupby('city').agg(avg_age=('age', 'mean'), n=('id', 'count'))

    Коли використовувати

    Кілька різних агрегацій за один прохід, можливо різні для різних стовпців. Сучасний named aggregation синтаксис — найчіткіший.

    Ключові параметри

    named aggregation
    result_name=('column', 'function') або (col, callable).
    dict
    {column: function} або {column: [func1, func2]}.

    Поширені помилки та нюанси

    При передачі списку функцій отримаєте MultiIndex у стовпцях — складно потім працювати. Краще використовуйте named aggregation для плоскої структури.

    Зв'язані функції

    df.pivot_table()#

    extended

    Зведена таблиця: рядки, стовпці, значення з агрегацією. Аналог Excel pivot.

    pd.pivot_table(df, index='month', columns='product', values='sales', aggfunc='sum')

    Коли використовувати

    Зведена таблиця з агрегацією — стандарт для звітів. Excel pivot, але для Python. Дозволяє дублі ключів (на відміну від pivot()).

    Ключові параметри

    index
    Стовпець(ці) для рядків.
    columns
    Стовпець для стовпців.
    values
    Що агрегувати.
    aggfunc
    'mean' (default), 'sum', 'count', список або словник.
    fill_value
    Чим заповнити порожні клітинки.
    margins
    True додає рядок/стовпець 'All' з підсумками.

    Поширені помилки та нюанси

    Default aggfunc — 'mean'. Для лічильників задайте aggfunc='count' або 'size'. Margins назва за замовчуванням 'All' — не плутайте з даними.

    Зв'язані функції

    Розширений приклад

    # Місячні продажі по продуктах
    pd.pivot_table(
        df,
        index='month',
        columns='product',
        values='sales',
        aggfunc='sum',
        fill_value=0,
        margins=True,
        margins_name='Підсумок'
    )
    
    # Кілька агрегацій
    pd.pivot_table(
        df,
        index='region',
        columns='quarter',
        values='revenue',
        aggfunc=['sum', 'mean', 'count']
    )

    pd.crosstab()#

    extended

    Таблиця спряженості — частоти комбінацій категорій. normalize дає частки.

    pd.crosstab(df['gender'], df['plan'], normalize='index')

    Коли використовувати

    Таблиця спряженості — частоти комбінацій категорій. Для аналізу залежності двох категоріальних змінних.

    Ключові параметри

    index
    Стовпець(і) для рядків.
    columns
    Стовпець(и) для стовпців.
    normalize
    False (default), 'index' (рядки в %), 'columns' (стовпці в %), 'all' (від загальної).
    values + aggfunc
    Аналог pivot_table.

    Поширені помилки та нюанси

    Без normalize=True даєте абсолютні числа — для чесного порівняння категорій різного розміру нормалізуйте.

    Зв'язані функції

    groupby.size()#

    Кількість рядків у кожній групі (на відміну від count, рахує і NaN).

    df.groupby('country').size()

    groupby.transform()#

    Повертає результат у формі вхідного DataFrame — для нормалізації чи рангів у межах груп.

    df['pct'] = df.groupby('cat')['val'].transform(lambda x: x / x.sum())

    groupby.filter()#

    Залишає лише ті групи, які задовольняють умову.

    df.groupby('city').filter(lambda g: len(g) > 10)

    groupby.apply()#

    Найгнучкіший варіант: застосовує довільну функцію до кожної групи.

    df.groupby('user').apply(lambda g: g.nlargest(3, 'score'))

    groupby.cumcount()#

    Порядковий номер рядка в межах групи — від 0.

    df['n_in_group'] = df.groupby('user').cumcount()

    groupby.first() / .last()#

    Перше чи останнє непусте значення в кожній групі. Корисно після сортування.

    df.sort_values('date').groupby('user').last()

    Статистичні функції 20

    df.mean()#

    extended

    Середнє арифметичне за стовпцями (axis=0) або рядками (axis=1).

    df.mean(numeric_only=True)

    Коли використовувати

    Середнє значення стовпців/рядків. Базова статистика, часто використовується після groupby.

    Ключові параметри

    axis
    0 — по стовпцях (default), 1 — по рядках.
    numeric_only
    True — обмежує числовими стовпцями (уникає помилок на object).
    skipna
    True (default) — ігнорує NaN.

    Поширені помилки та нюанси

    Без numeric_only=True у новіших pandas може викинути помилку, якщо є нечислові стовпці. Завжди додавайте.

    Зв'язані функції

    df.median()#

    Медіана — стійкіша до викидів за середнє.

    df['salary'].median()

    df.std()#

    Стандартне відхилення (зміщене з ddof=0 чи незміщене з ddof=1 — за замовчуванням).

    df.groupby('region')['price'].std()

    df.var()#

    Дисперсія — квадрат стандартного відхилення.

    df['returns'].var()

    df.sum()#

    Сума значень. Можна обмежити числовими стовпцями через numeric_only.

    df.sum(axis=0, numeric_only=True)

    df.min() / df.max()#

    Мінімум і максимум за віссю. Для пошуку позиції див. idxmin/idxmax.

    df[['high', 'low']].min()

    df.idxmin() / df.idxmax()#

    Повертає мітку індексу, де досягається мінімум чи максимум.

    df['price'].idxmax()  # дата найвищої ціни

    df.corr()#

    extended

    Матриця кореляцій між числовими стовпцями. method='pearson'|'spearman'|'kendall'.

    df.select_dtypes('number').corr(method='spearman')

    Коли використовувати

    Матриця кореляцій між числовими стовпцями. Перший крок при пошуку зв'язків і виявленні мультиколінеарності.

    Ключові параметри

    method
    'pearson' (default, лінійна), 'spearman' (рангова, нелінійна), 'kendall'.
    min_periods
    Мінімум непустих пар для обчислення.

    Поширені помилки та нюанси

    Pearson чутливий до викидів і припускає лінійність — якщо зв'язок нелінійний, використайте spearman. Враховує лише числові стовпці; для категорій — інші методи (Cramér's V).

    Зв'язані функції

    Розширений приклад

    # Базова матриця
    corr = df.select_dtypes('number').corr()
    
    # Тепловою картою
    import seaborn as sns
    sns.heatmap(corr, annot=True, fmt='.2f', cmap='coolwarm', center=0)
    
    # Топ кореляцій з цільовою змінною
    corr['target'].drop('target').sort_values(key=abs, ascending=False).head(10)
    
    # Виявлення мультиколінеарності
    high_corr = corr.abs() > 0.8
    import numpy as np
    np.fill_diagonal(high_corr.values, False)
    problematic = high_corr.any(axis=0)

    df.cov()#

    Матриця коваріацій — некалібрована версія кореляції.

    df.cov()

    df.value_counts()#

    extended

    Частоти унікальних значень. normalize=True повертає частки.

    df['country'].value_counts(normalize=True).head(10)

    Коли використовувати

    Найважливіший метод для досліджуваного аналізу — швидке розуміння розподілу категорій. Після завантаження одразу подивіться на ключові стовпці.

    Ключові параметри

    normalize
    True — частки замість абсолютних.
    sort
    True (default) — за спаданням частоти.
    dropna
    True (default) — NaN ігноруються.
    bins
    Для числових — розбити на біни і порахувати.

    Поширені помилки та нюанси

    Викликається на Series, не на DataFrame (хоча в нових версіях DataFrame.value_counts() також працює, рахує частоти комбінацій).

    Зв'язані функції

    df.unique()#

    Метод Series — масив унікальних значень у порядку появи.

    df['status'].unique()

    df.nunique()#

    extended

    Кількість унікальних значень. Для DataFrame повертає Series по стовпцях.

    df.nunique()

    Коли використовувати

    Скільки унікальних значень у кожному стовпці. Швидкий спосіб виявити стовпці-кандидати на категоріальний тип чи зайві стовпці-ID.

    Ключові параметри

    axis
    0 — по стовпцях (default).
    dropna
    True (default) — NaN не рахується.

    Поширені помилки та нюанси

    Для дуже великих стовпців може бути повільним. Для приблизного значення на мільярдах — використайте HyperLogLog (пакети datasketch).

    Зв'язані функції

    df.mode()#

    Мода — найчастіше значення. Може повернути кілька рядків при tie.

    df['age'].mode()

    df.quantile()#

    Квантилі (за замовчуванням медіана). Приймає список для кількох рівнів.

    df['income'].quantile([0.25, 0.5, 0.75, 0.95])

    df.skew()#

    Коефіцієнт асиметрії розподілу. Близько 0 — симетричний.

    df['returns'].skew()

    df.kurtosis()#

    Ексцес — гостроверхість розподілу порівняно з нормальним.

    df['log_returns'].kurtosis()

    df.cumsum()#

    Накопичувальна сума уздовж осі — кожний елемент = сума всіх попередніх включно з ним. Корисно для побудови загального доходу за період.

    df['cum_revenue'] = df['revenue'].cumsum()

    df.cumprod()#

    Накопичувальний добуток. Часто використовується для розрахунку кумулятивної доходності.

    (1 + df['returns']).cumprod() - 1

    df.cummax() / df.cummin()#

    Накопичувальний максимум/мінімум — корисно для обчислення drawdown.

    df['running_high'] = df['price'].cummax()

    df.count()#

    Кількість непустих значень у кожному стовпці (на відміну від len, який рахує і NaN).

    df.count()

    Об'єднання DataFrame 6

    pd.merge()#

    extended

    SQL-подібне об'єднання двох DataFrame за ключем. how задає тип JOIN: inner/outer/left/right.

    merged = pd.merge(orders, users, on='user_id', how='left')

    Коли використовувати

    SQL-подібне об'єднання DataFrame за ключем. Стандарт для злиття джерел: замовлення + користувачі + продукти.

    Ключові параметри

    left, right
    Два DataFrame для злиття.
    on
    Спільне ім'я ключа в обох.
    left_on, right_on
    Якщо ключі мають різні імена.
    how
    'inner' (default), 'left', 'right', 'outer', 'cross'.
    suffixes
    Суфікси для конфліктних стовпців. Default ('_x', '_y').

    Поширені помилки та нюанси

    За замовчуванням inner join — рядки без збігу зникають. Завжди перевіряйте розмір ДО і ПІСЛЯ злиття. validate='one_to_one' захистить від несподіваних дублікатів.

    Зв'язані функції

    Розширений приклад

    # Inner — тільки збіги
    merged = pd.merge(orders, users, on='user_id')
    
    # Left — усі замовлення, користувачі підтягуються
    merged = pd.merge(orders, users, on='user_id', how='left')
    
    # Різні імена ключів
    merged = pd.merge(orders, users, left_on='customer_id', right_on='id')
    
    # Захист від несподіваних дублікатів
    merged = pd.merge(
        orders, users,
        on='user_id',
        how='left',
        validate='many_to_one'  # помилка якщо у users є дублі user_id
    )
    
    # Кілька ключів
    merged = pd.merge(a, b, on=['date', 'product_id'])

    pd.concat()#

    extended

    Конкатенація DataFrame по вертикалі (axis=0) або горизонталі (axis=1).

    pd.concat([df1, df2, df3], axis=0, ignore_index=True)

    Коли використовувати

    Стек DataFrame по вертикалі (рядки) або горизонталі (стовпці). Типове застосування — об'єднання частин з різних джерел чи місяців.

    Ключові параметри

    objs
    Список DataFrame або Series.
    axis
    0 (default) — по вертикалі, 1 — по горизонталі.
    ignore_index
    True — заново нумерує рядки 0, 1, 2...
    join
    'outer' (default, всі стовпці) або 'inner' (лише спільні).

    Поширені помилки та нюанси

    Без ignore_index=True індекси з різних DataFrame можуть дублюватись. Стовпці з різними назвами стають NaN — перевіряйте перед концатенацією.

    Зв'язані функції

    df.join()#

    Швидке об'єднання за індексом. Простіше за merge, коли ключ — індекс.

    df.join(other_df, how='left', rsuffix='_other')

    df.combine_first()#

    Заповнює NaN у self значеннями з other. Корисно для злиття часткових даних.

    df_full = df_recent.combine_first(df_archive)

    df.compare()#

    Підсвічує відмінності між двома DataFrame однакової форми. Зручно для аудиту.

    df_old.compare(df_new, keep_shape=False)

    df.update()#

    Оновлює значення на місці значеннями з іншого DataFrame за збігом індексу.

    df.update(corrections_df)

    Перетворення форми (reshape) 8

    df.pivot()#

    extended

    Розгортає довгу таблицю в широку без агрегації. Відмінно від pivot_table — не дозволяє дублі ключа.

    df.pivot(index='date', columns='product', values='price')

    Коли використовувати

    Розгортання довгої таблиці в широку — без агрегації. Для випадків де (index, columns) пара унікальна.

    Ключові параметри

    index
    Стовпець для рядків.
    columns
    Стовпець, чиї значення стають іменами стовпців.
    values
    Що класти у клітинки.

    Поширені помилки та нюанси

    Якщо комбінація (index, columns) має дублі — pivot() кидає ValueError. Тоді потрібен pivot_table з aggfunc.

    Зв'язані функції

    pd.melt()#

    extended

    Зворотна операція: широка таблиця -> довга. Стовпці стають значеннями змінної.

    pd.melt(df, id_vars='id', value_vars=['q1', 'q2', 'q3'], var_name='quarter')

    Коли використовувати

    Зворотна операція до pivot — широка таблиця в довгу. Tidy data для подальшого аналізу й візуалізації.

    Ключові параметри

    id_vars
    Стовпці-ідентифікатори, що залишаються як є.
    value_vars
    Стовпці, які потрібно 'розгорнути'.
    var_name
    Ім'я нового стовпця для імен старих стовпців.
    value_name
    Ім'я нового стовпця для значень.

    Поширені помилки та нюанси

    Якщо стовпців багато — використайте id_vars і опустіть value_vars (всі решта розгорнуться автоматично).

    Зв'язані функції

    Розширений приклад

    # Було: широкий формат
    #   id  q1   q2   q3   q4
    # 0  1  10   20   30   40
    # 1  2  15   25   35   45
    
    long = pd.melt(df, id_vars='id', value_vars=['q1', 'q2', 'q3', 'q4'],
                   var_name='quarter', value_name='sales')
    
    # Стало:
    #   id quarter  sales
    # 0  1    q1     10
    # 1  2    q1     15
    # 2  1    q2     20
    # ...

    df.stack()#

    Переносить найвнутрішніший рівень стовпців в індекс — отримуємо довшу й вужчу таблицю.

    stacked = df.stack(future_stack=True)

    df.unstack()#

    Зворотна до stack — переносить рівень індексу в стовпці.

    df.set_index(['city', 'year']).unstack('year')

    df.transpose() / df.T#

    Транспонує DataFrame: рядки стають стовпцями і навпаки.

    df.T

    df.explode()#

    Розгортає стовпець-список у кілька рядків — по одному на елемент.

    df.explode('tags', ignore_index=True)

    pd.wide_to_long()#

    Конвертує широкий формат у довгий за регулярним шаблоном імен стовпців.

    pd.wide_to_long(df, stubnames='val', i='id', j='year')

    df.swaplevel()#

    Міняє рівні MultiIndex місцями. Корисно перед сортуванням за іншим рівнем.

    df.swaplevel(0, 1).sort_index()

    Часові ряди 15

    pd.to_datetime()#

    extended

    Перетворює стовпець або список у datetime. errors='coerce' замінює невалідні на NaT.

    df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d', errors='coerce')

    Коли використовувати

    Перший крок при роботі з часовими даними. Без перетворення на datetime неможливі resample, rolling, операції з .dt accessor.

    Ключові параметри

    arg
    Series, рядок, список, число (timestamp).
    format
    Шаблон strftime. Прискорює парсинг у 100+ разів якщо точно знати формат.
    errors
    'raise' (default), 'coerce' (невалідні → NaT), 'ignore'.
    utc
    True — повернути з TZ=UTC.
    dayfirst
    True для європейського формату (15/12/2024).

    Поширені помилки та нюанси

    Без format pandas вгадує формат — повільно і ризиковано на великих наборах. Завжди задавайте format.

    Зв'язані функції

    Розширений приклад

    # З явним форматом — швидко і безпечно
    df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
    
    # Невалідні значення → NaT (замість помилки)
    df['date'] = pd.to_datetime(df['date'], errors='coerce')
    
    # Багато форматів — спробувати кілька
    def parse_dates(s):
        for fmt in ['%Y-%m-%d', '%d.%m.%Y', '%d/%m/%Y']:
            try:
                return pd.to_datetime(s, format=fmt)
            except ValueError:
                continue
        return pd.NaT
    
    # З часовим поясом
    df['ts'] = pd.to_datetime(df['ts'], utc=True).dt.tz_convert('Europe/Kyiv')

    pd.date_range()#

    Генерує діапазон дат із заданим кроком. freq='D','W','M','Q','Y','H' тощо.

    dates = pd.date_range('2024-01-01', periods=12, freq='ME')

    df.resample()#

    extended

    Змінює частоту часового ряду — даунсемплінг (тижневі підсумки) чи апсемплінг.

    df.resample('W').agg({'sales': 'sum', 'visits': 'mean'})

    Коли використовувати

    Зміна частоти часового ряду. Підсумок продажів за тиждень/місяць/квартал з денних даних. Або, рідше, апсемплінг.

    Ключові параметри

    rule
    'D' (день), 'W' (тиждень), 'ME' (кінець місяця), 'QE' (кінець кварталу), 'YE' (рік), 'h' (година).
    on
    Якщо datetime не в індексі — вкажіть стовпець.
    closed
    'left' або 'right' — який кінець інтервалу включно.

    Поширені помилки та нюанси

    DatetimeIndex обов'язковий (або параметр on=). Перед resample робіть sort_index, інакше результат буде хаотичним.

    Зв'язані функції

    Розширений приклад

    df = df.set_index('date').sort_index()
    
    # Тижневі підсумки
    weekly = df.resample('W').agg({
        'sales': 'sum',
        'visits': 'sum',
        'avg_order': 'mean'
    })
    
    # Місячна агрегація з різними функціями
    monthly = df.resample('ME').agg({
        'price': ['min', 'max', 'mean'],
        'volume': 'sum'
    })
    
    # Апсемплінг (з заповненням)
    hourly = df.resample('H').ffill()

    df.rolling()#

    extended

    Ковзне вікно фіксованої ширини для обчислення sliding-статистик.

    df['ma7'] = df['price'].rolling(window=7).mean()

    Коли використовувати

    Ковзне середнє для згладжування шуму, обчислення momentum, виявлення трендів. Класичний інструмент технічного аналізу й аналізу часових рядів.

    Ключові параметри

    window
    Розмір вікна — кількість періодів або часовий інтервал ('7D').
    min_periods
    Мінімум значень у вікні для обчислення (інакше NaN).
    center
    True — мітка по центру вікна, не справа.

    Поширені помилки та нюанси

    Перші window-1 значень будуть NaN. Для рівних часових інтервалів — задавайте число; для нерегулярних дат — рядок типу '7D'.

    Зв'язані функції

    Розширений приклад

    # 7-денне ковзне середнє
    df['ma7'] = df['price'].rolling(window=7).mean()
    
    # 30-денна волатильність
    df['vol30'] = df['returns'].rolling(window=30).std() * (252 ** 0.5)
    
    # З centered window (для smoothing)
    df['smooth'] = df['signal'].rolling(window=11, center=True).mean()
    
    # По часу (нерегулярні дати)
    df['daily_avg'] = df['value'].rolling('7D').mean()
    
    # Складна — sliding correlation
    df['rolling_corr'] = df['x'].rolling(60).corr(df['y'])

    df.expanding()#

    Розширюване вікно: усі попередні точки. Кумулятивні статистики.

    df['running_avg'] = df['returns'].expanding(min_periods=10).mean()

    df.shift()#

    extended

    Зсуває значення на n позицій уперед чи назад. Базис для лагів і обчислення приростів.

    df['prev_price'] = df['price'].shift(1)

    Коли використовувати

    Зсув значень для обчислення лагів, приростів, попередніх значень. Базова операція для feature engineering у часових рядах.

    Ключові параметри

    periods
    Кількість періодів (від'ємні — у майбутнє).
    freq
    Частота для зсуву по часовому індексу.

    Поширені помилки та нюанси

    Створює NaN на початку (або кінці для від'ємного зсуву) — у наступних обчисленнях врахуйте.

    Зв'язані функції

    df.diff()#

    Різниця між поточним і попереднім значенням. Аналог .shift(1) - сама себе.

    df['delta'] = df['stock'].diff()

    df.pct_change()#

    extended

    Відсоткова зміна між значеннями. Стандартна процедура для розрахунку доходності.

    df['return'] = df['close'].pct_change()

    Коли використовувати

    Відсоткова зміна між періодами — стандарт для розрахунку доходності в фінансах.

    Ключові параметри

    periods
    Кількість періодів. 1 — від попереднього, 12 — рік-до-року на місячних даних.
    fill_method
    Default 'pad' (ffill); сучасні версії радять None — обробляти пропуски явно.

    Поширені помилки та нюанси

    Перше значення завжди NaN. Множте на 100 для відсотків. Для логарифмічної доходності використайте np.log(p / p.shift()).

    Зв'язані функції

    df.asfreq()#

    Приводить часовий ряд до заданої частоти, опційно заповнюючи пропуски.

    df.asfreq('D', method='ffill')

    pd.Timedelta()#

    Створює різницю часу. Можна додавати/віднімати від Timestamp.

    df['deadline'] = df['created'] + pd.Timedelta(days=30)

    pd.Timestamp()#

    Точна часова мітка з підтримкою часових поясів.

    ts = pd.Timestamp('2024-12-31 23:59:59', tz='Europe/Kyiv')

    pd.bdate_range()#

    Діапазон бізнес-днів (без вихідних). Базова функція для фінансових часових рядів.

    bdays = pd.bdate_range('2024-01-01', '2024-12-31')

    Series.dt accessor#

    Доступ до компонентів дати: dt.year, dt.month, dt.dayofweek, dt.day_name() тощо.

    df['weekday'] = df['date'].dt.day_name(locale='uk_UA')

    Series.dt.tz_localize()#

    Призначає часовий пояс наївному datetime (без TZ).

    df['t'] = df['t'].dt.tz_localize('UTC')

    Series.dt.tz_convert()#

    Конвертує локалізований час в інший часовий пояс.

    df['kyiv'] = df['utc'].dt.tz_convert('Europe/Kyiv')

    Робота з рядками (.str) 13

    str.contains()#

    extended

    Булева маска: чи містить рядок підрядок чи відповідає regex.

    df[df['email'].str.contains('@gmail', na=False)]

    Коли використовувати

    Фільтрація рядків за підрядком чи regex. Найчастіша операція при роботі з текстовими стовпцями.

    Ключові параметри

    pat
    Підрядок або regex-патерн.
    case
    True (default) — з урахуванням регістру.
    regex
    True (default) — pat інтерпретується як regex.
    na
    Що робити з NaN — False (рекомендовано), True або np.nan.

    Поширені помилки та нюанси

    Без na=False фільтрація з NaN падає з помилкою 'cannot mask with array containing NA'. Завжди додавайте na=False.

    Зв'язані функції

    Розширений приклад

    # Простий пошук
    df[df['email'].str.contains('@gmail.com', na=False)]
    
    # Без урахування регістру
    df[df['title'].str.contains('python', case=False, na=False)]
    
    # Regex
    df[df['code'].str.contains(r'^[A-Z]{2}\d{4}$', regex=True, na=False)]
    
    # Кілька варіантів
    df[df['city'].str.contains('Kyiv|Lviv|Odesa', na=False, regex=True)]
    
    # Заперечення
    df[~df['url'].str.contains('test', na=False)]

    str.split()#

    extended

    Розбиває рядок за роздільником. expand=True розкладає на окремі стовпці.

    df[['first', 'last']] = df['name'].str.split(' ', n=1, expand=True)

    Коли використовувати

    Розбиття рядка за роздільником. Парсинг повних імен, адрес, складених кодів. expand=True розкладає у стовпці.

    Ключові параметри

    pat
    Роздільник або regex.
    n
    Максимальна кількість розділень.
    expand
    True — повертає DataFrame зі стовпцями замість Series списків.

    Поширені помилки та нюанси

    Без expand=True отримуєте Series, де кожне значення — список. Для роботи з ним потрібен .str[i] для доступу до елементів.

    Зв'язані функції

    str.replace()#

    Заміна підрядка чи regex-патерну на нове значення.

    df['phone'] = df['phone'].str.replace(r'\D', '', regex=True)

    str.lower() / str.upper()#

    Перетворює регістр. Перший крок при нормалізації категоріальних рядків.

    df['email'] = df['email'].str.lower().str.strip()

    str.strip()#

    Видаляє пробіли (або задані символи) з обох кінців рядка.

    df['name'] = df['name'].str.strip()

    str.startswith() / str.endswith()#

    Перевірка префіксу чи суфіксу — швидше за contains для простих випадків.

    df[df['url'].str.startswith('https://')]

    str.len()#

    Довжина рядка для кожного елемента.

    df['short_desc'] = df['description'].str.len() < 100

    str.extract()#

    Витягує групи з regex у нові стовпці. expand=True завжди повертає DataFrame.

    df['year'] = df['title'].str.extract(r'\((\d{4})\)')

    str.cat()#

    Конкатенує рядки. sep задає роздільник; може приймати інший Series.

    df['full'] = df['first'].str.cat(df['last'], sep=' ')

    str.findall()#

    Список усіх збігів regex у рядку.

    df['hashtags'] = df['post'].str.findall(r'#\w+')

    str.match()#

    Перевірка повного збігу з regex (від початку рядка).

    df[df['code'].str.match(r'^[A-Z]{2}\d{4}$')]

    str.zfill()#

    Доповнює нулями зліва до заданої довжини. Для нормалізації кодів і ID.

    df['code'] = df['code'].str.zfill(8)

    str.pad()#

    Доповнює рядок до довжини заданим символом — зліва, справа або з обох боків.

    df['col'].str.pad(10, side='right', fillchar='.')

    Категоріальні дані та dummies 7

    pd.Categorical()#

    Створює категоріальну Series з обмеженим набором значень — економить пам'ять і дозволяє впорядкування.

    df['size'] = pd.Categorical(df['size'], categories=['S', 'M', 'L'], ordered=True)

    pd.cut()#

    extended

    Розбиває числові значення на біни заданої ширини або за межами. Створює категоріальний результат.

    df['age_group'] = pd.cut(df['age'], bins=[0, 18, 35, 60, 100], labels=['<18', '18-35', '36-60', '60+'])

    Коли використовувати

    Розбиття числового стовпця на біни заданої ширини або за межами. Створення вікових груп, цінових категорій, рангів.

    Ключові параметри

    x
    Числова Series.
    bins
    Кількість бінів (рівні), список меж, чи IntervalIndex.
    labels
    Імена бінів. Без них — інтервали як рядки.
    right
    True (default) — інтервали закриті справа: (a, b].

    Поширені помилки та нюанси

    Значення на межі потрапляють у правий інтервал (за замовчуванням). Значення поза bins → NaN. Додайте -np.inf і np.inf як крайні межі для покриття всіх значень.

    Зв'язані функції

    Розширений приклад

    import numpy as np
    
    # З явними межами
    df['age_group'] = pd.cut(
        df['age'],
        bins=[-np.inf, 17, 35, 60, np.inf],
        labels=['<18', '18-35', '36-60', '60+']
    )
    
    # Рівна ширина
    df['price_tier'] = pd.cut(df['price'], bins=5, labels=['A','B','C','D','E'])
    
    # Включно з обома кінцями
    df['quartile'] = pd.cut(df['score'], bins=4, include_lowest=True)

    pd.qcut()#

    Біни рівної кількості елементів (квантильні). Часто для побудови децилей.

    df['decile'] = pd.qcut(df['income'], q=10, labels=False)

    pd.get_dummies()#

    extended

    Перетворює категоріальний стовпець у one-hot кодування — окремі бінарні стовпці.

    encoded = pd.get_dummies(df, columns=['city'], drop_first=True)

    Коли використовувати

    One-hot кодування категорій для машинного навчання. Перетворює категоріальний стовпець на бінарні стовпці.

    Ключові параметри

    data
    Series або DataFrame.
    columns
    Які стовпці кодувати (default — всі object/category).
    drop_first
    True — викинути перший рівень (для уникнення мультиколінеарності).
    prefix
    Префікс для нових стовпців.
    dummy_na
    Чи робити окремий стовпець для NaN.

    Поширені помилки та нюанси

    При продакшні (новий датасет) можуть з'явитись категорії, яких не було при тренуванні — і не з'явитись ті, що були. Зберігайте список колонок з тренувального набору і реіндексуйте.

    Зв'язані функції

    pd.factorize()#

    Кодує категорії цілими числами і повертає масив унікальних значень.

    codes, uniques = pd.factorize(df['country'])

    df.select_dtypes()#

    Відбирає стовпці заданих типів. Швидкий спосіб ізолювати числові чи категоріальні дані.

    df_num = df.select_dtypes(include='number')

    Series.cat accessor#

    Доступ до методів категорій: cat.categories, cat.add_categories, cat.rename_categories.

    df['size'].cat.set_categories(['S', 'M', 'L', 'XL'], ordered=True)

    Параметри та утиліти 9

    pd.set_option()#

    Глобальні налаштування — скільки рядків/стовпців виводити, точність чисел тощо.

    pd.set_option('display.max_columns', 50); pd.set_option('display.width', 200)

    pd.option_context()#

    Тимчасові налаштування в межах with-блоку. Чистіше за глобальну зміну.

    with pd.option_context('display.max_rows', 100): print(df)

    df.plot()#

    Швидкий графік через Matplotlib. kind='line'|'bar'|'hist'|'box'|'scatter'|'area' тощо.

    df.plot(kind='line', x='date', y=['sales', 'cost'])

    df.hist()#

    Гістограми для всіх числових стовпців на сітці підграфіків.

    df.hist(bins=30, figsize=(12, 8))

    df.boxplot()#

    Boxplot за стовпцями. by= групує за значеннями іншого стовпця.

    df.boxplot(column='salary', by='department')

    df.iterrows()#

    Ітерація по рядках — повертає (індекс, Series). Використовуйте лише коли немає векторної альтернативи.

    for idx, row in df.iterrows(): process(row['name'])

    df.itertuples()#

    Швидша ітерація — повертає namedtuple. Доступ через row.name замість row['name'].

    for row in df.itertuples(): total += row.amount

    df.to_records()#

    Перетворює DataFrame у структурований NumPy-масив.

    arr = df.to_records(index=False)

    df.equals()#

    Перевіряє побудовну рівність двох DataFrame — на відміну від ==, коректно обробляє NaN.

    df1.equals(df2)
    Бібліотека · 15 розділів · 159 функцій · 55 розширених

    NumPy

    NumPy — фундамент усієї наукової екосистеми Python. Її ndarray (n-вимірний масив) у десятки разів швидший за списки Python для числових операцій. Pandas, scikit-learn, Matplotlib і більшість бібліотек ML побудовані поверх NumPy. Для аналітика це насамперед інструмент швидких векторних обчислень і генерації числових даних.

    Створення масивів 15

    np.array()#

    extended

    Створює ndarray зі списку, кортежу чи вкладених послідовностей. Базовий конструктор.

    a = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float64)

    Коли використовувати

    Створюєте масив зі списку чи кортежу. Базовий конструктор — будь-яке обчислення в NumPy починається з ndarray.

    Ключові параметри

    object
    Список, кортеж, інший ndarray, ітерована послідовність.
    dtype
    Тип елементів: np.int32, np.float64, np.bool_, np.object_.
    copy
    True (default) — копіює дані; False — використовує вхідні якщо можливо.

    Поширені помилки та нюанси

    З'єднання списків різної довжини дає 1D-масив об'єктів, а не 2D — це джерело тонких помилок. Контролюйте через .shape і .dtype.

    Зв'язані функції

    Розширений приклад

    # Звичайний 2D масив
    a = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float64)
    
    # Перевірка форми
    assert a.shape == (2, 3)
    assert a.dtype == np.float64
    
    # Списки різної довжини — небезпечно
    bad = np.array([[1, 2], [3, 4, 5]])  # 1D з object! Не те, що очікувалось.
    print(bad.shape, bad.dtype)  # (2,) object
    
    # Безпечне приведення
    arr = np.asarray(some_list, dtype=np.int32)

    np.asarray()#

    Конвертує вхід у ndarray, але не копіює, якщо тип уже відповідний — економить пам'ять.

    arr = np.asarray(some_list)

    np.zeros()#

    extended

    Масив, заповнений нулями, заданої форми та типу.

    z = np.zeros((3, 4), dtype=int)

    Коли використовувати

    Початкова ініціалізація масиву, який буде заповнено пізніше. Базовий патерн для buffer-ів, акумуляторів, маток.

    Ключові параметри

    shape
    Кортеж розмірностей: (rows, cols) для 2D, (n,) для 1D.
    dtype
    Тип. Default float64 — для лічильників краще int.

    Поширені помилки та нюанси

    Для лічильників не забувайте dtype=int — інакше нулі будуть 0.0, що з'їсть удвічі більше пам'яті.

    Зв'язані функції

    np.ones()#

    extended

    Масив одиниць — часто використовується як стартова точка для зважування.

    weights = np.ones(10) / 10  # рівномірні ваги

    Коли використовувати

    Базис для зважування, маток-плейсхолдерів, при ініціалізації коефіцієнтів моделі.

    Ключові параметри

    shape
    Форма.
    dtype
    Тип.

    Поширені помилки та нюанси

    Для побудови column vector з одиниць використовуйте np.ones((n, 1)), не np.ones(n) — різні форми дадуть різні результати при broadcasting.

    Зв'язані функції

    np.empty()#

    Виділяє пам'ять без ініціалізації — найшвидший спосіб створити масив, який буде одразу заповнено.

    buf = np.empty((1000, 3), dtype=np.float32)

    np.full()#

    Масив заданої форми, заповнений довільним значенням.

    missing = np.full((5, 5), fill_value=np.nan)

    np.arange()#

    extended

    Аналог Python range, але повертає ndarray. Підтримує дробові кроки.

    x = np.arange(0, 10, 0.5)

    Коли використовувати

    Числова послідовність — індекси, тестові дані, координати сітки. Аналог Python range, але повертає масив.

    Ключові параметри

    start, stop, step
    Як у range. stop виключно.
    dtype
    Тип. Без вказання — int для цілих, float для дробових кроків.

    Поширені помилки та нюанси

    З float-кроком (np.arange(0, 1, 0.1)) можливі помилки округлення — у результаті може бути менше або більше точок ніж очікується. Краще np.linspace() для дробових діапазонів.

    Зв'язані функції

    Розширений приклад

    # Цілі числа
    np.arange(10)              # [0, 1, ..., 9]
    np.arange(2, 10, 2)        # [2, 4, 6, 8]
    
    # Дробовий крок — небезпечно
    np.arange(0, 1, 0.1)       # може бути 9 чи 11 точок!
    
    # Краще:
    np.linspace(0, 1, 11)      # рівно 11 точок

    np.linspace()#

    extended

    Рівномірно розподілені точки на інтервалі — n значень включно з кінцями.

    x = np.linspace(0, 1, 100)  # 100 точок від 0 до 1

    Коли використовувати

    Рівномірний діапазон з точно заданою кількістю точок. Стандарт для побудови графіків і тестових сіток.

    Ключові параметри

    start, stop
    Кінці діапазону (включно з обома).
    num
    Кількість точок (default 50).
    endpoint
    False — виключити кінець (як у arange).
    retstep
    True — повертає (масив, крок).

    Поширені помилки та нюанси

    На відміну від arange, обидва кінці включно за замовчуванням — це різниця при побудові графіків.

    Зв'язані функції

    np.logspace()#

    Логарифмічно розподілені точки. Зручно для логарифмічних осей графіків.

    freqs = np.logspace(1, 4, num=50)  # 10..10000

    np.eye()#

    extended

    Одинична матриця або діагональна матриця з одиницями. k зсуває діагональ.

    I = np.eye(5)  # 5x5 identity

    Коли використовувати

    Одинична матриця для перевірки тотожних перетворень, ініціалізації коваріаційних матриць.

    Ключові параметри

    N, M
    Кількість рядків і стовпців. M=None дає квадратну.
    k
    Зсув діагоналі: k>0 — вгору, k<0 — вниз.

    Поширені помилки та нюанси

    np.eye(3) і np.identity(3) ідентичні для квадратних — але eye() гнучкіший (прямокутні, зсув).

    Зв'язані функції

    np.identity()#

    Чисто квадратна одинична матриця. Простіше за np.eye при тому ж розмірі рядків і стовпців.

    np.identity(3)

    np.diag()#

    Створює діагональну матрицю з вектора або витягує діагональ із матриці.

    D = np.diag([1, 2, 3, 4])

    np.zeros_like() / np.ones_like()#

    Створює масив тієї ж форми та типу, що й вхідний, заповнений нулями (одиницями).

    mask = np.zeros_like(image)

    np.fromfunction()#

    Заповнює масив, обчислюючи значення як функцію від індексів.

    grid = np.fromfunction(lambda i, j: i + j, (3, 3), dtype=int)

    np.meshgrid()#

    extended

    Створює двовимірну координатну сітку з двох одновимірних — основа для 3D-графіків і обчислень на сітці.

    X, Y = np.meshgrid(np.linspace(-1, 1, 50), np.linspace(-1, 1, 50))

    Коли використовувати

    Створення координатної сітки з двох 1D-масивів. Без неї неможливі 3D-поверхні, контурні графіки, обчислення на 2D-сітці.

    Ключові параметри

    x, y
    1D-масиви координат.
    indexing
    'xy' (default, графічний) або 'ij' (матричний).

    Поширені помилки та нюанси

    indexing='xy' (default) міняє форму: для x довжини N і y довжини M результат (M, N), а не (N, M). При роботі з матрицями іноді потрібен 'ij'.

    Зв'язані функції

    Розширений приклад

    # 2D-сітка
    x = np.linspace(-3, 3, 100)
    y = np.linspace(-3, 3, 100)
    X, Y = np.meshgrid(x, y)
    
    # Тепер можна обчислити функцію двох змінних
    Z = np.sin(X) * np.cos(Y)
    
    # Або відстань від (0, 0)
    R = np.sqrt(X**2 + Y**2)
    
    # Для контурного графіка
    plt.contourf(X, Y, Z, levels=20)

    Випадкові числа 15

    np.random.seed()#

    extended

    Фіксує seed генератора для відтворюваності експериментів. Сучасний підхід — np.random.default_rng().

    rng = np.random.default_rng(seed=42)

    Коли використовувати

    Фіксація генератора для відтворюваних експериментів. Обов'язково при дослідженнях, демо, тестуванні.

    Ключові параметри

    seed
    Ціле число. Однаковий seed → однакова послідовність випадкових чисел.

    Поширені помилки та нюанси

    np.random.seed() — застарілий. Сучасний підхід: rng = np.random.default_rng(seed=42), потім rng.normal(...). Це безпечніше у багатопотокових сценаріях.

    Зв'язані функції

    Розширений приклад

    # Старий стиль (deprecated)
    np.random.seed(42)
    x = np.random.rand(10)
    
    # Сучасний (рекомендований з NumPy 1.17+)
    rng = np.random.default_rng(seed=42)
    x = rng.normal(loc=0, scale=1, size=1000)
    y = rng.choice(['A', 'B', 'C'], size=100)

    np.random.rand()#

    extended

    Рівномірний розподіл [0, 1). Аргументи — форма масиву.

    u = np.random.rand(1000)

    Коли використовувати

    Рівномірний розподіл [0, 1). Тестові дані, ймовірності, dropout-маски.

    Ключові параметри

    d0, d1, ...
    Розмірності. Не кортеж, а окремі аргументи!

    Поширені помилки та нюанси

    Передає окремі числа, не кортеж: np.random.rand(2, 3), а не np.random.rand((2, 3)). Це різниця з np.zeros.

    Зв'язані функції

    np.random.randn()#

    extended

    Стандартний нормальний розподіл (mean=0, std=1).

    noise = np.random.randn(1000)

    Коли використовувати

    Стандартний нормальний розподіл (μ=0, σ=1). Шум для симуляцій, ініціалізація ваг.

    Ключові параметри

    d0, d1, ...
    Розмірності.

    Поширені помилки та нюанси

    Як і rand, приймає розмірності окремими аргументами. Для довільних μ, σ використайте np.random.normal(μ, σ, size).

    Зв'язані функції

    np.random.randint()#

    extended

    Цілі числа з рівномірного розподілу [low, high).

    dice = np.random.randint(1, 7, size=10)

    Коли використовувати

    Цілі числа з рівномірного розподілу. Випадкові індекси, симуляція кубиків, генерація тестових ID.

    Ключові параметри

    low, high
    Діапазон. high виключно за замовчуванням.
    size
    Форма результату.

    Поширені помилки та нюанси

    high виключно (як у Python range). Для включення верхньої межі: np.random.randint(1, 7) дає 1-6, а не 1-7.

    Зв'язані функції

    np.random.choice()#

    extended

    Випадкова вибірка з масиву — з поверненням чи без, з ваговими ймовірностями.

    sample = np.random.choice(['A', 'B', 'C'], size=100, p=[0.5, 0.3, 0.2])

    Коли використовувати

    Випадкова вибірка з масиву — з/без повторень, з ймовірностями. Класичний інструмент для семплінгу й симуляцій.

    Ключові параметри

    a
    Масив або ціле (тоді np.arange(a)).
    size
    Скільки елементів.
    replace
    True (default) — з поверненням.
    p
    Список ймовірностей.

    Поширені помилки та нюанси

    Без replace=False можна отримати дублі — для випадкової вибірки без повторень обов'язково задавайте. Сума p має бути 1.

    Зв'язані функції

    Розширений приклад

    # Випадкова вибірка з повторами
    np.random.choice([1, 2, 3, 4, 5], size=10)
    
    # Без повторень
    np.random.choice(100, size=10, replace=False)
    
    # З вагами
    np.random.choice(['A', 'B', 'C'], size=1000, p=[0.5, 0.3, 0.2])
    
    # Бутстреп
    sample = np.random.choice(data, size=len(data), replace=True)

    np.random.normal()#

    extended

    Нормальний розподіл із заданими середнім і стандартним відхиленням.

    scores = np.random.normal(loc=70, scale=15, size=1000)

    Коли використовувати

    Нормальний розподіл з довільними параметрами. Симуляція реальних метрик (зріст, IQ, помилки вимірювання).

    Ключові параметри

    loc
    Середнє μ.
    scale
    Стандартне відхилення σ.
    size
    Форма.

    Поширені помилки та нюанси

    scale — це σ, не σ². Не плутайте з дисперсією.

    Зв'язані функції

    np.random.uniform()#

    Рівномірний розподіл на довільному інтервалі [low, high).

    x = np.random.uniform(low=-5, high=5, size=500)

    np.random.shuffle()#

    Перемішує масив на місці (in-place) уздовж першої осі.

    np.random.shuffle(indices)

    np.random.permutation()#

    Повертає перемішану копію масиву (на відміну від shuffle).

    shuffled = np.random.permutation(np.arange(100))

    np.random.binomial()#

    Біноміальний розподіл: кількість успіхів у n незалежних випробуваннях.

    successes = np.random.binomial(n=10, p=0.3, size=1000)

    np.random.poisson()#

    Розподіл Пуассона — кількість подій за фіксований інтервал.

    events = np.random.poisson(lam=4.5, size=500)

    np.random.exponential()#

    Експоненціальний розподіл — час до наступної події в потоці Пуассона.

    wait = np.random.exponential(scale=2.0, size=200)

    np.random.beta()#

    Бета-розподіл [0,1] — корисний для байєсівського моделювання ймовірностей.

    ctr = np.random.beta(a=5, b=95, size=1000)

    np.random.standard_t()#

    Розподіл Стьюдента з df ступенями свободи. Для генерації важкохвостих даних.

    t = np.random.standard_t(df=10, size=1000)

    np.random.multivariate_normal()#

    Багатовимірний нормальний розподіл із заданими середнім і коваріаційною матрицею.

    samples = np.random.multivariate_normal(mean=[0, 0], cov=[[1, 0.5], [0.5, 1]], size=500)

    Атрибути та інспекція масивів 8

    ndarray.shape#

    extended

    Кортеж розмірностей по кожній осі. Найважливіший атрибут при налагодженні.

    print(a.shape)  # (3, 4)

    Коли використовувати

    Найважливіший атрибут при діагностиці помилок broadcasting'у і розмірностей. Перевіряти ПЕРЕД будь-яким матричним множенням.

    Ключові параметри

    (атрибут)
    Кортеж. Для 1D — (n,), не (n, 1).

    Поширені помилки та нюанси

    (n,) і (n, 1) — різні форми! Перше — 1D, друге — 2D-вектор-стовпець. У матричному множенні дають різні результати.

    Зв'язані функції

    ndarray.ndim#

    Кількість осей (вимірів) масиву.

    a.ndim  # 2 для матриці

    ndarray.size#

    Загальна кількість елементів = добуток усіх розмірів.

    a.size

    ndarray.dtype#

    extended

    Тип даних елементів. Найважливіший фактор пам'яті та точності.

    a.dtype  # float64

    Коли використовувати

    Перевірка типу при дебазі. Float64 vs int64 vs object — кардинально різна продуктивність і поведінка.

    Ключові параметри

    (атрибут)
    Об'єкт dtype.

    Поширені помилки та нюанси

    dtype('O') — object — означає масив Python-об'єктів, обчислення на ньому в 100+ разів повільніші. Уникайте, приводьте до конкретного числового типу.

    Зв'язані функції

    ndarray.itemsize#

    Розмір одного елемента в байтах.

    a.itemsize  # 8 для float64

    ndarray.nbytes#

    Загальний обсяг пам'яті, який займає масив.

    f'{a.nbytes / 1e6:.1f} МБ'

    ndarray.T#

    extended

    Транспонування — швидкий доступ без копіювання даних.

    a.T  # рядки стають стовпцями

    Коли використовувати

    Транспонування для матричного множення, перетворення row-vector → column-vector.

    Ключові параметри

    (атрибут)
    Повертає view — без копіювання даних.

    Поширені помилки та нюанси

    Для 1D-масиву .T нічого не робить — повертає той же 1D. Для перетворення в стовпець: arr[:, np.newaxis] або arr.reshape(-1, 1).

    Зв'язані функції

    ndarray.flat#

    1D-ітератор по всіх елементах масиву незалежно від форми.

    for x in a.flat: print(x)

    Зміна форми та осей 10

    np.reshape()#

    extended

    Змінює форму масиву без копіювання. -1 означає 'розрахуй автоматично'.

    a = np.arange(12).reshape(3, 4)

    Коли використовувати

    Зміна форми без копіювання даних. Розгортання батчу зображень у вектори, перетворення під вимоги моделей.

    Ключові параметри

    newshape
    Нова форма. -1 означає 'обчислити автоматично'.
    order
    'C' (default, row-major) або 'F' (column-major).

    Поширені помилки та нюанси

    Загальна кількість елементів має зберігатися — інакше ValueError. -1 можна використати тільки в одній позиції.

    Зв'язані функції

    Розширений приклад

    a = np.arange(12)         # shape (12,)
    
    a.reshape(3, 4)           # (3, 4)
    a.reshape(2, 2, 3)        # (2, 2, 3)
    a.reshape(-1, 4)          # (3, 4) — 3 обчислюється автоматично
    a.reshape(2, -1)          # (2, 6)
    
    # Класичне для ML — батч зображень
    images = np.random.rand(100, 28, 28)  # (n_samples, h, w)
    flat = images.reshape(100, -1)        # (100, 784) для лінійної моделі

    np.ravel()#

    extended

    Розгортає в одновимірний масив. Зазвичай повертає view, не копію.

    flat = a.ravel()

    Коли використовувати

    Перетворення n-вимірного масиву в 1D. Для гістограми, list-comprehensions, передачі в API, що чекає 1D.

    Ключові параметри

    a
    Масив.
    order
    'C' або 'F'.

    Поширені помилки та нюанси

    Повертає view коли можливо, тобто зміна результату змінить оригінал. Якщо потрібна копія — використайте .flatten().

    Зв'язані функції

    np.flatten()#

    Розгортає в 1D, але завжди повертає копію (на відміну від ravel).

    copy_flat = a.flatten()

    np.transpose()#

    extended

    Змінює порядок осей. Без аргументів — повне транспонування.

    b = np.transpose(a, axes=(1, 0, 2))  # для 3D

    Коли використовувати

    Зміна порядку осей у багатовимірному масиві. Для 3D-тензорів — переміщення channel-first → channel-last.

    Ключові параметри

    a
    Масив.
    axes
    Кортеж нового порядку осей.

    Поширені помилки та нюанси

    Без axes — повне реверсивне транспонування. Для конкретної перестановки задавайте явно.

    Зв'язані функції

    np.swapaxes()#

    Міняє місцями дві осі багатовимірного масиву. Простіша альтернатива moveaxis для парних перестановок.

    np.swapaxes(a, 0, 1)

    np.moveaxis()#

    Переміщує осі в нові позиції. Гнучкіше за swapaxes.

    np.moveaxis(images, source=0, destination=-1)

    np.expand_dims()#

    extended

    Додає нову вісь розміру 1. Корисно для broadcast-сумісності.

    col = np.expand_dims(vec, axis=1)  # 1D -> стовпець

    Коли використовувати

    Додавання нової осі для broadcasting сумісності. Перетворення 1D-вектора у column- або row-vector.

    Ключові параметри

    a
    Масив.
    axis
    Позиція нової осі.

    Поширені помилки та нюанси

    Альтернатива з тим же ефектом: arr[:, np.newaxis] (= arr[:, None]) — компактніше у коді.

    Зв'язані функції

    np.squeeze()#

    Прибирає осі розміру 1 — зворотна до expand_dims.

    np.squeeze(a)  # (1, 5, 1) -> (5,)

    np.broadcast_to()#

    Розширює масив до заданої форми за правилами broadcasting (без копіювання даних).

    np.broadcast_to(np.array([1,2,3]), (4, 3))

    np.atleast_1d() / 2d / 3d#

    Гарантує мінімальну кількість осей. Корисно при роботі з вхідними даними змішаної розмірності.

    np.atleast_2d(scalar)

    Об'єднання та розділення 14

    np.concatenate()#

    extended

    Об'єднує послідовність масивів уздовж заданої осі.

    np.concatenate([a, b, c], axis=0)

    Коли використовувати

    Об'єднання масивів уздовж заданої осі. Аналог Python list.extend, але для ndarray.

    Ключові параметри

    arrays
    Послідовність (список/кортеж) масивів.
    axis
    Вісь конкатенації. Default 0.

    Поширені помилки та нюанси

    Усі масиви крім вибраної осі мають однакові розміри — інакше ValueError. Для додавання нової осі краще np.stack().

    Зв'язані функції

    np.stack()#

    extended

    Створює нову вісь і складає масиви вздовж неї. Усі мають мати однакову форму.

    np.stack([img1, img2, img3], axis=0)  # (3, H, W)

    Коли використовувати

    Створення нової осі і об'єднання масивів уздовж неї. Корисно для збору однотипних результатів у тензор.

    Ключові параметри

    arrays
    Послідовність однакової форми.
    axis
    Куди вставити нову вісь.

    Поширені помилки та нюанси

    Усі масиви мають однакову форму — інакше ValueError. Це не concatenate, який дозволяє різні розміри.

    Зв'язані функції

    Розширений приклад

    # Збирання батчу
    images = [np.random.rand(28, 28) for _ in range(100)]
    batch = np.stack(images, axis=0)  # (100, 28, 28)
    
    # Складання трьох сигналів у канали
    r, g, b = np.random.rand(100, 100), np.random.rand(100, 100), np.random.rand(100, 100)
    rgb = np.stack([r, g, b], axis=-1)  # (100, 100, 3)

    np.vstack()#

    extended

    Вертикальна конкатенація — складає рядки в стовпець матриці.

    np.vstack([row1, row2, row3])

    Коли використовувати

    Швидка вертикальна конкатенація — стек рядків, складання матриць по вертикалі.

    Ключові параметри

    tup
    Послідовність масивів.

    Поширені помилки та нюанси

    Для 1D перетворює їх на 2D-рядки. Не використовуйте у циклі — кожен виклик копіює всі дані. Збирайте у список і vstack один раз.

    Зв'язані функції

    np.hstack()#

    extended

    Горизонтальна конкатенація — стовпці поряд. Для 1D — простий concat.

    np.hstack([col_a, col_b])

    Коли використовувати

    Горизонтальна конкатенація — додавання стовпців, з'єднання 1D-масивів у довший.

    Ключові параметри

    tup
    Послідовність масивів.

    Поширені помилки та нюанси

    Для 2D — додає стовпці справа. Для 1D — об'єднує в один довший 1D.

    Зв'язані функції

    np.dstack()#

    Конкатенація по третій осі (depth). Корисно для побудови RGB-зображень.

    rgb = np.dstack([r, g, b])

    np.column_stack()#

    Кладе 1D-масиви як стовпці в 2D-матрицю.

    X = np.column_stack([x1, x2, x3])

    np.split()#

    Розрізає масив на n рівних частин або за заданими індексами.

    parts = np.split(arr, indices_or_sections=4)

    np.array_split()#

    Як np.split, але дозволяє нерівні частини.

    np.array_split(np.arange(10), 3)

    np.hsplit() / np.vsplit()#

    Спеціалізовані розрізання по горизонталі/вертикалі.

    left, right = np.hsplit(matrix, 2)

    np.tile()#

    Повторює масив n разів уздовж кожної осі. Аналог копіпасту блоків.

    np.tile([1, 2, 3], reps=(2, 4))

    np.repeat()#

    Повторює кожен елемент окремо n разів.

    np.repeat([1, 2, 3], repeats=3)  # [1,1,1,2,2,2,3,3,3]

    np.append()#

    Додає значення в кінець масиву (повертає новий масив, а не змінює на місці).

    np.append(arr, [10, 20])

    np.insert()#

    Вставляє значення на задану позицію.

    np.insert(arr, 2, [99, 100])

    np.delete()#

    Видаляє елементи за індексами або зріз.

    np.delete(arr, [0, 5, 10])

    Індексація та вибірка 11

    Boolean indexing#

    extended

    Вибір елементів за булевою маскою — найзручніший спосіб фільтрації.

    arr[arr > 0]

    Коли використовувати

    Найчастіший спосіб фільтрації в NumPy. Маска — масив True/False тієї ж форми; вибираються тільки True-елементи.

    Ключові параметри

    (синтаксис)
    arr[mask], де mask — bool ndarray.

    Поширені помилки та нюанси

    Завжди повертає 1D-масив, навіть якщо вхід — 2D. Для збереження форми використовуйте np.where(mask, arr, intermediate).

    Зв'язані функції

    Розширений приклад

    arr = np.array([1, -2, 3, -4, 5])
    
    # Фільтр
    positive = arr[arr > 0]                    # [1, 3, 5]
    
    # Заміна
    arr[arr < 0] = 0                            # [1, 0, 3, 0, 5]
    
    # Кілька умов
    mask = (arr > 0) & (arr < 4)               # використати & і |, не and/or!
    result = arr[mask]
    
    # 2D
    matrix = np.random.randn(5, 5)
    matrix[matrix < 0] = 0  # від'ємні → нулі

    Fancy indexing#

    Вибір за списком індексів. Дозволяє вибирати в довільному порядку.

    arr[[0, 2, 5, -1]]

    np.where()#

    extended

    Тернарний оператор для масивів: де condition=True, бери x, інакше y. Без x,y повертає індекси.

    np.where(arr > 0, arr, 0)  # негативні замінити на 0

    Коли використовувати

    Векторний if/else: 'де condition True, бери x, інакше y'. Заміна повільних list comprehensions.

    Ключові параметри

    condition
    Bool-масив.
    x, y
    Значення для True/False. Скаляри або масиви тієї ж форми.

    Поширені помилки та нюанси

    Без x, y повертає КОРТЕЖ масивів індексів — це інша операція (схоже на nonzero). Для повноцінного 'якщо-то-інакше' потрібні всі три аргументи.

    Зв'язані функції

    Розширений приклад

    # Заміна негативних на нуль
    clipped = np.where(arr > 0, arr, 0)
    
    # Кодування знаку
    sign = np.where(arr > 0, 1, np.where(arr < 0, -1, 0))
    
    # Повторна фільтрація з трансформацією
    result = np.where(mask, np.log(arr), np.nan)
    
    # Без x, y — індекси
    indices = np.where(arr > 5)  # tuple of arrays

    np.take()#

    Вибирає елементи за заданими індексами уздовж осі.

    np.take(matrix, [0, 2], axis=1)

    np.put()#

    Замінює елементи за плоскими індексами на місці.

    np.put(arr, [0, 2, 4], [100, 200, 300])

    np.choose()#

    Збирає масив із кількох джерел за індексами вибору.

    np.choose([0, 1, 0], [arr_a, arr_b])

    np.compress()#

    Вибирає елементи за булевим вектором уздовж осі. Аналог boolean indexing.

    np.compress([True, False, True, True], arr, axis=0)

    np.select()#

    Векторний switch/case: задає кілька умов та відповідні значення.

    np.select([x < 0, x < 10, x < 100], ['neg', 'small', 'med'], default='big')

    np.nonzero()#

    Повертає індекси ненульових елементів. Часто комбінується з логічними операціями.

    np.nonzero(arr > 0)

    np.flatnonzero()#

    Індекси ненульових елементів у плоскому масиві (1D).

    np.flatnonzero(mask)

    np.argwhere()#

    extended

    Повертає індекси ненульових елементів у формі (n, ndim).

    coords = np.argwhere(image > threshold)

    Коли використовувати

    Координати True-елементів у форматі (n, ndim). Зручно для отримання позицій у 2D/3D.

    Ключові параметри

    a
    Масив (інтерпретується як bool).

    Поширені помилки та нюанси

    Повертає 2D-масив координат, не tuple — інша форма ніж np.where(mask).

    Зв'язані функції

    Математичні операції 14

    np.add() / np.subtract()#

    Поелементне додавання/віднімання. Аналогічно операторам +/-.

    np.add(a, b)  # те саме що a + b

    np.multiply() / np.divide()#

    Поелементне множення/ділення. Не плутати з матричним добутком.

    np.multiply(a, b)  # елементне

    np.power()#

    Піднесення до степеня — поелементно.

    np.power(arr, 2)  # квадрат кожного елемента

    np.mod()#

    Залишок від ділення (модуль). Поелементно для масивів. Аналог оператора %, але працює з broadcasting.

    np.mod(arr, 7)

    np.sqrt()#

    extended

    Квадратний корінь. Для від'ємних значень повертає NaN з попередженням.

    np.sqrt(np.abs(arr))

    Коли використовувати

    Квадратний корінь поелементно. Stand-de-евклідової відстані, нормалізація.

    Ключові параметри

    x
    Масив (від'ємні → NaN з warning).

    Поширені помилки та нюанси

    Для від'ємних повертає NaN. Якщо не впевнені — np.sqrt(np.abs(x)) або перевіряйте діапазон.

    Зв'язані функції

    np.square()#

    Квадрат — швидше за np.power(x, 2).

    sse = np.sum(np.square(residuals))

    np.abs()#

    extended

    Модуль числа. Для комплексних — їх абсолютне значення.

    np.abs(arr)

    Коли використовувати

    Модуль числа. Виправлення знака помилок, обчислення відстаней, абсолютних значень.

    Ключові параметри

    x
    Масив.

    Поширені помилки та нюанси

    Для комплексних повертає sqrt(real^2 + imag^2) — це абсолютне значення комплексного, не просто додатна частина.

    Зв'язані функції

    np.exp()#

    extended

    Експонента e^x — основа для логістичних і експоненціальних моделей.

    softmax = np.exp(x) / np.sum(np.exp(x))

    Коли використовувати

    Експонента e^x — основа softmax, експоненціального розпаду, переходу між log і linear scale.

    Ключові параметри

    x
    Масив.

    Поширені помилки та нюанси

    Для великих x (>700) переповнення → inf. Стандартний прийом у softmax: відняти max(x) перед exp.

    Зв'язані функції

    Розширений приклад

    # Безпечний softmax
    def softmax(x):
        x_shifted = x - np.max(x)  # стабільність числова
        exp_x = np.exp(x_shifted)
        return exp_x / exp_x.sum()
    
    # Експоненціальне затухання
    t = np.linspace(0, 10, 100)
    decay = np.exp(-0.5 * t)

    np.log()#

    extended

    Натуральний логарифм (ln). Базова операція для лог-перетворень скісних розподілів і обчислення дохідності.

    log_returns = np.log(prices[1:] / prices[:-1])

    Коли використовувати

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

    Ключові параметри

    x
    Масив. Для x≤0 → NaN/-inf.

    Поширені помилки та нюанси

    log(0) = -inf, log(від'ємного) = NaN з warning. Для нулів використайте np.log1p (= log(1+x)) або фільтруйте.

    Зв'язані функції

    np.log2() / np.log10()#

    Логарифми за основою 2 (інформація, розмір файлів) і 10 (порядки величини, pH, dB). Для довільних основ — np.log(x)/np.log(base).

    decibels = 20 * np.log10(amplitude)

    np.log1p()#

    extended

    log(1 + x) — точніше для малих x; типова трансформація для скісних даних.

    df['log_income'] = np.log1p(df['income'])

    Коли використовувати

    Точніший за log(1+x) для малих x. Класичне перетворення скісних додатних змінних (доходи, перегляди).

    Ключові параметри

    x
    Масив. Має бути ≥ -1.

    Поширені помилки та нюанси

    Для x = 0 дає 0 (log(1) = 0) — на відміну від log(0) = -inf. Тому log1p — стандарт для трансформації даних з нулями.

    Зв'язані функції

    np.sign()#

    Повертає -1, 0 чи 1 залежно від знаку.

    np.sign(returns)

    np.reciprocal()#

    Обернене значення 1/x поелементно. Швидше за арифметичне ділення для float-масивів. Для цілих типів вернеться 0.

    np.reciprocal(arr.astype(float))

    np.clip()#

    extended

    Обрізає значення до заданого діапазону. Векторна заміна if/else.

    np.clip(arr, a_min=0, a_max=100)

    Коли використовувати

    Обрізання значень — приборкання викидів, обмеження до фізичних меж (наприклад, ймовірності [0, 1]).

    Ключові параметри

    a
    Масив.
    a_min
    Нижня межа (None = без обмеження).
    a_max
    Верхня межа.

    Поширені помилки та нюанси

    Векторно швидше за np.where(arr < lo, lo, np.where(arr > hi, hi, arr)). Один із прийомів захисту від overflow.

    Зв'язані функції

    Розширений приклад

    # Імовірності
    probs = np.clip(predictions, 1e-15, 1 - 1e-15)  # уникнути log(0)
    
    # Зарплати — нереалістичні аномалії
    df['salary'] = df['salary'].clip(lower=0, upper=1e6)
    
    # Відсотки
    percent = np.clip(value * 100, 0, 100)

    Тригонометрія та гіперболічні функції 6

    np.sin() / np.cos() / np.tan()#

    Стандартні тригонометричні функції — приймають радіани.

    y = np.sin(np.linspace(0, 2*np.pi, 100))

    np.arcsin() / np.arccos() / np.arctan()#

    Обернені тригонометричні функції. Результат у радіанах.

    angle = np.arctan(opposite / adjacent)

    np.arctan2()#

    Двоаргументна версія arctan, що враховує знаки x і y — повертає кут у правильному квадранті.

    theta = np.arctan2(y, x)

    np.sinh() / np.cosh() / np.tanh()#

    Гіперболічні функції. tanh часто використовується як функція активації в нейромережах.

    activation = np.tanh(weighted_sum)

    np.deg2rad() / np.rad2deg()#

    Конверсія між градусами та радіанами.

    rad = np.deg2rad(degrees)

    np.hypot()#

    sqrt(x^2 + y^2) без втрати точності — гіпотенуза.

    distances = np.hypot(dx, dy)

    Округлення 6

    np.round()#

    Округлення до n знаків після коми.

    np.round(arr, decimals=2)

    np.floor()#

    Округлення вниз — до найближчого меншого цілого.

    np.floor(arr)

    np.ceil()#

    Округлення вгору — до найближчого більшого цілого.

    np.ceil(arr)

    np.trunc()#

    Відкидання дробової частини — округлення в напрямку нуля.

    np.trunc([-1.7, 1.7])  # [-1, 1]

    np.rint()#

    Округлення до найближчого цілого як float.

    np.rint(arr)

    np.fix()#

    Те саме, що trunc — округлення до нуля.

    np.fix(arr)

    Статистика 17

    np.mean()#

    extended

    Середнє арифметичне. Параметр axis керує напрямком обчислення.

    np.mean(matrix, axis=0)  # середнє по стовпцях

    Коли використовувати

    Середнє арифметичне. Базова статистика, центральна тенденція. Для груп — комбінується з groupby.

    Ключові параметри

    a
    Масив.
    axis
    0 — по стовпцях, 1 — по рядках, None (default) — по всіх елементах.
    dtype
    Тип акумулятора. Для int8 краще float64 проти переповнення.

    Поширені помилки та нюанси

    Чутливе до викидів. Для робастності — np.median(). NaN зробить весь результат NaN — використайте np.nanmean().

    Зв'язані функції

    np.median()#

    extended

    Медіана — серединне значення впорядкованого масиву. На відміну від середнього, стійка до викидів і часто відображає типове значення краще.

    np.median(salaries)

    Коли використовувати

    Серединне значення. Стійка до викидів альтернатива np.mean — для скісних розподілів і даних з шумом.

    Ключові параметри

    a
    Масив.
    axis
    Осі для обчислення.

    Поширені помилки та нюанси

    Не плутайте з модою. Для парної кількості елементів — середнє двох центральних. NaN-варіант: np.nanmedian.

    Зв'язані функції

    np.std()#

    extended

    Стандартне відхилення. ddof=1 для незміщеного оцінювача (як у Pandas).

    np.std(returns, ddof=1)

    Коли використовувати

    Стандартне відхилення — міра розкиду даних. Для нормалізації, аналізу варіабельності.

    Ключові параметри

    a
    Масив.
    axis
    Осі.
    ddof
    Delta degrees of freedom. 0 (default) — population, 1 — sample.

    Поширені помилки та нюанси

    Default ddof=0 (population) — це різниця з pandas, де default ddof=1. Для незміщеної оцінки на вибірці — ddof=1.

    Зв'язані функції

    np.var()#

    Дисперсія — квадрат відхилення.

    np.var(arr, axis=0)

    np.sum()#

    extended

    Сума елементів. Швидше і пам'ятєефективніше за Python sum().

    total = np.sum(arr, axis=1)

    Коли використовувати

    Сума елементів — найшвидший спосіб порахувати total. Для матриць — суми рядків чи стовпців.

    Ключові параметри

    a
    Масив.
    axis
    0 — стовпці, 1 — рядки, None — всі.
    keepdims
    True — зберегти розмірність (для broadcasting).

    Поширені помилки та нюанси

    Для int8 з великими сумами — переповнення без warning! Завжди задавайте dtype=np.int64 для великих лічильників.

    Зв'язані функції

    np.min() / np.max()#

    extended

    Мінімум і максимум. Для індексів — argmin/argmax.

    np.max(arr, axis=0)

    Коли використовувати

    Екстремуми. Для пошуку діапазону, нормалізації min-max, виявлення викидів.

    Ключові параметри

    a
    Масив.
    axis
    Осі.
    initial
    Стартове значення (для порожніх масивів).

    Поширені помилки та нюанси

    Викидає ValueError на порожньому масиві без initial. NaN-версії: np.nanmin / np.nanmax.

    Зв'язані функції

    np.argmin() / np.argmax()#

    extended

    Індекс мінімального чи максимального елемента уздовж осі.

    best = np.argmax(scores)

    Коли використовувати

    Індекс найменшого/найбільшого значення. Класика для отримання 'кращого передбачення' моделі (argmax по probabilities).

    Ключові параметри

    a
    Масив.
    axis
    Осі.

    Поширені помилки та нюанси

    Якщо мінімум/максимум зустрічається кілька разів — повертається перший. Для всіх входжень — np.where(arr == arr.max()).

    Зв'язані функції

    np.ptp()#

    Peak-to-peak: max - min. Швидкий розмах.

    np.ptp(arr, axis=0)

    np.percentile()#

    extended

    Заданий перцентиль. Можна передати масив рівнів.

    np.percentile(arr, [5, 50, 95])

    Коли використовувати

    Квантилі — базис boxplot, виявлення викидів за IQR, побудова decile-аналізу.

    Ключові параметри

    a
    Масив.
    q
    Перцентиль 0-100. Може бути списком.
    axis
    Осі.
    method
    Алгоритм інтерполяції.

    Поширені помилки та нюанси

    q в percentile від 0 до 100, у quantile — від 0 до 1. Не плутайте.

    Зв'язані функції

    Розширений приклад

    # IQR для виявлення викидів
    q1, q3 = np.percentile(data, [25, 75])
    iqr = q3 - q1
    outliers = (data < q1 - 1.5*iqr) | (data > q3 + 1.5*iqr)
    
    # Кілька квантилів
    p5, p50, p95 = np.percentile(data, [5, 50, 95])
    
    # По осях у 2D
    medians = np.percentile(matrix, 50, axis=0)

    np.quantile()#

    Те саме, що percentile, але аргумент у частках [0, 1].

    np.quantile(arr, [0.25, 0.5, 0.75])

    np.average()#

    Середнє з можливими вагами — аргумент weights.

    np.average(prices, weights=volumes)

    np.cumsum() / np.cumprod()#

    Накопичувальна сума/добуток. Для ряду доходностей зазвичай беруть log + cumsum.

    np.cumsum(arr)

    np.cov()#

    Коваріаційна матриця. За замовчуванням рядки — змінні; rowvar=False якщо стовпці.

    np.cov(X.T)

    np.corrcoef()#

    Матриця коефіцієнтів кореляції Пірсона. Симетрична, з 1.0 на діагоналі. Показує силу і напрямок лінійних зв'язків між змінними.

    np.corrcoef(features, rowvar=False)

    np.histogram()#

    extended

    Підрахунок частот у бінах. Повертає кортеж (counts, bin_edges).

    counts, edges = np.histogram(arr, bins=30)

    Коли використовувати

    Підрахунок частот у бінах — на відміну від plt.hist, тільки числа без графіка. Для подальшого аналізу розподілу.

    Ключові параметри

    a
    Масив.
    bins
    Кількість бінів, список меж, чи стратегія ('auto', 'sturges', 'fd').
    range
    (min, max) — обрізає за межами.
    density
    True — нормалізувати на щільність ймовірності.

    Поширені помилки та нюанси

    Повертає (counts, edges) — counts має довжину n_bins, edges — n_bins + 1. Edges — межі, не центри. Для центрів: (edges[:-1] + edges[1:]) / 2.

    Зв'язані функції

    np.bincount()#

    Швидкий підрахунок частот цілих чисел від 0.

    np.bincount(labels)

    np.digitize()#

    Призначає кожному значенню номер біна, до якого воно потрапляє.

    bin_idx = np.digitize(arr, bins=[0, 10, 100, 1000])

    Лінійна алгебра 17

    np.dot()#

    extended

    Скалярний/матричний добуток. Для 2D еквівалент @ (matmul).

    y = np.dot(X, beta)

    Коли використовувати

    Скалярний/матричний добуток. Класична операція для обчислення прогнозів лінійних моделей: y = X @ w.

    Ключові параметри

    a, b
    Два масиви. Для 1D — скалярний; для 2D — матричний.

    Поширені помилки та нюанси

    Для 2D краще використовувати @ або np.matmul — чіткіша семантика. np.dot для 3D+ робить тензорне множення, що часто не те, що хочеться.

    Зв'язані функції

    np.matmul() / @#

    extended

    Матричний добуток із кращою підтримкою батчових тензорів. Оператор @ — синтаксичний цукор.

    result = A @ B  # матричне множення

    Коли використовувати

    Матричне множення з коректною підтримкою батчів. Сучасний стандарт замість np.dot.

    Ключові параметри

    a, b
    Масиви.

    Поширені помилки та нюанси

    Не множить на скаляр (на відміну від np.dot). Для скаляра використовуйте *.

    Зв'язані функції

    Розширений приклад

    X = np.random.rand(100, 5)  # 100 зразків, 5 фічей
    w = np.random.rand(5)        # коефіцієнти
    y = X @ w                    # передбачення (100,)
    
    # Багатошаровий перцептрон
    A1 = X @ W1 + b1            # (100, hidden)
    A2 = A1 @ W2 + b2           # (100, output)
    
    # Батчове множення матриць
    batch_a = np.random.rand(10, 3, 4)
    batch_b = np.random.rand(10, 4, 5)
    result = batch_a @ batch_b   # (10, 3, 5)

    np.vdot()#

    Скалярний добуток із попереднім розгортанням масивів у 1D.

    np.vdot(u, v)

    np.inner() / np.outer()#

    Внутрішній і зовнішній добутки векторів.

    np.outer([1, 2], [3, 4])  # 2x2 матриця

    np.cross()#

    Векторний добуток у 3D-просторі. Повертає вектор, перпендикулярний обом вхідним. Використовується в фізиці, графіці і обчисленні нормалей.

    n = np.cross(v1, v2)

    np.trace()#

    Сума діагональних елементів матриці.

    np.trace(M)

    np.linalg.inv()#

    extended

    Обернена матриця. Для розв'язування рівнянь краще np.linalg.solve.

    Ainv = np.linalg.inv(A)

    Коли використовувати

    Обернена матриця для аналітичних рішень — нормальні рівняння в регресії, перетворення координат.

    Ключові параметри

    a
    Квадратна матриця.

    Поширені помилки та нюанси

    ДУЖЕ повільно і чисельно нестабільно для великих/погано обумовлених матриць. Для розв'язування Ax=b завжди використовуйте np.linalg.solve(A, b) замість inv(A) @ b.

    Зв'язані функції

    np.linalg.solve()#

    extended

    Розв'язує систему лінійних рівнянь Ax = b. Швидше і чисельно стабільніше за inv.

    x = np.linalg.solve(A, b)

    Коли використовувати

    Розв'язування систем лінійних рівнянь Ax=b. Швидше і стабільніше за inv@b. Стандарт для лінійної алгебри.

    Ключові параметри

    a
    Квадратна матриця коефіцієнтів.
    b
    Вектор правих частин (або матриця для кількох систем).

    Поширені помилки та нюанси

    Якщо матриця сингулярна або погано обумовлена — викине LinAlgError або поверне ненадійні результати. Для прямокутних A — np.linalg.lstsq.

    Зв'язані функції

    np.linalg.det()#

    Визначник матриці. =0 означає сингулярність.

    np.linalg.det(M)

    np.linalg.eig()#

    Власні значення та власні вектори квадратної матриці.

    eigenvalues, eigenvectors = np.linalg.eig(C)

    np.linalg.svd()#

    extended

    Сингулярний розклад: A = U S V^T. Основа PCA та багатьох алгоритмів.

    U, S, Vt = np.linalg.svd(X, full_matrices=False)

    Коли використовувати

    Сингулярний розклад — основа PCA, latent semantic analysis, рекомендаційних систем.

    Ключові параметри

    a
    Прямокутна матриця.
    full_matrices
    False — компактний (економний по пам'яті), True (default) — повний.

    Поширені помилки та нюанси

    За замовчуванням full_matrices=True, що для (1000, 5) дає U розміру (1000, 1000) — гігабайти. Для PCA завжди задавайте full_matrices=False.

    Зв'язані функції

    Розширений приклад

    # PCA через SVD
    X_centered = X - X.mean(axis=0)
    U, S, Vt = np.linalg.svd(X_centered, full_matrices=False)
    
    # Відсоток поясненої дисперсії
    explained = S**2 / np.sum(S**2)
    
    # Проекція на перші k компонент
    k = 2
    X_pca = U[:, :k] * S[:k]

    np.linalg.qr()#

    QR-розклад — для метода найменших квадратів і ортогоналізації.

    Q, R = np.linalg.qr(X)

    np.linalg.cholesky()#

    Розклад Холецького для додатно визначеної симетричної матриці.

    L = np.linalg.cholesky(cov_matrix)

    np.linalg.norm()#

    extended

    Норма вектора або матриці. ord задає тип норми.

    np.linalg.norm(v - u, ord=2)  # евклідова відстань

    Коли використовувати

    Норма вектора — евклідова відстань (L2), Manhattan (L1), та інші. Для нормалізації, регуляризації, distance metrics.

    Ключові параметри

    x
    Масив.
    ord
    Тип норми: 2 (default, евклідова), 1 (Manhattan), np.inf, 'fro' (Frobenius для матриць).
    axis
    По якій осі рахувати норми.

    Поширені помилки та нюанси

    Без axis для матриці рахує Frobenius, не Manhattan. Для row-wise норм у матриці — axis=1.

    Зв'язані функції

    np.linalg.matrix_rank()#

    Ранг матриці — кількість лінійно незалежних рядків/стовпців.

    np.linalg.matrix_rank(A)

    np.linalg.lstsq()#

    Розв'язок методом найменших квадратів для систем без точного розв'язку.

    coef, residuals, rank, sv = np.linalg.lstsq(X, y, rcond=None)

    np.linalg.pinv()#

    Псевдообернена матриця Мура-Пенроуза — узагальнення для прямокутних матриць.

    Xpinv = np.linalg.pinv(X)

    Логічні операції та порівняння 9

    np.all()#

    extended

    True, якщо всі елементи True. По осях — поелементно.

    np.all(arr > 0)

    Коли використовувати

    Перевірка, що всі елементи задовольняють умову. Стандартний спосіб валідувати дані.

    Ключові параметри

    a
    Масив (bool).
    axis
    Скоротити лише по осях.

    Поширені помилки та нюанси

    Не плутайте з Python all() — np.all працює векторно і швидше для ndarray.

    Зв'язані функції

    np.any()#

    extended

    True, якщо хоча б один елемент True.

    np.any(np.isnan(arr))

    Коли використовувати

    Перевірка наявності хоч одного True. Швидкий спосіб переконатися, що дані містять хоч один пропуск чи аномалію.

    Ключові параметри

    a
    Масив.
    axis
    Осі.

    Поширені помилки та нюанси

    Аналогічно np.all — не плутайте з Python any() для продуктивності.

    Зв'язані функції

    np.isnan() / np.isinf() / np.isfinite()#

    extended

    Перевірки на NaN, нескінченності, скінченні числа.

    valid = arr[np.isfinite(arr)]

    Коли використовувати

    Виявлення проблемних значень після обчислень. Класична санітарна перевірка перед feeding в модель.

    Ключові параметри

    x
    Масив (float).

    Поширені помилки та нюанси

    isnan не працює для object/string (помилка). isfinite — найбезпечніший: True тільки для скінченних чисел (без NaN та inf).

    Зв'язані функції

    np.equal() / np.not_equal()#

    Поелементне порівняння на (не)рівність. Для float краще np.isclose.

    np.equal(a, b)

    np.greater() / np.less()#

    Поелементне > / <. Аналоги операторів.

    mask = np.greater(arr, threshold)

    np.logical_and() / or() / not() / xor()#

    Логічні операції над булевими масивами. На відміну від and/or, працюють поелементно.

    np.logical_and(x > 0, x < 100)

    np.isclose()#

    extended

    Перевіряє близькість float-значень з допустимою похибкою.

    np.isclose(0.1 + 0.2, 0.3)  # True

    Коли використовувати

    Перевірка близькості float-значень з допустимою похибкою. Стандарт для тестів числових обчислень.

    Ключові параметри

    a, b
    Масиви чи скаляри.
    rtol
    Відносна толерантність (default 1e-5).
    atol
    Абсолютна (default 1e-8).

    Поширені помилки та нюанси

    0.1 + 0.2 != 0.3 у float — звичайне == дасть False! Завжди використовуйте isclose для float-порівнянь.

    Зв'язані функції

    np.allclose()#

    True, якщо всі елементи близькі. Стандартний тест чисельної рівності.

    assert np.allclose(predicted, expected, atol=1e-6)

    np.array_equal()#

    Перевіряє точну рівність масивів, включаючи форму.

    np.array_equal(a, b)

    Сортування 6

    np.sort()#

    extended

    Сортує копію масиву по заданій осі.

    np.sort(arr, axis=-1, kind='quicksort')

    Коли використовувати

    Сортування масиву. Для відсортованої видачі, побудови статистик, медіани.

    Ключові параметри

    a
    Масив.
    axis
    Осі (default -1, по останній).
    kind
    'quicksort', 'mergesort' (стабільне), 'stable'.

    Поширені помилки та нюанси

    За замовчуванням нестабільне (quicksort). Для стабільного — kind='stable'.

    Зв'язані функції

    np.argsort()#

    extended

    Повертає індекси, які впорядкували б масив. Корисно для синхронного сортування кількох масивів.

    order = np.argsort(scores)[::-1]; ranked = items[order]

    Коли використовувати

    Індекси, що впорядкували б масив. Для синхронного сортування кількох масивів за одним ключем.

    Ключові параметри

    a
    Масив.
    axis
    Осі.
    kind
    Алгоритм.

    Поширені помилки та нюанси

    Класичний прийом для top-N з ключем: order = np.argsort(scores)[::-1][:N]; result = items[order].

    Зв'язані функції

    np.lexsort()#

    Сортування за кількома ключами (як ORDER BY у SQL). Останній ключ має найвищий пріоритет.

    idx = np.lexsort((dates, names))

    np.partition()#

    Часткове сортування — розташовує k-те за порядком значення на правильному місці.

    np.partition(arr, kth=10)  # 10 найменших спереду

    np.argpartition()#

    Як partition, але повертає індекси. Швидко знаходить top-k.

    top_k = np.argpartition(scores, -10)[-10:]

    np.searchsorted()#

    Бінарний пошук — куди вставити значення в відсортований масив, щоб порядок зберігся.

    np.searchsorted([1, 3, 5, 7, 9], [4, 8])

    Унікальні значення та операції з множинами 6

    np.unique()#

    extended

    Унікальні відсортовані елементи. return_counts=True дає частоти.

    vals, counts = np.unique(arr, return_counts=True)

    Коли використовувати

    Унікальні значення (відсортовані). З опціями частот, обернених індексів — універсальний інструмент аналізу категорій.

    Ключові параметри

    a
    Масив.
    return_counts
    True — повертає (унікальні, частоти).
    return_index
    True — індекси перших входжень.
    return_inverse
    True — індекси для відновлення.

    Поширені помилки та нюанси

    Завжди сортує. Для збереження порядку появи — pd.unique() (але це pandas).

    Зв'язані функції

    Розширений приклад

    # Унікальні значення
    np.unique([1, 3, 2, 1, 3, 2, 4])  # [1, 2, 3, 4]
    
    # З частотами
    vals, counts = np.unique(labels, return_counts=True)
    freq = dict(zip(vals, counts))
    
    # Кодування категорій
    codes, inverse = np.unique(categories, return_inverse=True)
    # inverse — це коди (0..n-1), які можна використати замість строк

    np.intersect1d()#

    Перетин двох масивів — спільні унікальні значення.

    common = np.intersect1d(set_a, set_b)

    np.union1d()#

    Об'єднання — унікальні значення з обох масивів.

    all_ids = np.union1d(ids1, ids2)

    np.setdiff1d()#

    Різниця множин — значення з першого масиву, яких немає в другому.

    missing = np.setdiff1d(expected, received)

    np.isin()#

    Булева маска — чи входить кожен елемент першого масиву в другий.

    mask = np.isin(arr, [1, 3, 5, 7])

    np.setxor1d()#

    Симетрична різниця — значення, які є тільки в одному з двох масивів.

    np.setxor1d(a, b)

    Робота з NaN-значеннями 5

    np.nanmean() / np.nanmedian()#

    extended

    Середнє/медіана з ігноруванням NaN. Звичайні mean/median вертають NaN.

    np.nanmean(arr_with_nans)

    Коли використовувати

    Робота з даними, де є пропуски. Без 'nan'-варіантів звичайні mean/median повернуть NaN, якщо хоч одне значення відсутнє.

    Ключові параметри

    a
    Масив.
    axis
    Осі.

    Поширені помилки та нюанси

    Якщо у певному вимірі ВСІ значення NaN — повернеться NaN з RuntimeWarning. Очікуйте і опрацьовуйте.

    Зв'язані функції

    np.nansum() / np.nanprod()#

    Сума/добуток без NaN. NaN трактуються як 0/1.

    np.nansum(arr)

    np.nanstd() / np.nanvar()#

    Стандартне відхилення та дисперсія без NaN.

    np.nanstd(returns)

    np.nanmin() / np.nanmax()#

    Мінімум і максимум уздовж осі з ігноруванням NaN. Звичайні np.min/max повернуть NaN якщо хоч одне значення відсутнє.

    np.nanmax(matrix, axis=1)

    np.nan_to_num()#

    Замінює NaN на 0 (або задане), а інфініті на великі скінченні числа.

    np.nan_to_num(arr, nan=0.0, posinf=1e9)
    Бібліотека · 15 розділів · 116 функцій · 35 розширених

    Matplotlib

    Matplotlib — фундамент візуалізації в Python. Pyplot пропонує MATLAB-подібний API для швидких графіків, а об'єктно-орієнтований підхід через Figure/Axes дає повний контроль над кожним елементом. Попри новіші бібліотеки, Matplotlib залишається стандартом для наукових публікацій і базою для Seaborn та Pandas.plot().

    Створення фігур та осей 10

    plt.figure()#

    extended

    Створює новий об'єкт Figure — контейнер усього графіка. figsize задає розмір у дюймах.

    fig = plt.figure(figsize=(10, 6), dpi=100)

    Коли використовувати

    Створення нової фігури — контейнера для графіків. Базовий патерн при ручному управлінні розмірами і збереженні.

    Ключові параметри

    figsize
    Кортеж (width, height) у дюймах. Default (6.4, 4.8).
    dpi
    Точок на дюйм. Default 100; для друку 300+.
    facecolor
    Колір тла фігури.

    Поширені помилки та нюанси

    Якщо створити багато фігур у циклі без plt.close(), пам'ять з'їдається. Використовуйте plt.close('all') періодично.

    Зв'язані функції

    plt.subplots()#

    extended

    Створює фігуру і сітку Axes одним викликом. Найпоширеніший спосіб старту графіка.

    fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(12, 8))

    Коли використовувати

    Найпоширеніший спосіб створити фігуру + сітку осей одним викликом. Стандарт для object-oriented Matplotlib.

    Ключові параметри

    nrows, ncols
    Розміри сітки.
    figsize
    Розмір фігури.
    sharex, sharey
    True — спільні осі між підграфіками.
    constrained_layout
    True — автоматичне розташування без перекриттів.

    Поширені помилки та нюанси

    При nrows=1 і ncols=1 повертає одну вісь, не масив. При інших розмірах — 2D ndarray. Зручний прийом: ax = ax.flatten() для 1D-ітерації.

    Розширений приклад

    # Одна вісь
    fig, ax = plt.subplots(figsize=(8, 5))
    ax.plot(x, y)
    
    # Сітка 2x2 — масив осей
    fig, axs = plt.subplots(2, 2, figsize=(12, 8), constrained_layout=True)
    axs[0, 0].plot(x1, y1)
    axs[0, 1].scatter(x2, y2)
    axs[1, 0].hist(data)
    axs[1, 1].boxplot(groups)
    
    # Спільна вісь X для часових рядів
    fig, axs = plt.subplots(3, 1, sharex=True, figsize=(12, 9))
    for ax, series in zip(axs, [s1, s2, s3]):
        ax.plot(dates, series)

    plt.subplot()#

    Додає одну вісь у сітку (style 'pyplot'). Зручно для швидких прототипів.

    plt.subplot(2, 1, 1); plt.plot(x, y)

    fig.add_subplot()#

    Додає Axes до існуючої Figure. Підтримує projection='polar', '3d'.

    ax = fig.add_subplot(1, 1, 1, projection='3d')

    plt.subplot_mosaic()#

    Створює складні розкладки осей зі string layout — інтуїтивніше за gridspec.

    fig, axs = plt.subplot_mosaic('AB;CC', figsize=(10, 6))

    fig.add_axes()#

    Розміщує Axes за абсолютними координатами [left, bottom, width, height] від 0 до 1.

    ax_inset = fig.add_axes([0.6, 0.6, 0.25, 0.25])

    plt.gcf()#

    Get current figure — повертає поточну активну Figure.

    fig = plt.gcf()

    plt.gca()#

    Get current axes — повертає поточну активну вісь.

    ax = plt.gca(); ax.set_title('...')

    plt.close()#

    extended

    Закриває Figure і звільняє пам'ять. Важливо в циклах генерації багатьох графіків.

    plt.close(fig)  # або plt.close('all')

    Коли використовувати

    Звільнення пам'яті після генерації багатьох графіків (звіти, GIF-анімації).

    Ключові параметри

    fig
    Figure об'єкт, число (id) або 'all' для всіх.

    Поширені помилки та нюанси

    У циклах без close() пам'ять накопичується — після ~20 фігур warning 'too many open figures'. plt.close('all') рятує.

    Зв'язані функції

    plt.show()#

    extended

    Відображає всі відкриті фігури. У Jupyter зазвичай не потрібно.

    plt.show()

    Коли використовувати

    Відображення всіх відкритих фігур. У скриптах — обов'язково; у Jupyter не потрібно.

    Ключові параметри

    block
    True (default у scripts) — блокує до закриття вікна.

    Поширені помилки та нюанси

    У Jupyter notebooks plt.show() автоматично — викликати не треба, якщо є %matplotlib inline.

    Зв'язані функції

    Базові типи графіків 17

    ax.plot()#

    extended

    Лінійний графік — найфундаментальніший. Можна задати колір, стиль ліній і маркерів.

    ax.plot(x, y, color='steelblue', linewidth=2, linestyle='--', marker='o')

    Коли використовувати

    Лінійні графіки — основа візуалізації часових рядів, функцій, трендів.

    Ключові параметри

    x, y
    Дані. Якщо тільки y — індекси як x.
    color (c)
    Колір ('red', 'C0', '#ff0000').
    linewidth (lw)
    Товщина.
    linestyle (ls)
    '-', '--', '-.', ':', або без лінії 'none'.
    marker
    Маркер: 'o', 's', '^', '*' тощо.
    label
    Підпис для легенди.

    Поширені помилки та нюанси

    Кілька викликів plot() на одній осі додають лінії — не треба окремих subplot. Для категоріальних даних краще ax.bar().

    Зв'язані функції

    Розширений приклад

    # Кілька ліній на одному графіку
    fig, ax = plt.subplots(figsize=(10, 5))
    ax.plot(x, y1, label='Trend 1', color='steelblue', lw=2)
    ax.plot(x, y2, label='Trend 2', color='coral', lw=2, linestyle='--')
    ax.plot(x, y3, label='Trend 3', marker='o', markersize=4)
    ax.legend()
    ax.set_xlabel('Date')
    ax.set_ylabel('Value')
    
    # Format string — швидкий синтаксис
    ax.plot(x, y, 'r--o')  # червона штрихова лінія з кружечками

    ax.scatter()#

    extended

    Точковий графік — для розсіювання. s — розмір точок, c — кольори (можуть кодувати третю змінну).

    ax.scatter(x, y, s=sizes, c=values, cmap='viridis', alpha=0.6)

    Коли використовувати

    Точкові діаграми — кореляції, кластери, розподіли в 2D. На відміну від plot з marker, кодує розмір і колір окремо для кожної точки.

    Ключові параметри

    x, y
    Координати.
    s
    Розмір (скаляр чи масив).
    c
    Колір (значення для colormap або список кольорів).
    cmap
    Назва colormap для числового c.
    alpha
    Прозорість (для багатьох точок).

    Поширені помилки та нюанси

    Для тисяч точок scatter повільний — використовуйте plot(..., 'o') або hexbin для теплової карти щільності. Налаштовуйте alpha (0.3-0.5) щоб бачити перекриття.

    Зв'язані функції

    Розширений приклад

    # Простий scatter
    ax.scatter(df['gdp'], df['life_exp'])
    
    # Третій вимір через колір
    ax.scatter(df['x'], df['y'], c=df['value'], cmap='viridis', s=50)
    plt.colorbar(label='Value')
    
    # Розмір кодує популяцію
    ax.scatter(df['gdp'], df['life'], s=df['pop']/1e6, alpha=0.6,
               c=df['continent'].astype('category').cat.codes, cmap='Set1')
    
    # Великі набори — alpha + малі точки
    ax.scatter(x, y, s=1, alpha=0.3, color='black')

    ax.bar()#

    extended

    Стовпчикова діаграма (вертикальна). Висоти стовпців задає аргумент height.

    ax.bar(categories, values, color='coral', edgecolor='black')

    Коли використовувати

    Стовпчикові діаграми — порівняння категорій, частот, агрегованих значень.

    Ключові параметри

    x
    Позиції стовпців.
    height
    Висоти.
    width
    Ширина (default 0.8).
    color
    Колір — скаляр чи список.
    yerr
    Помилки (CI) як масив.

    Поширені помилки та нюанси

    Для категоріальних осей передавайте x як список рядків — Matplotlib сам розставить. Для grouped bars вручну зсувайте позиції.

    Зв'язані функції

    Розширений приклад

    import numpy as np
    
    categories = ['A', 'B', 'C', 'D', 'E']
    values = [23, 45, 56, 78, 32]
    
    # Базовий
    fig, ax = plt.subplots(figsize=(8, 5))
    bars = ax.bar(categories, values, color='steelblue', edgecolor='black')
    
    # Підписи поверх стовпців
    ax.bar_label(bars, fmt='%d', padding=3)
    
    # Grouped bars
    x = np.arange(len(categories))
    width = 0.35
    ax.bar(x - width/2, group1, width, label='2023')
    ax.bar(x + width/2, group2, width, label='2024')
    ax.set_xticks(x, categories)
    
    # З довірчими інтервалами
    ax.bar(categories, means, yerr=stds, capsize=5, color='coral')

    ax.barh()#

    extended

    Горизонтальна стовпчикова діаграма — краще, коли категорій багато або їх назви довгі.

    ax.barh(countries, gdp, color='steelblue')

    Коли використовувати

    Горизонтальні стовпчики — коли категорій багато або їх назви довгі. Read-friendly для мобільних звітів.

    Ключові параметри

    y
    Категорії.
    width
    Значення (довжини).
    height
    Висота стовпців.

    Поширені помилки та нюанси

    Інверсуйте порядок категорій (ax.invert_yaxis()) щоб найбільший був зверху — звичніше для читання.

    Зв'язані функції

    ax.hist()#

    extended

    Гістограма частот. bins задає кількість або межі бінів. density=True нормалізує.

    ax.hist(data, bins=30, edgecolor='black', alpha=0.7)

    Коли використовувати

    Розподіл числової змінної. Перший крок при дослідженні нового стовпця.

    Ключові параметри

    x
    Дані.
    bins
    Кількість бінів, список меж, або стратегія ('auto', 'fd', 'sturges').
    density
    True — нормалізувати на щільність ймовірності.
    alpha
    Прозорість для накладання кількох гістограм.
    edgecolor
    Колір рамок стовпців.

    Поширені помилки та нюанси

    Default bins=10 — часто замало. Для більшості даних 30-50 бінів дають кращу картину. Стратегія 'auto' непогана.

    Зв'язані функції

    Розширений приклад

    # Базова гістограма
    ax.hist(data, bins=30, edgecolor='black', alpha=0.7)
    
    # Накладання двох розподілів
    ax.hist(group_a, bins=30, alpha=0.5, label='Group A', color='steelblue')
    ax.hist(group_b, bins=30, alpha=0.5, label='Group B', color='coral')
    ax.legend()
    
    # Нормалізована (density)
    ax.hist(returns, bins=50, density=True, edgecolor='white')
    
    # Кумулятивна
    ax.hist(values, bins=100, cumulative=True, density=True)

    ax.boxplot()#

    extended

    Boxplot: медіана, квартилі, вуса, викиди. Приймає список масивів для кількох категорій.

    ax.boxplot([group_a, group_b, group_c], labels=['A', 'B', 'C'])

    Коли використовувати

    Швидке порівняння розподілів — медіана, квартилі, викиди. Класика exploratory analysis.

    Ключові параметри

    x
    Список масивів (по одному на категорію).
    labels
    Підписи.
    notch
    True — V-подібні виїмки (CI для медіани).
    showmeans
    True — додає позначку середнього.

    Поширені помилки та нюанси

    Default whis=1.5 — вуса не далі 1.5*IQR; точки далі — викиди. Для важких хвостів (фінансові ряди) збільшіть whis або переходьте на violinplot.

    Зв'язані функції

    ax.violinplot()#

    Violin plot — комбінація boxplot і KDE-розподілу. Показує форму розподілу.

    ax.violinplot(datasets, showmeans=True, showmedians=True)

    ax.pie()#

    extended

    Кругова діаграма. autopct додає відсотки. Уникайте для понад 5-6 категорій.

    ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)

    Коли використовувати

    Кругова діаграма для часток. Краще уникати для понад 5 категорій — використати bar.

    Ключові параметри

    x
    Значення (нормалізуються до 100%).
    labels
    Підписи.
    autopct
    Формат відсотків ('%1.1f%%').
    startangle
    Кут старту.
    explode
    Список зміщень (для виділення сектора).

    Поширені помилки та нюанси

    Pie chart важко читається — людям складно порівнювати кутові розміри. Розгляньте bar chart або waffle chart.

    Зв'язані функції

    ax.fill_between()#

    extended

    Заповнює область між двома кривими — для довірчих інтервалів і smooth-зон.

    ax.fill_between(x, y_low, y_high, alpha=0.3, color='blue')

    Коли використовувати

    Заповнена область між двома кривими — стандарт для довірчих інтервалів навколо середнього або прогнозу.

    Ключові параметри

    x
    Координати.
    y1, y2
    Верхня і нижня межі.
    alpha
    Прозорість (зазвичай 0.2-0.4).
    color
    Колір.

    Поширені помилки та нюанси

    Без сортування за x можуть з'явитись дивні артефакти. Завжди sort першими.

    Зв'язані функції

    Розширений приклад

    # Прогноз з CI
    fig, ax = plt.subplots(figsize=(10, 5))
    ax.plot(dates, forecast, label='Forecast', color='steelblue', lw=2)
    ax.fill_between(dates, ci_low, ci_high, alpha=0.3, color='steelblue', label='95% CI')
    ax.legend()
    
    # Навколо середнього
    mean = data.mean(axis=0)
    std = data.std(axis=0)
    ax.plot(x, mean, color='black')
    ax.fill_between(x, mean - std, mean + std, alpha=0.2)
    ax.fill_between(x, mean - 2*std, mean + 2*std, alpha=0.1)

    ax.fill_betweenx()#

    Як fill_between, але горизонтальне — заповнення між кривими відносно осі x.

    ax.fill_betweenx(y, x_left, x_right, alpha=0.3)

    ax.stackplot()#

    Накопичувальна площинна діаграма — для часток, що в сумі дають 100%.

    ax.stackplot(years, [adults, teens, kids], labels=['Adults', 'Teens', 'Kids'])

    ax.step()#

    Сходинковий графік — для дискретних змін у часі.

    ax.step(x, y, where='post', color='darkred')

    ax.errorbar()#

    extended

    Графік із вертикальними/горизонтальними помилками (довірчими інтервалами).

    ax.errorbar(x, y, yerr=std, fmt='o', capsize=5)

    Коли використовувати

    Точки/лінія з вертикальними/горизонтальними помилками. Класика для експериментальних даних з невизначеністю.

    Ключові параметри

    x, y
    Координати.
    yerr, xerr
    Помилки — скаляр, масив, або (lower, upper).
    fmt
    Формат точок ('o', 's', 'none').
    capsize
    Розмір 'кепок' помилок.

    Поширені помилки та нюанси

    Без fmt='none' завжди малюється лінія між точками. Для лише точок з помилками — fmt='o'.

    Зв'язані функції

    ax.stem()#

    Stem plot — для дискретних послідовностей (часові імпульси, коефіцієнти).

    ax.stem(n, x_n, basefmt=' ')

    ax.eventplot()#

    Графік подій — горизонтальні риски на часовій осі. Корисно для логів.

    ax.eventplot([events_a, events_b], colors=['blue', 'red'])

    ax.hexbin()#

    Гексагональна теплова карта — альтернатива scatter для великих наборів.

    ax.hexbin(x, y, gridsize=40, cmap='Blues')

    ax.hist2d()#

    Двовимірна гістограма — щільність точок у квадратних бінах.

    ax.hist2d(x, y, bins=50, cmap='inferno')

    Зображення та теплові карти 8

    ax.imshow()#

    extended

    Відображає 2D-масив як зображення або теплову карту. cmap керує колір-схемою.

    ax.imshow(matrix, cmap='RdBu_r', aspect='auto', interpolation='nearest')

    Коли використовувати

    Відображення матриці чи зображення. Для теплових карт, конф'юзіонних матриць, 2D-масивів даних.

    Ключові параметри

    X
    2D-масив.
    cmap
    Colormap ('viridis', 'RdBu_r', 'gray').
    vmin, vmax
    Межі шкали.
    aspect
    'auto' або 'equal' (для зображень).
    interpolation
    'nearest' (без згладжування), 'bilinear' тощо.

    Поширені помилки та нюанси

    За замовчуванням Y-вісь перевернута (як зображення). Для звичайної орієнтації — origin='lower'.

    Зв'язані функції

    ax.matshow()#

    Як imshow, але з осями зверху і автоматичним aspect='equal'. Для кореляційних матриць.

    ax.matshow(corr_matrix, cmap='coolwarm', vmin=-1, vmax=1)

    ax.pcolormesh()#

    Псевдокольорове зображення з нерівномірною сіткою. Краще за imshow для нерегулярних координат.

    ax.pcolormesh(X, Y, Z, cmap='viridis', shading='auto')

    ax.contour()#

    Лінії рівня (ізолінії) для функції двох змінних.

    cs = ax.contour(X, Y, Z, levels=10, colors='black')

    ax.contourf()#

    Заповнені контури — як топографічна карта з кольоровими шарами.

    ax.contourf(X, Y, Z, levels=20, cmap='terrain')

    ax.clabel()#

    Підписи значень на лініях контуру.

    ax.clabel(cs, inline=True, fontsize=8, fmt='%.1f')

    ax.quiver()#

    Векторне поле — стрілки задають напрямок та величину.

    ax.quiver(X, Y, U, V, scale=20)

    ax.streamplot()#

    Лінії течії векторного поля — гладкіше за quiver для густих полів.

    ax.streamplot(X, Y, U, V, density=1.5, color=speed, cmap='plasma')

    Підписи та заголовки 8

    ax.set_title()#

    extended

    Заголовок осі (підграфіка). loc задає вирівнювання.

    ax.set_title('Динаміка продажів', fontsize=14, fontweight='bold', loc='left')

    Коли використовувати

    Заголовок підграфіка. Для робочих графіків — обов'язково; одразу зрозуміло про що.

    Ключові параметри

    label
    Текст.
    fontsize
    Розмір.
    fontweight
    'normal', 'bold'.
    loc
    'left', 'center' (default), 'right'.
    pad
    Відступ від графіка.

    Поширені помилки та нюанси

    Не плутайте з fig.suptitle() — це для заголовка ВСІЄЇ фігури при кількох підграфіках.

    Зв'язані функції

    fig.suptitle()#

    extended

    Загальний заголовок усієї фігури — над усіма підграфіками.

    fig.suptitle('Звіт за 2024 рік', fontsize=16, y=0.98)

    Коли використовувати

    Загальний заголовок над усіма підграфіками. Тема звіту, контекст експерименту.

    Ключові параметри

    t
    Текст.
    fontsize
    Розмір.
    y
    Вертикальна позиція (0-1).

    Поширені помилки та нюанси

    Може перекриватися з підграфіками — використайте constrained_layout=True або fig.subplots_adjust(top=0.9).

    Зв'язані функції

    ax.set_xlabel() / ax.set_ylabel()#

    extended

    Підписи осей X і Y. fontsize, fontweight, color і labelpad задають вигляд і відступ від рисочок.

    ax.set_xlabel('Час, дні'); ax.set_ylabel('Ціна, ₴')

    Коли використовувати

    Підписи осей з одиницями. Графік без них — погана практика.

    Ключові параметри

    xlabel/ylabel
    Текст.
    fontsize
    Розмір.
    labelpad
    Відступ від рисочок.

    Поширені помилки та нюанси

    Для математичних виразів використовуйте LaTeX: r'$\mu_{X}$', r'$\sigma^2$'.

    Зв'язані функції

    ax.text()#

    Розміщує текст у точці (x, y) у координатах даних.

    ax.text(0.5, 100, 'Пік продажів', fontsize=11, ha='center')

    ax.annotate()#

    extended

    Анотація зі стрілкою від тексту до точки. Найкорисніший спосіб виділити особливі точки.

    ax.annotate('max', xy=(x_max, y_max), xytext=(x_max+1, y_max+5), arrowprops={'arrowstyle': '->'})

    Коли використовувати

    Анотація зі стрілкою. Найкорисніший спосіб виділити max/min, ключові події, аномалії.

    Ключові параметри

    text
    Текст анотації.
    xy
    Точка (x, y) куди вказує стрілка.
    xytext
    Позиція тексту.
    arrowprops
    Словник стилю стрілки.

    Поширені помилки та нюанси

    xy і xytext у координатах даних. Для координат відносно осі: textcoords='axes fraction'.

    Зв'язані функції

    Розширений приклад

    # Виділити максимум
    i_max = y.argmax()
    ax.annotate(
        f'Max: {y[i_max]:.0f}',
        xy=(x[i_max], y[i_max]),
        xytext=(x[i_max] + 5, y[i_max] + 10),
        fontsize=11,
        arrowprops=dict(arrowstyle='->', color='red', lw=1.5)
    )
    
    # Кілька подій
    events = {'2020-03-15': 'Lockdown', '2021-06-01': 'Reopening'}
    for date, label in events.items():
        ax.axvline(pd.Timestamp(date), color='gray', linestyle='--', alpha=0.5)
        ax.annotate(label, xy=(pd.Timestamp(date), ax.get_ylim()[1]),
                    xytext=(5, -10), textcoords='offset points')

    fig.text()#

    Текст у координатах фігури [0,1] — для підписів, що виходять за межі осей.

    fig.text(0.5, 0.02, 'Джерело: Держстат', ha='center', fontsize=9, color='gray')

    ax.legend()#

    extended

    Показує легенду на основі label= аргументів плотів. loc керує позицією.

    ax.legend(loc='upper right', frameon=False, fontsize=10)

    Коли використовувати

    Показ легенди. При кількох рядах даних — обов'язково.

    Ключові параметри

    loc
    'best' (default), 'upper right', 'lower left', тощо.
    frameon
    True — рамка навколо.
    ncols
    Кількість стовпців.
    bbox_to_anchor
    (x, y) для розміщення поза осями.

    Поширені помилки та нюанси

    Працює лише якщо в plot/scatter передано label. Без legend() підписи невидимі.

    Зв'язані функції

    fig.legend()#

    Спільна легенда для всієї фігури — вгорі, внизу або збоку.

    fig.legend(loc='upper center', ncols=3, bbox_to_anchor=(0.5, 1.05))

    Налаштування осей 13

    ax.set_xlim() / ax.set_ylim()#

    extended

    Задає діапазон осі. None залишає автоматичну межу з одного боку.

    ax.set_xlim(0, 100); ax.set_ylim(bottom=0)

    Коли використовувати

    Зум на конкретний діапазон. Для виділення подробиць або фіксації шкали.

    Ключові параметри

    left/bottom, right/top
    Межі. None — авто з одного боку.

    Поширені помилки та нюанси

    Перевертання через ax.set_xlim(10, 0) працює — корисно для зображень. Для тимчасової зміни без переписування коду — set_xlim(*sorted_limits).

    Зв'язані функції

    ax.set_xticks() / ax.set_yticks()#

    extended

    Задає позиції рисочок на осі. labels= одночасно змінює підписи.

    ax.set_xticks([0, 25, 50, 75, 100], labels=['Q1', 'Q2', 'Q3', 'Q4', 'EOY'])

    Коли використовувати

    Кастомні позиції рисочок — рівні квартали, цілі дні, фіксовані порогові значення.

    Ключові параметри

    ticks
    Список позицій.
    labels
    Список підписів (опційно).
    minor
    True для мінорних рисочок.

    Поширені помилки та нюанси

    Виставляючи labels, обов'язково вкажіть і ticks — інакше FixedLocator warning.

    Зв'язані функції

    ax.set_xticklabels() / ax.set_yticklabels()#

    Окремо змінює підписи, не торкаючись позицій. rotation повертає текст.

    ax.set_xticklabels(months, rotation=45, ha='right')

    ax.tick_params()#

    extended

    Гнучке налаштування зовнішнього вигляду рисочок: довжина, колір, напрямок, видимість.

    ax.tick_params(axis='both', length=4, width=1.2, direction='in', labelsize=10)

    Коли використовувати

    Гнучке налаштування рисочок: розмір, колір, напрямок (всередину/назовні), видимість.

    Ключові параметри

    axis
    'x', 'y', 'both'.
    which
    'major', 'minor', 'both'.
    length, width
    Розміри рисочок.
    direction
    'in', 'out', 'inout'.
    labelsize
    Розмір підписів.

    Поширені помилки та нюанси

    Стиль 'in' (всередину) популярний у наукових публікаціях, 'out' — у бізнес-графіках.

    Зв'язані функції

    ax.set_xscale() / ax.set_yscale()#

    extended

    Лінійний/логарифмічний/симлог масштаб осі. 'log' — для широких діапазонів.

    ax.set_yscale('log', base=10)

    Коли використовувати

    Зміна шкали — log для широких діапазонів (мільярди й мільйони на одному графіку), symlog для додатних і від'ємних.

    Ключові параметри

    value
    'linear' (default), 'log', 'symlog', 'logit'.
    base
    Основа логарифма (10 default).

    Поширені помилки та нюанси

    На log-шкалі не може бути ≤0 — Matplotlib або викине, або обріже. Перевірте дані.

    Зв'язані функції

    ax.invert_xaxis() / ax.invert_yaxis()#

    Перевертає напрямок осі. Корисно для зображень або ранжувань.

    ax.invert_yaxis()

    ax.axhline() / ax.axvline()#

    extended

    Горизонтальна/вертикальна лінія через всю вісь. Зручно для порогів і середніх.

    ax.axhline(y=mean, color='red', linestyle='--', label='Середнє')

    Коли використовувати

    Опорна лінія через всю вісь — середнє, нульова лінія, поріг, період події.

    Ключові параметри

    y/x
    Координата.
    color
    Колір.
    linestyle
    '-', '--', ':'
    alpha
    Прозорість.

    Поширені помилки та нюанси

    На відміну від просто plot, лінія завжди тягнеться через ВСЮ вісь незалежно від zoom — це фіча.

    Зв'язані функції

    ax.axhspan() / ax.axvspan()#

    Заштрихована смуга між двома значеннями — для виділення зон.

    ax.axvspan(2020, 2022, color='gray', alpha=0.2, label='Криза')

    ax.grid()#

    extended

    Показує сітку. which='major'|'minor'|'both', axis обмежує напрямком.

    ax.grid(True, axis='y', linestyle=':', alpha=0.4)

    Коли використовувати

    Сітка для покращення читабельності — особливо для зчитування значень.

    Ключові параметри

    visible
    True/False.
    which
    'major' (default), 'minor', 'both'.
    axis
    'both', 'x', 'y'.
    linestyle, alpha
    Стиль.

    Поширені помилки та нюанси

    Стандарт у бізнес-графіках — лише горизонтальна сітка з alpha=0.3-0.5: ax.grid(True, axis='y', alpha=0.4).

    Зв'язані функції

    ax.spines#

    extended

    Доступ до рамок осі. Часто прибирають верхню і праву для модернішого вигляду.

    ax.spines['top'].set_visible(False); ax.spines['right'].set_visible(False)

    Коли використовувати

    Контроль рамок осей. Сучасний look — без верхньої і правої.

    Ключові параметри

    position
    Spines: 'top', 'bottom', 'left', 'right'.

    Поширені помилки та нюанси

    Для приховання: ax.spines['top'].set_visible(False). Для всіх верхніх/правих у циклі — лаконічніше: for s in ['top', 'right']: ax.spines[s].set_visible(False).

    Зв'язані функції

    Розширений приклад

    # Мінімалістичний стиль — без верхньої і правої
    for s in ['top', 'right']:
        ax.spines[s].set_visible(False)
    
    # Тонші рамки
    for s in ['bottom', 'left']:
        ax.spines[s].set_linewidth(0.5)
        ax.spines[s].set_color('#666')
    
    # Або через seaborn (швидше)
    import seaborn as sns
    sns.despine(ax=ax, top=True, right=True, offset=10)

    ax.margins()#

    Додатковий простір (у відсотках) навколо даних. tight=True прибирає його.

    ax.margins(x=0.05, y=0.1)

    ax.set_aspect()#

    Співвідношення осей. 'equal' — однаковий масштаб; число — y/x.

    ax.set_aspect('equal')

    ax.twinx() / ax.twiny()#

    extended

    Створює другу вісь Y (X) з тією ж X (Y) — для двох метрик різного масштабу.

    ax2 = ax.twinx(); ax2.set_ylabel('Курс ₴/$')

    Коли використовувати

    Друга вісь Y (X) для накладання двох метрик різного масштабу: продажі і курс валют, температура і кількість опадів.

    Ключові параметри

    (метод)
    Без аргументів. Повертає нову вісь.

    Поширені помилки та нюанси

    Легенда автоматично не зливається — створіть вручну: ax.legend(handles=h1+h2, labels=l1+l2). Конкуруючі шкали можуть вводити в оману читача.

    Зв'язані функції

    Локатори та форматувачі осей 8

    MaxNLocator#

    Обмежує кількість основних позначок. Чистий вигляд при автоматичних масштабах.

    from matplotlib.ticker import MaxNLocator; ax.xaxis.set_major_locator(MaxNLocator(6))

    MultipleLocator#

    Позначки на осі з фіксованим кроком — наприклад, кожні 10 одиниць. Альтернатива MaxNLocator для рівномірних розміток.

    from matplotlib.ticker import MultipleLocator; ax.yaxis.set_major_locator(MultipleLocator(50))

    FuncFormatter#

    Форматування підписів через довільну функцію. Гнучке кастомне форматування.

    from matplotlib.ticker import FuncFormatter; ax.yaxis.set_major_formatter(FuncFormatter(lambda v, p: f'{v/1000:.0f}K'))

    PercentFormatter#

    Підписи у відсотках. xmax задає, яке значення відповідає 100%.

    from matplotlib.ticker import PercentFormatter; ax.yaxis.set_major_formatter(PercentFormatter(xmax=1.0))

    FormatStrFormatter#

    Форматування за style-string (як f-string).

    from matplotlib.ticker import FormatStrFormatter; ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f'))

    DateFormatter#

    Форматування дат на осі — strftime-патерни.

    from matplotlib.dates import DateFormatter; ax.xaxis.set_major_formatter(DateFormatter('%b %Y'))

    AutoDateLocator#

    Автоматичний підбір розмітки для дат — місяці, роки, дні залежно від діапазону.

    from matplotlib.dates import AutoDateLocator; ax.xaxis.set_major_locator(AutoDateLocator())

    ScalarFormatter#

    Стандартний числовий форматувач. useMathText дає красивіші ступені 10.

    from matplotlib.ticker import ScalarFormatter; sf = ScalarFormatter(useMathText=True); ax.yaxis.set_major_formatter(sf)

    Стиль ліній і маркерів 5

    Line2D properties#

    extended

    Властивості ліній: linewidth (lw), linestyle (ls: '-' '--' '-.' ':'), color (c), alpha.

    ax.plot(x, y, lw=2.5, ls='--', c='#a8431f', alpha=0.8)

    Коли використовувати

    Контроль вигляду ліній — товщина, стиль, маркер. Базис для кастомізації будь-якого plot.

    Ключові параметри

    color (c)
    'red', 'C0', '#ff5733', (r, g, b, a).
    linewidth (lw)
    Товщина в пунктах.
    linestyle (ls)
    '-', '--', '-.', ':'
    marker
    'o', 's', '^', '*', '+', 'x', '|', '_'
    markersize (ms)
    Розмір маркерів.
    alpha
    Прозорість 0-1.

    Поширені помилки та нюанси

    Без alpha графіки з кількома лініями стають шумними. 0.7-0.8 — компромісне значення.

    Зв'язані функції

    Marker styles#

    extended

    Маркери: 'o' . , v ^ < > s p * h H + x D | _ . Розмір markersize, колір markerfacecolor.

    ax.plot(x, y, marker='s', ms=8, mfc='white', mec='black', mew=1.5)

    Коли використовувати

    Розрізнення серій точками різної форми. Класика наукових публікацій ще до кольорів.

    Ключові параметри

    marker
    Символ: 'o', 's' (square), '^' (triangle), 'D' (diamond), '*', '+', 'x'.
    markersize (ms)
    Розмір.
    markerfacecolor (mfc)
    Колір заливки.
    markeredgecolor (mec)
    Колір рамки.
    markeredgewidth (mew)
    Товщина рамки.

    Поширені помилки та нюанси

    Великий набір даних з маркерами повільний — для >1000 точок використовуйте scatter без рамки або переходьте на hexbin.

    Зв'язані функції

    Color specifications#

    Можна задавати назвами ('red'), коротко ('r'), hex ('#ff5733'), RGB tuple, або з cycle 'C0'-'C9'.

    ax.plot(x, y, color='C2')  # третій колір зі стандартного циклу

    Format string#

    Скорочений запис: 'кольорМаркерЛінія'. 'ro--' = червоні кружечки + штрихова лінія.

    ax.plot(x, y, 'g^-', x, z, 'b--')

    ax.set_prop_cycle()#

    Задає послідовність кольорів і стилів для автоматичного циклу.

    ax.set_prop_cycle(color=['#1f77b4', '#ff7f0e', '#2ca02c'])

    Кольорові карти та шкала 8

    plt.cm.get_cmap()#

    Отримує іменований colormap. Найпопулярніші: viridis, plasma, inferno, magma, coolwarm, RdBu.

    cmap = plt.cm.get_cmap('viridis')

    Normalize#

    Нормалізує дані до [0, 1] для colormap. vmin/vmax задають межі.

    from matplotlib.colors import Normalize; norm = Normalize(vmin=0, vmax=100)

    LogNorm#

    Логарифмічна нормалізація — для даних з широким діапазоном порядків.

    from matplotlib.colors import LogNorm; ax.imshow(data, norm=LogNorm(vmin=1, vmax=1e6))

    TwoSlopeNorm#

    Нормалізація з заданим центром — для дивергентних шкал (наприклад, навколо 0).

    from matplotlib.colors import TwoSlopeNorm; norm = TwoSlopeNorm(vcenter=0, vmin=-5, vmax=10)

    BoundaryNorm#

    Дискретна нормалізація з заданими межами — для категоріальних карт.

    from matplotlib.colors import BoundaryNorm; norm = BoundaryNorm([0, 10, 50, 100], ncolors=cmap.N)

    fig.colorbar()#

    extended

    Додає кольорову шкалу до зображення/heatmap. ax= вказує, де її розмістити.

    im = ax.imshow(data); fig.colorbar(im, ax=ax, label='Значення', shrink=0.8)

    Коли використовувати

    Кольорова шкала біля imshow/scatter з градацією за value. Без неї читач не розуміє, що означає колір.

    Ключові параметри

    mappable
    Об'єкт з colormap (повертається imshow, scatter).
    ax
    Вісь, до якої прив'язати.
    label
    Підпис.
    shrink
    Висота шкали (0-1).
    orientation
    'vertical' (default), 'horizontal'.

    Поширені помилки та нюанси

    Без shrink (0.7-0.8) шкала тягнеться на всю висоту фігури — некрасиво для маленьких графіків.

    Зв'язані функції

    ListedColormap#

    Створює колормап зі списку кольорів — для категоріальних візуалізацій.

    from matplotlib.colors import ListedColormap; cmap = ListedColormap(['#e63946', '#f1faee', '#a8dadc'])

    LinearSegmentedColormap#

    Створює градієнтний колормап. Метод from_list — найпростіший.

    from matplotlib.colors import LinearSegmentedColormap; cmap = LinearSegmentedColormap.from_list('mine', ['white', 'darkred'])

    Розкладка та сітка підграфіків 7

    GridSpec#

    Гнучка сітка для нерівних розмірів підграфіків.

    from matplotlib.gridspec import GridSpec; gs = GridSpec(3, 3, figure=fig); ax_big = fig.add_subplot(gs[0:2, :])

    fig.add_gridspec()#

    Те саме, що GridSpec, але прив'язане до фігури — зручніший виклик.

    gs = fig.add_gridspec(2, 3, hspace=0.3, wspace=0.4)

    fig.tight_layout()#

    extended

    Автоматично коригує відстані між підграфіками, щоб уникнути перекриттів.

    fig.tight_layout(pad=1.5)

    Коли використовувати

    Автоматичне коригування відступів між підграфіками. Перший інструмент при перекритті заголовків і підписів.

    Ключові параметри

    pad
    Загальний відступ.
    h_pad, w_pad
    Окремо вертикальний/горизонтальний.

    Поширені помилки та нюанси

    Поломається на складних розкладках з gridspec. Альтернатива — constrained_layout=True (стабільніший).

    Зв'язані функції

    fig.subplots_adjust()#

    extended

    Ручне налаштування відступів між підграфіками і краями фігури.

    fig.subplots_adjust(left=0.1, right=0.95, top=0.92, bottom=0.1, wspace=0.3)

    Коли використовувати

    Тонкий контроль відступів — коли tight_layout не дає бажаного результату.

    Ключові параметри

    left, right, top, bottom
    Відступи від країв (0-1).
    wspace, hspace
    Простір між підграфіками.

    Поширені помилки та нюанси

    Параметри в координатах фігури [0, 1], не в дюймах. Експериментуйте: 0.05 — мінімум, 0.3 — комфорт.

    Зв'язані функції

    fig.constrained_layout#

    Альтернатива tight_layout — більш надійна для складних розкладок.

    fig, ax = plt.subplots(constrained_layout=True)

    ax.sharex() / ax.sharey()#

    Спільна вісь між підграфіками. Зазвичай задається при subplots(sharex=True).

    fig, axs = plt.subplots(3, 1, sharex=True)

    make_axes_locatable()#

    Утиліта для додавання прив'язаних осей (наприклад, маленьких colorbar поряд із imshow).

    from mpl_toolkits.axes_grid1 import make_axes_locatable; cax = make_axes_locatable(ax).append_axes('right', size='5%', pad=0.05)

    Стилі та теми 5

    plt.style.use()#

    extended

    Застосовує готовий стиль: 'seaborn-v0_8', 'ggplot', 'fivethirtyeight', 'classic', 'bmh', 'dark_background'.

    plt.style.use('seaborn-v0_8-whitegrid')

    Коли використовувати

    Швидка зміна загального вигляду — для презентації, наукової публікації, бізнес-звіту.

    Ключові параметри

    style
    Назва стилю або список (комбінувати).

    Поширені помилки та нюанси

    Найпопулярніші: 'seaborn-v0_8-whitegrid', 'ggplot', 'fivethirtyeight', 'classic', 'dark_background'. Через plt.style.context() — тимчасово.

    Зв'язані функції

    Розширений приклад

    # Назавжди
    plt.style.use('seaborn-v0_8-whitegrid')
    
    # Тимчасово
    with plt.style.context('dark_background'):
        fig, ax = plt.subplots()
        ax.plot(x, y)
    
    # Список доступних
    print(plt.style.available)
    
    # Свій стиль
    plt.rcParams.update({
        'font.family': 'serif',
        'font.size': 12,
        'axes.titlesize': 14,
        'axes.spines.top': False,
        'axes.spines.right': False,
        'figure.dpi': 110
    })

    plt.style.available#

    Список усіх доступних стилів Matplotlib. Корисно перевірити перед plt.style.use, щоб уникнути помилок з назвами.

    print(plt.style.available)

    plt.style.context()#

    Тимчасовий стиль у межах with-блоку.

    with plt.style.context('dark_background'): plt.plot(x, y)

    plt.rcParams#

    extended

    Глобальні налаштування. Можна задати дефолтні шрифти, розмір, кольори.

    plt.rcParams.update({'font.size': 11, 'axes.titlesize': 14, 'figure.dpi': 110})

    Коли використовувати

    Глобальні налаштування — шрифти, розміри за замовчуванням, кольори. Стандарт для брендованих звітів.

    Ключові параметри

    dict-like
    Доступ як до словника: plt.rcParams['font.size'] = 12.

    Поширені помилки та нюанси

    Зміни глобальні — впливають на ВСІ наступні фігури в сесії. Для тимчасових змін — plt.rc_context або plt.style.context.

    Зв'язані функції

    plt.rc()#

    Швидке оновлення групи параметрів.

    plt.rc('axes', grid=True, axisbelow=True)

    Дати та час 5

    matplotlib.dates.date2num()#

    Конвертує datetime у внутрішнє числове представлення Matplotlib.

    from matplotlib.dates import date2num; nums = date2num(dates)

    matplotlib.dates.num2date()#

    Зворотна конверсія — з float назад у datetime.

    from matplotlib.dates import num2date; dates = num2date(nums)

    ax.plot_date()#

    Графік із датами на осі x. У сучасному коді plot() сам розпізнає datetime.

    ax.plot_date(dates, prices, fmt='-')

    fig.autofmt_xdate()#

    Автоматичний поворот і вирівнювання дат на осі x — щоб не перекривались.

    fig.autofmt_xdate(rotation=45)

    MonthLocator / YearLocator / DayLocator#

    Локатори для дат із заданим інтервалом.

    from matplotlib.dates import MonthLocator; ax.xaxis.set_major_locator(MonthLocator(interval=3))

    3D-візуалізація 8

    Axes3D#

    Створення 3D-осі через projection='3d'.

    fig = plt.figure(); ax = fig.add_subplot(111, projection='3d')

    ax.plot() (3D)#

    Лінійний графік у 3D-просторі. На 3D-осях звичайний ax.plot() приймає три координати замість двох; раніше існував псевдонім ax.plot3D.

    ax.plot(x, y, z, color='steelblue')  # ax — 3D-axes

    ax.scatter() (3D)#

    Точковий графік у 3D — той самий ax.scatter, що й у 2D, але приймає третю координату. Розмір через s, кольори через c.

    ax.scatter(x, y, z, c=values, s=50, cmap='plasma')

    ax.plot_surface()#

    3D-поверхня з 2D-сітки. Найкраще для функцій z = f(x, y).

    ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')

    ax.plot_wireframe()#

    Каркасна поверхня (без заливки) — легший вигляд за surface.

    ax.plot_wireframe(X, Y, Z, color='black', linewidth=0.5)

    ax.contour3D() / ax.contourf3D()#

    Контури та заповнені контури в 3D-просторі.

    ax.contour3D(X, Y, Z, levels=20, cmap='viridis')

    ax.bar3d()#

    3D-стовпчики — для категоріальних 2D-даних, висоту яких треба показати.

    ax.bar3d(x, y, z, dx, dy, dz, color='steelblue')

    ax.view_init()#

    Налаштовує кут огляду 3D-сцени: elev (вгору) і azim (навколо).

    ax.view_init(elev=20, azim=45)

    Геометричні фігури (patches) 5

    matplotlib.patches.Rectangle#

    Прямокутник — для виділення зон, рамок, вкладок.

    from matplotlib.patches import Rectangle; ax.add_patch(Rectangle((1, 2), 3, 4, alpha=0.3, color='yellow'))

    matplotlib.patches.Circle#

    Коло заданого радіуса в координатах даних.

    from matplotlib.patches import Circle; ax.add_patch(Circle((0, 0), radius=5, fill=False, edgecolor='red'))

    matplotlib.patches.Ellipse#

    Еліпс — корисно для довірчих контурів двовимірних розподілів.

    from matplotlib.patches import Ellipse; ax.add_patch(Ellipse((mu_x, mu_y), 2*sx, 2*sy, angle=30))

    matplotlib.patches.Polygon#

    Полігон з вершинами — для виділення довільних зон.

    from matplotlib.patches import Polygon; ax.add_patch(Polygon([(1,1), (2,3), (3,1)], closed=True))

    matplotlib.patches.FancyArrowPatch#

    Стрілка зі стилями. Гнучкіше за annotate для самостійних стрілок.

    from matplotlib.patches import FancyArrowPatch; ax.add_patch(FancyArrowPatch((0,0), (1,1), arrowstyle='->'))

    Збереження та експорт 4

    fig.savefig()#

    extended

    Зберігає фігуру у файл. Формат визначається розширенням: .png, .pdf, .svg, .jpg.

    fig.savefig('chart.png', dpi=300, bbox_inches='tight', facecolor='white')

    Коли використовувати

    Збереження фінального графіка для звіту, презентації, веб-сторінки.

    Ключові параметри

    fname
    Шлях. Розширення визначає формат: .png, .pdf, .svg, .jpg.
    dpi
    Розширення для PNG/JPG. 300 для друку, 100-150 для веб.
    bbox_inches
    'tight' — обрізати порожні поля (рекомендовано).
    transparent
    True — прозорий фон.
    facecolor
    Колір тла.

    Поширені помилки та нюанси

    Без bbox_inches='tight' навколо часто залишається багато порожнього місця. Для PDF (векторний) dpi не має значення.

    Зв'язані функції

    plt.savefig()#

    Скорочена форма savefig для поточної фігури.

    plt.savefig('out.pdf', bbox_inches='tight')

    fig.set_size_inches()#

    Змінює розмір фігури вже після створення.

    fig.set_size_inches(12, 7)

    fig.set_dpi()#

    Розширення (точок на дюйм). Для презентацій — 100, для друку — 300+.

    fig.set_dpi(150)

    Інтерактивність та анімація 5

    FuncAnimation#

    Створює анімацію через функцію оновлення кадрів. Може зберігатись у GIF/MP4.

    from matplotlib.animation import FuncAnimation; ani = FuncAnimation(fig, update, frames=100, interval=50)

    ani.save()#

    Зберігає анімацію у файл — потрібен ffmpeg для mp4 або pillow для gif.

    ani.save('animation.gif', writer='pillow', fps=20)

    plt.connect()#

    Прив'язка до подій миші/клавіатури — основа інтерактивних графіків.

    fig.canvas.mpl_connect('button_press_event', on_click)

    matplotlib.widgets.Slider#

    Інтерактивний повзунок — змінює параметр у реальному часі.

    from matplotlib.widgets import Slider; slider = Slider(slider_ax, 'Freq', 1, 10, valinit=2)

    matplotlib.widgets.Button#

    Кнопка для запуску дій — перерахунок, перемикання режимів.

    from matplotlib.widgets import Button; btn = Button(btn_ax, 'Reset'); btn.on_clicked(reset)
    Бібліотека · 12 розділів · 104 функцій · 30 розширених

    Plotly

    Plotly — найпотужніша бібліотека інтерактивних графіків для Python. Користувач може масштабувати, наводити курсор, перемикати ряди, експортувати у HTML і ділитися онлайн. Plotly Express пропонує лаконічний API для типових графіків, а graph_objects дає повний контроль над кожною деталлю. Незамінний для дашбордів і веб-звітів.

    Plotly Express — швидкі графіки 23

    px.scatter()#

    extended

    Точкова діаграма. Параметри color, size, symbol автоматично кодують додаткові змінні.

    fig = px.scatter(df, x='gdp', y='life_exp', color='continent', size='pop', hover_name='country')

    Коли використовувати

    Інтерактивний scatter з автоматичним hover, легендою і кодуванням додаткових змінних. Швидший за go.Scatter для типових випадків.

    Ключові параметри

    data_frame
    DataFrame.
    x, y
    Імена стовпців.
    color
    Стовпець для кольору (категоріальний → дискретні; числовий → continuous scale).
    size
    Стовпець для розміру точок.
    symbol
    Стовпець для форми.
    hover_data
    Додаткові стовпці у tooltip.
    trendline
    'ols', 'lowess' для лінії тренду.
    marginal_x, marginal_y
    'histogram', 'box', 'violin', 'rug' для маргінальних розподілів.

    Поширені помилки та нюанси

    Маркер автоматично змінює форму при color і symbol — може бути плутанина. Краще задавати однозначно: один атрибут на одну змінну.

    Зв'язані функції

    Розширений приклад

    import plotly.express as px
    df = px.data.gapminder().query("year == 2007")
    
    fig = px.scatter(
        df,
        x='gdpPercap',
        y='lifeExp',
        color='continent',
        size='pop',
        size_max=60,
        log_x=True,
        hover_name='country',
        hover_data={'pop': ':,'},
        title='Тривалість життя та ВВП на душу населення (2007)',
        trendline='lowess',
        marginal_x='box',
        marginal_y='violin'
    )
    fig.update_layout(template='plotly_white')

    px.line()#

    extended

    Лінійний графік. Аргумент color створює окрему лінію для кожної категорії.

    fig = px.line(df, x='date', y='value', color='product', line_dash='region')

    Коли використовувати

    Інтерактивний лінійний графік для часових рядів і трендів. Кілька серій через color.

    Ключові параметри

    data_frame
    DataFrame.
    x, y
    Стовпці.
    color
    Створює окрему лінію per category.
    line_dash
    Тип пунктиру за категорією.
    line_group
    Окремі лінії без кольорового кодування.
    markers
    True — показати точки на лініях.

    Поширені помилки та нюанси

    Без сортування по x ламається. Особливо для довгих стрічкових даних з groupby.

    Зв'язані функції

    px.bar()#

    extended

    Стовпчикова діаграма. barmode='group'|'stack'|'relative' керує накладанням.

    fig = px.bar(df, x='month', y='sales', color='channel', barmode='group')

    Коли використовувати

    Інтерактивні стовпці. На відміну від Matplotlib, легко робити stacked, grouped, percent.

    Ключові параметри

    data_frame
    DataFrame.
    x, y
    Стовпці.
    color
    Друга категорія.
    barmode
    'group', 'stack' (default), 'relative', 'overlay'.
    text
    Стовпець для підписів на стовпцях.

    Поширені помилки та нюанси

    Default — stacked, не group. Якщо очікуєте grouped, явно задавайте barmode='group'.

    Зв'язані функції

    Розширений приклад

    # Stacked
    fig = px.bar(df, x='month', y='sales', color='product')
    
    # Grouped
    fig = px.bar(df, x='month', y='sales', color='product', barmode='group')
    
    # Percent (нормалізований)
    fig = px.bar(df, x='month', y='sales', color='product', barmode='relative')
    
    # З підписами
    fig = px.bar(df, x='cat', y='val', text='val', text_auto='.2s')
    fig.update_traces(textposition='outside')

    px.histogram()#

    extended

    Гістограма частот. nbins контролює деталізацію; histnorm='percent'|'probability density'.

    fig = px.histogram(df, x='age', color='gender', nbins=30, opacity=0.7, barmode='overlay')

    Коли використовувати

    Швидка гістограма з опціями нормалізації, накладання, маргіналів.

    Ключові параметри

    x
    Стовпець.
    nbins
    Кількість бінів.
    color
    Накладання per category.
    histnorm
    'percent', 'probability', 'density', 'probability density'.
    cumulative
    True — кумулятивна.
    marginal
    'box', 'violin', 'rug'.

    Поширені помилки та нюанси

    Default — count. Для відсотків — histnorm='percent'. Для накладання двох розподілів зробіть opacity=0.6 і barmode='overlay'.

    Зв'язані функції

    px.box()#

    extended

    Boxplot. points='all'|'outliers'|False показує окремі точки. notched=True додає виїмки.

    fig = px.box(df, x='department', y='salary', color='gender', points='outliers')

    Коли використовувати

    Інтерактивний boxplot з opção показати всі точки. Зручно для outlier inspection — клікніть точку щоб побачити.

    Ключові параметри

    x, y
    Категорії та значення.
    color
    Друга категорія.
    points
    'all', 'outliers' (default), 'suspectedoutliers', False.
    notched
    True — V-подібні виїмки.

    Поширені помилки та нюанси

    За замовчуванням лише викиди. Для всіх точок — points='all' з jitter (через update_traces).

    Зв'язані функції

    px.violin()#

    extended

    Violin plot з можливістю box=True для вкладеного boxplot.

    fig = px.violin(df, x='cat', y='val', box=True, points='all')

    Коли використовувати

    Об'єднання boxplot і KDE — показує форму розподілу плюс квартилі.

    Ключові параметри

    x, y
    Дані.
    color
    Категорія.
    box
    True — вкласти boxplot.
    points
    Як у px.box.
    violinmode
    'group' або 'overlay'.

    Поширені помилки та нюанси

    Для асиметричних розподілів краще за boxplot. Поєднання box=True + points='all' дає максимум інформації.

    Зв'язані функції

    px.strip()#

    Strip plot — категоріальний scatter без накладання точок.

    fig = px.strip(df, x='group', y='score')

    px.pie()#

    extended

    Кругова діаграма. names задає категорії, values — їх частки.

    fig = px.pie(df, names='category', values='revenue', hole=0.4)  # donut

    Коли використовувати

    Інтерактивний pie з hover і click. Уникайте >5 категорій.

    Ключові параметри

    names
    Категорії.
    values
    Значення.
    color
    Кодування кольором.
    hole
    0.3-0.5 для donut chart.

    Поширені помилки та нюанси

    Як і Matplotlib pie — погана практика для >5 категорій. Для ієрархічних даних краще sunburst.

    Зв'язані функції

    px.sunburst()#

    extended

    Сонячна діаграма — ієрархічна заміна pie. Шари показують вкладеність категорій.

    fig = px.sunburst(df, path=['continent', 'country', 'city'], values='population')

    Коли використовувати

    Ієрархічний розподіл — деревовидна структура категорій. Краще за pie для вкладеності.

    Ключові параметри

    path
    Список стовпців від root до leaf.
    values
    Розмір секторів.
    color
    Кодування кольором.

    Поширені помилки та нюанси

    Path йде від найзагальнішого до найдетальнішого. NaN у path створює проблеми — заповнюйте 'Unknown'.

    Зв'язані функції

    Розширений приклад

    fig = px.sunburst(
        df,
        path=['continent', 'country', 'city'],
        values='population',
        color='gdp_per_capita',
        color_continuous_scale='Viridis',
        title='Population by Geography'
    )

    px.treemap()#

    extended

    Деревовидна карта — площі прямокутників пропорційні значенням.

    fig = px.treemap(df, path=['region', 'product'], values='sales', color='profit')

    Коли використовувати

    Площинна ієрархія — як sunburst, але прямокутниками. Економніше використовує простір.

    Ключові параметри

    path
    Шлях ієрархії.
    values
    Розмір.
    color
    Колір.

    Поширені помилки та нюанси

    Дрібні значення стають невидимими. Для багаторівневої структури з >100 елементів краще зведена статистика.

    Зв'язані функції

    px.icicle()#

    Айсберг-діаграма — вертикальна альтернатива treemap.

    fig = px.icicle(df, path=['country', 'state', 'city'], values='pop')

    px.funnel()#

    Воронка конверсії — кожен рівень показує меншу кількість користувачів.

    fig = px.funnel(df, x='users', y='stage', color='channel')

    px.scatter_3d()#

    extended

    Інтерактивний 3D-scatter. Можна обертати мишею.

    fig = px.scatter_3d(df, x='x', y='y', z='z', color='cluster', size='value')

    Коли використовувати

    3D scatter з поворотом мишею. Для перегляду кластерів у 3D, проекцій PCA, фізичних координат.

    Ключові параметри

    x, y, z
    Координати.
    color
    Категорія/значення.
    size
    Розмір точок.
    symbol
    Форма.

    Поширені помилки та нюанси

    У 3D складно прочитати позиції точок без обертання. Розгляньте 2D-проекції паралельно.

    Зв'язані функції

    px.line_3d()#

    Лінія в 3D-просторі — для траєкторій, кривих, шляхів. Інтерактивно обертається мишею.

    fig = px.line_3d(df, x='x', y='y', z='z', color='trajectory_id')

    px.area()#

    Площинний графік. groupnorm='percent' нормалізує до 100% — для часток.

    fig = px.area(df, x='date', y='value', color='product', groupnorm='percent')

    px.density_contour()#

    Контури двовимірної щільності. Альтернатива hexbin.

    fig = px.density_contour(df, x='x', y='y', marginal_x='histogram', marginal_y='rug')

    px.density_heatmap()#

    extended

    Теплова карта двовимірної щільності.

    fig = px.density_heatmap(df, x='x', y='y', nbinsx=30, nbinsy=30)

    Коли використовувати

    Теплова карта щільності 2D — альтернатива scatter для великих наборів, коли точки накладаються.

    Ключові параметри

    x, y
    Координати.
    nbinsx, nbinsy
    Деталізація.
    histfunc
    'count', 'sum', 'avg' для агрегації по третьому стовпцю.

    Поширені помилки та нюанси

    Без z параметра рахує count — частоту попадання в клітинку. Для агрегації значення третього стовпця передавайте z.

    Зв'язані функції

    px.imshow()#

    extended

    Відображення матриці чи зображення. Зручно для кореляційних матриць.

    fig = px.imshow(df.corr(), color_continuous_scale='RdBu_r', aspect='auto', text_auto='.2f')

    Коли використовувати

    Теплові карти і кореляційні матриці. Інтерактивніший за seaborn.heatmap.

    Ключові параметри

    img
    2D-масив або DataFrame.
    color_continuous_scale
    Шкала ('RdBu_r', 'Viridis').
    aspect
    'auto' або 'equal'.
    text_auto
    True/format — підписи у клітинках.

    Поширені помилки та нюанси

    Для кореляційної матриці задавайте zmin=-1, zmax=1 і color_continuous_midpoint=0.

    Зв'язані функції

    Розширений приклад

    corr = df.corr()
    fig = px.imshow(
        corr,
        text_auto='.2f',
        color_continuous_scale='RdBu_r',
        color_continuous_midpoint=0,
        aspect='auto',
        title='Correlation Matrix'
    )
    fig.update_layout(width=700, height=700)

    px.scatter_matrix()#

    extended

    Матриця всіх попарних scatter-графіків. Використовується для розвідки даних.

    fig = px.scatter_matrix(df, dimensions=['x1', 'x2', 'x3', 'x4'], color='label')

    Коли використовувати

    Матриця scatter-графіків між усіма парами числових стовпців. Швидкий EDA для виявлення зв'язків.

    Ключові параметри

    dimensions
    Список стовпців.
    color
    Категорія.

    Поширені помилки та нюанси

    Для понад 6-8 стовпців стає нечитабельно. Виберіть найважливіші або кластеризуйте.

    Зв'язані функції

    px.parallel_coordinates()#

    Паралельні координати — кілька числових змінних на спільних осях.

    fig = px.parallel_coordinates(df, dimensions=['a', 'b', 'c'], color='target')

    px.parallel_categories()#

    Паралельні категорії — для категоріальних потоків (Sankey-подібно).

    fig = px.parallel_categories(df, dimensions=['source', 'medium', 'campaign'], color='conversions')

    px.timeline()#

    Діаграма Ганта — інтервали як горизонтальні смуги.

    fig = px.timeline(df, x_start='start', x_end='end', y='task', color='owner')

    px.ecdf()#

    Емпірична функція розподілу — альтернатива гістограмі для порівняння розподілів.

    fig = px.ecdf(df, x='value', color='group')

    Географічні карти 7

    px.choropleth()#

    extended

    Хороплет — заливка регіонів за значенням. locations містять ISO-коди країн чи штатів.

    fig = px.choropleth(df, locations='iso3', color='gdp', hover_name='country', color_continuous_scale='Viridis')

    Коли використовувати

    Картограма — заливка регіонів за значенням. Стандарт для географічних дашбордів.

    Ключові параметри

    locations
    ISO-коди країн або користувацькі.
    locationmode
    'ISO-3', 'country names', 'USA-states'.
    color
    Стовпець для заливки.
    color_continuous_scale
    Шкала.
    scope
    'world', 'europe', 'asia', тощо.

    Поширені помилки та нюанси

    Для кастомних меж потрібен GeoJSON через choropleth_mapbox/choropleth_map.

    Зв'язані функції

    px.choropleth_map()#

    Хороплет на інтерактивній карті MapLibre. Потрібен GeoJSON для меж.

    fig = px.choropleth_map(df, geojson=geo, locations='id', color='value', map_style='carto-positron')

    px.scatter_map()#

    extended

    Точки на інтерактивній карті — координати lat/lon. Заміна для застарілої scatter_mapbox.

    fig = px.scatter_map(df, lat='lat', lon='lon', size='pop', color='cont', zoom=3)

    Коли використовувати

    Точки на інтерактивній карті MapLibre — нова рекомендована функція замість застарілих scatter_mapbox.

    Ключові параметри

    lat, lon
    Стовпці координат.
    zoom
    Початковий рівень масштабу (0-22).
    size
    Стовпець для розміру.
    color
    Кольорове кодування.
    map_style
    'open-street-map', 'carto-positron', 'carto-darkmatter'.

    Поширені помилки та нюанси

    У 2024+ Plotly мігрував з Mapbox на MapLibre — тепер не потрібен mapbox token. Старі назви (scatter_mapbox) застаріли.

    Зв'язані функції

    px.density_map()#

    Теплова карта щільності точок на карті.

    fig = px.density_map(df, lat='lat', lon='lon', radius=10, zoom=4)

    px.line_map()#

    Лінії на інтерактивній карті — для маршрутів і потоків.

    fig = px.line_map(df, lat='lat', lon='lon', color='route')

    px.scatter_geo()#

    Точки на статичній географічній карті (без MapLibre).

    fig = px.scatter_geo(df, locations='iso3', size='pop', projection='natural earth')

    px.line_geo()#

    Лінії на географічній карті — потоки міграції, маршрути польотів.

    fig = px.line_geo(df, lat='lat', lon='lon', color='flight')

    Polar та radar 3

    px.scatter_polar()#

    Точкова діаграма у полярних координатах.

    fig = px.scatter_polar(df, r='value', theta='direction', color='season')

    px.line_polar()#

    Лінія у полярних координатах. line_close=True замикає лінію — основа radar-діаграм.

    fig = px.line_polar(df, r='score', theta='skill', line_close=True)

    px.bar_polar()#

    Полярна гістограма (роза вітрів). Корисно для напрямкових даних.

    fig = px.bar_polar(df, r='speed', theta='direction', color='intensity')

    Graph Objects — точний контроль 12

    go.Figure()#

    extended

    Базовий контейнер усіх графіків при ручній побудові.

    fig = go.Figure(data=[go.Scatter(x=x, y=y)], layout=go.Layout(title='...'))

    Коли використовувати

    Базовий контейнер при ручній побудові, коли Plotly Express замало гнучкості.

    Ключові параметри

    data
    Список traces.
    layout
    Об'єкт або словник layout-у.

    Поширені помилки та нюанси

    Plotly Express повертає go.Figure — можна доповнювати через update_layout/add_trace.

    Зв'язані функції

    go.Scatter()#

    extended

    Універсальний trace — точки, лінії, або обидва. mode='markers'|'lines'|'lines+markers'|'text'.

    fig.add_trace(go.Scatter(x=x, y=y, mode='lines+markers', name='Sales'))

    Коли використовувати

    Універсальний trace для точок/ліній. Повний контроль над hover, custom data, маркерами.

    Ключові параметри

    x, y
    Дані.
    mode
    'lines', 'markers', 'lines+markers', 'text'.
    line
    {'color': ..., 'width': ..., 'dash': 'dot'}.
    marker
    {'size': ..., 'color': ..., 'symbol': ...}.
    hovertemplate
    Кастомний шаблон tooltip.

    Поширені помилки та нюанси

    Hovertemplate — потужний інструмент. <extra></extra> прибирає назву trace справа.

    Зв'язані функції

    Розширений приклад

    fig = go.Figure()
    
    fig.add_trace(go.Scatter(
        x=dates,
        y=prices,
        mode='lines+markers',
        name='Ціна',
        line={'color': '#2563eb', 'width': 2},
        marker={'size': 6, 'color': '#1d4ed8'},
        hovertemplate='<b>%{x|%d %b %Y}</b><br>Ціна: %{y:,.2f} ₴<extra></extra>'
    ))
    
    fig.update_layout(
        title='Динаміка цін',
        template='plotly_white',
        hovermode='x unified'
    )

    go.Bar()#

    extended

    Стовпчикова діаграма. Можна додати кілька trace для групування.

    fig.add_trace(go.Bar(x=cats, y=vals, marker_color='steelblue'))

    Коли використовувати

    Стовпці з повним контролем — кастомні кольори per bar, текст, патерни.

    Ключові параметри

    x, y
    Дані.
    marker
    {'color': список кольорів, 'pattern': патерн}.
    text
    Текст на стовпцях.
    textposition
    'inside', 'outside', 'auto'.

    Поширені помилки та нюанси

    Для grouped/stacked треба кілька go.Bar з однаковими x. barmode задається на layout рівні.

    Зв'язані функції

    go.Histogram()#

    Гістограма з повним контролем бінів. xbins задає start, end і size.

    fig.add_trace(go.Histogram(x=data, xbins={'start': 0, 'end': 100, 'size': 5}))

    go.Box()#

    Boxplot із багатьма опціями: notched, boxmean='sd', quartilemethod.

    fig.add_trace(go.Box(y=values, name='Group A', boxmean='sd', notched=True))

    go.Violin()#

    Violin plot. side='positive'|'negative' для half-violins.

    fig.add_trace(go.Violin(y=data, side='positive', meanline_visible=True))

    go.Pie()#

    Кругова діаграма. textinfo керує підписами всередині секторів.

    fig.add_trace(go.Pie(labels=labels, values=vals, hole=0.3, textinfo='label+percent'))

    go.Heatmap()#

    extended

    Теплова карта. zmin/zmax обмежують шкалу.

    fig.add_trace(go.Heatmap(z=matrix, x=col_labels, y=row_labels, colorscale='Viridis'))

    Коли використовувати

    Теплова карта з повним контролем — шкала, колір, hover, текст у клітинках.

    Ключові параметри

    z
    2D-масив значень.
    x, y
    Підписи осей.
    colorscale
    Назва або кастомний список.
    zmin, zmax
    Межі шкали.
    text
    Текст у клітинках.
    hovertemplate
    Кастомний tooltip.

    Поширені помилки та нюанси

    Для відсутніх значень (NaN) задавайте hoverongaps=False.

    Зв'язані функції

    go.Scatter3d()#

    Точки/лінії в 3D — еквівалент px.scatter_3d з повним контролем.

    fig.add_trace(go.Scatter3d(x=x, y=y, z=z, mode='markers'))

    go.Surface()#

    3D-поверхня з матриці значень.

    fig.add_trace(go.Surface(z=Z, colorscale='Earth'))

    go.Mesh3d()#

    Тривимірна сітка з трикутників — для складних геометричних форм.

    fig.add_trace(go.Mesh3d(x=x, y=y, z=z, opacity=0.5))

    go.Contour()#

    Контурний графік. contours.coloring='heatmap' додає заливку.

    fig.add_trace(go.Contour(z=Z, contours={'coloring': 'heatmap', 'showlabels': True}))

    Спеціалізовані traces 13

    go.Sankey()#

    Діаграма Санкі — потоки між категоріями. Найкращий спосіб показати рух чи розподіл.

    fig.add_trace(go.Sankey(node={'label': nodes}, link={'source': src, 'target': tgt, 'value': val}))

    go.Waterfall()#

    Waterfall chart — як значення накопичуються від початку до кінця. Для фінансових звітів.

    fig.add_trace(go.Waterfall(x=cats, y=vals, measure=['relative']*5+['total']))

    go.Funnel()#

    Воронка — для конверсій. textinfo='value+percent initial'.

    fig.add_trace(go.Funnel(x=values, y=stages, textinfo='value+percent initial'))

    go.Indicator()#

    extended

    KPI-індикатор: число, дельта, gauge, bullet. Для дашбордів.

    fig.add_trace(go.Indicator(mode='number+delta', value=1234, delta={'reference': 1000}))

    Коли використовувати

    KPI-картка для дашбордів — велике число, дельта, gauge, bullet.

    Ключові параметри

    mode
    'number', 'delta', 'gauge', 'number+delta', 'number+gauge+delta'.
    value
    Поточне значення.
    delta
    {'reference': попереднє, 'relative': True}.
    gauge
    {'axis': {'range': [0, 100]}, 'bar': {'color': ...}}.

    Поширені помилки та нюанси

    Один Indicator = один subplot. Для дашборду з кількома KPI — make_subplots з specs.

    Зв'язані функції

    Розширений приклад

    fig = go.Figure(go.Indicator(
        mode='number+delta+gauge',
        value=87,
        delta={'reference': 75, 'increasing': {'color': 'green'}},
        gauge={
            'axis': {'range': [0, 100]},
            'bar': {'color': '#2563eb'},
            'steps': [
                {'range': [0, 50], 'color': '#fee2e2'},
                {'range': [50, 80], 'color': '#fef3c7'},
                {'range': [80, 100], 'color': '#d1fae5'}
            ]
        },
        title={'text': 'NPS Score'},
        domain={'x': [0, 1], 'y': [0, 1]}
    ))

    go.Table()#

    Інтерактивна таблиця в Plotly-фігурі. Можна форматувати клітинки.

    fig.add_trace(go.Table(header={'values': cols}, cells={'values': [df[c] for c in cols]}))

    go.Candlestick()#

    extended

    Свічковий графік для фінансових даних — open/high/low/close.

    fig.add_trace(go.Candlestick(x=df['date'], open=df['o'], high=df['h'], low=df['l'], close=df['c']))

    Коли використовувати

    Свічковий графік для фінансових даних. Open/High/Low/Close — стандарт біржових даних.

    Ключові параметри

    x
    Дати.
    open, high, low, close
    Чотири стовпці цін.
    increasing, decreasing
    Кольори зростаючих/спадних свічок.

    Поширені помилки та нюанси

    Range slider за замовчуванням увімкнено — можна вимкнути fig.update_xaxes(rangeslider_visible=False).

    Зв'язані функції

    go.OHLC()#

    OHLC bars — альтернатива свічкам, простіша візуалізація.

    fig.add_trace(go.Ohlc(x=df['date'], open=df['o'], high=df['h'], low=df['l'], close=df['c']))

    go.Sunburst()#

    Ієрархічна сонячна діаграма з контролем кожного рівня.

    fig.add_trace(go.Sunburst(labels=labels, parents=parents, values=values))

    go.Treemap()#

    Площинне дерево з повним налаштуванням.

    fig.add_trace(go.Treemap(labels=labels, parents=parents, values=values))

    go.Parcoords()#

    Паралельні координати з контролем фільтрів.

    fig.add_trace(go.Parcoords(line={'color': df['target']}, dimensions=dim_list))

    go.Parcats()#

    Паралельні категорії — для категоріальних змінних.

    fig.add_trace(go.Parcats(dimensions=dims, line={'color': counts}))

    go.Densitymap()#

    Теплова карта щільності на інтерактивній карті — для просторових даних.

    fig.add_trace(go.Densitymap(lat=lats, lon=lons, z=values, radius=10))

    go.Scattermap()#

    Точки на інтерактивній карті MapLibre. Сучасна заміна Scattermapbox.

    fig.add_trace(go.Scattermap(lat=lats, lon=lons, mode='markers'))

    Layout та оформлення 13

    fig.update_layout()#

    extended

    Найважливіший метод — змінює всі параметри layout: розмір, заголовки, шрифт, теми.

    fig.update_layout(title='Заголовок', width=900, height=500, template='plotly_white', font={'family': 'Inter'})

    Коли використовувати

    Найважливіший метод Plotly — заголовки, шрифти, теми, розміри, легенди, hover.

    Ключові параметри

    title
    Текст або dict {'text': ..., 'x': 0.5}.
    template
    'plotly', 'plotly_white', 'plotly_dark', 'simple_white'.
    width, height
    Розмір.
    font
    {'family': 'Inter', 'size': 14}.
    hovermode
    'x', 'x unified', 'closest'.
    legend
    Налаштування легенди.

    Поширені помилки та нюанси

    Параметри — словники або через підкреслення: legend_title_text='...'. Не плутайте: title — це str або dict.

    Зв'язані функції

    fig.update_xaxes() / fig.update_yaxes()#

    extended

    Налаштування осей: тип, діапазон, формат, сітка, нулі.

    fig.update_yaxes(title='Дохід', tickformat=',.0f', showgrid=True, zerolinecolor='lightgray')

    Коли використовувати

    Налаштування осей — формат, діапазон, сітка, тип. Окремо для X і Y.

    Ключові параметри

    title
    Підпис.
    type
    'linear', 'log', 'date', 'category'.
    range
    [min, max].
    tickformat
    Формат '$,.2f', '%'.
    showgrid
    True/False.
    rangeslider_visible
    True для слайдера діапазону.

    Поширені помилки та нюанси

    При row/col з підграфіками задавайте row=, col= для конкретної осі.

    Зв'язані функції

    fig.update_traces()#

    extended

    Масово змінює властивості усіх trace або вибраних через selector.

    fig.update_traces(marker={'size': 8, 'opacity': 0.7}, selector={'type': 'scatter'})

    Коли використовувати

    Масово змінити властивості traces. Корисно після px-функцій для тонкого налаштування.

    Ключові параметри

    **kwargs
    Будь-які властивості traces.
    selector
    {'type': 'scatter'} — тільки певні traces.

    Поширені помилки та нюанси

    Без selector впливає на ВСІ traces. Це може зламати інші частини графіка.

    Зв'язані функції

    fig.add_hline() / fig.add_vline()#

    extended

    Горизонтальна/вертикальна лінія через увесь графік. line_dash='dash' робить пунктир.

    fig.add_hline(y=mean, line_dash='dash', line_color='red', annotation_text='Середнє')

    Коли використовувати

    Опорні лінії — середнє, поріг, дата події.

    Ключові параметри

    y/x
    Координата.
    line_dash
    'dash', 'dot', 'dashdot'.
    line_color
    Колір.
    annotation_text
    Текст біля лінії.

    Поширені помилки та нюанси

    Тягнеться через всю вісь незалежно від zoom.

    Зв'язані функції

    fig.add_hrect() / fig.add_vrect()#

    Горизонтальна/вертикальна заштрихована смуга.

    fig.add_vrect(x0='2020-03-01', x1='2020-06-01', fillcolor='LightGray', opacity=0.3)

    fig.add_shape()#

    Додає геометричну фігуру — лінію, прямокутник, коло, шлях.

    fig.add_shape(type='rect', x0=1, y0=1, x1=3, y1=4, line={'color': 'red'})

    fig.add_annotation()#

    extended

    Анотація з можливою стрілкою. Один із найкорисніших методів для виділення точок.

    fig.add_annotation(x=date_max, y=y_max, text='Пік', showarrow=True, arrowhead=2)

    Коли використовувати

    Анотація з опційною стрілкою — виділити подію, max, аномалію.

    Ключові параметри

    x, y
    Координати.
    text
    Текст.
    showarrow
    True/False.
    ax, ay
    Зсув стрілки.

    Поширені помилки та нюанси

    Координати в data-units за замовчуванням. Для відносних — xref='paper'.

    Зв'язані функції

    Layout title#

    Налаштування заголовка: текст, шрифт, позиція.

    fig.update_layout(title={'text': 'Динаміка', 'x': 0.5, 'xanchor': 'center', 'font': {'size': 20}})

    Layout legend#

    Налаштування легенди: позиція, орієнтація, заголовок.

    fig.update_layout(legend={'orientation': 'h', 'y': -0.2, 'x': 0.5, 'xanchor': 'center'})

    Layout margins#

    Поля навколо графіка. Зменшіть для максимального використання простору.

    fig.update_layout(margin={'l': 40, 'r': 20, 't': 60, 'b': 40})

    Layout paper / plot bgcolor#

    Кольори фону: paper_bgcolor — увесь холст, plot_bgcolor — область графіка.

    fig.update_layout(paper_bgcolor='white', plot_bgcolor='#f8f8f8')

    Layout hovermode#

    Режим підказок: 'x'|'x unified'|'closest'|False. 'x unified' зручний для часових рядів.

    fig.update_layout(hovermode='x unified')

    Layout hoverlabel#

    Стиль підказки: фон, межа, шрифт.

    fig.update_layout(hoverlabel={'bgcolor': 'white', 'font_size': 13})

    Підграфіки та сітки 6

    make_subplots()#

    extended

    Створює фігуру з кількома підграфіками. Аналог plt.subplots для Plotly.

    from plotly.subplots import make_subplots; fig = make_subplots(rows=2, cols=2, subplot_titles=['A', 'B', 'C', 'D'])

    Коли використовувати

    Сітка підграфіків з різними типами. На відміну від facet — повна свобода розкладки.

    Ключові параметри

    rows, cols
    Розмір сітки.
    specs
    2D-список зі specs для кожної клітинки: {'type': 'xy'}, {'type': 'pie'}, {'type': 'scatter3d'}.
    subplot_titles
    Список заголовків.
    shared_xaxes, shared_yaxes
    True для синхронізації.
    horizontal_spacing, vertical_spacing
    Відступи 0-1.

    Поширені помилки та нюанси

    Trace додається через add_trace з row=, col=. Першим row/col — 1, не 0.

    Зв'язані функції

    Розширений приклад

    from plotly.subplots import make_subplots
    
    fig = make_subplots(
        rows=2, cols=2,
        subplot_titles=['Sales', 'Distribution', 'Trend', 'Pie'],
        specs=[
            [{'type': 'xy'}, {'type': 'xy'}],
            [{'type': 'xy'}, {'type': 'pie'}]
        ]
    )
    
    fig.add_trace(go.Bar(x=cats, y=sales), row=1, col=1)
    fig.add_trace(go.Histogram(x=data), row=1, col=2)
    fig.add_trace(go.Scatter(x=dates, y=values), row=2, col=1)
    fig.add_trace(go.Pie(labels=labs, values=vals), row=2, col=2)
    
    fig.update_layout(height=700, showlegend=False)

    specs argument#

    specs= дозволяє різні типи в кожній клітинці: scatter, pie, 3d, mapbox.

    fig = make_subplots(rows=1, cols=2, specs=[[{'type':'xy'}, {'type':'pie'}]])

    secondary_y#

    Друга вісь Y у підграфіку — для накладання двох метрик різного масштабу (продажі і курс валют).

    fig = make_subplots(specs=[[{'secondary_y': True}]]); fig.add_trace(go.Bar(...), secondary_y=False)

    fig.add_trace() with row/col#

    Розміщує trace у конкретному підграфіку.

    fig.add_trace(go.Scatter(x=x, y=y), row=1, col=2)

    shared_xaxes / shared_yaxes#

    Спільні осі між підграфіками — синхронізує масштаб.

    fig = make_subplots(rows=3, cols=1, shared_xaxes=True)

    horizontal_spacing / vertical_spacing#

    Відступи між підграфіками у частках 0–1.

    fig = make_subplots(rows=2, cols=2, horizontal_spacing=0.15, vertical_spacing=0.2)

    Шкали кольорів і палітри 7

    Built-in colorscales#

    Plotly має понад 80 вбудованих шкал: 'Viridis', 'Plasma', 'RdBu', 'Turbo', 'Hot' та ін.

    fig.update_traces(marker={'colorscale': 'Viridis'})

    Custom colorscale#

    Користувацька шкала як список [position, color].

    scale = [[0, '#fff'], [0.5, '#fab'], [1, '#a00']]; fig.update_traces(colorscale=scale)

    px.colors.qualitative#

    Дискретні палітри для категоріальних даних. Plotly, D3, Set1, Pastel, Bold тощо.

    fig = px.bar(df, x='cat', y='val', color='cat', color_discrete_sequence=px.colors.qualitative.Bold)

    px.colors.sequential#

    Послідовні шкали для впорядкованих числових даних.

    fig = px.scatter(df, color='value', color_continuous_scale=px.colors.sequential.Plasma)

    px.colors.diverging#

    Дивергентні шкали з нейтральним центром — для відхилень від нуля чи середнього.

    fig = px.imshow(diff, color_continuous_scale=px.colors.diverging.RdBu)

    px.colors.cyclical#

    Циклічні шкали для значень з періодичністю — кутів, годин, днів року.

    fig = px.scatter_polar(df, color='hour', color_continuous_scale=px.colors.cyclical.HSV)

    color_continuous_midpoint#

    Середина шкали для дивергентних даних — наприклад, 0 при додатних і від'ємних значеннях.

    px.choropleth(df, color='change', color_continuous_midpoint=0)

    Інтерактивність 7

    Hover templates#

    Кастомний текст підказки з полями trace через placeholder %{x}, %{y}, %{text}, %{customdata}.

    fig.update_traces(hovertemplate='<b>%{x}</b><br>Дохід: %{y:,.0f} ₴<extra></extra>')

    Range slider#

    Повзунок діапазону під графіком — для зручної навігації по часовому ряду.

    fig.update_xaxes(rangeslider_visible=True)

    Range selector#

    Кнопки швидкого вибору діапазону: 1M, 6M, YTD, 1Y, all.

    fig.update_xaxes(rangeselector={'buttons': [{'count': 1, 'label': '1м', 'step': 'month', 'stepmode': 'backward'}]})

    Updatemenus (dropdown)#

    Випадаюче меню для перемикання видимості trace.

    fig.update_layout(updatemenus=[{'buttons': [{'label': 'Все', 'method': 'update', 'args': [{'visible': [True, True]}]}]}])

    Sliders#

    Анімаційний повзунок — наприклад, для перегляду по роках.

    fig = px.scatter(df, x='gdp', y='life', animation_frame='year', animation_group='country')

    fig.show()#

    extended

    Відображає фігуру. У Jupyter — інлайн, у скриптах — у браузері.

    fig.show()

    Коли використовувати

    Відображення в Jupyter або браузері. Default рендерер залежить від оточення.

    Ключові параметри

    renderer
    'browser', 'svg', 'png', 'iframe', 'json'.

    Поширені помилки та нюанси

    У старих Jupyter не показує без явного %matplotlib inline для plotly. Рішення: import plotly.io as pio; pio.renderers.default = 'iframe'.

    Зв'язані функції

    fig.show(renderer)#

    Вибір рендерера: 'browser', 'svg', 'png', 'iframe', 'json'. svg/png — статичні зображення.

    fig.show(renderer='browser')

    Експорт та збереження 6

    fig.write_html()#

    extended

    Зберігає інтерактивний HTML — повний інтерактив без сервера.

    fig.write_html('report.html', include_plotlyjs='cdn', full_html=True)

    Коли використовувати

    Експорт інтерактивного HTML — повний interactivity без сервера. Класика для звітів.

    Ключові параметри

    file
    Шлях.
    include_plotlyjs
    'cdn' (рекомендовано — менший файл), True (вшити, ~3МБ), 'directory'.
    full_html
    True (default) — повний html; False — лише <div>.
    config
    Словник конфігу.

    Поширені помилки та нюанси

    Без include_plotlyjs='cdn' файл важить ~3МБ — для більшості випадків CDN краще.

    Зв'язані функції

    fig.write_image()#

    extended

    Експорт у статичне зображення (PNG/JPG/SVG/PDF). Потрібен kaleido.

    fig.write_image('chart.png', width=1200, height=700, scale=2)

    Коли використовувати

    Статичне зображення для друку, презентацій. Потрібен kaleido (pip install kaleido).

    Ключові параметри

    file
    Шлях. Формат з розширення: png, jpg, svg, pdf.
    width, height
    Розмір у пікселях.
    scale
    Множник DPI (2 для retina).

    Поширені помилки та нюанси

    Без kaleido (помилка ValueError 'requires kaleido package'). Для PDF/SVG зберігаються векторні дані.

    Зв'язані функції

    fig.write_json() / pio.read_json()#

    Серіалізує/десеріалізує фігуру в JSON. Зручно для збереження конфігурацій.

    fig.write_json('fig.json')

    fig.to_html()#

    Повертає HTML як рядок — для вбудовування в веб-додатки.

    html_str = fig.to_html(include_plotlyjs='cdn', div_id='myplot')

    fig.to_image()#

    Повертає байти зображення без збереження файлу.

    png_bytes = fig.to_image(format='png', width=800, height=500)

    fig.to_dict()#

    Повертає словник із усією конфігурацією — корисно для модифікації або інспекції.

    d = fig.to_dict()

    Шаблони та теми 3

    Built-in templates#

    Готові теми: 'plotly', 'plotly_white', 'plotly_dark', 'ggplot2', 'seaborn', 'simple_white', 'presentation'.

    fig.update_layout(template='plotly_white')

    pio.templates.default#

    Глобальний шаблон за замовчуванням для всіх фігур у скрипті.

    import plotly.io as pio; pio.templates.default = 'simple_white'

    Custom template#

    Створення власного шаблону на основі go.layout.Template.

    import plotly.io as pio; pio.templates['mine'] = go.layout.Template(layout={'font': {'family': 'Newsreader'}})

    Статистичні утиліти 4

    px.scatter() з trendline#

    Лінія тренду в scatter: 'ols', 'lowess', 'rolling', 'ewm', 'expanding'.

    fig = px.scatter(df, x='x', y='y', trendline='ols', trendline_color_override='red')

    px.scatter() з marginal#

    Маргінальні розподіли по краях scatter: 'histogram', 'rug', 'box', 'violin'.

    fig = px.scatter(df, x='x', y='y', marginal_x='histogram', marginal_y='violin')

    facet_row / facet_col#

    Грати підграфіків за категоріальною змінною — небезпосередня заміна seaborn.FacetGrid.

    fig = px.scatter(df, x='x', y='y', facet_col='cat', facet_col_wrap=3)

    px.get_trendline_results()#

    Витягує статистичні результати тренду (нахил, R², p-values).

    results = px.get_trendline_results(fig); print(results.iloc[0]['px_fit_results'].summary())
    Бібліотека · 12 розділів · 82 функцій · 25 розширених

    Seaborn

    Seaborn — це шар поверх Matplotlib, заточений під статистичну візуалізацію. Має красиві дефолти, інтегрується з Pandas, автоматично будує довірчі інтервали та регресії. Для аналітика це найшвидший шлях від DataFrame до інформативного графіка. Більшість функцій приймають аргументи data, x, y, hue — і самостійно роблять решту.

    Зв'язки між змінними (relational) 3

    sns.scatterplot()#

    extended

    Точкова діаграма з підтримкою hue, size, style для трьох додаткових змінних.

    sns.scatterplot(data=tips, x='total_bill', y='tip', hue='sex', size='size', style='time')

    Коли використовувати

    Scatter з автоматичним кольоровим/розмірним кодуванням за категоріями. Природний вибір при роботі з DataFrame.

    Ключові параметри

    data
    DataFrame.
    x, y
    Імена стовпців.
    hue
    Стовпець для кольору (категорія).
    size
    Стовпець для розміру.
    style
    Стовпець для форми маркера.
    palette
    Палітра ('deep', 'Set2', list).
    alpha
    Прозорість для багатьох точок.

    Поширені помилки та нюанси

    При hue з багатьма категоріями (>10) кольори стають невиразними. Використайте іншу візуалізацію або групуйте.

    Зв'язані функції

    Розширений приклад

    import seaborn as sns
    sns.set_theme(style='whitegrid')
    
    tips = sns.load_dataset('tips')
    
    fig, ax = plt.subplots(figsize=(10, 6))
    sns.scatterplot(
        data=tips,
        x='total_bill',
        y='tip',
        hue='time',
        size='size',
        sizes=(20, 200),
        style='smoker',
        palette='deep',
        alpha=0.7,
        ax=ax
    )
    sns.despine()

    sns.lineplot()#

    extended

    Лінійний графік. За замовчуванням агрегує дублі по x і будує 95% довірчий інтервал.

    sns.lineplot(data=df, x='date', y='sales', hue='region', errorbar='ci')

    Коли використовувати

    Лінійні графіки часових рядів. Автоматично агрегує дублі по x і малює довірчий інтервал.

    Ключові параметри

    data
    DataFrame.
    x, y
    Стовпці.
    hue
    Окрема лінія per category.
    style
    Стиль лінії.
    errorbar
    'ci' (default 95%), 'sd', 'se', або None.
    estimator
    Функція агрегації ('mean' default).

    Поширені помилки та нюанси

    За замовчуванням обчислює CI за bootstrap — для великих наборів повільно. Задавайте errorbar=None або estimator=None коли точно знаєте, що дублів немає.

    Зв'язані функції

    sns.relplot()#

    extended

    Figure-level wrapper: scatter або line з можливістю facet_grid через col/row.

    sns.relplot(data=df, x='x', y='y', col='cat', kind='scatter', col_wrap=3, height=4)

    Коли використовувати

    Figure-level wrapper з faceting. Один виклик для сітки scatter/line за категоріями.

    Ключові параметри

    data, x, y, hue, size, style
    Як у scatterplot/lineplot.
    kind
    'scatter' (default) або 'line'.
    col, row
    Стовпці для сітки.
    col_wrap
    Перенесення col-сітки.
    height, aspect
    Розмір кожної панелі.

    Поширені помилки та нюанси

    Повертає FacetGrid, не Axes. Для збереження: g.figure.savefig('file.png').

    Зв'язані функції

    Розподіли (distributions) 5

    sns.histplot()#

    extended

    Гістограма з опціональним KDE. stat='density'|'probability'|'percent'.

    sns.histplot(data=df, x='value', hue='group', kde=True, stat='density', bins=30)

    Коли використовувати

    Гістограма з KDE поверх. Сучасніший інтерфейс ніж distplot (deprecated).

    Ключові параметри

    data, x
    Дані.
    hue
    Накладання категорій.
    bins
    Кількість бінів або стратегія.
    kde
    True — додати лінію KDE.
    stat
    'count', 'frequency', 'density', 'probability', 'percent'.
    multiple
    'layer' (default), 'stack', 'dodge', 'fill'.

    Поширені помилки та нюанси

    Без stat='density' KDE поверх count-гістограми показує погано — масштаби різні. Завжди задавайте stat='density' з kde=True.

    Зв'язані функції

    Розширений приклад

    sns.histplot(
        data=df,
        x='value',
        hue='group',
        bins=30,
        kde=True,
        stat='density',
        common_norm=False,  # кожна категорія нормалізована окремо
        multiple='layer',
        alpha=0.5,
        edgecolor='white'
    )

    sns.kdeplot()#

    extended

    Графік оцінки щільності ядра (KDE) — згладжена альтернатива гістограмі.

    sns.kdeplot(data=df, x='income', hue='gender', fill=True, common_norm=False, alpha=0.5)

    Коли використовувати

    Згладжена щільність розподілу. Альтернатива histogram коли потрібна гладка крива.

    Ключові параметри

    data, x
    Дані.
    hue
    Категорії.
    fill
    True — заповнити під кривою.
    common_norm
    False — кожна категорія нормалізована окремо.
    bw_adjust
    Множник bandwidth (за замовчуванням 1).

    Поширені помилки та нюанси

    За замовчуванням common_norm=True — категорії розрахуються разом, маленьку буде ледь видно. Майже завжди потрібно common_norm=False.

    Зв'язані функції

    sns.ecdfplot()#

    Емпірична функція розподілу — корисно для порівняння розподілів без вибору bin.

    sns.ecdfplot(data=df, x='score', hue='class')

    sns.rugplot()#

    Маленькі риски на осі — показує розташування індивідуальних спостережень.

    sns.kdeplot(data=df, x='x'); sns.rugplot(data=df, x='x', alpha=0.5)

    sns.displot()#

    extended

    Figure-level wrapper для розподілів: kind='hist'|'kde'|'ecdf' з faceting.

    sns.displot(data=df, x='value', col='category', kind='kde', fill=True)

    Коли використовувати

    Figure-level з faceting для розподілів. Швидкий спосіб порівняти розподіли по групах у сітці.

    Ключові параметри

    kind
    'hist' (default), 'kde', 'ecdf'.
    col, row
    Faceting.
    rug
    True — додати rug plot.

    Поширені помилки та нюанси

    Як і relplot — повертає FacetGrid, не Axes.

    Зв'язані функції

    Категоріальні графіки 9

    sns.barplot()#

    extended

    Стовпчики із середніми значеннями та довірчими інтервалами. estimator керує агрегацією.

    sns.barplot(data=df, x='day', y='total_bill', hue='sex', estimator='mean', errorbar=('ci', 95))

    Коли використовувати

    Стовпці з агрегованими значеннями + довірчі інтервали. Стандарт для категоріальних порівнянь.

    Ключові параметри

    data, x, y
    Дані.
    hue
    Друга категорія.
    estimator
    'mean' (default), 'median', 'sum', np.func.
    errorbar
    'ci', 'sd', 'se' або None.
    order, hue_order
    Порядок категорій.

    Поширені помилки та нюанси

    Без errorbar=None або order бачите автоматичні CI які можуть бути широкими — це нормально, але іноді вводить в оману. Задавайте умовно.

    Зв'язані функції

    Розширений приклад

    # Базовий
    sns.barplot(data=tips, x='day', y='total_bill')
    
    # З впорядкуванням
    sns.barplot(
        data=tips,
        x='day', y='total_bill',
        hue='sex',
        order=['Thur', 'Fri', 'Sat', 'Sun'],
        estimator='median',
        errorbar=('ci', 95),
        palette='Set2'
    )
    
    # Без довірчих інтервалів
    sns.barplot(data=df, x='cat', y='val', errorbar=None)

    sns.countplot()#

    extended

    Стовпчики з кількостями спостережень — як value_counts у вигляді графіка.

    sns.countplot(data=df, x='category', hue='status', order=['A', 'B', 'C'])

    Коли використовувати

    Стовпці з частотами категорій — як value_counts у вигляді графіка.

    Ключові параметри

    data, x
    Категорія.
    hue
    Друга категорія.
    order, hue_order
    Порядок.

    Поширені помилки та нюанси

    Один з x чи y — категоріальний; другий не задавайте. Для сортування за частотою: order=df['cat'].value_counts().index.

    Зв'язані функції

    sns.boxplot()#

    extended

    Boxplot за категоріями. notch=True додає виїмки для медіани.

    sns.boxplot(data=df, x='department', y='salary', hue='level', whis=1.5)

    Коли використовувати

    Boxplot за категоріями. Стандарт для виявлення викидів і порівняння розподілів.

    Ключові параметри

    data, x, y
    Дані.
    hue
    Друга категорія (dodge=True).
    notch
    True — V-подібні виїмки.
    whis
    Множник IQR для вусів (default 1.5).
    showfliers
    Показувати викиди.

    Поширені помилки та нюанси

    Для асиметричних розподілів медіана-квартилі мало інформативні. Розгляньте violinplot.

    Зв'язані функції

    sns.violinplot()#

    extended

    Violin plot — boxplot + KDE. split=True розділяє по hue.

    sns.violinplot(data=df, x='day', y='tip', hue='sex', split=True, inner='quart')

    Коли використовувати

    Boxplot + KDE — повна форма розподілу плюс квартилі. Краще за box для bimodal-розподілів.

    Ключові параметри

    data, x, y
    Дані.
    hue
    З split=True — порівняння двох категорій на одній скрипці.
    inner
    'box' (default), 'quartile', 'point', 'stick', None.
    split
    True — розділити по hue.
    scale
    'area', 'count', 'width'.

    Поширені помилки та нюанси

    split=True працює тільки з 2 рівнями hue. Для більше — використайте dodge=True з violinmode='group'.

    Зв'язані функції

    Розширений приклад

    sns.violinplot(
        data=tips,
        x='day', y='total_bill',
        hue='sex',
        split=True,           # дві половинки на одну категорію
        inner='quartile',     # лінії квартилів всередині
        palette={'Male': '#4c72b0', 'Female': '#dd8452'},
        cut=0                 # не екстраполювати за межі даних
    )

    sns.boxenplot()#

    Letter-value plot — кращий за boxplot для великих наборів і важких хвостів.

    sns.boxenplot(data=df, x='cat', y='val', k_depth='proportion')

    sns.stripplot()#

    Категоріальний scatter. jitter додає випадковий зсув щоб уникнути перекриття.

    sns.stripplot(data=df, x='day', y='tip', jitter=0.2, alpha=0.6)

    sns.swarmplot()#

    Як stripplot, але з гарантією без перекриття точок. Для невеликих наборів.

    sns.swarmplot(data=df, x='day', y='tip', hue='sex', dodge=True)

    sns.pointplot()#

    Точки з лініями — середні з CI, з'єднані лініями. Підкреслює тренд між категоріями.

    sns.pointplot(data=df, x='time', y='val', hue='group', errorbar='se', dodge=0.1)

    sns.catplot()#

    extended

    Figure-level wrapper для категоріальних: kind='strip'|'swarm'|'box'|'violin'|'boxen'|'point'|'bar'|'count'.

    sns.catplot(data=df, x='day', y='tip', col='time', kind='violin', height=4, aspect=1.2)

    Коли використовувати

    Figure-level wrapper для категоріальних плотів з faceting. Замінює всі axis-level разом.

    Ключові параметри

    kind
    'strip', 'swarm', 'box', 'violin', 'boxen', 'point', 'bar', 'count'.
    col, row
    Faceting.
    col_wrap
    Перенесення стовпців.

    Поширені помилки та нюанси

    Повертає FacetGrid. Для подальших змін — g.set_axis_labels(), g.refline().

    Зв'язані функції

    Регресія 7

    sns.regplot()#

    extended

    Scatter + лінійна регресія з довірчим інтервалом. Базовий axis-level wrapper.

    sns.regplot(data=df, x='x', y='y', ci=95, scatter_kws={'alpha': 0.5})

    Коли використовувати

    Scatter + лінійна регресія + 95% CI. Швидкий аудит лінійного зв'язку.

    Ключові параметри

    data, x, y
    Дані.
    ci
    Рівень довірчого інтервалу (95 default).
    order
    Поліноміальна регресія (1, 2, 3).
    logistic, robust, lowess
    True для альтернативних моделей.
    scatter_kws, line_kws
    Окремі параметри.

    Поширені помилки та нюанси

    lowess=True повільне на великих наборах. Для 10K+ точок краще seaborn.residplot для діагностики.

    Зв'язані функції

    sns.lmplot()#

    extended

    Figure-level версія regplot з можливістю розділення hue/col/row.

    sns.lmplot(data=df, x='x', y='y', col='cat', hue='group', height=4)

    Коли використовувати

    regplot + faceting. Один виклик для регресії в кількох групах.

    Ключові параметри

    data, x, y
    Дані.
    hue
    Окремі регресії per group.
    col, row
    Faceting.
    scatter, fit_reg
    False для прибирання частини.

    Поширені помилки та нюанси

    Як і всі figure-level — повертає FacetGrid. Для збереження g.figure.savefig().

    Зв'язані функції

    sns.residplot()#

    Графік залишків після регресії — діагностика для перевірки лінійності та гомоскедастичності.

    sns.residplot(data=df, x='x', y='y', lowess=True)

    Polynomial regression#

    Поліноміальна регресія через order > 1 в regplot/lmplot.

    sns.regplot(data=df, x='x', y='y', order=2)

    Logistic regression#

    Логістична регресія для бінарного y через logistic=True.

    sns.regplot(data=df, x='x', y='y_binary', logistic=True, y_jitter=0.03)

    LOWESS regression#

    Локально зважена регресія — нелінійне згладжування без припущень.

    sns.regplot(data=df, x='x', y='y', lowess=True, line_kws={'color': 'red'})

    Robust regression#

    Стійка до викидів регресія через robust=True (повільніше).

    sns.regplot(data=df, x='x', y='y', robust=True, ci=None)

    Матриці та теплові карти 4

    sns.heatmap()#

    extended

    Теплова карта 2D-матриці. annot=True пише значення в клітинках.

    sns.heatmap(corr, annot=True, fmt='.2f', cmap='coolwarm', center=0, vmin=-1, vmax=1)

    Коли використовувати

    Теплові карти, кореляційні матриці, confusion matrix. Найвикористовуваніша функція seaborn для матричних даних.

    Ключові параметри

    data
    2D-масив або DataFrame.
    annot
    True — підписи у клітинках.
    fmt
    Формат '.2f', 'd', '.0%'.
    cmap
    'coolwarm', 'RdBu_r', 'viridis', 'YlOrRd'.
    center
    Значення для центру дивергентної шкали.
    vmin, vmax
    Межі шкали.
    mask
    Bool-масив для приховання клітинок.
    annot_kws
    Стиль анотацій {'size': 9}.

    Поширені помилки та нюанси

    Для кореляційної: center=0, vmin=-1, vmax=1, mask верхнього трикутника. Без annot цифри відсутні — для відображення завжди annot=True.

    Зв'язані функції

    Розширений приклад

    import numpy as np
    
    corr = df.corr()
    mask = np.triu(np.ones_like(corr, dtype=bool))
    
    fig, ax = plt.subplots(figsize=(10, 8))
    sns.heatmap(
        corr,
        mask=mask,                 # тільки нижній трикутник
        annot=True,
        fmt='.2f',
        cmap='RdBu_r',
        center=0,
        vmin=-1, vmax=1,
        square=True,
        linewidths=0.5,
        cbar_kws={'shrink': 0.8, 'label': 'Correlation'},
        annot_kws={'size': 9}
    )
    ax.set_title('Кореляційна матриця')

    sns.clustermap()#

    extended

    Теплова карта з ієрархічною кластеризацією рядків і стовпців. Розкриває структуру.

    sns.clustermap(df, method='ward', metric='euclidean', cmap='vlag', z_score=1)

    Коли використовувати

    Heatmap з ієрархічним кластеруванням рядків і стовпців. Розкриває структуру в великих матрицях (геноміка, експресія, фічі).

    Ключові параметри

    data
    DataFrame або 2D-масив.
    method
    'ward', 'single', 'complete', 'average'.
    metric
    'euclidean', 'correlation', 'cosine'.
    z_score
    0 (рядки) або 1 (стовпці) для нормалізації.
    standard_scale
    Альтернатива z_score: масштабує до [0, 1].
    row_colors, col_colors
    Кольорові категорії поряд з осями.

    Поширені помилки та нюанси

    Можна побачити NaN-помилку — треба заповнити пропуски. Для великих матриць (>1000) повільне і нечитабельне.

    Зв'язані функції

    Mask in heatmap#

    Прихідання частин матриці маскою — наприклад, верхній трикутник кореляційної.

    import numpy as np; mask = np.triu(np.ones_like(corr, dtype=bool)); sns.heatmap(corr, mask=mask)

    Custom annotations#

    annot може бути окремим масивом — наприклад, p-values поверх кореляцій.

    sns.heatmap(corr, annot=p_values, fmt='', cmap='coolwarm')

    Багатовимірні графіки 5

    sns.pairplot()#

    extended

    Матриця всіх попарних графіків. На діагоналі — розподіли, поза нею — scatter.

    sns.pairplot(df, hue='species', diag_kind='kde', corner=True)

    Коли використовувати

    Матриця всіх попарних scatter — швидкий EDA для розпізнавання структури і викидів.

    Ключові параметри

    data
    DataFrame (тільки числові аналізуються).
    hue
    Категорія для розділення кольором.
    vars
    Список стовпців (якщо не всі).
    diag_kind
    'auto', 'hist', 'kde'.
    kind
    'scatter' (default), 'kde', 'hist', 'reg'.
    corner
    True — лише нижній трикутник.

    Поширені помилки та нюанси

    Для >6-8 стовпців нечитабельно. Виберіть найважливіші. Дуже повільне на великих наборах.

    Зв'язані функції

    sns.jointplot()#

    extended

    Двовимірний графік з маргінальними розподілами. kind='scatter'|'kde'|'hex'|'reg'|'hist'.

    sns.jointplot(data=df, x='x', y='y', hue='group', kind='kde', fill=True)

    Коли використовувати

    Двовимірний графік з маргінальними розподілами по краях. Виявляє характер зв'язку плюс індивідуальні розподіли.

    Ключові параметри

    data, x, y
    Дані.
    kind
    'scatter', 'kde', 'hex', 'reg', 'hist'.
    hue
    Категорія.
    marginal_kws
    Параметри маргінальних плотів.

    Поширені помилки та нюанси

    kind='hex' для великих наборів (>10K точок). kind='kde' може бути повільним на 100K+.

    Зв'язані функції

    sns.PairGrid()#

    Гнучкіша версія pairplot — можна задавати різні графіки на діагоналі і поза нею.

    g = sns.PairGrid(df, hue='cat'); g.map_diag(sns.histplot); g.map_offdiag(sns.scatterplot); g.add_legend()

    sns.JointGrid()#

    Низькорівнева побудова joint plot з повним контролем кожної панелі.

    g = sns.JointGrid(data=df, x='x', y='y'); g.plot(sns.scatterplot, sns.histplot)

    sns.FacetGrid()#

    extended

    Сітка підграфіків за категоріальними змінними — фундамент усіх figure-level функцій.

    g = sns.FacetGrid(df, col='time', row='smoker', height=3); g.map_dataframe(sns.scatterplot, x='x', y='y')

    Коли використовувати

    Низькорівневий API для сітки підграфіків. Гнучкіший за relplot/catplot/displot.

    Ключові параметри

    data
    DataFrame.
    col, row, hue
    Категорії для сітки.
    col_wrap, row_wrap
    Перенесення.
    height, aspect
    Розмір кожної панелі.

    Поширені помилки та нюанси

    Сам по собі нічого не малює — потрібен g.map() або g.map_dataframe(). map передає Series як аргументи; map_dataframe — DataFrame.

    Зв'язані функції

    Розширений приклад

    g = sns.FacetGrid(
        df,
        col='time', row='smoker',
        hue='sex',
        height=3, aspect=1.3,
        margin_titles=True
    )
    g.map_dataframe(sns.scatterplot, x='total_bill', y='tip')
    g.add_legend()
    g.set_axis_labels('Bill', 'Tip')
    g.set_titles(col_template='{col_name}', row_template='Smoker: {row_name}')
    g.refline(y=df['tip'].mean(), linestyle='--', color='red')

    Часові ряди та матричні дані 3

    Time series with lineplot#

    Lineplot чудово агрегує повторювані спостереження по часу з CI.

    sns.lineplot(data=df, x='date', y='value', hue='series', errorbar=('ci', 95))

    Rolling mean overlay#

    Накладання ковзного середнього через transform у Pandas + lineplot.

    df['ma'] = df['val'].rolling(7).mean(); sns.lineplot(data=df.melt('date', value_vars=['val', 'ma']), x='date', y='value', hue='variable')

    Calendar heatmap pattern#

    Pivot за днем тижня та тижнем + heatmap дає календарний вигляд.

    pivot = df.pivot_table(index='dow', columns='week', values='val'); sns.heatmap(pivot, cmap='YlOrRd')

    Стилі, теми, контекст 8

    sns.set_theme()#

    extended

    Універсальне налаштування стилю, контексту, палітри і шрифтів. Найкращий старт для проєкту.

    sns.set_theme(style='whitegrid', context='notebook', palette='deep', font='serif', font_scale=1.1)

    Коли використовувати

    Універсальне налаштування — стиль, контекст, палітра, шрифт. Перший рядок проекту з seaborn.

    Ключові параметри

    style
    'whitegrid', 'darkgrid', 'white', 'dark', 'ticks'.
    context
    'paper', 'notebook' (default), 'talk', 'poster'.
    palette
    'deep', 'muted', 'colorblind' тощо.
    font
    'sans-serif', 'serif', або конкретний шрифт.
    font_scale
    Множник для всіх шрифтів.

    Поширені помилки та нюанси

    Впливає на ВСІ наступні графіки в сесії, включно з matplotlib. Для тимчасової зміни — sns.axes_style як context manager.

    Зв'язані функції

    sns.set_style()#

    extended

    Стиль фону: 'darkgrid', 'whitegrid', 'dark', 'white', 'ticks'.

    sns.set_style('whitegrid')

    Коли використовувати

    Тільки стиль фону без зміни шрифтів і палітри.

    Ключові параметри

    style
    'whitegrid', 'darkgrid', 'white', 'dark', 'ticks'.

    Поширені помилки та нюанси

    'whitegrid' — стандарт для бізнес-графіків; 'ticks' — для наукових публікацій.

    Зв'язані функції

    sns.set_context()#

    Розмір елементів для різних задач: 'paper', 'notebook' (default), 'talk', 'poster'.

    sns.set_context('talk', font_scale=1.2)

    sns.axes_style()#

    Тимчасовий стиль через with-блок.

    with sns.axes_style('white'): sns.scatterplot(...)

    sns.plotting_context()#

    Тимчасовий контекст у with-блоці.

    with sns.plotting_context('talk'): sns.barplot(...)

    sns.despine()#

    extended

    Прибирає рамки осей. За замовчуванням — верхню і праву.

    sns.despine(left=True, bottom=False, offset=10, trim=True)

    Коли використовувати

    Прибирання рамок осей. Сучасний look — без верхньої і правої.

    Ключові параметри

    top, right, left, bottom
    True для прибирання.
    offset
    Зсув від даних.
    trim
    True — обрізати spines до даних.

    Поширені помилки та нюанси

    За замовчуванням прибирає top і right. Для 'all-clean' стилю: trim=True, offset=10.

    Зв'язані функції

    sns.reset_defaults()#

    Скидає всі налаштування Matplotlib і Seaborn до дефолтних.

    sns.reset_defaults()

    sns.set_palette()#

    Глобально задає поточну палітру.

    sns.set_palette('Set2')

    Палітри кольорів 13

    sns.color_palette()#

    extended

    Створює список кольорів. Без аргументів — поточна палітра. Може приймати назву чи список.

    palette = sns.color_palette('viridis', n_colors=8)

    Коли використовувати

    Створення палітри для кастомних візуалізацій. Можна використати у matplotlib через cycler.

    Ключові параметри

    palette
    Назва, список кольорів, або None (поточна).
    n_colors
    Кількість.
    as_cmap
    True — повернути LinearSegmentedColormap.

    Поширені помилки та нюанси

    Без n_colors отримаєте default 6-8 кольорів. Для категорій більше 10 — переходьте на категоріальні палітри 'tab20', 'Set3'.

    Зв'язані функції

    Розширений приклад

    # 8 кольорів від послідовної палітри
    palette = sns.color_palette('viridis', n_colors=8)
    
    # Як colormap для heatmap
    cmap = sns.color_palette('flare', as_cmap=True)
    sns.heatmap(matrix, cmap=cmap)
    
    # Користувацька — перегляд
    custom = ['#2563eb', '#dc2626', '#16a34a', '#ca8a04']
    sns.palplot(custom)
    
    # Дивергентна (від'ємні до додатних через нейтральний)
    diverging = sns.diverging_palette(220, 20, n=11, as_cmap=True)

    sns.cubehelix_palette()#

    Сімейство монотонних палітр з контрольованим відтінком, насиченістю і світлістю.

    palette = sns.cubehelix_palette(start=0.5, rot=-0.75, n_colors=8)

    sns.light_palette() / sns.dark_palette()#

    Послідовна палітра від світлого/темного до насиченого кольору.

    sns.light_palette('seagreen', n_colors=10, as_cmap=True)

    sns.diverging_palette()#

    Дивергентна палітра з двома відтінками і нейтральним центром.

    sns.diverging_palette(220, 20, n=11, as_cmap=True)

    sns.husl_palette()#

    Палітра з рівномірним відтінком у HUSL-просторі — кольори візуально рівноінтенсивні.

    sns.husl_palette(8, l=0.6)

    sns.hls_palette()#

    Палітра в HLS-просторі — простіше, але менш сприйнятливо рівноінтенсивне.

    sns.hls_palette(8, h=0.5)

    Built-in qualitative palettes#

    Готові категоріальні палітри: 'deep', 'muted', 'pastel', 'bright', 'dark', 'colorblind', 'Set1'-'Set3'.

    sns.set_palette('colorblind')

    Built-in sequential palettes#

    Послідовні: 'rocket', 'mako', 'flare', 'crest' + matplotlib (Blues, viridis тощо).

    sns.heatmap(matrix, cmap='rocket')

    Built-in diverging palettes#

    Дивергентні: 'vlag', 'icefire' + matplotlib (RdBu, coolwarm тощо).

    sns.heatmap(corr, cmap='vlag', center=0)

    sns.color_palette() з 'as_cmap'#

    Перетворює палітру в безперервний colormap для heatmap чи scatter з градієнтом.

    cmap = sns.color_palette('flare', as_cmap=True)

    sns.palplot()#

    Візуалізує палітру — корисно при підборі.

    sns.palplot(sns.color_palette('Spectral', 10))

    sns.choose_colorbrewer_palette()#

    Інтерактивний підбір палітри ColorBrewer (у Jupyter).

    sns.choose_colorbrewer_palette('sequential')

    sns.choose_cubehelix_palette()#

    Інтерактивне налаштування cubehelix.

    sns.choose_cubehelix_palette()

    Поглиблене налаштування графіків 12

    Order argument#

    extended

    Параметр order контролює порядок категорій на осі (для всіх категоріальних плотів).

    sns.barplot(data=df, x='day', y='val', order=['Mon', 'Tue', 'Wed', 'Thu', 'Fri'])

    Коли використовувати

    Контроль порядку категорій на осі — наприклад, дні тижня, рівні освіти, кварталу.

    Ключові параметри

    order
    Список категорій у потрібному порядку.
    hue_order
    Порядок для hue.

    Поширені помилки та нюанси

    Без order seaborn сортує алфавітно — Sun перед Mon. Завжди задавайте для часових категорій.

    Зв'язані функції

    Розширений приклад

    days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    sns.boxplot(data=df, x='day', y='sales', order=days)
    
    # За частотою (від найчастішого)
    order = df['category'].value_counts().index.tolist()
    sns.countplot(data=df, x='category', order=order)
    
    # Спадання за середнім значенням
    order = df.groupby('cat')['val'].mean().sort_values(ascending=False).index
    sns.barplot(data=df, x='cat', y='val', order=order)

    hue_order#

    Порядок категорій у hue (керує легендою і кольорами).

    sns.scatterplot(data=df, x='x', y='y', hue='cat', hue_order=['low', 'mid', 'high'])

    palette argument#

    Можна задавати палітру локально для конкретного графіка — назва, список або словник.

    sns.barplot(data=df, x='cat', y='val', palette={'A': '#1f77b4', 'B': '#ff7f0e'})

    errorbar argument#

    extended

    Тип довірчого інтервалу: 'ci', 'pi', 'sd', 'se' з рівнем або None щоб прибрати.

    sns.barplot(data=df, x='cat', y='val', errorbar='sd')

    Коли використовувати

    Контроль типу довірчого інтервалу в barplot, lineplot, pointplot.

    Ключові параметри

    errorbar
    'ci' (default 95% bootstrap), 'pi', 'sd', 'se' або None.
    'ci' рівень
    Кортеж ('ci', 90) для 90%.

    Поширені помилки та нюанси

    За замовчуванням 'ci' (bootstrap CI 95%). Для великих наборів дорого — задавайте 'sd' або None.

    Зв'язані функції

    estimator argument#

    Функція агрегації для barplot/pointplot/lineplot: 'mean', 'median', 'sum' або np.func.

    sns.barplot(data=df, x='cat', y='val', estimator='median')

    dodge argument#

    Розводить hue-групи у бік замість накладання — для box, strip, swarm, point.

    sns.stripplot(data=df, x='day', y='tip', hue='sex', dodge=True)

    FacetGrid.map() / map_dataframe()#

    Застосовує функцію до кожної комірки сітки. map_dataframe передає DataFrame як перший аргумент.

    g = sns.FacetGrid(df, col='cat'); g.map(plt.scatter, 'x', 'y')

    FacetGrid.add_legend()#

    Додає легенду після всіх викликів map.

    g.add_legend(title='Категорія', loc='upper right')

    FacetGrid.set_axis_labels()#

    Задає підписи осей одночасно для всіх підграфіків.

    g.set_axis_labels('Час', 'Значення')

    FacetGrid.set_titles()#

    Шаблон заголовків панелей. {col_name} підставляє значення.

    g.set_titles('{col_name}: {col_var}')

    FacetGrid.refline()#

    Додає опорну лінію (горизонтальну/вертикальну) до всіх панелей.

    g.refline(y=0, color='red', linestyle='--')

    Annotation in heatmap#

    Параметр annot_kws задає стиль анотацій: розмір, колір, шрифт.

    sns.heatmap(corr, annot=True, annot_kws={'size': 9, 'fontweight': 'bold'})

    Об'єктний інтерфейс (so) 7

    so.Plot()#

    Новий об'єктний інтерфейс Seaborn (з v0.12+). Більш Grammar-of-Graphics стилю.

    import seaborn.objects as so; so.Plot(df, x='x', y='y').add(so.Dot())

    so.Plot.add()#

    Додає шар (mark + stat). Композиція як у ggplot.

    p = so.Plot(df, x='x', y='y').add(so.Dot()).add(so.Line(), so.PolyFit())

    so.Plot.facet()#

    Розбиває на сітку за змінною. Заміна для catplot/relplot.

    so.Plot(df, x='x', y='y').add(so.Dot()).facet(col='cat')

    so.Plot.scale()#

    Масштабування осей і кольорів.

    so.Plot(df, x='x', y='y').add(so.Dot()).scale(x='log', color='viridis')

    so.Plot.theme()#

    Локальна тема для конкретного графіка.

    p.theme({'axes.facecolor': '#f8f8f8'})

    Marks (so.Dot, so.Line, so.Bar, so.Area)#

    Геометричні примітиви — точки, лінії, стовпці, заливки.

    so.Plot(df, x='x', y='y').add(so.Bar())

    Stats (so.Agg, so.Hist, so.PolyFit)#

    Статистичні трансформації перед малюванням.

    so.Plot(df, x='cat', y='val').add(so.Bar(), so.Agg(func='mean'))

    Утиліти та функції-помічники 6

    sns.move_legend()#

    Переміщує легенду після створення графіка.

    ax = sns.scatterplot(...); sns.move_legend(ax, 'upper left', bbox_to_anchor=(1, 1))

    sns.load_dataset()#

    extended

    Завантажує демонстраційні набори даних: 'iris', 'tips', 'penguins', 'titanic', 'flights'.

    tips = sns.load_dataset('tips')

    Коли використовувати

    Демо-набори для прикладів і експериментів. 'tips', 'iris', 'penguins', 'titanic', 'flights', 'mpg'.

    Ключові параметри

    name
    Ім'я набору.

    Поширені помилки та нюанси

    Завантажує з GitHub — потрібен інтернет. У продакшні використовуйте локальні файли.

    Зв'язані функції

    sns.get_dataset_names()#

    Список доступних демо-наборів.

    print(sns.get_dataset_names())

    Saving figures#

    Усі axis-level функції повертають Axes; figure-level — FacetGrid із атрибутом .figure для savefig.

    g = sns.relplot(data=df, x='x', y='y'); g.figure.savefig('out.png', dpi=200, bbox_inches='tight')

    Combining with matplotlib#

    Передавайте ax= для розміщення Seaborn у власній фігурі Matplotlib.

    fig, ax = plt.subplots(); sns.boxplot(data=df, x='cat', y='val', ax=ax); ax.set_title('...')

    Using log scale#

    Логарифмічна шкала через ax.set_xscale/yscale або log_scale у displot/histplot.

    sns.histplot(data=df, x='income', log_scale=True)