Python для аналитиков быстрый старт
Списки и словари
Списки: упорядоченные коллекции
Вы уже знакомы с переменными, которые хранят одиночные значения, например, число или строку. Но в аналитике данных мы почти всегда работаем с наборами информации: списком пользователей, таблицей транзакций или временным рядом. Для таких задач в Python существуют коллекции. Первая и самая основная из них — это список (list).
Список — это упорядоченная, изменяемая коллекция элементов. «Упорядоченная» означает, что каждый элемент имеет свой постоянный номер, или индекс. Индексация в Python начинается с нуля. Чтобы получить доступ к элементу, нужно указать его индекс в квадратных скобках.
# Список с результатами A/B-теста (конверсии в %)
conversions = [12.5, 14.1, 13.8, 12.9]
# Получаем первый элемент (индекс 0)
first_day_conversion = conversions[0]
print(f"Конверсия в первый день: {first_day_conversion}%")
# Списки изменяемы, добавим новый результат
conversions.append(15.2)
print(f"Обновленный список: {conversions}")
Метод .append() добавляет элемент в конец списка. Это один из самых частых методов, который вы будете использовать для пополнения коллекций данными.
Срезы и вложенные структуры
Часто нам нужна не вся коллекция, а только ее часть. Для этого используются срезы (slicing). Срез позволяет получить подсписок, указав начальный и конечный индексы. Формат такой: list[start:stop]. Важно помнить, что элемент с индексом stop в срез не включается.
# Список цен акций за неделю
stock_prices = [101.5, 102.0, 101.8, 103.2, 103.5, 104.1, 103.9]
# Цены за рабочие дни (первые 5 элементов)
work_week_prices = stock_prices[0:5]
print(f"Рабочая неделя: {work_week_prices}")
# Цены с середины недели до конца
mid_to_end = stock_prices[3:] # Если end не указан, срез идет до конца
print(f"Со среды: {mid_to_end}")
Данные не всегда плоские. Часто они приходят в виде вложенных структур, например, когда один список содержит другие списки. Это типично для данных из JSON API, где вы можете получить список пользователей, каждый из которых представлен своим списком характеристик.
# Список пользователей: [id, имя, город]
users_data = [
[101, 'Алексей', 'Москва'],
[102, 'Мария', 'Санкт-Петербург'],
[103, 'Иван', 'Новосибирск']
]
# Получаем данные второго пользователя (индекс 1)
user_maria = users_data[1]
print(f"Данные Марии: {user_maria}")
# А теперь получим только город второго пользователя
# Первый индекс - для внешнего списка, второй - для вложенного
user_maria_city = users_data[1][2]
print(f"Город Марии: {user_maria_city}")
Словари и циклы
Если список хорош для упорядоченных последовательностей, то словарь (dictionary) идеален для хранения данных с метками. Словарь — это коллекция пар «ключ-значение». Ключи уникальны и используются для доступа к значениям, так же как слово в обычном словаре помогает найти его определение. Это делает словари незаменимыми для хранения метаданных или структурированной информации об одном объекте.
# Данные о товаре из API интернет-магазина
product_info = {
'product_id': 'A-5421',
'name': 'Смартфон Pro Max',
'price': 99990,
'in_stock': True
}
# Доступ к значению по ключу
product_price = product_info['price']
print(f"Цена товара: {product_price}")
# Обновляем словарь, добавляя новый ключ и значение
product_info.update({'category': 'Электроника'})
print(f"Обновленные данные: {product_info}")
Чтобы обработать каждый элемент в списке или словаре, используются циклы. Самый распространенный — цикл for.
# Используем список цен из предыдущего примера
stock_prices = [101.5, 102.0, 101.8, 103.2, 103.5]
# Перебираем каждый элемент списка
for price in stock_prices:
print(f"Текущая цена: {price}")
Для итерации по словарю можно использовать его методы .keys(), .values() или .items(), который возвращает пары (ключ, значение).
# Перебираем пары ключ-значение в словаре
for key, value in product_info.items():
print(f"{key}: {value}")
Генераторы списков
Часто в аналитике нужно создать новый список на основе существующего, отфильтровав его или применив ко всем элементам какую-то операцию. Можно сделать это с помощью цикла for и метода .append(), но есть более элегантный и «пайтонический» способ — генераторы списков (list comprehensions).
Генератор позволяет создать новый список в одну строку, объединяя цикл for и, при необходимости, условие if.
# Список счетов за месяц
bills = [1200, 5400, 800, 15000, 3200]
# Задача: создать новый список только с крупными счетами (> 5000)
# Способ 1: классический цикл
large_bills_loop = []
for bill in bills:
if bill > 5000:
large_bills_loop.append(bill)
# Способ 2: генератор списков
large_bills_comprehension = [bill for bill in bills if bill > 5000]
print(f"Результат (цикл): {large_bills_loop}")
print(f"Результат (генератор): {large_bills_comprehension}")
Генераторы не только короче, но и часто работают быстрее. Они являются мощным инструментом для быстрой фильтрации и преобразования данных, что делает их незаменимыми в работе аналитика.
Теперь давайте проверим, насколько хорошо вы усвоили материал.
Какой индекс имеет первый элемент в списке Python?
Дан список numbers = [10, 20, 30, 40, 50]. Что вернет срез numbers[1:4]?
Списки и словари — это рабочие лошадки для хранения данных в Python. Умение работать с ними, особенно с вложенными структурами и генераторами, является ключевым навыком для любого, кто занимается анализом данных.