Python для аналитиков быстрый старт
Списки и словари
Структуры данных для аналитика
В анализе данных Python списки и словари — это основные контейнеры для информации. Прежде чем данные попадут в сложные аналитические инструменты вроде Pandas, их нужно где-то собрать и подготовить. Списки отлично подходят для хранения последовательностей, например, данных о продажах за каждый день, а словари — для структурирования информации об одном объекте, скажем, о клиенте или товаре.
Списки: упорядоченные наборы данных
Список (list) — это упорядоченная коллекция элементов. Порядок важен: каждый элемент имеет свой номер, или индекс, который начинается с нуля. В аналитике списки часто представляют собой временные ряды или один столбец данных.
# Продажи по месяцам (в тысячах 💲)
monthly_sales = [120, 135, 150, 142, 160, 155, 170, 180, 175, 190, 210, 230]
Чтобы получить доступ к конкретному значению, используется его индекс в квадратных скобках. Например, чтобы узнать продажи за первый месяц (январь), мы обращаемся к элементу с индексом 0.
first_month_sales = monthly_sales[0]
print(first_month_sales) # Выведет: 120
# Последний месяц (декабрь) можно получить с помощью индекса -1
last_month_sales = monthly_sales[-1]
print(last_month_sales) # Выведет: 230
Для анализа часто требуется не один элемент, а целый диапазон — например, данные за определенный квартал. Для этого используются срезы (slicing). Срез создает новый список из части исходного. Синтаксис [start:end] включает элементы с индекса start до end-1.
# Продажи за первый квартал (индексы 0, 1, 2)
first_quarter_sales = monthly_sales[0:3]
print(first_quarter_sales) # Выведет: [120, 135, 150]
# Продажи за второе полугодие (с июля, индекс 6, до конца)
second_half_sales = monthly_sales[6:]
print(second_half_sales) # Выведет: [170, 180, 175, 190, 210, 230]
Списки легко изменять. Если у вас появляются новые данные, их можно добавить в конец с помощью метода .append(). Это удобно при сборе данных в реальном времени или при последовательной обработке файлов.
# Мы в середине января следующего года, и у нас есть новые данные
monthly_sales.append(240)
print(monthly_sales)
# Выведет: [120, 135, 150, ..., 230, 240]
List Comprehension: быстрая обработка
Часто данные поступают в «грязном» виде: с лишними пробелами, в разном регистре. List comprehension (генератор списков) — это мощный и краткий способ создавать новые списки на основе существующих, применяя к каждому элементу какое-либо действие. Это один из самых эффективных инструментов для быстрой очистки и трансформации данных.
Синтаксис list comprehension:
[expression for item in iterable].
Представьте, что у нас есть список с названиями городов, который нужно привести к единому формату: убрать пробелы по краям и перевести всё в нижний регистр.
cities = [' Москва ', 'Санкт-Петербург', ' новосибирск', 'Екатеринбург ']
# Очищаем данные с помощью list comprehension
cleaned_cities = [city.strip().lower() for city in cities]
print(cleaned_cities)
# Выведет: ['москва', 'санкт-петербург', 'новосибирск', 'екатеринбург']
Этот однострочный код заменяет более громоздкий цикл for, делая код чище и зачастую быстрее.
Словари: структура для связей
Словарь (dict) хранит данные в формате «ключ-значение». Это неупорядоченная коллекция, где каждый элемент имеет уникальный ключ, по которому можно мгновенно получить доступ к значению. В анализе данных словарь идеально подходит для представления одного объекта со множеством атрибутов, например, строки в таблице. Словари также являются основой формата JSON, который широко используется для обмена данными в вебе.
product_info = {
"product_id": 105,
"name": "Кофемолка",
"price": 3500,
"in_stock": True
}
Доступ к значениям осуществляется по ключу, а не по числовому индексу. Это делает код более читаемым, так как мы используем осмысленные имена.
product_name = product_info["name"]
print(product_name) # Выведет: Кофемолка
# Добавление новой информации
product_info["brand"] = "Bosch"
print(product_info)
# Выведет: {'product_id': 105, ..., 'brand': 'Bosch'}
Словари незаменимы для маппинга — сопоставления одних значений другим. Например, для замены кодов категорий на их полные названия. Метод .get() полезен тем, что позволяет избежать ошибки, если ключ отсутствует, и вернуть значение по умолчанию.
# Словарь для маппинга статусов заказа
status_mapping = {
1: "Новый",
2: "В обработке",
3: "Отправлен",
4: "Доставлен"
}
order_status_code = 3
# Получаем текстовое описание статуса
status_description = status_mapping.get(order_status_code, "Неизвестный статус")
print(status_description) # Выведет: Отправлен
# Что если код статуса некорректен?
unknown_status = status_mapping.get(5, "Неизвестный статус")
print(unknown_status) # Выведет: Неизвестный статус
Владение этими базовыми структурами — ключ к эффективной подготовке данных для более сложного анализа.