Документація · 2026.01
Python для аналізу даних
Технічний довідник по п'яти ключових бібліотеках. 627 функцій з прикладами; 199 з них — з розширеним описом, типовими помилками і пов'язаними функціями.
Pandas — головний інструмент аналітика для роботи з табличними даними. Дві основні структури — Series (одновимірний масив із індексом) і Dat…
166 функцій
16 розділів
54 розширених
NumPy — фундамент усієї наукової екосистеми Python. Її ndarray (n-вимірний масив) у десятки разів швидший за списки Python для числових опер…
159 функцій
15 розділів
55 розширених
Matplotlib — фундамент візуалізації в Python. Pyplot пропонує MATLAB-подібний API для швидких графіків, а об'єктно-орієнтований підхід через…
116 функцій
15 розділів
35 розширених
Plotly — найпотужніша бібліотека інтерактивних графіків для Python. Користувач може масштабувати, наводити курсор, перемикати ряди, експорту…
104 функцій
12 розділів
30 розширених
Seaborn — це шар поверх Matplotlib, заточений під статистичну візуалізацію. Має красиві дефолти, інтегрується з Pandas, автоматично будує до…
82 функцій
12 розділів
25 розширених
Як користуватися
Кожна бібліотека має окрему сторінку. У сайдбарі — навігація і зміст поточної сторінки. Пошуковий рядок зверху працює глобально — знаходить функції по всіх п'яти бібліотеках одразу і показує результати у випадаючому меню. Натисніть / щоб перейти до пошуку, 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
copy
Бібліотека · 16 розділів · 166 функцій · 54 розширених
Pandas
Pandas — головний інструмент аналітика для роботи з табличними даними. Дві основні структури — Series (одновимірний масив із індексом) і DataFrame (двовимірна таблиця) — покривають практично всі повсякденні завдання: завантаження, очищення, перетворення, агрегацію та експорт даних.
Структури даних і їх створення
8
Створює одновимірний масив із пов'язаним індексом. Базовий блок Pandas; кожен стовпець DataFrame — це Series.
s = pd.Series ([10 , 20 , 30 ], index=['a' , 'b' , 'c' ], name='sales' )
copy
Дізнатися більше
Коли використовувати Потрібна одновимірна іменована послідовність — стовпець майбутнього DataFrame, окремий часовий ряд або результат обчислень. Усі стовпці DataFrame — це Series.
Ключові параметри data Список, NumPy-масив, словник чи скаляр. Словник дає Series, де ключі стають індексом. index Мітки. Має бути тієї ж довжини, що data. name Ім'я Series — стане назвою стовпця при перетворенні в DataFrame. Поширені помилки та нюанси Series завжди має один тип даних — змішування чисел і рядків приведе до object dtype, що сповільнить роботу. Перевіряйте через .dtype.
Створює двовимірну таблицю зі стовпцями різних типів. Найважливіша структура для аналізу даних.
df = pd.DataFrame ({'name' : ['Anna' , 'Ivan' ], 'age' : [25 , 30 ]})
copy
Дізнатися більше
Коли використовувати Створюєте таблицю з нуля — зі словника, списків, 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' ])copy
pd.DataFrame.from_dict()#
Створює DataFrame зі словника, де ключі стають стовпцями (orient='columns') або рядками ('index').
df = pd.DataFrame.from_dict ({'a' : [1 , 2 ], 'b' : [3 , 4 ]}, orient='index' )
copy
pd.DataFrame.from_records()#
Будує DataFrame зі списку кортежів або структурованого масиву NumPy.
df = pd.DataFrame.from_records ([(1 , 'a' ), (2 , 'b' )], columns=['id' , 'tag' ])
copy
Створює об'єкт-індекс — незмінну позначкову послідовність для рядків чи стовпців.
idx = pd.Index (['x' , 'y' , 'z' ], name='label' )
copy
Спеціалізований цілочисельний індекс типу range — пам'ятєефективна заміна стандартному діапазону.
idx = pd.RangeIndex (start=0 , stop=100 , step=5 )
copy
pd.MultiIndex.from_tuples()#
Створює багаторівневий ієрархічний індекс із послідовності кортежів. Зручно для груп.
mi = pd.MultiIndex.from_tuples ([('UA' , 2023 ), ('UA' , 2024 )], names=['country' , 'year' ])
copy
pd.MultiIndex.from_product()#
Будує MultiIndex як декартовий добуток кількох ітерованих об'єктів.
mi = pd.MultiIndex.from_product ([['A' , 'B' ], [1 , 2 ]], names=['letter' , 'num' ])
copy
Читання даних
10
Зчитує CSV-файл у DataFrame. Підтримує роздільники, кодування, типи стовпців, парсинг дат, пропуск рядків.
df = pd.read_csv ('data.csv' , sep=';' , encoding='utf-8' , parse_dates=['date' ])
copy
Дізнатися більше
Коли використовувати Найчастіша операція аналітика — завантажити файл 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 )copy
pd.read_excel()#
extended
Завантажує лист Excel у DataFrame. Можна вказати конкретний sheet_name або '*' для всіх листів.
df = pd.read_excel ('report.xlsx' , sheet_name='Q1' , header=0 )
copy
Дізнатися більше
Коли використовувати 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.
Парсить JSON-файл або JSON-рядок у DataFrame. Параметр orient контролює очікувану структуру.
df = pd.read_json ('records.json' , orient='records' , lines=True )
copy
Дізнатися більше
Коли використовувати 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-структури.
Виконує SQL-запит і повертає результат як DataFrame. Працює з SQLAlchemy-з'єднанням.
df = pd.read_sql ('SELECT * FROM users WHERE active=1' , con=engine)
copy
Дізнатися більше
Коли використовувати Виконати 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)copy
Витягує всі HTML-таблиці зі сторінки чи рядка у список DataFrame. Зручно для скрапінгу.
tables = pd.read_html ('https://en.wikipedia.org/wiki/List_of_countries' )
copy
pd.read_parquet()#
extended
Читає колонковий формат Parquet — швидко й компактно зберігає типи даних.
df = pd.read_parquet ('events.parquet' , columns=['user_id' , 'amount' ])
copy
Дізнатися більше
Коли використовувати Parquet — стандартний колонковий формат для аналітики. Зберігає типи даних, стискає в 5-10 разів краще за CSV, читає в 10+ разів швидше.
Ключові параметри path Шлях до файлу або теки з partitions. columns Прочитати лише підмножину стовпців — головна перевага Parquet. engine 'pyarrow' (default, рекомендований) або 'fastparquet'. Поширені помилки та нюанси Потрібно встановити pyarrow окремо. Старі pandas (<1.5) можуть не зберігати nullable-типи коректно — оновлюйтесь до pandas 2.x.
Завантажує DataFrame, серіалізований через pickle. Зберігає всі типи Pandas як є.
df = pd.read_pickle ('snapshot.pkl' )
copy
Читає вміст буфера обміну (наприклад, скопійовану таблицю з Excel) у DataFrame.
df = pd.read_clipboard ()
copy
Зчитує файл у форматі Feather — швидкий бінарний обмін між Python та R.
df = pd.read_feather ('cache.feather' )
copy
Парсить XML-документ у DataFrame, витягуючи елементи певного xpath.
df = pd.read_xml ('feed.xml' , xpath='.//item' )
copy
Запис даних
8
Зберігає DataFrame у CSV. index=False опускає індекс, що зазвичай бажано для експорту.
df.to_csv ('out.csv' , index=False , encoding='utf-8-sig' )
copy
Дізнатися більше
Коли використовувати Експорт 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' якщо це проблема.
Записує DataFrame у файл Excel. Можна задати sheet_name та форматування через ExcelWriter.
df.to_excel ('report.xlsx' , sheet_name='Sales' , index=False )
copy
Дізнатися більше
Коли використовувати Звіти для бізнес-користувачів, які не відкривають 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 )copy
Серіалізує DataFrame у JSON. Параметр orient визначає структуру виводу.
df.to_json ('out.json' , orient='records' , force_ascii=False )
copy
Записує DataFrame у таблицю БД. if_exists керує поведінкою при існуванні таблиці.
df.to_sql ('sales' , con=engine, if_exists='replace' , index=False )
copy
df.to_parquet()#
extended
Зберігає DataFrame у Parquet — стиснений колонковий формат, ідеальний для аналітики.
df.to_parquet ('data.parquet' , compression='snappy' )
copy
Дізнатися більше
Коли використовувати Зберігаєте проміжні результати конвеєра обробки, кешуєте дороге обчислення, готуєте дані для інших аналітиків чи систем (Spark, Dask).
Ключові параметри path Шлях до файлу. compression 'snappy' (default, швидкий), 'gzip' (менший розмір), 'zstd' (компроміс). index True зберігає індекс — корисно для часових рядів. Поширені помилки та нюанси Категоріальні типи зберігаються коректно тільки у pyarrow engine. Object-стовпці (рядки) Parquet зберігає як string — без проблем.
Перетворює DataFrame на словник. orient='records' дає список словників — типова форма для API.
records = df.to_dict (orient='records' )
copy
Серіалізує DataFrame через pickle, зберігаючи всі pandas-типи (категорії, dtype тощо).
df.to_pickle ('snapshot.pkl' )
copy
Копіює DataFrame у буфер обміну — зручно для швидкого перенесення в Excel.
df.to_clipboard (index=False )
copy
Огляд та інспекція
10
Повертає перші n рядків (за замовчуванням 5). Використовується для швидкого огляду структури.
Дізнатися більше
Коли використовувати Перший погляд на дані після завантаження. Перевірити, що стовпці правильно розпарсились, типи відповідні, кодування не зламалось.
Ключові параметри n Скільки рядків показати. Default 5; задавайте більше для перевірки структури з різноманітними значеннями. Поширені помилки та нюанси Не плутайте з .sample() — head завжди дає перші рядки, які можуть бути нерепрезентативними (відсортовані по даті чи ID).
Повертає останні n рядків. Корисно для перевірки часових рядів і свіжих записів.
Друкує зведену інформацію: типи стовпців, кількість непустих значень, обсяг пам'яті.
df.info (memory_usage='deep' )
copy
Дізнатися більше
Коли використовувати Швидка діагностика: скільки рядків, які типи, де є пропуски, скільки пам'яті займає. Це другий крок після head() при роботі з новими даними.
Ключові параметри verbose True — повний список стовпців; False — резюме. memory_usage 'deep' враховує реальний розмір рядків у object-стовпцях. Поширені помилки та нюанси Без memory_usage='deep' object-стовпці показують лише розмір вказівників (8 байт), що в 10+ разів недооцінює реальне споживання пам'яті.
Видає базову статистику числових стовпців: count, mean, std, min, квартилі, max.
df.describe (include='all' )
copy
Дізнатися більше
Коли використовувати Перший погляд на розподіли числових стовпців: середнє, медіана, квартилі, екстремуми. Швидко виявляє підозрілі викиди й помилки введення.
Ключові параметри include 'all' — описати всі типи (для object теж: count, unique, top, freq); список типів. percentiles Список квантилів. Default [.25, .5, .75]; додайте 0.01 і 0.99 для виявлення викидів. Поширені помилки та нюанси За замовчуванням ігнорує object-стовпці. Якщо потрібна статистика й по них — include='all' або include=['object'].
Кортеж (рядків, стовпців). Найшвидший спосіб дізнатися розмірність таблиці.
n_rows, n_cols = df.shape
copy
Дізнатися більше
Коли використовувати Скільки рядків і стовпців. Найшвидший спосіб після фільтрації перевірити, скільки записів залишилось.
Ключові параметри (немає) Це атрибут, не метод. Повертає кортеж (n_rows, n_cols). Поширені помилки та нюанси Не плутайте з len(df) — len дає тільки кількість рядків.
Повертає Series із типом кожного стовпця. Перший крок діагностики при незрозумілих помилках.
Дізнатися більше
Коли використовувати Перша річ при діагностиці незрозумілих помилок. Часто 'TypeError: cannot compare' виникає, бо стовпець-дата читається як object/string.
Ключові параметри (атрибут) Без параметрів. Повертає Series із типом кожного стовпця. Поширені помилки та нюанси Тип 'object' зазвичай означає string, але також може містити змішаний контент — словники, списки, None. Уникайте — краще приведіть до конкретного типу через astype().
Об'єкт Index із назвами стовпців. Можна перепризначити для масового перейменування.
df.columns = [c.lower ().strip () for c in df.columns]
copy
Index рядків. Можна замінити, перевпорядкувати або зробити багаторівневим.
df.index = pd.to_datetime (df.index)
copy
Кількість байтів, що займає кожен стовпець. deep=True враховує об'єкти Python.
df.memory_usage (deep=True ).sum () / 1e6 # МБ
copy
Повертає випадкову вибірку рядків. Незамінно для попереднього огляду великих наборів.
df.sample (n=100 , random_state=42 )
copy
Вибірка та індексація
12
Доступ за мітками: рядки за значенням індексу, стовпці за іменем. Підтримує булеві маски.
df.loc[df['age' ] > 18 , ['name' , 'email' ]]
copy
Дізнатися більше
Коли використовувати Вибір за мітками — назвами стовпців і значеннями індексу. Підтримує бульові маски — основний спосіб фільтрації.
Ключові параметри 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 ()copy
Доступ за цілочисельною позицією — як у NumPy. Зручно, коли індекси нечислові.
df.iloc[0 :5 , 1 :3 ] # перші 5 рядків, стовпці 2-3
copy
Дізнатися більше
Коли використовувати Вибір за цілочисельною позицією, як у NumPy. Корисно, коли мітки індексу нечислові або їх немає.
Ключові параметри rows Ціле число, зріз (без останнього!), список цілих, бульова маска. cols Ціле число, зріз, список. Поширені помилки та нюанси Зрізи .iloc[2:5] виключають останній — повертають 2, 3, 4 (як у Python). Це різниця з .loc.
Швидкий доступ до окремої клітинки за міткою. Швидше, ніж .loc для одного значення.
value = df.at[10 , 'price' ]
copy
Швидкий доступ до клітинки за цілочисельною позицією. Аналог .at для iloc.
Фільтрує рядки рядковим виразом — компактніше за бульові маски, особливо при багатьох умовах.
df.query ('age > 18 and country == "UA"' )
copy
Дізнатися більше
Коли використовувати Складні умови фільтрації, де ланцюжок (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"' )copy
Відбирає стовпці чи рядки за іменами, регулярним виразом або підрядком.
df.filter (regex='^price_' ) # стовпці, що починаються з 'price_'
copy
Зберігає значення там, де умова True; інакше підставляє NaN або задане значення.
df.where (df > 0 , other=0 ) # від'ємні значення замінити на 0
copy
Інверсія where: підставляє значення там, де умова True. Зручно для маскування викидів.
df['age' ].mask (df['age' ] > 100 , other=None )
copy
Повертає булеву маску — чи входить кожне значення в заданий список.
df[df['country' ].isin (['UA' , 'PL' , 'CZ' ])]
copy
Дізнатися більше
Коли використовувати Фільтрація за списком значень — типу SQL WHERE x IN (a, b, c). Найчистіший синтаксис для перевірки приналежності.
Ключові параметри values Список, масив, Series, словник {стовпець: список}. Поширені помилки та нюанси При передачі словника {стовпець: список} перевіряє кожен стовпець окремо — повертає DataFrame, не Series. Для глобальної перевірки фільтруйте по конкретному стовпцю: df[df['code'].isin(['A', 'B'])].
Отримує стовпець за іменем; якщо немає — повертає значення за замовчуванням замість помилки.
df.get ('email' , default=pd.Series (['n/a' ] * len (df)))
copy
Повертає рядки за заданими цілочисельними індексами — корисно для перестановок.
Метод Series: булева маска для значень, що в заданому діапазоні (включно).
mask = df['age' ].between (18 , 65 )
copy
Очищення даних
13
Видаляє рядки чи стовпці з пропусками. Параметр thresh задає мінімальну кількість непустих.
df = df.dropna (subset=['email' ], how='any' )
copy
Дізнатися більше
Коли використовувати Видалення рядків з пропущеними значеннями. Зазвичай перед моделюванням, де NaN ламає алгоритми.
Ключові параметри subset Список стовпців — пропуски тільки в них рахуються. how 'any' (default, видалити якщо хоч один NaN) чи 'all' (видалити лише повністю порожні рядки). thresh Мінімальна кількість непорожніх значень у рядку. axis 0 — рядки (default), 1 — стовпці. Поширені помилки та нюанси Видалення рядків з NaN може суттєво зменшити вибірку. Спочатку оцініть масштаб через df.isnull().sum() — можливо, краще fillna() або не використовувати ці стовпці.
Заповнює пропуски — константою, методом 'ffill'/'bfill' або значеннями зі словника.
df['age' ] = df['age' ].fillna (df['age' ].median ())
copy
Дізнатися більше
Коли використовувати Заповнення пропусків — числами (медіана, нуль), сусідніми значеннями (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' ])copy
df.drop_duplicates()#
extended
Видаляє рядки-дублікати. subset обмежує перевірку певними стовпцями.
df = df.drop_duplicates (subset=['email' ], keep='first' )
copy
Дізнатися більше
Коли використовувати Видалення дублікатів — після конкатенації джерел, при чищенні листів реєстрації, де користувачі надсилали форму двічі.
Ключові параметри subset Стовпці для перевірки. Без нього — усі стовпці мають збігатися. keep 'first' (default), 'last', або False (видалити всі дублікати, не лишаючи жодного). Поширені помилки та нюанси Дублікати визначаються точним збігом — 'Anna' і 'anna ' (з пробілом) залишаться обидва. Спочатку нормалізуйте через str.strip().str.lower().
Замінює значення — окремі, списки, словники чи за регулярним виразом.
df['status' ].replace ({'A' : 'active' , 'I' : 'inactive' }, inplace=True )
copy
Дізнатися більше
Коли використовувати Заміна окремих значень або патернів. Кодування статусів, виправлення помилок введення, нормалізація варіацій.
Ключові параметри to_replace Скаляр, список, regex-патерн, словник {старе: нове} або {стовпець: {старе: нове}}. value На що заміняти (якщо to_replace не словник). regex True для regex-заміни. Поширені помилки та нюанси За замовчуванням замінює тільки точні збіги. Для часткових замін у рядках використайте regex=True або str.replace().
Видаляє стовпці або рядки за мітками. axis=1 для стовпців, axis=0 для рядків.
df = df.drop (columns=['temp_id' , 'raw_value' ])
copy
Дізнатися більше
Коли використовувати Видалення стовпців або рядків за іменами. Найбезпечніший спосіб видалити стовпці (на відміну від del df['col']).
Ключові параметри columns Ім'я або список імен стовпців. Сучасний синтаксис. index Мітки індексу для видалення рядків. axis Старіший синтаксис: 0 для рядків, 1 для стовпців. inplace True — змінює DataFrame на місці. Уникайте — краще присвоюйте результат. Поширені помилки та нюанси Помилка 'KeyError: not found in axis' якщо стовпця немає. Додайте errors='ignore' щоб пропустити відсутні.
Повертає булеву таблицю: True там, де NaN/None. Часто комбінується із .sum() для підрахунку.
df.isnull ().sum ().sort_values (ascending=False )
copy
Дізнатися більше
Коли використовувати Знайти пропуски. Зазвичай комбінується з .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 )copy
Інверсія isnull — True для непустих значень.
valid = df[df['email' ].notnull ()]
copy
Псевдонім isnull(). Зазвичай використовують .isna() для узгодженості з .notna().
df.isna ().any (axis=1 ) # рядки з хоча б одним NaN
copy
Булева маска: True для дублікатів (з другого входження). keep='last' — навпаки.
df[df.duplicated (subset=['user_id' ])]
copy
Forward-fill: заповнює пропуски попереднім непустим значенням. Для часових рядів.
df['price' ] = df['price' ].ffill ()
copy
Backward-fill: заповнює пропуски наступним непустим значенням.
df = df.bfill (limit=2 ) # не далі ніж 2 рядки назад
copy
Інтерполяція пропусків — лінійна, поліноміальна, за часом тощо.
df['temp' ] = df['temp' ].interpolate (method='linear' )
copy
Обмежує значення зверху і знизу — корисно для приборкання викидів.
df['salary' ] = df['salary' ].clip (lower=0 , upper=1e6 )
copy
Перетворення
12
Застосовує функцію до кожного стовпця (axis=0) або рядка (axis=1). Гнучко, але повільніше за векторні операції.
df['full' ] = df.apply (lambda r: f"{r['first']} {r['last']}" , axis=1 )
copy
Дізнатися більше
Коли використовувати Кастомна логіка по стовпцях/рядках, коли немає векторного методу. Часто для 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'
)copy
Заміна елементів Series через функцію, словник чи іншу Series. Найпростіший спосіб мепінгу категорій.
df['country' ] = df['code' ].map ({'UA' : 'Ukraine' , 'PL' : 'Poland' })
copy
Дізнатися більше
Коли використовувати Заміна елементів через словник або функцію. Найшвидший спосіб закодувати категорії.
Ключові параметри arg Словник {старе: нове}, функція або інша Series. na_action 'ignore' — не передавати NaN у функцію. Поширені помилки та нюанси Якщо ключа немає у словнику — стає NaN. Щоб залишити старе значення: df['x'].map(d).fillna(df['x']).
У сучасному Pandas — поелементне застосування функції до DataFrame (раніше .applymap).
df.map (lambda x: round (x, 2 ) if isinstance (x, float ) else x)
copy
Повертає об'єкт тієї ж форми, що вхід. Часто з groupby для нормалізації в межах груп.
df['z' ] = df.groupby ('cat' )['val' ].transform (lambda x: (x - x.mean ()) / x.std ())
copy
Змінює тип стовпця або всього DataFrame. Можна передавати словник {стовпець: тип}.
df = df.astype ({'age' : 'int8' , 'price' : 'float32' })
copy
Дізнатися більше
Коли використовувати Зміна типу — економія пам'яті (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' )copy
Глибока копія DataFrame. Запобігає попередженням SettingWithCopyWarning при модифікаціях.
df_clean = df.copy ()
copy
Перейменовує стовпці чи індекс. Приймає словник або функцію.
df = df.rename (columns={'old_name' : 'new_name' })
copy
Дізнатися більше
Коли використовувати Перейменування стовпців або індексу — після злиття джерел з різними назвами, при адаптації під 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' ]copy
Робить стовпець (або кілька) індексом DataFrame. Ключовий крок для часових рядів.
df = df.set_index ('date' ).sort_index ()
copy
Дізнатися більше
Коли використовувати Перетворити стовпець на індекс — критично для часових рядів (resample, rolling) і для оптимізації злиття за ключем.
Ключові параметри keys Стовпець або список (для MultiIndex). drop True — видалити стовпець після переносу. False — лишити дубль як стовпець. append Додати до існуючого індексу замість заміни. Поширені помилки та нюанси Перед операціями на часовому індексі завжди робіть .sort_index() — інакше зрізи й resample працюватимуть неправильно.
df.reset_index()#
extended
Переносить індекс назад у стовпці й створює новий цілочисельний RangeIndex.
df = df.reset_index (drop=False )
copy
Дізнатися більше
Коли використовувати Після groupby() результат має ключі групування в індексі — reset_index() повертає їх у звичайні стовпці. Готує DataFrame до експорту чи злиття.
Ключові параметри drop True — викинути старий індекс зовсім (не зберігати як стовпець). level Скинути лише певні рівні MultiIndex. Поширені помилки та нюанси Без drop=True після кількох reset виходить безліч непотрібних стовпців 'index', 'level_0' тощо.
Створює нові стовпці без модифікації вихідного DataFrame. Зручно для ланцюжків (.method chaining).
df.assign (price_eur=lambda d: d['price_uah' ] / 40 , vat=lambda d: d['price_eur' ] * 0.2 )
copy
Дізнатися більше
Коли використовувати Додавання нових обчислених стовпців у ланцюжку методів (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 ()
)copy
Обчислює рядковий вираз над стовпцями DataFrame — швидше і компактніше за конкатенацію.
df.eval ('total = price * quantity' , inplace=True )
copy
Передає DataFrame у функцію, повертаючи її результат. Робить ланцюжки чистими.
result = (df.pipe (clean).pipe (enrich).pipe (aggregate))
copy
Сортування та ранжування
5
df.sort_values()#
extended
Сортує рядки за значеннями одного або кількох стовпців.
df.sort_values (by=['date' , 'price' ], ascending=[True , False ])
copy
Дізнатися більше
Коли використовувати Впорядкування за одним або кількома стовпцями. Для top-N запитів, для впорядкованого виведення звітів.
Ключові параметри by Стовпець або список стовпців. ascending True (default) або список True/False для різних напрямків per стовпець. na_position 'first' або 'last' — куди ставити NaN. Поширені помилки та нюанси Не плутайте з sort_index() — це різні операції. Для частих сортувань великих даних встановіть індекс і використовуйте sort_index().
Сортує за індексом — обов'язково для зрізів часових рядів.
df = df.sort_index (axis=0 )
copy
Призначає ранг кожному значенню. Параметр method керує обробкою ties (дублікатів рангу).
df['rank' ] = df['score' ].rank (method='dense' , ascending=False )
copy
Швидко знаходить n найбільших значень за стовпцем — швидше за sort_values().head().
top10 = df.nlargest (10 , 'revenue' )
copy
Дзеркальна операція — n найменших значень.
df.nsmallest (5 , 'response_time' )
copy
Групування та агрегація
10
Розбиває DataFrame на групи за ключем. Основа split-apply-combine — найпотужніша операція Pandas.
df.groupby ('category' )['sales' ].sum ()
copy
Дізнатися більше
Коли використовувати Найпотужніша операція 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 )copy
Застосовує одну чи кілька агрегацій. Словник дозволяє різні агрегації для різних стовпців.
df.groupby ('city' ).agg (avg_age=('age' , 'mean' ), n=('id' , 'count' ))
copy
Дізнатися більше
Коли використовувати Кілька різних агрегацій за один прохід, можливо різні для різних стовпців. Сучасний 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' )
copy
Дізнатися більше
Коли використовувати Зведена таблиця з агрегацією — стандарт для звітів. 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' ]
)copy
Таблиця спряженості — частоти комбінацій категорій. normalize дає частки.
pd.crosstab (df['gender' ], df['plan' ], normalize='index' )
copy
Дізнатися більше
Коли використовувати Таблиця спряженості — частоти комбінацій категорій. Для аналізу залежності двох категоріальних змінних.
Ключові параметри index Стовпець(і) для рядків. columns Стовпець(и) для стовпців. normalize False (default), 'index' (рядки в %), 'columns' (стовпці в %), 'all' (від загальної). values + aggfunc Аналог pivot_table. Поширені помилки та нюанси Без normalize=True даєте абсолютні числа — для чесного порівняння категорій різного розміру нормалізуйте.
Кількість рядків у кожній групі (на відміну від count, рахує і NaN).
df.groupby ('country' ).size ()
copy
Повертає результат у формі вхідного DataFrame — для нормалізації чи рангів у межах груп.
df['pct' ] = df.groupby ('cat' )['val' ].transform (lambda x: x / x.sum ())
copy
Залишає лише ті групи, які задовольняють умову.
df.groupby ('city' ).filter (lambda g: len (g) > 10 )
copy
Найгнучкіший варіант: застосовує довільну функцію до кожної групи.
df.groupby ('user' ).apply (lambda g: g.nlargest (3 , 'score' ))
copy
Порядковий номер рядка в межах групи — від 0.
df['n_in_group' ] = df.groupby ('user' ).cumcount ()
copy
groupby.first() / .last()#
Перше чи останнє непусте значення в кожній групі. Корисно після сортування.
df.sort_values ('date' ).groupby ('user' ).last ()
copy
Статистичні функції
20
Середнє арифметичне за стовпцями (axis=0) або рядками (axis=1).
df.mean (numeric_only=True )
copy
Дізнатися більше
Коли використовувати Середнє значення стовпців/рядків. Базова статистика, часто використовується після groupby.
Ключові параметри axis 0 — по стовпцях (default), 1 — по рядках. numeric_only True — обмежує числовими стовпцями (уникає помилок на object). skipna True (default) — ігнорує NaN. Поширені помилки та нюанси Без numeric_only=True у новіших pandas може викинути помилку, якщо є нечислові стовпці. Завжди додавайте.
Медіана — стійкіша до викидів за середнє.
df['salary' ].median ()
copy
Стандартне відхилення (зміщене з ddof=0 чи незміщене з ddof=1 — за замовчуванням).
df.groupby ('region' )['price' ].std ()
copy
Дисперсія — квадрат стандартного відхилення.
Сума значень. Можна обмежити числовими стовпцями через numeric_only.
df.sum (axis=0 , numeric_only=True )
copy
Мінімум і максимум за віссю. Для пошуку позиції див. idxmin/idxmax.
df[['high' , 'low' ]].min ()
copy
df.idxmin() / df.idxmax()#
Повертає мітку індексу, де досягається мінімум чи максимум.
df['price' ].idxmax () # дата найвищої ціни
copy
Матриця кореляцій між числовими стовпцями. method='pearson'|'spearman'|'kendall'.
df.select_dtypes ('number' ).corr (method='spearman' )
copy
Дізнатися більше
Коли використовувати Матриця кореляцій між числовими стовпцями. Перший крок при пошуку зв'язків і виявленні мультиколінеарності.
Ключові параметри 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 )copy
Матриця коваріацій — некалібрована версія кореляції.
df.value_counts()#
extended
Частоти унікальних значень. normalize=True повертає частки.
df['country' ].value_counts (normalize=True ).head (10 )
copy
Дізнатися більше
Коли використовувати Найважливіший метод для досліджуваного аналізу — швидке розуміння розподілу категорій. Після завантаження одразу подивіться на ключові стовпці.
Ключові параметри normalize True — частки замість абсолютних. sort True (default) — за спаданням частоти. dropna True (default) — NaN ігноруються. bins Для числових — розбити на біни і порахувати. Поширені помилки та нюанси Викликається на Series, не на DataFrame (хоча в нових версіях DataFrame.value_counts() також працює, рахує частоти комбінацій).
Метод Series — масив унікальних значень у порядку появи.
df['status' ].unique ()
copy
Кількість унікальних значень. Для DataFrame повертає Series по стовпцях.
Дізнатися більше
Коли використовувати Скільки унікальних значень у кожному стовпці. Швидкий спосіб виявити стовпці-кандидати на категоріальний тип чи зайві стовпці-ID.
Ключові параметри axis 0 — по стовпцях (default). dropna True (default) — NaN не рахується. Поширені помилки та нюанси Для дуже великих стовпців може бути повільним. Для приблизного значення на мільярдах — використайте HyperLogLog (пакети datasketch).
Мода — найчастіше значення. Може повернути кілька рядків при tie.
Квантилі (за замовчуванням медіана). Приймає список для кількох рівнів.
df['income' ].quantile ([0.25 , 0.5 , 0.75 , 0.95 ])
copy
Коефіцієнт асиметрії розподілу. Близько 0 — симетричний.
df['returns' ].skew ()
copy
Ексцес — гостроверхість розподілу порівняно з нормальним.
df['log_returns' ].kurtosis ()
copy
Накопичувальна сума уздовж осі — кожний елемент = сума всіх попередніх включно з ним. Корисно для побудови загального доходу за період.
df['cum_revenue' ] = df['revenue' ].cumsum ()
copy
Накопичувальний добуток. Часто використовується для розрахунку кумулятивної доходності.
(1 + df['returns' ]).cumprod () - 1
copy
df.cummax() / df.cummin()#
Накопичувальний максимум/мінімум — корисно для обчислення drawdown.
df['running_high' ] = df['price' ].cummax ()
copy
Кількість непустих значень у кожному стовпці (на відміну від len, який рахує і NaN).
Об'єднання DataFrame
6
SQL-подібне об'єднання двох DataFrame за ключем. how задає тип JOIN: inner/outer/left/right.
merged = pd.merge (orders, users, on='user_id' , how='left' )
copy
Дізнатися більше
Коли використовувати 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' ])copy
Конкатенація DataFrame по вертикалі (axis=0) або горизонталі (axis=1).
pd.concat ([df1, df2, df3], axis=0 , ignore_index=True )
copy
Дізнатися більше
Коли використовувати Стек DataFrame по вертикалі (рядки) або горизонталі (стовпці). Типове застосування — об'єднання частин з різних джерел чи місяців.
Ключові параметри objs Список DataFrame або Series. axis 0 (default) — по вертикалі, 1 — по горизонталі. ignore_index True — заново нумерує рядки 0, 1, 2... join 'outer' (default, всі стовпці) або 'inner' (лише спільні). Поширені помилки та нюанси Без ignore_index=True індекси з різних DataFrame можуть дублюватись. Стовпці з різними назвами стають NaN — перевіряйте перед концатенацією.
Швидке об'єднання за індексом. Простіше за merge, коли ключ — індекс.
df.join (other_df, how='left' , rsuffix='_other' )
copy
Заповнює NaN у self значеннями з other. Корисно для злиття часткових даних.
df_full = df_recent.combine_first (df_archive)
copy
Підсвічує відмінності між двома DataFrame однакової форми. Зручно для аудиту.
df_old.compare (df_new, keep_shape=False )
copy
Оновлює значення на місці значеннями з іншого DataFrame за збігом індексу.
df.update (corrections_df)
copy
Перетворення форми (reshape)
8
Розгортає довгу таблицю в широку без агрегації. Відмінно від pivot_table — не дозволяє дублі ключа.
df.pivot (index='date' , columns='product' , values='price' )
copy
Дізнатися більше
Коли використовувати Розгортання довгої таблиці в широку — без агрегації. Для випадків де (index, columns) пара унікальна.
Ключові параметри index Стовпець для рядків. columns Стовпець, чиї значення стають іменами стовпців. values Що класти у клітинки. Поширені помилки та нюанси Якщо комбінація (index, columns) має дублі — pivot() кидає ValueError. Тоді потрібен pivot_table з aggfunc.
Зворотна операція: широка таблиця -> довга. Стовпці стають значеннями змінної.
pd.melt (df, id_vars='id' , value_vars=['q1' , 'q2' , 'q3' ], var_name='quarter' )
copy
Дізнатися більше
Коли використовувати Зворотна операція до 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
# ... copy
Переносить найвнутрішніший рівень стовпців в індекс — отримуємо довшу й вужчу таблицю.
stacked = df.stack (future_stack=True )
copy
Зворотна до stack — переносить рівень індексу в стовпці.
df.set_index (['city' , 'year' ]).unstack ('year' )
copy
Транспонує DataFrame: рядки стають стовпцями і навпаки.
Розгортає стовпець-список у кілька рядків — по одному на елемент.
df.explode ('tags' , ignore_index=True )
copy
Конвертує широкий формат у довгий за регулярним шаблоном імен стовпців.
pd.wide_to_long (df, stubnames='val' , i='id' , j='year' )
copy
Міняє рівні MultiIndex місцями. Корисно перед сортуванням за іншим рівнем.
df.swaplevel (0 , 1 ).sort_index ()
copy
Часові ряди
15
pd.to_datetime()#
extended
Перетворює стовпець або список у datetime. errors='coerce' замінює невалідні на NaT.
df['date' ] = pd.to_datetime (df['date' ], format='%Y-%m-%d' , errors='coerce' )
copy
Дізнатися більше
Коли використовувати Перший крок при роботі з часовими даними. Без перетворення на 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' )copy
Генерує діапазон дат із заданим кроком. freq='D','W','M','Q','Y','H' тощо.
dates = pd.date_range ('2024-01-01' , periods=12 , freq='ME' )
copy
Змінює частоту часового ряду — даунсемплінг (тижневі підсумки) чи апсемплінг.
df.resample ('W' ).agg ({'sales' : 'sum' , 'visits' : 'mean' })
copy
Дізнатися більше
Коли використовувати Зміна частоти часового ряду. Підсумок продажів за тиждень/місяць/квартал з денних даних. Або, рідше, апсемплінг.
Ключові параметри 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 ()copy
Ковзне вікно фіксованої ширини для обчислення sliding-статистик.
df['ma7' ] = df['price' ].rolling (window=7 ).mean ()
copy
Дізнатися більше
Коли використовувати Ковзне середнє для згладжування шуму, обчислення 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' ])copy
Розширюване вікно: усі попередні точки. Кумулятивні статистики.
df['running_avg' ] = df['returns' ].expanding (min_periods=10 ).mean ()
copy
Зсуває значення на n позицій уперед чи назад. Базис для лагів і обчислення приростів.
df['prev_price' ] = df['price' ].shift (1 )
copy
Дізнатися більше
Коли використовувати Зсув значень для обчислення лагів, приростів, попередніх значень. Базова операція для feature engineering у часових рядах.
Ключові параметри periods Кількість періодів (від'ємні — у майбутнє). freq Частота для зсуву по часовому індексу. Поширені помилки та нюанси Створює NaN на початку (або кінці для від'ємного зсуву) — у наступних обчисленнях врахуйте.
Різниця між поточним і попереднім значенням. Аналог .shift(1) - сама себе.
df['delta' ] = df['stock' ].diff ()
copy
df.pct_change()#
extended
Відсоткова зміна між значеннями. Стандартна процедура для розрахунку доходності.
df['return' ] = df['close' ].pct_change ()
copy
Дізнатися більше
Коли використовувати Відсоткова зміна між періодами — стандарт для розрахунку доходності в фінансах.
Ключові параметри periods Кількість періодів. 1 — від попереднього, 12 — рік-до-року на місячних даних. fill_method Default 'pad' (ffill); сучасні версії радять None — обробляти пропуски явно. Поширені помилки та нюанси Перше значення завжди NaN. Множте на 100 для відсотків. Для логарифмічної доходності використайте np.log(p / p.shift()).
Приводить часовий ряд до заданої частоти, опційно заповнюючи пропуски.
df.asfreq ('D' , method='ffill' )
copy
Створює різницю часу. Можна додавати/віднімати від Timestamp.
df['deadline' ] = df['created' ] + pd.Timedelta (days=30 )
copy
Точна часова мітка з підтримкою часових поясів.
ts = pd.Timestamp ('2024-12-31 23:59:59' , tz='Europe/Kyiv' )
copy
Діапазон бізнес-днів (без вихідних). Базова функція для фінансових часових рядів.
bdays = pd.bdate_range ('2024-01-01' , '2024-12-31' )
copy
Доступ до компонентів дати: dt.year, dt.month, dt.dayofweek, dt.day_name() тощо.
df['weekday' ] = df['date' ].dt.day_name (locale='uk_UA' )
copy
Призначає часовий пояс наївному datetime (без TZ).
df['t' ] = df['t' ].dt.tz_localize ('UTC' )
copy
Конвертує локалізований час в інший часовий пояс.
df['kyiv' ] = df['utc' ].dt.tz_convert ('Europe/Kyiv' )
copy
Робота з рядками (.str)
13
Булева маска: чи містить рядок підрядок чи відповідає regex.
df[df['email' ].str .contains ('@gmail' , na=False )]
copy
Дізнатися більше
Коли використовувати Фільтрація рядків за підрядком чи 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 )]copy
Розбиває рядок за роздільником. expand=True розкладає на окремі стовпці.
df[['first' , 'last' ]] = df['name' ].str .split (' ' , n=1 , expand=True )
copy
Дізнатися більше
Коли використовувати Розбиття рядка за роздільником. Парсинг повних імен, адрес, складених кодів. expand=True розкладає у стовпці.
Ключові параметри pat Роздільник або regex. n Максимальна кількість розділень. expand True — повертає DataFrame зі стовпцями замість Series списків. Поширені помилки та нюанси Без expand=True отримуєте Series, де кожне значення — список. Для роботи з ним потрібен .str[i] для доступу до елементів.
Заміна підрядка чи regex-патерну на нове значення.
df['phone' ] = df['phone' ].str .replace (r'\D' , '' , regex=True )
copy
str.lower() / str.upper()#
Перетворює регістр. Перший крок при нормалізації категоріальних рядків.
df['email' ] = df['email' ].str .lower ().str .strip ()
copy
Видаляє пробіли (або задані символи) з обох кінців рядка.
df['name' ] = df['name' ].str .strip ()
copy
str.startswith() / str.endswith()#
Перевірка префіксу чи суфіксу — швидше за contains для простих випадків.
df[df['url' ].str .startswith ('https://' )]
copy
Довжина рядка для кожного елемента.
df['short_desc' ] = df['description' ].str .len () < 100
copy
Витягує групи з regex у нові стовпці. expand=True завжди повертає DataFrame.
df['year' ] = df['title' ].str .extract (r'\((\d{4})\)' )
copy
Конкатенує рядки. sep задає роздільник; може приймати інший Series.
df['full' ] = df['first' ].str .cat (df['last' ], sep=' ' )
copy
Список усіх збігів regex у рядку.
df['hashtags' ] = df['post' ].str .findall (r'#\w+' )
copy
Перевірка повного збігу з regex (від початку рядка).
df[df['code' ].str .match (r'^[A-Z]{2}\d{4}$' )]
copy
Доповнює нулями зліва до заданої довжини. Для нормалізації кодів і ID.
df['code' ] = df['code' ].str .zfill (8 )
copy
Доповнює рядок до довжини заданим символом — зліва, справа або з обох боків.
df['col' ].str .pad (10 , side='right' , fillchar='.' )
copy
Категоріальні дані та dummies
7
Створює категоріальну Series з обмеженим набором значень — економить пам'ять і дозволяє впорядкування.
df['size' ] = pd.Categorical (df['size' ], categories=['S' , 'M' , 'L' ], ordered=True )
copy
Розбиває числові значення на біни заданої ширини або за межами. Створює категоріальний результат.
df['age_group' ] = pd.cut (df['age' ], bins=[0 , 18 , 35 , 60 , 100 ], labels=['<18' , '18-35' , '36-60' , '60+' ])
copy
Дізнатися більше
Коли використовувати Розбиття числового стовпця на біни заданої ширини або за межами. Створення вікових груп, цінових категорій, рангів.
Ключові параметри 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 )copy
Біни рівної кількості елементів (квантильні). Часто для побудови децилей.
df['decile' ] = pd.qcut (df['income' ], q=10 , labels=False )
copy
pd.get_dummies()#
extended
Перетворює категоріальний стовпець у one-hot кодування — окремі бінарні стовпці.
encoded = pd.get_dummies (df, columns=['city' ], drop_first=True )
copy
Дізнатися більше
Коли використовувати One-hot кодування категорій для машинного навчання. Перетворює категоріальний стовпець на бінарні стовпці.
Ключові параметри data Series або DataFrame. columns Які стовпці кодувати (default — всі object/category). drop_first True — викинути перший рівень (для уникнення мультиколінеарності). prefix Префікс для нових стовпців. dummy_na Чи робити окремий стовпець для NaN. Поширені помилки та нюанси При продакшні (новий датасет) можуть з'явитись категорії, яких не було при тренуванні — і не з'явитись ті, що були. Зберігайте список колонок з тренувального набору і реіндексуйте.
Кодує категорії цілими числами і повертає масив унікальних значень.
codes, uniques = pd.factorize (df['country' ])
copy
Відбирає стовпці заданих типів. Швидкий спосіб ізолювати числові чи категоріальні дані.
df_num = df.select_dtypes (include='number' )
copy
Доступ до методів категорій: cat.categories, cat.add_categories, cat.rename_categories.
df['size' ].cat.set_categories (['S' , 'M' , 'L' , 'XL' ], ordered=True )
copy
Параметри та утиліти
9
Глобальні налаштування — скільки рядків/стовпців виводити, точність чисел тощо.
pd.set_option ('display.max_columns' , 50 ); pd.set_option ('display.width' , 200 )
copy
Тимчасові налаштування в межах with-блоку. Чистіше за глобальну зміну.
with pd.option_context ('display.max_rows' , 100 ): print (df)
copy
Швидкий графік через Matplotlib. kind='line'|'bar'|'hist'|'box'|'scatter'|'area' тощо.
df.plot (kind='line' , x='date' , y=['sales' , 'cost' ])
copy
Гістограми для всіх числових стовпців на сітці підграфіків.
df.hist (bins=30 , figsize=(12 , 8 ))
copy
Boxplot за стовпцями. by= групує за значеннями іншого стовпця.
df.boxplot (column='salary' , by='department' )
copy
Ітерація по рядках — повертає (індекс, Series). Використовуйте лише коли немає векторної альтернативи.
for idx, row in df.iterrows (): process (row['name' ])
copy
Швидша ітерація — повертає namedtuple. Доступ через row.name замість row['name'].
for row in df.itertuples (): total += row.amount
copy
Перетворює DataFrame у структурований NumPy-масив.
arr = df.to_records (index=False )
copy
Перевіряє побудовну рівність двох DataFrame — на відміну від ==, коректно обробляє NaN.
Бібліотека · 15 розділів · 159 функцій · 55 розширених
NumPy
NumPy — фундамент усієї наукової екосистеми Python. Її ndarray (n-вимірний масив) у десятки разів швидший за списки Python для числових операцій. Pandas, scikit-learn, Matplotlib і більшість бібліотек ML побудовані поверх NumPy. Для аналітика це насамперед інструмент швидких векторних обчислень і генерації числових даних.
Створення масивів
15
Створює ndarray зі списку, кортежу чи вкладених послідовностей. Базовий конструктор.
a = np.array ([[1 , 2 , 3 ], [4 , 5 , 6 ]], dtype=np.float64)
copy
Дізнатися більше
Коли використовувати Створюєте масив зі списку чи кортежу. Базовий конструктор — будь-яке обчислення в 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)copy
Конвертує вхід у ndarray, але не копіює, якщо тип уже відповідний — економить пам'ять.
arr = np.asarray (some_list)
copy
Масив, заповнений нулями, заданої форми та типу.
z = np.zeros ((3 , 4 ), dtype=int )
copy
Дізнатися більше
Коли використовувати Початкова ініціалізація масиву, який буде заповнено пізніше. Базовий патерн для buffer-ів, акумуляторів, маток.
Ключові параметри shape Кортеж розмірностей: (rows, cols) для 2D, (n,) для 1D. dtype Тип. Default float64 — для лічильників краще int. Поширені помилки та нюанси Для лічильників не забувайте dtype=int — інакше нулі будуть 0.0, що з'їсть удвічі більше пам'яті.
Масив одиниць — часто використовується як стартова точка для зважування.
weights = np.ones (10 ) / 10 # рівномірні ваги
copy
Дізнатися більше
Коли використовувати Базис для зважування, маток-плейсхолдерів, при ініціалізації коефіцієнтів моделі.
Ключові параметри shape Форма. dtype Тип. Поширені помилки та нюанси Для побудови column vector з одиниць використовуйте np.ones((n, 1)), не np.ones(n) — різні форми дадуть різні результати при broadcasting.
Виділяє пам'ять без ініціалізації — найшвидший спосіб створити масив, який буде одразу заповнено.
buf = np.empty ((1000 , 3 ), dtype=np.float32)
copy
Масив заданої форми, заповнений довільним значенням.
missing = np.full ((5 , 5 ), fill_value=np.nan)
copy
Аналог Python range, але повертає ndarray. Підтримує дробові кроки.
x = np.arange (0 , 10 , 0.5 )
copy
Дізнатися більше
Коли використовувати Числова послідовність — індекси, тестові дані, координати сітки. Аналог 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 точок copy
Рівномірно розподілені точки на інтервалі — n значень включно з кінцями.
x = np.linspace (0 , 1 , 100 ) # 100 точок від 0 до 1
copy
Дізнатися більше
Коли використовувати Рівномірний діапазон з точно заданою кількістю точок. Стандарт для побудови графіків і тестових сіток.
Ключові параметри start, stop Кінці діапазону (включно з обома). num Кількість точок (default 50). endpoint False — виключити кінець (як у arange). retstep True — повертає (масив, крок). Поширені помилки та нюанси На відміну від arange, обидва кінці включно за замовчуванням — це різниця при побудові графіків.
Логарифмічно розподілені точки. Зручно для логарифмічних осей графіків.
freqs = np.logspace (1 , 4 , num=50 ) # 10..10000
copy
Одинична матриця або діагональна матриця з одиницями. k зсуває діагональ.
I = np.eye (5 ) # 5x5 identity
copy
Дізнатися більше
Коли використовувати Одинична матриця для перевірки тотожних перетворень, ініціалізації коваріаційних матриць.
Ключові параметри N, M Кількість рядків і стовпців. M=None дає квадратну. k Зсув діагоналі: k>0 — вгору, k<0 — вниз. Поширені помилки та нюанси np.eye(3) і np.identity(3) ідентичні для квадратних — але eye() гнучкіший (прямокутні, зсув).
Чисто квадратна одинична матриця. Простіше за np.eye при тому ж розмірі рядків і стовпців.
Створює діагональну матрицю з вектора або витягує діагональ із матриці.
D = np.diag ([1 , 2 , 3 , 4 ])
copy
np.zeros_like() / np.ones_like()#
Створює масив тієї ж форми та типу, що й вхідний, заповнений нулями (одиницями).
mask = np.zeros_like (image)
copy
Заповнює масив, обчислюючи значення як функцію від індексів.
grid = np.fromfunction (lambda i, j: i + j, (3 , 3 ), dtype=int )
copy
Створює двовимірну координатну сітку з двох одновимірних — основа для 3D-графіків і обчислень на сітці.
X, Y = np.meshgrid (np.linspace (-1 , 1 , 50 ), np.linspace (-1 , 1 , 50 ))
copy
Дізнатися більше
Коли використовувати Створення координатної сітки з двох 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 )copy
Випадкові числа
15
np.random.seed()#
extended
Фіксує seed генератора для відтворюваності експериментів. Сучасний підхід — np.random.default_rng().
rng = np.random.default_rng (seed=42 )
copy
Дізнатися більше
Коли використовувати Фіксація генератора для відтворюваних експериментів. Обов'язково при дослідженнях, демо, тестуванні.
Ключові параметри 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 )copy
np.random.rand()#
extended
Рівномірний розподіл [0, 1). Аргументи — форма масиву.
u = np.random.rand (1000 )
copy
Дізнатися більше
Коли використовувати Рівномірний розподіл [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 )
copy
Дізнатися більше
Коли використовувати Стандартний нормальний розподіл (μ=0, σ=1). Шум для симуляцій, ініціалізація ваг.
Ключові параметри d0, d1, ... Розмірності. Поширені помилки та нюанси Як і rand, приймає розмірності окремими аргументами. Для довільних μ, σ використайте np.random.normal(μ, σ, size).
np.random.randint()#
extended
Цілі числа з рівномірного розподілу [low, high).
dice = np.random.randint (1 , 7 , size=10 )
copy
Дізнатися більше
Коли використовувати Цілі числа з рівномірного розподілу. Випадкові індекси, симуляція кубиків, генерація тестових 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 ])
copy
Дізнатися більше
Коли використовувати Випадкова вибірка з масиву — з/без повторень, з ймовірностями. Класичний інструмент для семплінгу й симуляцій.
Ключові параметри 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 )copy
np.random.normal()#
extended
Нормальний розподіл із заданими середнім і стандартним відхиленням.
scores = np.random.normal (loc=70 , scale=15 , size=1000 )
copy
Дізнатися більше
Коли використовувати Нормальний розподіл з довільними параметрами. Симуляція реальних метрик (зріст, IQ, помилки вимірювання).
Ключові параметри loc Середнє μ. scale Стандартне відхилення σ. size Форма. Поширені помилки та нюанси scale — це σ, не σ². Не плутайте з дисперсією.
Рівномірний розподіл на довільному інтервалі [low, high).
x = np.random.uniform (low=-5 , high=5 , size=500 )
copy
Перемішує масив на місці (in-place) уздовж першої осі.
np.random.shuffle (indices)
copy
Повертає перемішану копію масиву (на відміну від shuffle).
shuffled = np.random.permutation (np.arange (100 ))
copy
Біноміальний розподіл: кількість успіхів у n незалежних випробуваннях.
successes = np.random.binomial (n=10 , p=0.3 , size=1000 )
copy
Розподіл Пуассона — кількість подій за фіксований інтервал.
events = np.random.poisson (lam=4.5 , size=500 )
copy
Експоненціальний розподіл — час до наступної події в потоці Пуассона.
wait = np.random.exponential (scale=2.0 , size=200 )
copy
Бета-розподіл [0,1] — корисний для байєсівського моделювання ймовірностей.
ctr = np.random.beta (a=5 , b=95 , size=1000 )
copy
Розподіл Стьюдента з df ступенями свободи. Для генерації важкохвостих даних.
t = np.random.standard_t (df=10 , size=1000 )
copy
np.random.multivariate_normal()#
Багатовимірний нормальний розподіл із заданими середнім і коваріаційною матрицею.
samples = np.random.multivariate_normal (mean=[0 , 0 ], cov=[[1 , 0.5 ], [0.5 , 1 ]], size=500 )
copy
Атрибути та інспекція масивів
8
Кортеж розмірностей по кожній осі. Найважливіший атрибут при налагодженні.
print (a.shape) # (3, 4)
copy
Дізнатися більше
Коли використовувати Найважливіший атрибут при діагностиці помилок broadcasting'у і розмірностей. Перевіряти ПЕРЕД будь-яким матричним множенням.
Ключові параметри (атрибут) Кортеж. Для 1D — (n,), не (n, 1). Поширені помилки та нюанси (n,) і (n, 1) — різні форми! Перше — 1D, друге — 2D-вектор-стовпець. У матричному множенні дають різні результати.
Кількість осей (вимірів) масиву.
a.ndim # 2 для матриці
copy
Загальна кількість елементів = добуток усіх розмірів.
Тип даних елементів. Найважливіший фактор пам'яті та точності.
Дізнатися більше
Коли використовувати Перевірка типу при дебазі. Float64 vs int64 vs object — кардинально різна продуктивність і поведінка.
Ключові параметри (атрибут) Об'єкт dtype. Поширені помилки та нюанси dtype('O') — object — означає масив Python-об'єктів, обчислення на ньому в 100+ разів повільніші. Уникайте, приводьте до конкретного числового типу.
Розмір одного елемента в байтах.
a.itemsize # 8 для float64
copy
Загальний обсяг пам'яті, який займає масив.
f'{a.nbytes / 1e6:.1f} МБ'
copy
Транспонування — швидкий доступ без копіювання даних.
a.T # рядки стають стовпцями
copy
Дізнатися більше
Коли використовувати Транспонування для матричного множення, перетворення row-vector → column-vector.
Ключові параметри (атрибут) Повертає view — без копіювання даних. Поширені помилки та нюанси Для 1D-масиву .T нічого не робить — повертає той же 1D. Для перетворення в стовпець: arr[:, np.newaxis] або arr.reshape(-1, 1).
1D-ітератор по всіх елементах масиву незалежно від форми.
for x in a.flat: print (x)
copy
Зміна форми та осей
10
Змінює форму масиву без копіювання. -1 означає 'розрахуй автоматично'.
a = np.arange (12 ).reshape (3 , 4 )
copy
Дізнатися більше
Коли використовувати Зміна форми без копіювання даних. Розгортання батчу зображень у вектори, перетворення під вимоги моделей.
Ключові параметри 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) для лінійної моделі copy
Розгортає в одновимірний масив. Зазвичай повертає view, не копію.
Дізнатися більше
Коли використовувати Перетворення n-вимірного масиву в 1D. Для гістограми, list-comprehensions, передачі в API, що чекає 1D.
Ключові параметри a Масив. order 'C' або 'F'. Поширені помилки та нюанси Повертає view коли можливо, тобто зміна результату змінить оригінал. Якщо потрібна копія — використайте .flatten().
Розгортає в 1D, але завжди повертає копію (на відміну від ravel).
copy_flat = a.flatten ()
copy
Змінює порядок осей. Без аргументів — повне транспонування.
b = np.transpose (a, axes=(1 , 0 , 2 )) # для 3D
copy
Дізнатися більше
Коли використовувати Зміна порядку осей у багатовимірному масиві. Для 3D-тензорів — переміщення channel-first → channel-last.
Ключові параметри a Масив. axes Кортеж нового порядку осей. Поширені помилки та нюанси Без axes — повне реверсивне транспонування. Для конкретної перестановки задавайте явно.
Міняє місцями дві осі багатовимірного масиву. Простіша альтернатива moveaxis для парних перестановок.
np.swapaxes (a, 0 , 1 )
copy
Переміщує осі в нові позиції. Гнучкіше за swapaxes.
np.moveaxis (images, source=0 , destination=-1 )
copy
np.expand_dims()#
extended
Додає нову вісь розміру 1. Корисно для broadcast-сумісності.
col = np.expand_dims (vec, axis=1 ) # 1D -> стовпець
copy
Дізнатися більше
Коли використовувати Додавання нової осі для broadcasting сумісності. Перетворення 1D-вектора у column- або row-vector.
Ключові параметри a Масив. axis Позиція нової осі. Поширені помилки та нюанси Альтернатива з тим же ефектом: arr[:, np.newaxis] (= arr[:, None]) — компактніше у коді.
Прибирає осі розміру 1 — зворотна до expand_dims.
np.squeeze (a) # (1, 5, 1) -> (5,)
copy
Розширює масив до заданої форми за правилами broadcasting (без копіювання даних).
np.broadcast_to (np.array ([1 ,2 ,3 ]), (4 , 3 ))
copy
np.atleast_1d() / 2d / 3d#
Гарантує мінімальну кількість осей. Корисно при роботі з вхідними даними змішаної розмірності.
np.atleast_2d (scalar)
copy
Об'єднання та розділення
14
np.concatenate()#
extended
Об'єднує послідовність масивів уздовж заданої осі.
np.concatenate ([a, b, c], axis=0 )
copy
Дізнатися більше
Коли використовувати Об'єднання масивів уздовж заданої осі. Аналог Python list.extend, але для ndarray.
Ключові параметри arrays Послідовність (список/кортеж) масивів. axis Вісь конкатенації. Default 0. Поширені помилки та нюанси Усі масиви крім вибраної осі мають однакові розміри — інакше ValueError. Для додавання нової осі краще np.stack().
Створює нову вісь і складає масиви вздовж неї. Усі мають мати однакову форму.
np.stack ([img1, img2, img3], axis=0 ) # (3, H, W)
copy
Дізнатися більше
Коли використовувати Створення нової осі і об'єднання масивів уздовж неї. Корисно для збору однотипних результатів у тензор.
Ключові параметри 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) copy
Вертикальна конкатенація — складає рядки в стовпець матриці.
np.vstack ([row1, row2, row3])
copy
Дізнатися більше
Коли використовувати Швидка вертикальна конкатенація — стек рядків, складання матриць по вертикалі.
Ключові параметри tup Послідовність масивів. Поширені помилки та нюанси Для 1D перетворює їх на 2D-рядки. Не використовуйте у циклі — кожен виклик копіює всі дані. Збирайте у список і vstack один раз.
Горизонтальна конкатенація — стовпці поряд. Для 1D — простий concat.
np.hstack ([col_a, col_b])
copy
Дізнатися більше
Коли використовувати Горизонтальна конкатенація — додавання стовпців, з'єднання 1D-масивів у довший.
Ключові параметри tup Послідовність масивів. Поширені помилки та нюанси Для 2D — додає стовпці справа. Для 1D — об'єднує в один довший 1D.
Конкатенація по третій осі (depth). Корисно для побудови RGB-зображень.
rgb = np.dstack ([r, g, b])
copy
Кладе 1D-масиви як стовпці в 2D-матрицю.
X = np.column_stack ([x1, x2, x3])
copy
Розрізає масив на n рівних частин або за заданими індексами.
parts = np.split (arr, indices_or_sections=4 )
copy
Як np.split, але дозволяє нерівні частини.
np.array_split (np.arange (10 ), 3 )
copy
np.hsplit() / np.vsplit()#
Спеціалізовані розрізання по горизонталі/вертикалі.
left, right = np.hsplit (matrix, 2 )
copy
Повторює масив n разів уздовж кожної осі. Аналог копіпасту блоків.
np.tile ([1 , 2 , 3 ], reps=(2 , 4 ))
copy
Повторює кожен елемент окремо n разів.
np.repeat ([1 , 2 , 3 ], repeats=3 ) # [1,1,1,2,2,2,3,3,3]
copy
Додає значення в кінець масиву (повертає новий масив, а не змінює на місці).
np.append (arr, [10 , 20 ])
copy
Вставляє значення на задану позицію.
np.insert (arr, 2 , [99 , 100 ])
copy
Видаляє елементи за індексами або зріз.
np.delete (arr, [0 , 5 , 10 ])
copy
Індексація та вибірка
11
Boolean indexing#
extended
Вибір елементів за булевою маскою — найзручніший спосіб фільтрації.
Дізнатися більше
Коли використовувати Найчастіший спосіб фільтрації в 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 # від'ємні → нулі copy
Вибір за списком індексів. Дозволяє вибирати в довільному порядку.
Тернарний оператор для масивів: де condition=True, бери x, інакше y. Без x,y повертає індекси.
np.where (arr > 0 , arr, 0 ) # негативні замінити на 0
copy
Дізнатися більше
Коли використовувати Векторний 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 copy
Вибирає елементи за заданими індексами уздовж осі.
np.take (matrix, [0 , 2 ], axis=1 )
copy
Замінює елементи за плоскими індексами на місці.
np.put (arr, [0 , 2 , 4 ], [100 , 200 , 300 ])
copy
Збирає масив із кількох джерел за індексами вибору.
np.choose ([0 , 1 , 0 ], [arr_a, arr_b])
copy
Вибирає елементи за булевим вектором уздовж осі. Аналог boolean indexing.
np.compress ([True , False , True , True ], arr, axis=0 )
copy
Векторний switch/case: задає кілька умов та відповідні значення.
np.select ([x < 0 , x < 10 , x < 100 ], ['neg' , 'small' , 'med' ], default='big' )
copy
Повертає індекси ненульових елементів. Часто комбінується з логічними операціями.
Індекси ненульових елементів у плоскому масиві (1D).
np.flatnonzero (mask)
copy
Повертає індекси ненульових елементів у формі (n, ndim).
coords = np.argwhere (image > threshold)
copy
Дізнатися більше
Коли використовувати Координати True-елементів у форматі (n, ndim). Зручно для отримання позицій у 2D/3D.
Ключові параметри a Масив (інтерпретується як bool). Поширені помилки та нюанси Повертає 2D-масив координат, не tuple — інша форма ніж np.where(mask).
Математичні операції
14
np.add() / np.subtract()#
Поелементне додавання/віднімання. Аналогічно операторам +/-.
np.add (a, b) # те саме що a + b
copy
np.multiply() / np.divide()#
Поелементне множення/ділення. Не плутати з матричним добутком.
np.multiply (a, b) # елементне
copy
Піднесення до степеня — поелементно.
np.power (arr, 2 ) # квадрат кожного елемента
copy
Залишок від ділення (модуль). Поелементно для масивів. Аналог оператора %, але працює з broadcasting.
Квадратний корінь. Для від'ємних значень повертає NaN з попередженням.
np.sqrt (np.abs (arr))
copy
Дізнатися більше
Коли використовувати Квадратний корінь поелементно. Stand-de-евклідової відстані, нормалізація.
Ключові параметри x Масив (від'ємні → NaN з warning). Поширені помилки та нюанси Для від'ємних повертає NaN. Якщо не впевнені — np.sqrt(np.abs(x)) або перевіряйте діапазон.
Квадрат — швидше за np.power(x, 2).
sse = np.sum (np.square (residuals))
copy
Модуль числа. Для комплексних — їх абсолютне значення.
Дізнатися більше
Коли використовувати Модуль числа. Виправлення знака помилок, обчислення відстаней, абсолютних значень.
Поширені помилки та нюанси Для комплексних повертає sqrt(real^2 + imag^2) — це абсолютне значення комплексного, не просто додатна частина.
Експонента e^x — основа для логістичних і експоненціальних моделей.
softmax = np.exp (x) / np.sum (np.exp (x))
copy
Дізнатися більше
Коли використовувати Експонента e^x — основа softmax, експоненціального розпаду, переходу між log і linear scale.
Поширені помилки та нюанси Для великих 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)copy
Натуральний логарифм (ln). Базова операція для лог-перетворень скісних розподілів і обчислення дохідності.
log_returns = np.log (prices[1 :] / prices[:-1 ])
copy
Дізнатися більше
Коли використовувати Натуральний логарифм. Стиснення скісних розподілів, обчислення лог-доходності, інформаційні величини.
Ключові параметри x Масив. Для x≤0 → NaN/-inf. Поширені помилки та нюанси log(0) = -inf, log(від'ємного) = NaN з warning. Для нулів використайте np.log1p (= log(1+x)) або фільтруйте.
Логарифми за основою 2 (інформація, розмір файлів) і 10 (порядки величини, pH, dB). Для довільних основ — np.log(x)/np.log(base).
decibels = 20 * np.log10 (amplitude)
copy
log(1 + x) — точніше для малих x; типова трансформація для скісних даних.
df['log_income' ] = np.log1p (df['income' ])
copy
Дізнатися більше
Коли використовувати Точніший за log(1+x) для малих x. Класичне перетворення скісних додатних змінних (доходи, перегляди).
Ключові параметри x Масив. Має бути ≥ -1. Поширені помилки та нюанси Для x = 0 дає 0 (log(1) = 0) — на відміну від log(0) = -inf. Тому log1p — стандарт для трансформації даних з нулями.
Повертає -1, 0 чи 1 залежно від знаку.
Обернене значення 1/x поелементно. Швидше за арифметичне ділення для float-масивів. Для цілих типів вернеться 0.
np.reciprocal (arr.astype (float ))
copy
Обрізає значення до заданого діапазону. Векторна заміна if/else.
np.clip (arr, a_min=0 , a_max=100 )
copy
Дізнатися більше
Коли використовувати Обрізання значень — приборкання викидів, обмеження до фізичних меж (наприклад, ймовірності [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 )copy
Тригонометрія та гіперболічні функції
6
np.sin() / np.cos() / np.tan()#
Стандартні тригонометричні функції — приймають радіани.
y = np.sin (np.linspace (0 , 2 *np.pi, 100 ))
copy
np.arcsin() / np.arccos() / np.arctan()#
Обернені тригонометричні функції. Результат у радіанах.
angle = np.arctan (opposite / adjacent)
copy
Двоаргументна версія arctan, що враховує знаки x і y — повертає кут у правильному квадранті.
theta = np.arctan2 (y, x)
copy
np.sinh() / np.cosh() / np.tanh()#
Гіперболічні функції. tanh часто використовується як функція активації в нейромережах.
activation = np.tanh (weighted_sum)
copy
np.deg2rad() / np.rad2deg()#
Конверсія між градусами та радіанами.
rad = np.deg2rad (degrees)
copy
sqrt(x^2 + y^2) без втрати точності — гіпотенуза.
distances = np.hypot (dx, dy)
copy
Округлення
6
Округлення до n знаків після коми.
np.round (arr, decimals=2 )
copy
Округлення вниз — до найближчого меншого цілого.
Округлення вгору — до найближчого більшого цілого.
Відкидання дробової частини — округлення в напрямку нуля.
np.trunc ([-1.7 , 1.7 ]) # [-1, 1]
copy
Округлення до найближчого цілого як float.
Те саме, що trunc — округлення до нуля.
Статистика
17
Середнє арифметичне. Параметр axis керує напрямком обчислення.
np.mean (matrix, axis=0 ) # середнє по стовпцях
copy
Дізнатися більше
Коли використовувати Середнє арифметичне. Базова статистика, центральна тенденція. Для груп — комбінується з groupby.
Ключові параметри a Масив. axis 0 — по стовпцях, 1 — по рядках, None (default) — по всіх елементах. dtype Тип акумулятора. Для int8 краще float64 проти переповнення. Поширені помилки та нюанси Чутливе до викидів. Для робастності — np.median(). NaN зробить весь результат NaN — використайте np.nanmean().
Медіана — серединне значення впорядкованого масиву. На відміну від середнього, стійка до викидів і часто відображає типове значення краще.
Дізнатися більше
Коли використовувати Серединне значення. Стійка до викидів альтернатива np.mean — для скісних розподілів і даних з шумом.
Ключові параметри a Масив. axis Осі для обчислення. Поширені помилки та нюанси Не плутайте з модою. Для парної кількості елементів — середнє двох центральних. NaN-варіант: np.nanmedian.
Стандартне відхилення. ddof=1 для незміщеного оцінювача (як у Pandas).
np.std (returns, ddof=1 )
copy
Дізнатися більше
Коли використовувати Стандартне відхилення — міра розкиду даних. Для нормалізації, аналізу варіабельності.
Ключові параметри a Масив. axis Осі. ddof Delta degrees of freedom. 0 (default) — population, 1 — sample. Поширені помилки та нюанси Default ddof=0 (population) — це різниця з pandas, де default ddof=1. Для незміщеної оцінки на вибірці — ddof=1.
Дисперсія — квадрат відхилення.
Сума елементів. Швидше і пам'ятєефективніше за Python sum().
total = np.sum (arr, axis=1 )
copy
Дізнатися більше
Коли використовувати Сума елементів — найшвидший спосіб порахувати total. Для матриць — суми рядків чи стовпців.
Ключові параметри a Масив. axis 0 — стовпці, 1 — рядки, None — всі. keepdims True — зберегти розмірність (для broadcasting). Поширені помилки та нюанси Для int8 з великими сумами — переповнення без warning! Завжди задавайте dtype=np.int64 для великих лічильників.
np.min() / np.max()#
extended
Мінімум і максимум. Для індексів — argmin/argmax.
Дізнатися більше
Коли використовувати Екстремуми. Для пошуку діапазону, нормалізації min-max, виявлення викидів.
Ключові параметри a Масив. axis Осі. initial Стартове значення (для порожніх масивів). Поширені помилки та нюанси Викидає ValueError на порожньому масиві без initial. NaN-версії: np.nanmin / np.nanmax.
np.argmin() / np.argmax()#
extended
Індекс мінімального чи максимального елемента уздовж осі.
best = np.argmax (scores)
copy
Дізнатися більше
Коли використовувати Індекс найменшого/найбільшого значення. Класика для отримання 'кращого передбачення' моделі (argmax по probabilities).
Ключові параметри a Масив. axis Осі. Поширені помилки та нюанси Якщо мінімум/максимум зустрічається кілька разів — повертається перший. Для всіх входжень — np.where(arr == arr.max()).
Peak-to-peak: max - min. Швидкий розмах.
np.percentile()#
extended
Заданий перцентиль. Можна передати масив рівнів.
np.percentile (arr, [5 , 50 , 95 ])
copy
Дізнатися більше
Коли використовувати Квантилі — базис 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 )copy
Те саме, що percentile, але аргумент у частках [0, 1].
np.quantile (arr, [0.25 , 0.5 , 0.75 ])
copy
Середнє з можливими вагами — аргумент weights.
np.average (prices, weights=volumes)
copy
np.cumsum() / np.cumprod()#
Накопичувальна сума/добуток. Для ряду доходностей зазвичай беруть log + cumsum.
Коваріаційна матриця. За замовчуванням рядки — змінні; rowvar=False якщо стовпці.
Матриця коефіцієнтів кореляції Пірсона. Симетрична, з 1.0 на діагоналі. Показує силу і напрямок лінійних зв'язків між змінними.
np.corrcoef (features, rowvar=False )
copy
Підрахунок частот у бінах. Повертає кортеж (counts, bin_edges).
counts, edges = np.histogram (arr, bins=30 )
copy
Дізнатися більше
Коли використовувати Підрахунок частот у бінах — на відміну від 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.
Швидкий підрахунок частот цілих чисел від 0.
Призначає кожному значенню номер біна, до якого воно потрапляє.
bin_idx = np.digitize (arr, bins=[0 , 10 , 100 , 1000 ])
copy
Лінійна алгебра
17
Скалярний/матричний добуток. Для 2D еквівалент @ (matmul).
Дізнатися більше
Коли використовувати Скалярний/матричний добуток. Класична операція для обчислення прогнозів лінійних моделей: y = X @ w.
Ключові параметри a, b Два масиви. Для 1D — скалярний; для 2D — матричний. Поширені помилки та нюанси Для 2D краще використовувати @ або np.matmul — чіткіша семантика. np.dot для 3D+ робить тензорне множення, що часто не те, що хочеться.
np.matmul() / @#
extended
Матричний добуток із кращою підтримкою батчових тензорів. Оператор @ — синтаксичний цукор.
result = A @ B # матричне множення
copy
Дізнатися більше
Коли використовувати Матричне множення з коректною підтримкою батчів. Сучасний стандарт замість 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) copy
Скалярний добуток із попереднім розгортанням масивів у 1D.
Внутрішній і зовнішній добутки векторів.
np.outer ([1 , 2 ], [3 , 4 ]) # 2x2 матриця
copy
Векторний добуток у 3D-просторі. Повертає вектор, перпендикулярний обом вхідним. Використовується в фізиці, графіці і обчисленні нормалей.
n = np.cross (v1, v2)
copy
Сума діагональних елементів матриці.
np.linalg.inv()#
extended
Обернена матриця. Для розв'язування рівнянь краще np.linalg.solve.
Ainv = np.linalg.inv (A)
copy
Дізнатися більше
Коли використовувати Обернена матриця для аналітичних рішень — нормальні рівняння в регресії, перетворення координат.
Ключові параметри a Квадратна матриця. Поширені помилки та нюанси ДУЖЕ повільно і чисельно нестабільно для великих/погано обумовлених матриць. Для розв'язування Ax=b завжди використовуйте np.linalg.solve(A, b) замість inv(A) @ b.
np.linalg.solve()#
extended
Розв'язує систему лінійних рівнянь Ax = b. Швидше і чисельно стабільніше за inv.
x = np.linalg.solve (A, b)
copy
Дізнатися більше
Коли використовувати Розв'язування систем лінійних рівнянь Ax=b. Швидше і стабільніше за inv@b. Стандарт для лінійної алгебри.
Ключові параметри a Квадратна матриця коефіцієнтів. b Вектор правих частин (або матриця для кількох систем). Поширені помилки та нюанси Якщо матриця сингулярна або погано обумовлена — викине LinAlgError або поверне ненадійні результати. Для прямокутних A — np.linalg.lstsq.
Визначник матриці. =0 означає сингулярність.
Власні значення та власні вектори квадратної матриці.
eigenvalues, eigenvectors = np.linalg.eig (C)
copy
np.linalg.svd()#
extended
Сингулярний розклад: A = U S V^T. Основа PCA та багатьох алгоритмів.
U, S, Vt = np.linalg.svd (X, full_matrices=False )
copy
Дізнатися більше
Коли використовувати Сингулярний розклад — основа 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]copy
QR-розклад — для метода найменших квадратів і ортогоналізації.
Q, R = np.linalg.qr (X)
copy
Розклад Холецького для додатно визначеної симетричної матриці.
L = np.linalg.cholesky (cov_matrix)
copy
np.linalg.norm()#
extended
Норма вектора або матриці. ord задає тип норми.
np.linalg.norm (v - u, ord=2 ) # евклідова відстань
copy
Дізнатися більше
Коли використовувати Норма вектора — евклідова відстань (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 (A)
copy
Розв'язок методом найменших квадратів для систем без точного розв'язку.
coef, residuals, rank, sv = np.linalg.lstsq (X, y, rcond=None )
copy
Псевдообернена матриця Мура-Пенроуза — узагальнення для прямокутних матриць.
Xpinv = np.linalg.pinv (X)
copy
Логічні операції та порівняння
9
True, якщо всі елементи True. По осях — поелементно.
Дізнатися більше
Коли використовувати Перевірка, що всі елементи задовольняють умову. Стандартний спосіб валідувати дані.
Ключові параметри a Масив (bool). axis Скоротити лише по осях. Поширені помилки та нюанси Не плутайте з Python all() — np.all працює векторно і швидше для ndarray.
True, якщо хоча б один елемент True.
np.any (np.isnan (arr))
copy
Дізнатися більше
Коли використовувати Перевірка наявності хоч одного True. Швидкий спосіб переконатися, що дані містять хоч один пропуск чи аномалію.
Ключові параметри a Масив. axis Осі. Поширені помилки та нюанси Аналогічно np.all — не плутайте з Python any() для продуктивності.
np.isnan() / np.isinf() / np.isfinite()#
extended
Перевірки на NaN, нескінченності, скінченні числа.
valid = arr[np.isfinite (arr)]
copy
Дізнатися більше
Коли використовувати Виявлення проблемних значень після обчислень. Класична санітарна перевірка перед feeding в модель.
Ключові параметри x Масив (float). Поширені помилки та нюанси isnan не працює для object/string (помилка). isfinite — найбезпечніший: True тільки для скінченних чисел (без NaN та inf).
np.equal() / np.not_equal()#
Поелементне порівняння на (не)рівність. Для float краще np.isclose.
np.greater() / np.less()#
Поелементне > / <. Аналоги операторів.
mask = np.greater (arr, threshold)
copy
np.logical_and() / or() / not() / xor()#
Логічні операції над булевими масивами. На відміну від and/or, працюють поелементно.
np.logical_and (x > 0 , x < 100 )
copy
Перевіряє близькість float-значень з допустимою похибкою.
np.isclose (0.1 + 0.2 , 0.3 ) # True
copy
Дізнатися більше
Коли використовувати Перевірка близькості float-значень з допустимою похибкою. Стандарт для тестів числових обчислень.
Ключові параметри a, b Масиви чи скаляри. rtol Відносна толерантність (default 1e-5). atol Абсолютна (default 1e-8). Поширені помилки та нюанси 0.1 + 0.2 != 0.3 у float — звичайне == дасть False! Завжди використовуйте isclose для float-порівнянь.
True, якщо всі елементи близькі. Стандартний тест чисельної рівності.
assert np.allclose (predicted, expected, atol=1e-6 )
copy
Перевіряє точну рівність масивів, включаючи форму.
np.array_equal (a, b)
copy
Сортування
6
Сортує копію масиву по заданій осі.
np.sort (arr, axis=-1 , kind='quicksort' )
copy
Дізнатися більше
Коли використовувати Сортування масиву. Для відсортованої видачі, побудови статистик, медіани.
Ключові параметри a Масив. axis Осі (default -1, по останній). kind 'quicksort', 'mergesort' (стабільне), 'stable'. Поширені помилки та нюанси За замовчуванням нестабільне (quicksort). Для стабільного — kind='stable'.
Повертає індекси, які впорядкували б масив. Корисно для синхронного сортування кількох масивів.
order = np.argsort (scores)[::-1 ]; ranked = items[order]
copy
Дізнатися більше
Коли використовувати Індекси, що впорядкували б масив. Для синхронного сортування кількох масивів за одним ключем.
Ключові параметри a Масив. axis Осі. kind Алгоритм. Поширені помилки та нюанси Класичний прийом для top-N з ключем: order = np.argsort(scores)[::-1][:N]; result = items[order].
Сортування за кількома ключами (як ORDER BY у SQL). Останній ключ має найвищий пріоритет.
idx = np.lexsort ((dates, names))
copy
Часткове сортування — розташовує k-те за порядком значення на правильному місці.
np.partition (arr, kth=10 ) # 10 найменших спереду
copy
Як partition, але повертає індекси. Швидко знаходить top-k.
top_k = np.argpartition (scores, -10 )[-10 :]
copy
Бінарний пошук — куди вставити значення в відсортований масив, щоб порядок зберігся.
np.searchsorted ([1 , 3 , 5 , 7 , 9 ], [4 , 8 ])
copy
Унікальні значення та операції з множинами
6
Унікальні відсортовані елементи. return_counts=True дає частоти.
vals, counts = np.unique (arr, return_counts=True )
copy
Дізнатися більше
Коли використовувати Унікальні значення (відсортовані). З опціями частот, обернених індексів — універсальний інструмент аналізу категорій.
Ключові параметри 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), які можна використати замість строк copy
Перетин двох масивів — спільні унікальні значення.
common = np.intersect1d (set_a, set_b)
copy
Об'єднання — унікальні значення з обох масивів.
all_ids = np.union1d (ids1, ids2)
copy
Різниця множин — значення з першого масиву, яких немає в другому.
missing = np.setdiff1d (expected, received)
copy
Булева маска — чи входить кожен елемент першого масиву в другий.
mask = np.isin (arr, [1 , 3 , 5 , 7 ])
copy
Симетрична різниця — значення, які є тільки в одному з двох масивів.
Робота з NaN-значеннями
5
np.nanmean() / np.nanmedian()#
extended
Середнє/медіана з ігноруванням NaN. Звичайні mean/median вертають NaN.
np.nanmean (arr_with_nans)
copy
Дізнатися більше
Коли використовувати Робота з даними, де є пропуски. Без 'nan'-варіантів звичайні mean/median повернуть NaN, якщо хоч одне значення відсутнє.
Ключові параметри a Масив. axis Осі. Поширені помилки та нюанси Якщо у певному вимірі ВСІ значення NaN — повернеться NaN з RuntimeWarning. Очікуйте і опрацьовуйте.
np.nansum() / np.nanprod()#
Сума/добуток без NaN. NaN трактуються як 0/1.
np.nanstd() / np.nanvar()#
Стандартне відхилення та дисперсія без NaN.
np.nanmin() / np.nanmax()#
Мінімум і максимум уздовж осі з ігноруванням NaN. Звичайні np.min/max повернуть NaN якщо хоч одне значення відсутнє.
np.nanmax (matrix, axis=1 )
copy
Замінює NaN на 0 (або задане), а інфініті на великі скінченні числа.
np.nan_to_num (arr, nan=0.0 , posinf=1e9 )
copy
Бібліотека · 15 розділів · 116 функцій · 35 розширених
Matplotlib
Matplotlib — фундамент візуалізації в Python. Pyplot пропонує MATLAB-подібний API для швидких графіків, а об'єктно-орієнтований підхід через Figure/Axes дає повний контроль над кожним елементом. Попри новіші бібліотеки, Matplotlib залишається стандартом для наукових публікацій і базою для Seaborn та Pandas.plot().
Створення фігур та осей
10
Створює новий об'єкт Figure — контейнер усього графіка. figsize задає розмір у дюймах.
fig = plt.figure (figsize=(10 , 6 ), dpi=100 )
copy
Дізнатися більше
Коли використовувати Створення нової фігури — контейнера для графіків. Базовий патерн при ручному управлінні розмірами і збереженні.
Ключові параметри figsize Кортеж (width, height) у дюймах. Default (6.4, 4.8). dpi Точок на дюйм. Default 100; для друку 300+. facecolor Колір тла фігури. Поширені помилки та нюанси Якщо створити багато фігур у циклі без plt.close(), пам'ять з'їдається. Використовуйте plt.close('all') періодично.
Створює фігуру і сітку Axes одним викликом. Найпоширеніший спосіб старту графіка.
fig, ax = plt.subplots (nrows=2 , ncols=2 , figsize=(12 , 8 ))
copy
Дізнатися більше
Коли використовувати Найпоширеніший спосіб створити фігуру + сітку осей одним викликом. Стандарт для 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)copy
Додає одну вісь у сітку (style 'pyplot'). Зручно для швидких прототипів.
plt.subplot (2 , 1 , 1 ); plt.plot (x, y)
copy
Додає Axes до існуючої Figure. Підтримує projection='polar', '3d'.
ax = fig.add_subplot (1 , 1 , 1 , projection='3d' )
copy
Створює складні розкладки осей зі string layout — інтуїтивніше за gridspec.
fig, axs = plt.subplot_mosaic ('AB;CC' , figsize=(10 , 6 ))
copy
Розміщує Axes за абсолютними координатами [left, bottom, width, height] від 0 до 1.
ax_inset = fig.add_axes ([0.6 , 0.6 , 0.25 , 0.25 ])
copy
Get current figure — повертає поточну активну Figure.
Get current axes — повертає поточну активну вісь.
ax = plt.gca (); ax.set_title ('...' )
copy
Закриває Figure і звільняє пам'ять. Важливо в циклах генерації багатьох графіків.
plt.close (fig) # або plt.close('all')
copy
Дізнатися більше
Коли використовувати Звільнення пам'яті після генерації багатьох графіків (звіти, GIF-анімації).
Ключові параметри fig Figure об'єкт, число (id) або 'all' для всіх. Поширені помилки та нюанси У циклах без close() пам'ять накопичується — після ~20 фігур warning 'too many open figures'. plt.close('all') рятує.
Відображає всі відкриті фігури. У Jupyter зазвичай не потрібно.
Дізнатися більше
Коли використовувати Відображення всіх відкритих фігур. У скриптах — обов'язково; у Jupyter не потрібно.
Ключові параметри block True (default у scripts) — блокує до закриття вікна. Поширені помилки та нюанси У Jupyter notebooks plt.show() автоматично — викликати не треба, якщо є %matplotlib inline.
Базові типи графіків
17
Лінійний графік — найфундаментальніший. Можна задати колір, стиль ліній і маркерів.
ax.plot (x, y, color='steelblue' , linewidth=2 , linestyle='--' , marker='o' )
copy
Дізнатися більше
Коли використовувати Лінійні графіки — основа візуалізації часових рядів, функцій, трендів.
Ключові параметри 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' ) # червона штрихова лінія з кружечками copy
Точковий графік — для розсіювання. s — розмір точок, c — кольори (можуть кодувати третю змінну).
ax.scatter (x, y, s=sizes, c=values, cmap='viridis' , alpha=0.6 )
copy
Дізнатися більше
Коли використовувати Точкові діаграми — кореляції, кластери, розподіли в 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' )copy
Стовпчикова діаграма (вертикальна). Висоти стовпців задає аргумент height.
ax.bar (categories, values, color='coral' , edgecolor='black' )
copy
Дізнатися більше
Коли використовувати Стовпчикові діаграми — порівняння категорій, частот, агрегованих значень.
Ключові параметри 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' )copy
Горизонтальна стовпчикова діаграма — краще, коли категорій багато або їх назви довгі.
ax.barh (countries, gdp, color='steelblue' )
copy
Дізнатися більше
Коли використовувати Горизонтальні стовпчики — коли категорій багато або їх назви довгі. Read-friendly для мобільних звітів.
Ключові параметри y Категорії. width Значення (довжини). height Висота стовпців. Поширені помилки та нюанси Інверсуйте порядок категорій (ax.invert_yaxis()) щоб найбільший був зверху — звичніше для читання.
Гістограма частот. bins задає кількість або межі бінів. density=True нормалізує.
ax.hist (data, bins=30 , edgecolor='black' , alpha=0.7 )
copy
Дізнатися більше
Коли використовувати Розподіл числової змінної. Перший крок при дослідженні нового стовпця.
Ключові параметри 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 )copy
Boxplot: медіана, квартилі, вуса, викиди. Приймає список масивів для кількох категорій.
ax.boxplot ([group_a, group_b, group_c], labels=['A' , 'B' , 'C' ])
copy
Дізнатися більше
Коли використовувати Швидке порівняння розподілів — медіана, квартилі, викиди. Класика exploratory analysis.
Ключові параметри x Список масивів (по одному на категорію). labels Підписи. notch True — V-подібні виїмки (CI для медіани). showmeans True — додає позначку середнього. Поширені помилки та нюанси Default whis=1.5 — вуса не далі 1.5*IQR; точки далі — викиди. Для важких хвостів (фінансові ряди) збільшіть whis або переходьте на violinplot.
Violin plot — комбінація boxplot і KDE-розподілу. Показує форму розподілу.
ax.violinplot (datasets, showmeans=True , showmedians=True )
copy
Кругова діаграма. autopct додає відсотки. Уникайте для понад 5-6 категорій.
ax.pie (sizes, labels=labels, autopct='%1.1f%%' , startangle=90 )
copy
Дізнатися більше
Коли використовувати Кругова діаграма для часток. Краще уникати для понад 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' )
copy
Дізнатися більше
Коли використовувати Заповнена область між двома кривими — стандарт для довірчих інтервалів навколо середнього або прогнозу.
Ключові параметри 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 )copy
Як fill_between, але горизонтальне — заповнення між кривими відносно осі x.
ax.fill_betweenx (y, x_left, x_right, alpha=0.3 )
copy
Накопичувальна площинна діаграма — для часток, що в сумі дають 100%.
ax.stackplot (years, [adults, teens, kids], labels=['Adults' , 'Teens' , 'Kids' ])
copy
Сходинковий графік — для дискретних змін у часі.
ax.step (x, y, where='post' , color='darkred' )
copy
Графік із вертикальними/горизонтальними помилками (довірчими інтервалами).
ax.errorbar (x, y, yerr=std, fmt='o' , capsize=5 )
copy
Дізнатися більше
Коли використовувати Точки/лінія з вертикальними/горизонтальними помилками. Класика для експериментальних даних з невизначеністю.
Ключові параметри x, y Координати. yerr, xerr Помилки — скаляр, масив, або (lower, upper). fmt Формат точок ('o', 's', 'none'). capsize Розмір 'кепок' помилок. Поширені помилки та нюанси Без fmt='none' завжди малюється лінія між точками. Для лише точок з помилками — fmt='o'.
Stem plot — для дискретних послідовностей (часові імпульси, коефіцієнти).
ax.stem (n, x_n, basefmt=' ' )
copy
Графік подій — горизонтальні риски на часовій осі. Корисно для логів.
ax.eventplot ([events_a, events_b], colors=['blue' , 'red' ])
copy
Гексагональна теплова карта — альтернатива scatter для великих наборів.
ax.hexbin (x, y, gridsize=40 , cmap='Blues' )
copy
Двовимірна гістограма — щільність точок у квадратних бінах.
ax.hist2d (x, y, bins=50 , cmap='inferno' )
copy
Зображення та теплові карти
8
Відображає 2D-масив як зображення або теплову карту. cmap керує колір-схемою.
ax.imshow (matrix, cmap='RdBu_r' , aspect='auto' , interpolation='nearest' )
copy
Дізнатися більше
Коли використовувати Відображення матриці чи зображення. Для теплових карт, конф'юзіонних матриць, 2D-масивів даних.
Ключові параметри X 2D-масив. cmap Colormap ('viridis', 'RdBu_r', 'gray'). vmin, vmax Межі шкали. aspect 'auto' або 'equal' (для зображень). interpolation 'nearest' (без згладжування), 'bilinear' тощо. Поширені помилки та нюанси За замовчуванням Y-вісь перевернута (як зображення). Для звичайної орієнтації — origin='lower'.
Як imshow, але з осями зверху і автоматичним aspect='equal'. Для кореляційних матриць.
ax.matshow (corr_matrix, cmap='coolwarm' , vmin=-1 , vmax=1 )
copy
Псевдокольорове зображення з нерівномірною сіткою. Краще за imshow для нерегулярних координат.
ax.pcolormesh (X, Y, Z, cmap='viridis' , shading='auto' )
copy
Лінії рівня (ізолінії) для функції двох змінних.
cs = ax.contour (X, Y, Z, levels=10 , colors='black' )
copy
Заповнені контури — як топографічна карта з кольоровими шарами.
ax.contourf (X, Y, Z, levels=20 , cmap='terrain' )
copy
Підписи значень на лініях контуру.
ax.clabel (cs, inline=True , fontsize=8 , fmt='%.1f' )
copy
Векторне поле — стрілки задають напрямок та величину.
ax.quiver (X, Y, U, V, scale=20 )
copy
Лінії течії векторного поля — гладкіше за quiver для густих полів.
ax.streamplot (X, Y, U, V, density=1.5 , color=speed, cmap='plasma' )
copy
Підписи та заголовки
8
Заголовок осі (підграфіка). loc задає вирівнювання.
ax.set_title ('Динаміка продажів' , fontsize=14 , fontweight='bold' , loc='left' )
copy
Дізнатися більше
Коли використовувати Заголовок підграфіка. Для робочих графіків — обов'язково; одразу зрозуміло про що.
Ключові параметри label Текст. fontsize Розмір. fontweight 'normal', 'bold'. loc 'left', 'center' (default), 'right'. pad Відступ від графіка. Поширені помилки та нюанси Не плутайте з fig.suptitle() — це для заголовка ВСІЄЇ фігури при кількох підграфіках.
Загальний заголовок усієї фігури — над усіма підграфіками.
fig.suptitle ('Звіт за 2024 рік' , fontsize=16 , y=0.98 )
copy
Дізнатися більше
Коли використовувати Загальний заголовок над усіма підграфіками. Тема звіту, контекст експерименту.
Ключові параметри 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 ('Ціна, ₴' )
copy
Дізнатися більше
Коли використовувати Підписи осей з одиницями. Графік без них — погана практика.
Ключові параметри xlabel/ylabel Текст. fontsize Розмір. labelpad Відступ від рисочок. Поширені помилки та нюанси Для математичних виразів використовуйте LaTeX: r'$\mu_{X}$', r'$\sigma^2$'.
Розміщує текст у точці (x, y) у координатах даних.
ax.text (0.5 , 100 , 'Пік продажів' , fontsize=11 , ha='center' )
copy
Анотація зі стрілкою від тексту до точки. Найкорисніший спосіб виділити особливі точки.
ax.annotate ('max' , xy=(x_max, y_max), xytext=(x_max+1 , y_max+5 ), arrowprops={'arrowstyle' : '->' })
copy
Дізнатися більше
Коли використовувати Анотація зі стрілкою. Найкорисніший спосіб виділити 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' )copy
Текст у координатах фігури [0,1] — для підписів, що виходять за межі осей.
fig.text (0.5 , 0.02 , 'Джерело: Держстат' , ha='center' , fontsize=9 , color='gray' )
copy
Показує легенду на основі label= аргументів плотів. loc керує позицією.
ax.legend (loc='upper right' , frameon=False , fontsize=10 )
copy
Дізнатися більше
Коли використовувати Показ легенди. При кількох рядах даних — обов'язково.
Ключові параметри loc 'best' (default), 'upper right', 'lower left', тощо. frameon True — рамка навколо. ncols Кількість стовпців. bbox_to_anchor (x, y) для розміщення поза осями. Поширені помилки та нюанси Працює лише якщо в plot/scatter передано label. Без legend() підписи невидимі.
Спільна легенда для всієї фігури — вгорі, внизу або збоку.
fig.legend (loc='upper center' , ncols=3 , bbox_to_anchor=(0.5 , 1.05 ))
copy
Налаштування осей
13
ax.set_xlim() / ax.set_ylim()#
extended
Задає діапазон осі. None залишає автоматичну межу з одного боку.
ax.set_xlim (0 , 100 ); ax.set_ylim (bottom=0 )
copy
Дізнатися більше
Коли використовувати Зум на конкретний діапазон. Для виділення подробиць або фіксації шкали.
Ключові параметри 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' ])
copy
Дізнатися більше
Коли використовувати Кастомні позиції рисочок — рівні квартали, цілі дні, фіксовані порогові значення.
Ключові параметри ticks Список позицій. labels Список підписів (опційно). minor True для мінорних рисочок. Поширені помилки та нюанси Виставляючи labels, обов'язково вкажіть і ticks — інакше FixedLocator warning.
ax.set_xticklabels() / ax.set_yticklabels()#
Окремо змінює підписи, не торкаючись позицій. rotation повертає текст.
ax.set_xticklabels (months, rotation=45 , ha='right' )
copy
ax.tick_params()#
extended
Гнучке налаштування зовнішнього вигляду рисочок: довжина, колір, напрямок, видимість.
ax.tick_params (axis='both' , length=4 , width=1.2 , direction='in' , labelsize=10 )
copy
Дізнатися більше
Коли використовувати Гнучке налаштування рисочок: розмір, колір, напрямок (всередину/назовні), видимість.
Ключові параметри 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 )
copy
Дізнатися більше
Коли використовувати Зміна шкали — log для широких діапазонів (мільярди й мільйони на одному графіку), symlog для додатних і від'ємних.
Ключові параметри value 'linear' (default), 'log', 'symlog', 'logit'. base Основа логарифма (10 default). Поширені помилки та нюанси На log-шкалі не може бути ≤0 — Matplotlib або викине, або обріже. Перевірте дані.
ax.invert_xaxis() / ax.invert_yaxis()#
Перевертає напрямок осі. Корисно для зображень або ранжувань.
ax.axhline() / ax.axvline()#
extended
Горизонтальна/вертикальна лінія через всю вісь. Зручно для порогів і середніх.
ax.axhline (y=mean, color='red' , linestyle='--' , label='Середнє' )
copy
Дізнатися більше
Коли використовувати Опорна лінія через всю вісь — середнє, нульова лінія, поріг, період події.
Ключові параметри y/x Координата. color Колір. linestyle '-', '--', ':' alpha Прозорість. Поширені помилки та нюанси На відміну від просто plot, лінія завжди тягнеться через ВСЮ вісь незалежно від zoom — це фіча.
ax.axhspan() / ax.axvspan()#
Заштрихована смуга між двома значеннями — для виділення зон.
ax.axvspan (2020 , 2022 , color='gray' , alpha=0.2 , label='Криза' )
copy
Показує сітку. which='major'|'minor'|'both', axis обмежує напрямком.
ax.grid (True , axis='y' , linestyle=':' , alpha=0.4 )
copy
Дізнатися більше
Коли використовувати Сітка для покращення читабельності — особливо для зчитування значень.
Ключові параметри 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['top' ].set_visible (False ); ax.spines['right' ].set_visible (False )
copy
Дізнатися більше
Коли використовувати Контроль рамок осей. Сучасний 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 )copy
Додатковий простір (у відсотках) навколо даних. tight=True прибирає його.
ax.margins (x=0.05 , y=0.1 )
copy
Співвідношення осей. 'equal' — однаковий масштаб; число — y/x.
ax.set_aspect ('equal' )
copy
ax.twinx() / ax.twiny()#
extended
Створює другу вісь Y (X) з тією ж X (Y) — для двох метрик різного масштабу.
ax2 = ax.twinx (); ax2.set_ylabel ('Курс ₴/$' )
copy
Дізнатися більше
Коли використовувати Друга вісь Y (X) для накладання двох метрик різного масштабу: продажі і курс валют, температура і кількість опадів.
Ключові параметри (метод) Без аргументів. Повертає нову вісь. Поширені помилки та нюанси Легенда автоматично не зливається — створіть вручну: ax.legend(handles=h1+h2, labels=l1+l2). Конкуруючі шкали можуть вводити в оману читача.
Локатори та форматувачі осей
8
Обмежує кількість основних позначок. Чистий вигляд при автоматичних масштабах.
from matplotlib.ticker import MaxNLocator; ax.xaxis.set_major_locator (MaxNLocator (6 ))
copy
Позначки на осі з фіксованим кроком — наприклад, кожні 10 одиниць. Альтернатива MaxNLocator для рівномірних розміток.
from matplotlib.ticker import MultipleLocator; ax.yaxis.set_major_locator (MultipleLocator (50 ))
copy
Форматування підписів через довільну функцію. Гнучке кастомне форматування.
from matplotlib.ticker import FuncFormatter; ax.yaxis.set_major_formatter (FuncFormatter (lambda v, p: f'{v/1000:.0f}K' ))
copy
Підписи у відсотках. xmax задає, яке значення відповідає 100%.
from matplotlib.ticker import PercentFormatter; ax.yaxis.set_major_formatter (PercentFormatter (xmax=1.0 ))
copy
Форматування за style-string (як f-string).
from matplotlib.ticker import FormatStrFormatter; ax.yaxis.set_major_formatter (FormatStrFormatter ('%.2f' ))
copy
Форматування дат на осі — strftime-патерни.
from matplotlib.dates import DateFormatter; ax.xaxis.set_major_formatter (DateFormatter ('%b %Y' ))
copy
Автоматичний підбір розмітки для дат — місяці, роки, дні залежно від діапазону.
from matplotlib.dates import AutoDateLocator; ax.xaxis.set_major_locator (AutoDateLocator ())
copy
Стандартний числовий форматувач. useMathText дає красивіші ступені 10.
from matplotlib.ticker import ScalarFormatter; sf = ScalarFormatter (useMathText=True ); ax.yaxis.set_major_formatter (sf)
copy
Стиль ліній і маркерів
5
Line2D properties#
extended
Властивості ліній: linewidth (lw), linestyle (ls: '-' '--' '-.' ':'), color (c), alpha.
ax.plot (x, y, lw=2.5 , ls='--' , c='#a8431f' , alpha=0.8 )
copy
Дізнатися більше
Коли використовувати Контроль вигляду ліній — товщина, стиль, маркер. Базис для кастомізації будь-якого 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 — компромісне значення.
Маркери: '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 )
copy
Дізнатися більше
Коли використовувати Розрізнення серій точками різної форми. Класика наукових публікацій ще до кольорів.
Ключові параметри marker Символ: 'o', 's' (square), '^' (triangle), 'D' (diamond), '*', '+', 'x'. markersize (ms) Розмір. markerfacecolor (mfc) Колір заливки. markeredgecolor (mec) Колір рамки. markeredgewidth (mew) Товщина рамки. Поширені помилки та нюанси Великий набір даних з маркерами повільний — для >1000 точок використовуйте scatter без рамки або переходьте на hexbin.
Можна задавати назвами ('red'), коротко ('r'), hex ('#ff5733'), RGB tuple, або з cycle 'C0'-'C9'.
ax.plot (x, y, color='C2' ) # третій колір зі стандартного циклу
copy
Скорочений запис: 'кольорМаркерЛінія'. 'ro--' = червоні кружечки + штрихова лінія.
ax.plot (x, y, 'g^-' , x, z, 'b--' )
copy
Задає послідовність кольорів і стилів для автоматичного циклу.
ax.set_prop_cycle (color=['#1f77b4' , '#ff7f0e' , '#2ca02c' ])
copy
Кольорові карти та шкала
8
Отримує іменований colormap. Найпопулярніші: viridis, plasma, inferno, magma, coolwarm, RdBu.
cmap = plt.cm.get_cmap ('viridis' )
copy
Нормалізує дані до [0, 1] для colormap. vmin/vmax задають межі.
from matplotlib.colors import Normalize; norm = Normalize (vmin=0 , vmax=100 )
copy
Логарифмічна нормалізація — для даних з широким діапазоном порядків.
from matplotlib.colors import LogNorm; ax.imshow (data, norm=LogNorm (vmin=1 , vmax=1e6 ))
copy
Нормалізація з заданим центром — для дивергентних шкал (наприклад, навколо 0).
from matplotlib.colors import TwoSlopeNorm; norm = TwoSlopeNorm (vcenter=0 , vmin=-5 , vmax=10 )
copy
Дискретна нормалізація з заданими межами — для категоріальних карт.
from matplotlib.colors import BoundaryNorm; norm = BoundaryNorm ([0 , 10 , 50 , 100 ], ncolors=cmap.N)
copy
Додає кольорову шкалу до зображення/heatmap. ax= вказує, де її розмістити.
im = ax.imshow (data); fig.colorbar (im, ax=ax, label='Значення' , shrink=0.8 )
copy
Дізнатися більше
Коли використовувати Кольорова шкала біля imshow/scatter з градацією за value. Без неї читач не розуміє, що означає колір.
Ключові параметри mappable Об'єкт з colormap (повертається imshow, scatter). ax Вісь, до якої прив'язати. label Підпис. shrink Висота шкали (0-1). orientation 'vertical' (default), 'horizontal'. Поширені помилки та нюанси Без shrink (0.7-0.8) шкала тягнеться на всю висоту фігури — некрасиво для маленьких графіків.
Створює колормап зі списку кольорів — для категоріальних візуалізацій.
from matplotlib.colors import ListedColormap; cmap = ListedColormap (['#e63946' , '#f1faee' , '#a8dadc' ])
copy
Створює градієнтний колормап. Метод from_list — найпростіший.
from matplotlib.colors import LinearSegmentedColormap; cmap = LinearSegmentedColormap.from_list ('mine' , ['white' , 'darkred' ])
copy
Розкладка та сітка підграфіків
7
Гнучка сітка для нерівних розмірів підграфіків.
from matplotlib.gridspec import GridSpec; gs = GridSpec (3 , 3 , figure=fig); ax_big = fig.add_subplot (gs[0 :2 , :])
copy
Те саме, що GridSpec, але прив'язане до фігури — зручніший виклик.
gs = fig.add_gridspec (2 , 3 , hspace=0.3 , wspace=0.4 )
copy
fig.tight_layout()#
extended
Автоматично коригує відстані між підграфіками, щоб уникнути перекриттів.
fig.tight_layout (pad=1.5 )
copy
Дізнатися більше
Коли використовувати Автоматичне коригування відступів між підграфіками. Перший інструмент при перекритті заголовків і підписів.
Ключові параметри 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 )
copy
Дізнатися більше
Коли використовувати Тонкий контроль відступів — коли tight_layout не дає бажаного результату.
Ключові параметри left, right, top, bottom Відступи від країв (0-1). wspace, hspace Простір між підграфіками. Поширені помилки та нюанси Параметри в координатах фігури [0, 1], не в дюймах. Експериментуйте: 0.05 — мінімум, 0.3 — комфорт.
Альтернатива tight_layout — більш надійна для складних розкладок.
fig, ax = plt.subplots (constrained_layout=True )
copy
ax.sharex() / ax.sharey()#
Спільна вісь між підграфіками. Зазвичай задається при subplots(sharex=True).
fig, axs = plt.subplots (3 , 1 , sharex=True )
copy
Утиліта для додавання прив'язаних осей (наприклад, маленьких colorbar поряд із imshow).
from mpl_toolkits.axes_grid1 import make_axes_locatable; cax = make_axes_locatable (ax).append_axes ('right' , size='5%' , pad=0.05 )
copy
Стилі та теми
5
plt.style.use()#
extended
Застосовує готовий стиль: 'seaborn-v0_8', 'ggplot', 'fivethirtyeight', 'classic', 'bmh', 'dark_background'.
plt.style.use ('seaborn-v0_8-whitegrid' )
copy
Дізнатися більше
Коли використовувати Швидка зміна загального вигляду — для презентації, наукової публікації, бізнес-звіту.
Ключові параметри 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
})copy
Список усіх доступних стилів Matplotlib. Корисно перевірити перед plt.style.use, щоб уникнути помилок з назвами.
print (plt.style.available)
copy
Тимчасовий стиль у межах with-блоку.
with plt.style.context ('dark_background' ): plt.plot (x, y)
copy
Глобальні налаштування. Можна задати дефолтні шрифти, розмір, кольори.
plt.rcParams.update ({'font.size' : 11 , 'axes.titlesize' : 14 , 'figure.dpi' : 110 })
copy
Дізнатися більше
Коли використовувати Глобальні налаштування — шрифти, розміри за замовчуванням, кольори. Стандарт для брендованих звітів.
Ключові параметри dict-like Доступ як до словника: plt.rcParams['font.size'] = 12. Поширені помилки та нюанси Зміни глобальні — впливають на ВСІ наступні фігури в сесії. Для тимчасових змін — plt.rc_context або plt.style.context.
Швидке оновлення групи параметрів.
plt.rc ('axes' , grid=True , axisbelow=True )
copy
Дати та час
5
matplotlib.dates.date2num()#
Конвертує datetime у внутрішнє числове представлення Matplotlib.
from matplotlib.dates import date2num; nums = date2num (dates)
copy
matplotlib.dates.num2date()#
Зворотна конверсія — з float назад у datetime.
from matplotlib.dates import num2date; dates = num2date (nums)
copy
Графік із датами на осі x. У сучасному коді plot() сам розпізнає datetime.
ax.plot_date (dates, prices, fmt='-' )
copy
Автоматичний поворот і вирівнювання дат на осі x — щоб не перекривались.
fig.autofmt_xdate (rotation=45 )
copy
MonthLocator / YearLocator / DayLocator#
Локатори для дат із заданим інтервалом.
from matplotlib.dates import MonthLocator; ax.xaxis.set_major_locator (MonthLocator (interval=3 ))
copy
3D-візуалізація
8
Створення 3D-осі через projection='3d'.
fig = plt.figure (); ax = fig.add_subplot (111 , projection='3d' )
copy
Лінійний графік у 3D-просторі. На 3D-осях звичайний ax.plot() приймає три координати замість двох; раніше існував псевдонім ax.plot3D.
ax.plot (x, y, z, color='steelblue' ) # ax — 3D-axes
copy
Точковий графік у 3D — той самий ax.scatter, що й у 2D, але приймає третю координату. Розмір через s, кольори через c.
ax.scatter (x, y, z, c=values, s=50 , cmap='plasma' )
copy
3D-поверхня з 2D-сітки. Найкраще для функцій z = f(x, y).
ax.plot_surface (X, Y, Z, cmap='viridis' , edgecolor='none' )
copy
Каркасна поверхня (без заливки) — легший вигляд за surface.
ax.plot_wireframe (X, Y, Z, color='black' , linewidth=0.5 )
copy
ax.contour3D() / ax.contourf3D()#
Контури та заповнені контури в 3D-просторі.
ax.contour3D (X, Y, Z, levels=20 , cmap='viridis' )
copy
3D-стовпчики — для категоріальних 2D-даних, висоту яких треба показати.
ax.bar3d (x, y, z, dx, dy, dz, color='steelblue' )
copy
Налаштовує кут огляду 3D-сцени: elev (вгору) і azim (навколо).
ax.view_init (elev=20 , azim=45 )
copy
Геометричні фігури (patches)
5
matplotlib.patches.Rectangle#
Прямокутник — для виділення зон, рамок, вкладок.
from matplotlib.patches import Rectangle; ax.add_patch (Rectangle ((1 , 2 ), 3 , 4 , alpha=0.3 , color='yellow' ))
copy
matplotlib.patches.Circle#
Коло заданого радіуса в координатах даних.
from matplotlib.patches import Circle; ax.add_patch (Circle ((0 , 0 ), radius=5 , fill=False , edgecolor='red' ))
copy
matplotlib.patches.Ellipse#
Еліпс — корисно для довірчих контурів двовимірних розподілів.
from matplotlib.patches import Ellipse; ax.add_patch (Ellipse ((mu_x, mu_y), 2 *sx, 2 *sy, angle=30 ))
copy
matplotlib.patches.Polygon#
Полігон з вершинами — для виділення довільних зон.
from matplotlib.patches import Polygon; ax.add_patch (Polygon ([(1 ,1 ), (2 ,3 ), (3 ,1 )], closed=True ))
copy
matplotlib.patches.FancyArrowPatch#
Стрілка зі стилями. Гнучкіше за annotate для самостійних стрілок.
from matplotlib.patches import FancyArrowPatch; ax.add_patch (FancyArrowPatch ((0 ,0 ), (1 ,1 ), arrowstyle='->' ))
copy
Збереження та експорт
4
Зберігає фігуру у файл. Формат визначається розширенням: .png, .pdf, .svg, .jpg.
fig.savefig ('chart.png' , dpi=300 , bbox_inches='tight' , facecolor='white' )
copy
Дізнатися більше
Коли використовувати Збереження фінального графіка для звіту, презентації, веб-сторінки.
Ключові параметри fname Шлях. Розширення визначає формат: .png, .pdf, .svg, .jpg. dpi Розширення для PNG/JPG. 300 для друку, 100-150 для веб. bbox_inches 'tight' — обрізати порожні поля (рекомендовано). transparent True — прозорий фон. facecolor Колір тла. Поширені помилки та нюанси Без bbox_inches='tight' навколо часто залишається багато порожнього місця. Для PDF (векторний) dpi не має значення.
Скорочена форма savefig для поточної фігури.
plt.savefig ('out.pdf' , bbox_inches='tight' )
copy
Змінює розмір фігури вже після створення.
fig.set_size_inches (12 , 7 )
copy
Розширення (точок на дюйм). Для презентацій — 100, для друку — 300+.
Інтерактивність та анімація
5
Створює анімацію через функцію оновлення кадрів. Може зберігатись у GIF/MP4.
from matplotlib.animation import FuncAnimation; ani = FuncAnimation (fig, update, frames=100 , interval=50 )
copy
Зберігає анімацію у файл — потрібен ffmpeg для mp4 або pillow для gif.
ani.save ('animation.gif' , writer='pillow' , fps=20 )
copy
Прив'язка до подій миші/клавіатури — основа інтерактивних графіків.
fig.canvas.mpl_connect ('button_press_event' , on_click)
copy
matplotlib.widgets.Slider#
Інтерактивний повзунок — змінює параметр у реальному часі.
from matplotlib.widgets import Slider; slider = Slider (slider_ax, 'Freq' , 1 , 10 , valinit=2 )
copy
matplotlib.widgets.Button#
Кнопка для запуску дій — перерахунок, перемикання режимів.
from matplotlib.widgets import Button; btn = Button (btn_ax, 'Reset' ); btn.on_clicked (reset)
copy
Бібліотека · 12 розділів · 104 функцій · 30 розширених
Plotly
Plotly — найпотужніша бібліотека інтерактивних графіків для Python. Користувач може масштабувати, наводити курсор, перемикати ряди, експортувати у HTML і ділитися онлайн. Plotly Express пропонує лаконічний API для типових графіків, а graph_objects дає повний контроль над кожною деталлю. Незамінний для дашбордів і веб-звітів.
Plotly Express — швидкі графіки
23
Точкова діаграма. Параметри color, size, symbol автоматично кодують додаткові змінні.
fig = px.scatter (df, x='gdp' , y='life_exp' , color='continent' , size='pop' , hover_name='country' )
copy
Дізнатися більше
Коли використовувати Інтерактивний 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' )copy
Лінійний графік. Аргумент color створює окрему лінію для кожної категорії.
fig = px.line (df, x='date' , y='value' , color='product' , line_dash='region' )
copy
Дізнатися більше
Коли використовувати Інтерактивний лінійний графік для часових рядів і трендів. Кілька серій через color.
Ключові параметри data_frame DataFrame. x, y Стовпці. color Створює окрему лінію per category. line_dash Тип пунктиру за категорією. line_group Окремі лінії без кольорового кодування. markers True — показати точки на лініях. Поширені помилки та нюанси Без сортування по x ламається. Особливо для довгих стрічкових даних з groupby.
Стовпчикова діаграма. barmode='group'|'stack'|'relative' керує накладанням.
fig = px.bar (df, x='month' , y='sales' , color='channel' , barmode='group' )
copy
Дізнатися більше
Коли використовувати Інтерактивні стовпці. На відміну від 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' )copy
Гістограма частот. nbins контролює деталізацію; histnorm='percent'|'probability density'.
fig = px.histogram (df, x='age' , color='gender' , nbins=30 , opacity=0.7 , barmode='overlay' )
copy
Дізнатися більше
Коли використовувати Швидка гістограма з опціями нормалізації, накладання, маргіналів.
Ключові параметри 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'.
Boxplot. points='all'|'outliers'|False показує окремі точки. notched=True додає виїмки.
fig = px.box (df, x='department' , y='salary' , color='gender' , points='outliers' )
copy
Дізнатися більше
Коли використовувати Інтерактивний boxplot з opção показати всі точки. Зручно для outlier inspection — клікніть точку щоб побачити.
Ключові параметри x, y Категорії та значення. color Друга категорія. points 'all', 'outliers' (default), 'suspectedoutliers', False. notched True — V-подібні виїмки. Поширені помилки та нюанси За замовчуванням лише викиди. Для всіх точок — points='all' з jitter (через update_traces).
Violin plot з можливістю box=True для вкладеного boxplot.
fig = px.violin (df, x='cat' , y='val' , box=True , points='all' )
copy
Дізнатися більше
Коли використовувати Об'єднання boxplot і KDE — показує форму розподілу плюс квартилі.
Ключові параметри x, y Дані. color Категорія. box True — вкласти boxplot. points Як у px.box. violinmode 'group' або 'overlay'. Поширені помилки та нюанси Для асиметричних розподілів краще за boxplot. Поєднання box=True + points='all' дає максимум інформації.
Strip plot — категоріальний scatter без накладання точок.
fig = px.strip (df, x='group' , y='score' )
copy
Кругова діаграма. names задає категорії, values — їх частки.
fig = px.pie (df, names='category' , values='revenue' , hole=0.4 ) # donut
copy
Дізнатися більше
Коли використовувати Інтерактивний pie з hover і click. Уникайте >5 категорій.
Ключові параметри names Категорії. values Значення. color Кодування кольором. hole 0.3-0.5 для donut chart. Поширені помилки та нюанси Як і Matplotlib pie — погана практика для >5 категорій. Для ієрархічних даних краще sunburst.
Сонячна діаграма — ієрархічна заміна pie. Шари показують вкладеність категорій.
fig = px.sunburst (df, path=['continent' , 'country' , 'city' ], values='population' )
copy
Дізнатися більше
Коли використовувати Ієрархічний розподіл — деревовидна структура категорій. Краще за 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'
)copy
Деревовидна карта — площі прямокутників пропорційні значенням.
fig = px.treemap (df, path=['region' , 'product' ], values='sales' , color='profit' )
copy
Дізнатися більше
Коли використовувати Площинна ієрархія — як sunburst, але прямокутниками. Економніше використовує простір.
Ключові параметри path Шлях ієрархії. values Розмір. color Колір. Поширені помилки та нюанси Дрібні значення стають невидимими. Для багаторівневої структури з >100 елементів краще зведена статистика.
Айсберг-діаграма — вертикальна альтернатива treemap.
fig = px.icicle (df, path=['country' , 'state' , 'city' ], values='pop' )
copy
Воронка конверсії — кожен рівень показує меншу кількість користувачів.
fig = px.funnel (df, x='users' , y='stage' , color='channel' )
copy
px.scatter_3d()#
extended
Інтерактивний 3D-scatter. Можна обертати мишею.
fig = px.scatter_3d (df, x='x' , y='y' , z='z' , color='cluster' , size='value' )
copy
Дізнатися більше
Коли використовувати 3D scatter з поворотом мишею. Для перегляду кластерів у 3D, проекцій PCA, фізичних координат.
Ключові параметри x, y, z Координати. color Категорія/значення. size Розмір точок. symbol Форма. Поширені помилки та нюанси У 3D складно прочитати позиції точок без обертання. Розгляньте 2D-проекції паралельно.
Лінія в 3D-просторі — для траєкторій, кривих, шляхів. Інтерактивно обертається мишею.
fig = px.line_3d (df, x='x' , y='y' , z='z' , color='trajectory_id' )
copy
Площинний графік. groupnorm='percent' нормалізує до 100% — для часток.
fig = px.area (df, x='date' , y='value' , color='product' , groupnorm='percent' )
copy
Контури двовимірної щільності. Альтернатива hexbin.
fig = px.density_contour (df, x='x' , y='y' , marginal_x='histogram' , marginal_y='rug' )
copy
px.density_heatmap()#
extended
Теплова карта двовимірної щільності.
fig = px.density_heatmap (df, x='x' , y='y' , nbinsx=30 , nbinsy=30 )
copy
Дізнатися більше
Коли використовувати Теплова карта щільності 2D — альтернатива scatter для великих наборів, коли точки накладаються.
Ключові параметри x, y Координати. nbinsx, nbinsy Деталізація. histfunc 'count', 'sum', 'avg' для агрегації по третьому стовпцю. Поширені помилки та нюанси Без z параметра рахує count — частоту попадання в клітинку. Для агрегації значення третього стовпця передавайте z.
Відображення матриці чи зображення. Зручно для кореляційних матриць.
fig = px.imshow (df.corr (), color_continuous_scale='RdBu_r' , aspect='auto' , text_auto='.2f' )
copy
Дізнатися більше
Коли використовувати Теплові карти і кореляційні матриці. Інтерактивніший за 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 )copy
px.scatter_matrix()#
extended
Матриця всіх попарних scatter-графіків. Використовується для розвідки даних.
fig = px.scatter_matrix (df, dimensions=['x1' , 'x2' , 'x3' , 'x4' ], color='label' )
copy
Дізнатися більше
Коли використовувати Матриця scatter-графіків між усіма парами числових стовпців. Швидкий EDA для виявлення зв'язків.
Ключові параметри dimensions Список стовпців. color Категорія. Поширені помилки та нюанси Для понад 6-8 стовпців стає нечитабельно. Виберіть найважливіші або кластеризуйте.
px.parallel_coordinates()#
Паралельні координати — кілька числових змінних на спільних осях.
fig = px.parallel_coordinates (df, dimensions=['a' , 'b' , 'c' ], color='target' )
copy
px.parallel_categories()#
Паралельні категорії — для категоріальних потоків (Sankey-подібно).
fig = px.parallel_categories (df, dimensions=['source' , 'medium' , 'campaign' ], color='conversions' )
copy
Діаграма Ганта — інтервали як горизонтальні смуги.
fig = px.timeline (df, x_start='start' , x_end='end' , y='task' , color='owner' )
copy
Емпірична функція розподілу — альтернатива гістограмі для порівняння розподілів.
fig = px.ecdf (df, x='value' , color='group' )
copy
Географічні карти
7
px.choropleth()#
extended
Хороплет — заливка регіонів за значенням. locations містять ISO-коди країн чи штатів.
fig = px.choropleth (df, locations='iso3' , color='gdp' , hover_name='country' , color_continuous_scale='Viridis' )
copy
Дізнатися більше
Коли використовувати Картограма — заливка регіонів за значенням. Стандарт для географічних дашбордів.
Ключові параметри locations ISO-коди країн або користувацькі. locationmode 'ISO-3', 'country names', 'USA-states'. color Стовпець для заливки. color_continuous_scale Шкала. scope 'world', 'europe', 'asia', тощо. Поширені помилки та нюанси Для кастомних меж потрібен GeoJSON через choropleth_mapbox/choropleth_map.
Хороплет на інтерактивній карті MapLibre. Потрібен GeoJSON для меж.
fig = px.choropleth_map (df, geojson=geo, locations='id' , color='value' , map_style='carto-positron' )
copy
px.scatter_map()#
extended
Точки на інтерактивній карті — координати lat/lon. Заміна для застарілої scatter_mapbox.
fig = px.scatter_map (df, lat='lat' , lon='lon' , size='pop' , color='cont' , zoom=3 )
copy
Дізнатися більше
Коли використовувати Точки на інтерактивній карті 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) застаріли.
Теплова карта щільності точок на карті.
fig = px.density_map (df, lat='lat' , lon='lon' , radius=10 , zoom=4 )
copy
Лінії на інтерактивній карті — для маршрутів і потоків.
fig = px.line_map (df, lat='lat' , lon='lon' , color='route' )
copy
Точки на статичній географічній карті (без MapLibre).
fig = px.scatter_geo (df, locations='iso3' , size='pop' , projection='natural earth' )
copy
Лінії на географічній карті — потоки міграції, маршрути польотів.
fig = px.line_geo (df, lat='lat' , lon='lon' , color='flight' )
copy
Polar та radar
3
Точкова діаграма у полярних координатах.
fig = px.scatter_polar (df, r='value' , theta='direction' , color='season' )
copy
Лінія у полярних координатах. line_close=True замикає лінію — основа radar-діаграм.
fig = px.line_polar (df, r='score' , theta='skill' , line_close=True )
copy
Полярна гістограма (роза вітрів). Корисно для напрямкових даних.
fig = px.bar_polar (df, r='speed' , theta='direction' , color='intensity' )
copy
Graph Objects — точний контроль
12
Базовий контейнер усіх графіків при ручній побудові.
fig = go.Figure (data=[go.Scatter (x=x, y=y)], layout=go.Layout (title='...' ))
copy
Дізнатися більше
Коли використовувати Базовий контейнер при ручній побудові, коли Plotly Express замало гнучкості.
Ключові параметри data Список traces. layout Об'єкт або словник layout-у. Поширені помилки та нюанси Plotly Express повертає go.Figure — можна доповнювати через update_layout/add_trace.
Універсальний trace — точки, лінії, або обидва. mode='markers'|'lines'|'lines+markers'|'text'.
fig.add_trace (go.Scatter (x=x, y=y, mode='lines+markers' , name='Sales' ))
copy
Дізнатися більше
Коли використовувати Універсальний 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'
)copy
Стовпчикова діаграма. Можна додати кілька trace для групування.
fig.add_trace (go.Bar (x=cats, y=vals, marker_color='steelblue' ))
copy
Дізнатися більше
Коли використовувати Стовпці з повним контролем — кастомні кольори per bar, текст, патерни.
Ключові параметри x, y Дані. marker {'color': список кольорів, 'pattern': патерн}. text Текст на стовпцях. textposition 'inside', 'outside', 'auto'. Поширені помилки та нюанси Для grouped/stacked треба кілька go.Bar з однаковими x. barmode задається на layout рівні.
Гістограма з повним контролем бінів. xbins задає start, end і size.
fig.add_trace (go.Histogram (x=data, xbins={'start' : 0 , 'end' : 100 , 'size' : 5 }))
copy
Boxplot із багатьма опціями: notched, boxmean='sd', quartilemethod.
fig.add_trace (go.Box (y=values, name='Group A' , boxmean='sd' , notched=True ))
copy
Violin plot. side='positive'|'negative' для half-violins.
fig.add_trace (go.Violin (y=data, side='positive' , meanline_visible=True ))
copy
Кругова діаграма. textinfo керує підписами всередині секторів.
fig.add_trace (go.Pie (labels=labels, values=vals, hole=0.3 , textinfo='label+percent' ))
copy
Теплова карта. zmin/zmax обмежують шкалу.
fig.add_trace (go.Heatmap (z=matrix, x=col_labels, y=row_labels, colorscale='Viridis' ))
copy
Дізнатися більше
Коли використовувати Теплова карта з повним контролем — шкала, колір, hover, текст у клітинках.
Ключові параметри z 2D-масив значень. x, y Підписи осей. colorscale Назва або кастомний список. zmin, zmax Межі шкали. text Текст у клітинках. hovertemplate Кастомний tooltip. Поширені помилки та нюанси Для відсутніх значень (NaN) задавайте hoverongaps=False.
Точки/лінії в 3D — еквівалент px.scatter_3d з повним контролем.
fig.add_trace (go.Scatter3d (x=x, y=y, z=z, mode='markers' ))
copy
3D-поверхня з матриці значень.
fig.add_trace (go.Surface (z=Z, colorscale='Earth' ))
copy
Тривимірна сітка з трикутників — для складних геометричних форм.
fig.add_trace (go.Mesh3d (x=x, y=y, z=z, opacity=0.5 ))
copy
Контурний графік. contours.coloring='heatmap' додає заливку.
fig.add_trace (go.Contour (z=Z, contours={'coloring' : 'heatmap' , 'showlabels' : True }))
copy
Спеціалізовані traces
13
Діаграма Санкі — потоки між категоріями. Найкращий спосіб показати рух чи розподіл.
fig.add_trace (go.Sankey (node={'label' : nodes}, link={'source' : src, 'target' : tgt, 'value' : val}))
copy
Waterfall chart — як значення накопичуються від початку до кінця. Для фінансових звітів.
fig.add_trace (go.Waterfall (x=cats, y=vals, measure=['relative' ]*5 +['total' ]))
copy
Воронка — для конверсій. textinfo='value+percent initial'.
fig.add_trace (go.Funnel (x=values, y=stages, textinfo='value+percent initial' ))
copy
KPI-індикатор: число, дельта, gauge, bullet. Для дашбордів.
fig.add_trace (go.Indicator (mode='number+delta' , value=1234 , delta={'reference' : 1000 }))
copy
Дізнатися більше
Коли використовувати 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 ]}
))copy
Інтерактивна таблиця в Plotly-фігурі. Можна форматувати клітинки.
fig.add_trace (go.Table (header={'values' : cols}, cells={'values' : [df[c] for c in cols]}))
copy
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' ]))
copy
Дізнатися більше
Коли використовувати Свічковий графік для фінансових даних. Open/High/Low/Close — стандарт біржових даних.
Ключові параметри x Дати. open, high, low, close Чотири стовпці цін. increasing, decreasing Кольори зростаючих/спадних свічок. Поширені помилки та нюанси Range slider за замовчуванням увімкнено — можна вимкнути fig.update_xaxes(rangeslider_visible=False).
OHLC bars — альтернатива свічкам, простіша візуалізація.
fig.add_trace (go.Ohlc (x=df['date' ], open =df['o' ], high=df['h' ], low=df['l' ], close=df['c' ]))
copy
Ієрархічна сонячна діаграма з контролем кожного рівня.
fig.add_trace (go.Sunburst (labels=labels, parents=parents, values=values))
copy
Площинне дерево з повним налаштуванням.
fig.add_trace (go.Treemap (labels=labels, parents=parents, values=values))
copy
Паралельні координати з контролем фільтрів.
fig.add_trace (go.Parcoords (line={'color' : df['target' ]}, dimensions=dim_list))
copy
Паралельні категорії — для категоріальних змінних.
fig.add_trace (go.Parcats (dimensions=dims, line={'color' : counts}))
copy
Теплова карта щільності на інтерактивній карті — для просторових даних.
fig.add_trace (go.Densitymap (lat=lats, lon=lons, z=values, radius=10 ))
copy
Точки на інтерактивній карті MapLibre. Сучасна заміна Scattermapbox.
fig.add_trace (go.Scattermap (lat=lats, lon=lons, mode='markers' ))
copy
Layout та оформлення
13
fig.update_layout()#
extended
Найважливіший метод — змінює всі параметри layout: розмір, заголовки, шрифт, теми.
fig.update_layout (title='Заголовок' , width=900 , height=500 , template='plotly_white' , font={'family' : 'Inter' })
copy
Дізнатися більше
Коли використовувати Найважливіший метод 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' )
copy
Дізнатися більше
Коли використовувати Налаштування осей — формат, діапазон, сітка, тип. Окремо для 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' })
copy
Дізнатися більше
Коли використовувати Масово змінити властивості 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='Середнє' )
copy
Дізнатися більше
Коли використовувати Опорні лінії — середнє, поріг, дата події.
Ключові параметри 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 )
copy
Додає геометричну фігуру — лінію, прямокутник, коло, шлях.
fig.add_shape (type ='rect' , x0=1 , y0=1 , x1=3 , y1=4 , line={'color' : 'red' })
copy
fig.add_annotation()#
extended
Анотація з можливою стрілкою. Один із найкорисніших методів для виділення точок.
fig.add_annotation (x=date_max, y=y_max, text='Пік' , showarrow=True , arrowhead=2 )
copy
Дізнатися більше
Коли використовувати Анотація з опційною стрілкою — виділити подію, max, аномалію.
Ключові параметри x, y Координати. text Текст. showarrow True/False. ax, ay Зсув стрілки. Поширені помилки та нюанси Координати в data-units за замовчуванням. Для відносних — xref='paper'.
Налаштування заголовка: текст, шрифт, позиція.
fig.update_layout (title={'text' : 'Динаміка' , 'x' : 0.5 , 'xanchor' : 'center' , 'font' : {'size' : 20 }})
copy
Налаштування легенди: позиція, орієнтація, заголовок.
fig.update_layout (legend={'orientation' : 'h' , 'y' : -0.2 , 'x' : 0.5 , 'xanchor' : 'center' })
copy
Поля навколо графіка. Зменшіть для максимального використання простору.
fig.update_layout (margin={'l' : 40 , 'r' : 20 , 't' : 60 , 'b' : 40 })
copy
Layout paper / plot bgcolor#
Кольори фону: paper_bgcolor — увесь холст, plot_bgcolor — область графіка.
fig.update_layout (paper_bgcolor='white' , plot_bgcolor='#f8f8f8' )
copy
Режим підказок: 'x'|'x unified'|'closest'|False. 'x unified' зручний для часових рядів.
fig.update_layout (hovermode='x unified' )
copy
Стиль підказки: фон, межа, шрифт.
fig.update_layout (hoverlabel={'bgcolor' : 'white' , 'font_size' : 13 })
copy
Підграфіки та сітки
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' ])
copy
Дізнатися більше
Коли використовувати Сітка підграфіків з різними типами. На відміну від 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 )copy
specs= дозволяє різні типи в кожній клітинці: scatter, pie, 3d, mapbox.
fig = make_subplots (rows=1 , cols=2 , specs=[[{'type' :'xy' }, {'type' :'pie' }]])
copy
Друга вісь Y у підграфіку — для накладання двох метрик різного масштабу (продажі і курс валют).
fig = make_subplots (specs=[[{'secondary_y' : True }]]); fig.add_trace (go.Bar (...), secondary_y=False )
copy
fig.add_trace() with row/col#
Розміщує trace у конкретному підграфіку.
fig.add_trace (go.Scatter (x=x, y=y), row=1 , col=2 )
copy
shared_xaxes / shared_yaxes#
Спільні осі між підграфіками — синхронізує масштаб.
fig = make_subplots (rows=3 , cols=1 , shared_xaxes=True )
copy
horizontal_spacing / vertical_spacing#
Відступи між підграфіками у частках 0–1.
fig = make_subplots (rows=2 , cols=2 , horizontal_spacing=0.15 , vertical_spacing=0.2 )
copy
Шкали кольорів і палітри
7
Plotly має понад 80 вбудованих шкал: 'Viridis', 'Plasma', 'RdBu', 'Turbo', 'Hot' та ін.
fig.update_traces (marker={'colorscale' : 'Viridis' })
copy
Користувацька шкала як список [position, color].
scale = [[0 , '#fff' ], [0.5 , '#fab' ], [1 , '#a00' ]]; fig.update_traces (colorscale=scale)
copy
Дискретні палітри для категоріальних даних. Plotly, D3, Set1, Pastel, Bold тощо.
fig = px.bar (df, x='cat' , y='val' , color='cat' , color_discrete_sequence=px.colors.qualitative.Bold)
copy
Послідовні шкали для впорядкованих числових даних.
fig = px.scatter (df, color='value' , color_continuous_scale=px.colors.sequential.Plasma)
copy
Дивергентні шкали з нейтральним центром — для відхилень від нуля чи середнього.
fig = px.imshow (diff, color_continuous_scale=px.colors.diverging.RdBu)
copy
Циклічні шкали для значень з періодичністю — кутів, годин, днів року.
fig = px.scatter_polar (df, color='hour' , color_continuous_scale=px.colors.cyclical.HSV)
copy
color_continuous_midpoint#
Середина шкали для дивергентних даних — наприклад, 0 при додатних і від'ємних значеннях.
px.choropleth (df, color='change' , color_continuous_midpoint=0 )
copy
Інтерактивність
7
Кастомний текст підказки з полями trace через placeholder %{x}, %{y}, %{text}, %{customdata}.
fig.update_traces (hovertemplate='<b>%{x}</b><br>Дохід: %{y:,.0f} ₴<extra></extra>' )
copy
Повзунок діапазону під графіком — для зручної навігації по часовому ряду.
fig.update_xaxes (rangeslider_visible=True )
copy
Кнопки швидкого вибору діапазону: 1M, 6M, YTD, 1Y, all.
fig.update_xaxes (rangeselector={'buttons' : [{'count' : 1 , 'label' : '1м' , 'step' : 'month' , 'stepmode' : 'backward' }]})
copy
Анімаційний повзунок — наприклад, для перегляду по роках.
fig = px.scatter (df, x='gdp' , y='life' , animation_frame='year' , animation_group='country' )
copy
Відображає фігуру. У Jupyter — інлайн, у скриптах — у браузері.
Дізнатися більше
Коли використовувати Відображення в Jupyter або браузері. Default рендерер залежить від оточення.
Ключові параметри renderer 'browser', 'svg', 'png', 'iframe', 'json'. Поширені помилки та нюанси У старих Jupyter не показує без явного %matplotlib inline для plotly. Рішення: import plotly.io as pio; pio.renderers.default = 'iframe'.
Вибір рендерера: 'browser', 'svg', 'png', 'iframe', 'json'. svg/png — статичні зображення.
fig.show (renderer='browser' )
copy
Експорт та збереження
6
fig.write_html()#
extended
Зберігає інтерактивний HTML — повний інтерактив без сервера.
fig.write_html ('report.html' , include_plotlyjs='cdn' , full_html=True )
copy
Дізнатися більше
Коли використовувати Експорт інтерактивного 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 )
copy
Дізнатися більше
Коли використовувати Статичне зображення для друку, презентацій. Потрібен 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' )
copy
Повертає HTML як рядок — для вбудовування в веб-додатки.
html_str = fig.to_html (include_plotlyjs='cdn' , div_id='myplot' )
copy
Повертає байти зображення без збереження файлу.
png_bytes = fig.to_image (format='png' , width=800 , height=500 )
copy
Повертає словник із усією конфігурацією — корисно для модифікації або інспекції.
Шаблони та теми
3
Готові теми: 'plotly', 'plotly_white', 'plotly_dark', 'ggplot2', 'seaborn', 'simple_white', 'presentation'.
fig.update_layout (template='plotly_white' )
copy
Глобальний шаблон за замовчуванням для всіх фігур у скрипті.
import plotly.io as pio; pio.templates.default = 'simple_white'
copy
Створення власного шаблону на основі go.layout.Template.
import plotly.io as pio; pio.templates['mine' ] = go.layout.Template (layout={'font' : {'family' : 'Newsreader' }})
copy
Статистичні утиліти
4
px.scatter() з trendline#
Лінія тренду в scatter: 'ols', 'lowess', 'rolling', 'ewm', 'expanding'.
fig = px.scatter (df, x='x' , y='y' , trendline='ols' , trendline_color_override='red' )
copy
Маргінальні розподіли по краях scatter: 'histogram', 'rug', 'box', 'violin'.
fig = px.scatter (df, x='x' , y='y' , marginal_x='histogram' , marginal_y='violin' )
copy
Грати підграфіків за категоріальною змінною — небезпосередня заміна seaborn.FacetGrid.
fig = px.scatter (df, x='x' , y='y' , facet_col='cat' , facet_col_wrap=3 )
copy
px.get_trendline_results()#
Витягує статистичні результати тренду (нахил, R², p-values).
results = px.get_trendline_results (fig); print (results.iloc[0 ]['px_fit_results' ].summary ())
copy
Бібліотека · 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' )
copy
Дізнатися більше
Коли використовувати 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 ()copy
Лінійний графік. За замовчуванням агрегує дублі по x і будує 95% довірчий інтервал.
sns.lineplot (data=df, x='date' , y='sales' , hue='region' , errorbar='ci' )
copy
Дізнатися більше
Коли використовувати Лінійні графіки часових рядів. Автоматично агрегує дублі по 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 коли точно знаєте, що дублів немає.
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 )
copy
Дізнатися більше
Коли використовувати 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
Гістограма з опціональним KDE. stat='density'|'probability'|'percent'.
sns.histplot (data=df, x='value' , hue='group' , kde=True , stat='density' , bins=30 )
copy
Дізнатися більше
Коли використовувати Гістограма з 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'
)copy
Графік оцінки щільності ядра (KDE) — згладжена альтернатива гістограмі.
sns.kdeplot (data=df, x='income' , hue='gender' , fill=True , common_norm=False , alpha=0.5 )
copy
Дізнатися більше
Коли використовувати Згладжена щільність розподілу. Альтернатива histogram коли потрібна гладка крива.
Ключові параметри data, x Дані. hue Категорії. fill True — заповнити під кривою. common_norm False — кожна категорія нормалізована окремо. bw_adjust Множник bandwidth (за замовчуванням 1). Поширені помилки та нюанси За замовчуванням common_norm=True — категорії розрахуються разом, маленьку буде ледь видно. Майже завжди потрібно common_norm=False.
Емпірична функція розподілу — корисно для порівняння розподілів без вибору bin.
sns.ecdfplot (data=df, x='score' , hue='class' )
copy
Маленькі риски на осі — показує розташування індивідуальних спостережень.
sns.kdeplot (data=df, x='x' ); sns.rugplot (data=df, x='x' , alpha=0.5 )
copy
Figure-level wrapper для розподілів: kind='hist'|'kde'|'ecdf' з faceting.
sns.displot (data=df, x='value' , col='category' , kind='kde' , fill=True )
copy
Дізнатися більше
Коли використовувати Figure-level з faceting для розподілів. Швидкий спосіб порівняти розподіли по групах у сітці.
Ключові параметри kind 'hist' (default), 'kde', 'ecdf'. col, row Faceting. rug True — додати rug plot. Поширені помилки та нюанси Як і relplot — повертає FacetGrid, не Axes.
Категоріальні графіки
9
Стовпчики із середніми значеннями та довірчими інтервалами. estimator керує агрегацією.
sns.barplot (data=df, x='day' , y='total_bill' , hue='sex' , estimator='mean' , errorbar=('ci' , 95 ))
copy
Дізнатися більше
Коли використовувати Стовпці з агрегованими значеннями + довірчі інтервали. Стандарт для категоріальних порівнянь.
Ключові параметри 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 )copy
sns.countplot()#
extended
Стовпчики з кількостями спостережень — як value_counts у вигляді графіка.
sns.countplot (data=df, x='category' , hue='status' , order=['A' , 'B' , 'C' ])
copy
Дізнатися більше
Коли використовувати Стовпці з частотами категорій — як value_counts у вигляді графіка.
Ключові параметри data, x Категорія. hue Друга категорія. order, hue_order Порядок. Поширені помилки та нюанси Один з x чи y — категоріальний; другий не задавайте. Для сортування за частотою: order=df['cat'].value_counts().index.
Boxplot за категоріями. notch=True додає виїмки для медіани.
sns.boxplot (data=df, x='department' , y='salary' , hue='level' , whis=1.5 )
copy
Дізнатися більше
Коли використовувати 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' )
copy
Дізнатися більше
Коли використовувати 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 # не екстраполювати за межі даних
)copy
Letter-value plot — кращий за boxplot для великих наборів і важких хвостів.
sns.boxenplot (data=df, x='cat' , y='val' , k_depth='proportion' )
copy
Категоріальний scatter. jitter додає випадковий зсув щоб уникнути перекриття.
sns.stripplot (data=df, x='day' , y='tip' , jitter=0.2 , alpha=0.6 )
copy
Як stripplot, але з гарантією без перекриття точок. Для невеликих наборів.
sns.swarmplot (data=df, x='day' , y='tip' , hue='sex' , dodge=True )
copy
Точки з лініями — середні з CI, з'єднані лініями. Підкреслює тренд між категоріями.
sns.pointplot (data=df, x='time' , y='val' , hue='group' , errorbar='se' , dodge=0.1 )
copy
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 )
copy
Дізнатися більше
Коли використовувати 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
Scatter + лінійна регресія з довірчим інтервалом. Базовий axis-level wrapper.
sns.regplot (data=df, x='x' , y='y' , ci=95 , scatter_kws={'alpha' : 0.5 })
copy
Дізнатися більше
Коли використовувати 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 для діагностики.
Figure-level версія regplot з можливістю розділення hue/col/row.
sns.lmplot (data=df, x='x' , y='y' , col='cat' , hue='group' , height=4 )
copy
Дізнатися більше
Коли використовувати regplot + faceting. Один виклик для регресії в кількох групах.
Ключові параметри data, x, y Дані. hue Окремі регресії per group. col, row Faceting. scatter, fit_reg False для прибирання частини. Поширені помилки та нюанси Як і всі figure-level — повертає FacetGrid. Для збереження g.figure.savefig().
Графік залишків після регресії — діагностика для перевірки лінійності та гомоскедастичності.
sns.residplot (data=df, x='x' , y='y' , lowess=True )
copy
Поліноміальна регресія через order > 1 в regplot/lmplot.
sns.regplot (data=df, x='x' , y='y' , order=2 )
copy
Логістична регресія для бінарного y через logistic=True.
sns.regplot (data=df, x='x' , y='y_binary' , logistic=True , y_jitter=0.03 )
copy
Локально зважена регресія — нелінійне згладжування без припущень.
sns.regplot (data=df, x='x' , y='y' , lowess=True , line_kws={'color' : 'red' })
copy
Стійка до викидів регресія через robust=True (повільніше).
sns.regplot (data=df, x='x' , y='y' , robust=True , ci=None )
copy
Матриці та теплові карти
4
Теплова карта 2D-матриці. annot=True пише значення в клітинках.
sns.heatmap (corr, annot=True , fmt='.2f' , cmap='coolwarm' , center=0 , vmin=-1 , vmax=1 )
copy
Дізнатися більше
Коли використовувати Теплові карти, кореляційні матриці, 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 ('Кореляційна матриця' )copy
sns.clustermap()#
extended
Теплова карта з ієрархічною кластеризацією рядків і стовпців. Розкриває структуру.
sns.clustermap (df, method='ward' , metric='euclidean' , cmap='vlag' , z_score=1 )
copy
Дізнатися більше
Коли використовувати 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) повільне і нечитабельне.
Прихідання частин матриці маскою — наприклад, верхній трикутник кореляційної.
import numpy as np; mask = np.triu (np.ones_like (corr, dtype=bool )); sns.heatmap (corr, mask=mask)
copy
annot може бути окремим масивом — наприклад, p-values поверх кореляцій.
sns.heatmap (corr, annot=p_values, fmt='' , cmap='coolwarm' )
copy
Багатовимірні графіки
5
Матриця всіх попарних графіків. На діагоналі — розподіли, поза нею — scatter.
sns.pairplot (df, hue='species' , diag_kind='kde' , corner=True )
copy
Дізнатися більше
Коли використовувати Матриця всіх попарних 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 )
copy
Дізнатися більше
Коли використовувати Двовимірний графік з маргінальними розподілами по краях. Виявляє характер зв'язку плюс індивідуальні розподіли.
Ключові параметри data, x, y Дані. kind 'scatter', 'kde', 'hex', 'reg', 'hist'. hue Категорія. marginal_kws Параметри маргінальних плотів. Поширені помилки та нюанси kind='hex' для великих наборів (>10K точок). kind='kde' може бути повільним на 100K+.
Гнучкіша версія pairplot — можна задавати різні графіки на діагоналі і поза нею.
g = sns.PairGrid (df, hue='cat' ); g.map_diag (sns.histplot); g.map_offdiag (sns.scatterplot); g.add_legend ()
copy
Низькорівнева побудова joint plot з повним контролем кожної панелі.
g = sns.JointGrid (data=df, x='x' , y='y' ); g.plot (sns.scatterplot, sns.histplot)
copy
sns.FacetGrid()#
extended
Сітка підграфіків за категоріальними змінними — фундамент усіх figure-level функцій.
g = sns.FacetGrid (df, col='time' , row='smoker' , height=3 ); g.map_dataframe (sns.scatterplot, x='x' , y='y' )
copy
Дізнатися більше
Коли використовувати Низькорівневий 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' )copy
Часові ряди та матричні дані
3
Time series with lineplot#
Lineplot чудово агрегує повторювані спостереження по часу з CI.
sns.lineplot (data=df, x='date' , y='value' , hue='series' , errorbar=('ci' , 95 ))
copy
Накладання ковзного середнього через 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' )
copy
Calendar heatmap pattern#
Pivot за днем тижня та тижнем + heatmap дає календарний вигляд.
pivot = df.pivot_table (index='dow' , columns='week' , values='val' ); sns.heatmap (pivot, cmap='YlOrRd' )
copy
Стилі, теми, контекст
8
sns.set_theme()#
extended
Універсальне налаштування стилю, контексту, палітри і шрифтів. Найкращий старт для проєкту.
sns.set_theme (style='whitegrid' , context='notebook' , palette='deep' , font='serif' , font_scale=1.1 )
copy
Дізнатися більше
Коли використовувати Універсальне налаштування — стиль, контекст, палітра, шрифт. Перший рядок проекту з 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' )
copy
Дізнатися більше
Коли використовувати Тільки стиль фону без зміни шрифтів і палітри.
Ключові параметри style 'whitegrid', 'darkgrid', 'white', 'dark', 'ticks'. Поширені помилки та нюанси 'whitegrid' — стандарт для бізнес-графіків; 'ticks' — для наукових публікацій.
Розмір елементів для різних задач: 'paper', 'notebook' (default), 'talk', 'poster'.
sns.set_context ('talk' , font_scale=1.2 )
copy
Тимчасовий стиль через with-блок.
with sns.axes_style ('white' ): sns.scatterplot (...)
copy
Тимчасовий контекст у with-блоці.
with sns.plotting_context ('talk' ): sns.barplot (...)
copy
Прибирає рамки осей. За замовчуванням — верхню і праву.
sns.despine (left=True , bottom=False , offset=10 , trim=True )
copy
Дізнатися більше
Коли використовувати Прибирання рамок осей. Сучасний look — без верхньої і правої.
Ключові параметри top, right, left, bottom True для прибирання. offset Зсув від даних. trim True — обрізати spines до даних. Поширені помилки та нюанси За замовчуванням прибирає top і right. Для 'all-clean' стилю: trim=True, offset=10.
Скидає всі налаштування Matplotlib і Seaborn до дефолтних.
sns.reset_defaults ()
copy
Глобально задає поточну палітру.
sns.set_palette ('Set2' )
copy
Палітри кольорів
13
sns.color_palette()#
extended
Створює список кольорів. Без аргументів — поточна палітра. Може приймати назву чи список.
palette = sns.color_palette ('viridis' , n_colors=8 )
copy
Дізнатися більше
Коли використовувати Створення палітри для кастомних візуалізацій. Можна використати у 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 )copy
Сімейство монотонних палітр з контрольованим відтінком, насиченістю і світлістю.
palette = sns.cubehelix_palette (start=0.5 , rot=-0.75 , n_colors=8 )
copy
sns.light_palette() / sns.dark_palette()#
Послідовна палітра від світлого/темного до насиченого кольору.
sns.light_palette ('seagreen' , n_colors=10 , as_cmap=True )
copy
Дивергентна палітра з двома відтінками і нейтральним центром.
sns.diverging_palette (220 , 20 , n=11 , as_cmap=True )
copy
Палітра з рівномірним відтінком у HUSL-просторі — кольори візуально рівноінтенсивні.
sns.husl_palette (8 , l=0.6 )
copy
Палітра в HLS-просторі — простіше, але менш сприйнятливо рівноінтенсивне.
sns.hls_palette (8 , h=0.5 )
copy
Built-in qualitative palettes#
Готові категоріальні палітри: 'deep', 'muted', 'pastel', 'bright', 'dark', 'colorblind', 'Set1'-'Set3'.
sns.set_palette ('colorblind' )
copy
Built-in sequential palettes#
Послідовні: 'rocket', 'mako', 'flare', 'crest' + matplotlib (Blues, viridis тощо).
sns.heatmap (matrix, cmap='rocket' )
copy
Built-in diverging palettes#
Дивергентні: 'vlag', 'icefire' + matplotlib (RdBu, coolwarm тощо).
sns.heatmap (corr, cmap='vlag' , center=0 )
copy
sns.color_palette() з 'as_cmap'#
Перетворює палітру в безперервний colormap для heatmap чи scatter з градієнтом.
cmap = sns.color_palette ('flare' , as_cmap=True )
copy
Візуалізує палітру — корисно при підборі.
sns.palplot (sns.color_palette ('Spectral' , 10 ))
copy
sns.choose_colorbrewer_palette()#
Інтерактивний підбір палітри ColorBrewer (у Jupyter).
sns.choose_colorbrewer_palette ('sequential' )
copy
sns.choose_cubehelix_palette()#
Інтерактивне налаштування cubehelix.
sns.choose_cubehelix_palette ()
copy
Поглиблене налаштування графіків
12
Параметр order контролює порядок категорій на осі (для всіх категоріальних плотів).
sns.barplot (data=df, x='day' , y='val' , order=['Mon' , 'Tue' , 'Wed' , 'Thu' , 'Fri' ])
copy
Дізнатися більше
Коли використовувати Контроль порядку категорій на осі — наприклад, дні тижня, рівні освіти, кварталу.
Ключові параметри 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)copy
Порядок категорій у hue (керує легендою і кольорами).
sns.scatterplot (data=df, x='x' , y='y' , hue='cat' , hue_order=['low' , 'mid' , 'high' ])
copy
Можна задавати палітру локально для конкретного графіка — назва, список або словник.
sns.barplot (data=df, x='cat' , y='val' , palette={'A' : '#1f77b4' , 'B' : '#ff7f0e' })
copy
errorbar argument#
extended
Тип довірчого інтервалу: 'ci', 'pi', 'sd', 'se' з рівнем або None щоб прибрати.
sns.barplot (data=df, x='cat' , y='val' , errorbar='sd' )
copy
Дізнатися більше
Коли використовувати Контроль типу довірчого інтервалу в barplot, lineplot, pointplot.
Ключові параметри errorbar 'ci' (default 95% bootstrap), 'pi', 'sd', 'se' або None. 'ci' рівень Кортеж ('ci', 90) для 90%. Поширені помилки та нюанси За замовчуванням 'ci' (bootstrap CI 95%). Для великих наборів дорого — задавайте 'sd' або None.
Функція агрегації для barplot/pointplot/lineplot: 'mean', 'median', 'sum' або np.func.
sns.barplot (data=df, x='cat' , y='val' , estimator='median' )
copy
Розводить hue-групи у бік замість накладання — для box, strip, swarm, point.
sns.stripplot (data=df, x='day' , y='tip' , hue='sex' , dodge=True )
copy
FacetGrid.map() / map_dataframe()#
Застосовує функцію до кожної комірки сітки. map_dataframe передає DataFrame як перший аргумент.
g = sns.FacetGrid (df, col='cat' ); g.map (plt.scatter, 'x' , 'y' )
copy
Додає легенду після всіх викликів map.
g.add_legend (title='Категорія' , loc='upper right' )
copy
FacetGrid.set_axis_labels()#
Задає підписи осей одночасно для всіх підграфіків.
g.set_axis_labels ('Час' , 'Значення' )
copy
Шаблон заголовків панелей. {col_name} підставляє значення.
g.set_titles ('{col_name}: {col_var}' )
copy
Додає опорну лінію (горизонтальну/вертикальну) до всіх панелей.
g.refline (y=0 , color='red' , linestyle='--' )
copy
Параметр annot_kws задає стиль анотацій: розмір, колір, шрифт.
sns.heatmap (corr, annot=True , annot_kws={'size' : 9 , 'fontweight' : 'bold' })
copy
Об'єктний інтерфейс (so)
7
Новий об'єктний інтерфейс Seaborn (з v0.12+). Більш Grammar-of-Graphics стилю.
import seaborn.objects as so; so.Plot (df, x='x' , y='y' ).add (so.Dot ())
copy
Додає шар (mark + stat). Композиція як у ggplot.
p = so.Plot (df, x='x' , y='y' ).add (so.Dot ()).add (so.Line (), so.PolyFit ())
copy
Розбиває на сітку за змінною. Заміна для catplot/relplot.
so.Plot (df, x='x' , y='y' ).add (so.Dot ()).facet (col='cat' )
copy
Масштабування осей і кольорів.
so.Plot (df, x='x' , y='y' ).add (so.Dot ()).scale (x='log' , color='viridis' )
copy
Локальна тема для конкретного графіка.
p.theme ({'axes.facecolor' : '#f8f8f8' })
copy
Marks (so.Dot, so.Line, so.Bar, so.Area)#
Геометричні примітиви — точки, лінії, стовпці, заливки.
so.Plot (df, x='x' , y='y' ).add (so.Bar ())
copy
Stats (so.Agg, so.Hist, so.PolyFit)#
Статистичні трансформації перед малюванням.
so.Plot (df, x='cat' , y='val' ).add (so.Bar (), so.Agg (func='mean' ))
copy
Утиліти та функції-помічники
6
Переміщує легенду після створення графіка.
ax = sns.scatterplot (...); sns.move_legend (ax, 'upper left' , bbox_to_anchor=(1 , 1 ))
copy
sns.load_dataset()#
extended
Завантажує демонстраційні набори даних: 'iris', 'tips', 'penguins', 'titanic', 'flights'.
tips = sns.load_dataset ('tips' )
copy
Дізнатися більше
Коли використовувати Демо-набори для прикладів і експериментів. 'tips', 'iris', 'penguins', 'titanic', 'flights', 'mpg'.
Ключові параметри name Ім'я набору. Поширені помилки та нюанси Завантажує з GitHub — потрібен інтернет. У продакшні використовуйте локальні файли.
Список доступних демо-наборів.
print (sns.get_dataset_names ())
copy
Усі 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' )
copy
Combining with matplotlib#
Передавайте ax= для розміщення Seaborn у власній фігурі Matplotlib.
fig, ax = plt.subplots (); sns.boxplot (data=df, x='cat' , y='val' , ax=ax); ax.set_title ('...' )
copy
Логарифмічна шкала через ax.set_xscale/yscale або log_scale у displot/histplot.
sns.histplot (data=df, x='income' , log_scale=True )
copy