No history yet

Списки и словари

Структуры данных для аналитика

В анализе данных 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) # Выведет: Неизвестный статус

Владение этими базовыми структурами — ключ к эффективной подготовке данных для более сложного анализа.