1. Основы Python: синтаксис и структуры данных для аналитика
Основы Python: синтаксис и структуры данных для аналитика
Представьте, что вам нужно проанализировать продажи в сети из пятисот магазинов, где данные поступают в разных форматах, с пропусками и опечатками. Делать это вручную в Excel — значит обречь себя на недели монотонного труда с высоким риском ошибки. Python превращает эту задачу в последовательность логических команд, которые выполняются за секунды. Но прежде чем строить прогнозы нейросетями или визуализировать тренды, необходимо освоить «анатомию» языка: как он хранит информацию, как принимает решения и как организует данные в структуры, пригодные для анализа.
Философия кода и переменные как контейнеры
В анализе данных мы редко работаем с одиночными значениями, но именно они являются строительными кирпичами любого датасета. В Python переменная — это не просто ячейка памяти, а ссылка на объект. Когда мы пишем sales = 1500.50, мы создаем объект типа «число с плавающей точкой» и вешаем на него ярлык sales.
Для аналитика критически важно понимать типы данных, так как от них зависит доступный инструментарий. Если вы случайно загрузите столбец с выручкой как текстовые строки, вы не сможете вычислить средний чек — Python выдаст ошибку или, что хуже, просто «склеит» строки.
True или False. Это фундамент для фильтрации данных.Динамическая типизация Python позволяет менять тип переменной на лету, но в аналитике это часто становится ловушкой. Хорошим тоном считается явное преобразование типов, если есть сомнения в источнике данных.
Управляющие конструкции: логика обработки данных
Аналитика — это процесс постоянного выбора. «Если клиент совершил покупку более чем на 5000 руб., присвоить ему статус VIP», «Пока в списке есть необработанные файлы, продолжать загрузку». Эти сценарии реализуются через условные операторы и циклы.
Условный оператор if-elif-else
Логика ветвления позволяет сегментировать данные. В Python отступы (4 пробела) — это не вопрос эстетики, а синтаксическое требование. Код внутри блока выполняется только при соблюдении условия.
Рассмотрим пример сегментации чека:
Здесь важно соблюдать порядок: Python проверяет условия сверху вниз до первого совпадения. Если бы мы поставили условие > 5000 первым, то чек на 12 000 руб. попал бы в категорию "Standard", так как условие истинно, и Python не пошел бы проверять ветку elif.
Циклы for и while
Цикл for — основной инструмент аналитика для итерации (перебора) элементов. Мы используем его для обработки списков файлов, колонок в таблице или строк в отчете.
Цикл while используется реже, обычно в задачах, где неизвестно точное количество итераций — например, при парсинге сайта, пока не закончатся страницы в пагинации. Однако с ним нужно быть осторожным: ошибка в условии может привести к бесконечному циклу, который «завесит» скрипт.
Списки и кортежи: упорядоченные коллекции
Когда данных становится много, нам нужны структуры для их группировки. Самая простая и часто используемая — список (list).
Списки (list)
Список в Python — это изменяемая последовательность. В него можно добавлять элементы, удалять их или менять существующие. Для аналитика список удобен как временное хранилище: например, мы собрали цены конкурентов и хотим найти минимальную.Основные операции со списками:
. Позволяет вырезать часть данных. Например, prices[:3] вернет первые три цены. добавляет элемент в конец, .extend() объединяет списки, .sort() упорядочивает данные.Важный нюанс: списки в Python могут содержать объекты разных типов, но для эффективного анализа данных (особенно в библиотеках NumPy и Pandas, которые мы изучим позже) рекомендуется хранить в одной структуре данные одного типа.
Кортежи (tuple)
Кортеж — это неизменяемый список. Создается в круглых скобках (1, 2, 3). Зачем он нужен аналитику?
Безопасность: если данные не должны меняться (например, координаты GPS или настройки подключения к базе данных), кортеж гарантирует их целостность.
Скорость: кортежи работают быстрее списков и занимают меньше памяти.
Ключи словарей: кортеж может быть ключом в словаре, а список — нет. Словари: ключ к структурированным данным
Если список — это просто мешок с пронумерованными вещами, то словарь (
dict) — это картотека. Данные в нем хранятся в виде пар «ключ: значение». Это идеальная структура для представления одной записи из базы данных или JSON-ответа от API.Преимущество словаря в скорости доступа. Чтобы найти цену товара в списке из миллиона элементов, Python придется просмотреть их все (в худшем случае). В словаре поиск по ключу происходит мгновенно, независимо от размера структуры.
Для аналитика словари незаменимы при:
Создании справочников (например, замена кодов регионов на их названия).
Агрегации данных вручную (подсчет частоты встречаемости слов или категорий).
Хранении конфигураций моделей машинного обучения. Множества: очистка от дублей
Множество (
set) — это неупорядоченная коллекция уникальных элементов. Если вы загрузили список ID транзакций и хотите узнать, сколько уникальных клиентов совершили покупки, просто оберните список в set().Множества поддерживают математические операции: объединение, пересечение и разность. Это полезно, когда нужно сравнить две базы данных: например, найти клиентов, которые были активны в прошлом месяце, но не совершили ни одной покупки в текущем.
Функции: автоматизация и переиспользование кода
Аналитический проект часто состоит из повторяющихся действий: очистка текста, расчет налогов, форматирование дат. Чтобы не копировать один и тот же код (и не множить ошибки), используются функции.
Функция определяется ключевым словом
def. Она принимает аргументы и возвращает результат через return.В программировании для анализа данных функции играют роль «мини-конвейеров». Мы можем написать функцию для обработки одной строки данных, а затем применить ее к миллиону строк в таблице Pandas.
Области видимости и чистые функции
Для аналитика важно писать «чистые» функции — те, результат которых зависит только от входных аргументов, и которые не меняют глобальные переменные. Это делает код предсказуемым и облегчает отладку. Переменная, созданная внутри функции, «умирает» после завершения ее работы — это локальная область видимости.Обработка исключений: когда данные «ломаются»
Реальные данные грязные. В колонке с числами может внезапно встретиться строка "N/A", а при делении выручки на количество заказов может возникнуть деление на ноль, если заказов не было. Без обработки ошибок ваш скрипт остановится на середине долгого процесса.
Конструкция
try-except позволяет программе «выжить» при столкновении с ошибкой.В аналитике это критично при парсинге сайтов: если один из тысячи товаров на сайте имеет другую структуру верстки,
try-except позволит пропустить его и собрать остальные 999, вместо того чтобы прервать работу всей программы.Списковые включения (List Comprehensions)
Это «синтаксический сахар» Python, который аналитики используют постоянно. Он позволяет создавать новые списки на основе существующих в одну строку.
Предположим, у нас есть список цен в долларах, и мы хотим перевести их в рубли по курсу 90:
Такой подход не только короче, но и зачастую быстрее работает. В него также можно встраивать условия:
[p * 90 for p in usd_prices if p > 15] — пересчитать только те цены, что выше 15 долларов.Работа с библиотеками и импорт модулей
Python — это «язык с батарейками в комплекте», но его истинная мощь для аналитика кроется во внешних библиотеках. Чтобы использовать инструменты, их нужно импортировать.
Существует несколько способов импорта:
import math — импортирует весь модуль. Доступ к функциям через точку: math.sqrt(16).
from datetime import datetime — импортирует конкретный класс или функцию.
import pandas as pd — импорт с псевдонимом. Это стандарт индустрии: почти все аналитики сокращают Pandas до pd, а NumPy до np.Понимание того, как устроены пакеты и модули, поможет вам эффективно использовать документацию. Если вы видите в коде
plt.plot(), вы сразу понимаете, что используется библиотека Matplotlib, импортированная как plt.Нюансы работы с памятью и копированием
При работе с большими объемами данных (например, списками на миллионы элементов) важно понимать разницу между поверхностным и глубоким копированием. В Python присваивание
list_b = list_a не создает копию данных. Оно создает вторую ссылку на тот же самый список. Если вы измените list_b, изменится и list_a.Для создания независимой копии используется метод
.copy() или модуль copy. В анализе данных это часто встречается при создании промежуточных срезов таблиц: если вы не сделаете копию, изменения в отфильтрованных данных могут неожиданно «просочиться» в исходный датасет.Практическое применение: от синтаксиса к аналитике
Рассмотрим сценарий: у нас есть список словарей, представляющий продажи за день. Нам нужно вычислить общую выручку и составить список уникальных категорий товаров.
В этом коротком примере задействованы почти все основы:
Список словарей как модель данных.
List comprehension для извлечения цен.
Встроенная функция sum()` для агрегации.
Замыкание основ
Освоение синтаксиса Python — это не заучивание команд, а развитие навыка декомпозиции задачи. Любой сложный отчет можно разбить на элементарные операции: получить данные (списки/словари), проверить условия (if/else), повторить действия для каждой строки (циклы), очистить от дублей (множества) и упаковать логику в функции.
Эти базовые структуры данных являются фундаментом для библиотек NumPy и Pandas. Массивы в NumPy — это оптимизированные списки, а DataFrame в Pandas можно представить как словарь, где ключи — это названия колонок, а значения — списки данных. Понимая, как Python работает «под капотом», вы сможете писать эффективный код, который не только выдает верный результат, но и легко читается коллегами-аналитиками.