Переменные и типы данных: как Python хранит признаки (Features)
Переменные и типы данных: как Python хранит признаки (Features)
Представьте, что вы готовите данные для модели, которая предсказывает стоимость поездки на такси. У вас есть дистанция (12.5 км), класс комфорта («Эконом») и статус пассажира (VIP). В предыдущем курсе мы называли это признаками (Features). Но как именно компьютер держит эти признаки в своей памяти, чтобы алгоритм мог с ними работать?
Для этого в программировании существуют переменные. Это фундамент, без которого не обходится ни один ML-проект, будь то простая линейная регрессия или сложная нейросеть.
Переменная: ярлык для данных
В классической математике запись означает утверждение: «икс равен пяти». В программировании знак равенства несет совершенно другой смысл. Это оператор присваивания.
Когда мы пишем код:
distance = 12.5
Мы даем команду Python: «Создай в памяти объект со значением 12.5 и повесь на него ярлык с именем distance».
Переменная в Python — это не сама коробка с данными, а именная бирка, привязанная к объекту в памяти компьютера.
Имена переменных должны быть говорящими. Если вы назовете признак x1, через неделю вы забудете, что это означало. Если назовете passenger_age — код будет читаться как текст. В Python принято писать имена переменных строчными буквами, разделяя слова нижним подчеркиванием (стиль snake_case).
Четыре фундаментальных типа данных
Машинное обучение — это математика, и в конечном итоге модели «едят» только числа. Однако сырые датасеты приходят к нам в самом разном виде: тексты жалоб, даты, логические флаги («да/нет»).
Чтобы Python понимал, как обрабатывать ту или иную переменную, у каждого объекта есть тип данных. Рассмотрим четыре базовых типа, с которыми ML-инженер работает каждый день.
| Тип в Python | Название | Что хранит | Пример из ML-датасета |
|---|---|---|---|
int |
Целое число (Integer) | Числа без дробной части | rooms = 3 (количество комнат) |
float |
Вещественное число | Числа с плавающей точкой (дробные) | price = 4.5 (цена в миллионах) |
str |
Строка (String) | Текст, заключенный в кавычки | city = "Moscow" (город) |
bool |
Логический тип (Boolean) | Только два значения: True или False |
is_vip = True (является ли VIP) |
Обратите внимание: значение True пишется с заглавной буквы и без кавычек. Если вы напишете "True" в кавычках, Python воспримет это просто как текст (строку), а не как логический флаг.
Динамическая типизация: гибкость Python
В некоторых языках программирования (например, в C++ или Java) при создании переменной вы обязаны жестко указать ее тип. Если вы сказали, что age — это целое число, вы больше никогда не сможете положить туда текст.
Python работает иначе. Он использует динамическую типизацию. Это значит, что интерпретатор сам догадывается, какой тип данных вы имеете в виду, исходя из значения. Более того, вы можете в любой момент отвязать ярлык от числа и привязать его к тексту.
Эта гибкость делает Python идеальным языком для Data Science — вы можете быстро экспериментировать с данными, не тратя время на описание каждой переменной. Но здесь же кроется опасность: если вы ожидаете число, а в переменную случайно попала строка, модель машинного обучения выдаст ошибку.
Преобразование типов (Type Casting)
В реальном Feature Engineering данные редко приходят в идеальном виде. Часто вы выгружаете датасет из базы данных или CSV-файла, и все числа в нем записаны как текст.
Например, дистанция поездки может прийти в виде строки:
raw_distance = "12.5"
Вы не можете умножить строку на тариф. Сначала текст нужно превратить в число. Для этого в Python есть встроенные функции, названия которых совпадают с именами типов:
int()— пытается превратить значение в целое число.float()— превращает значение в дробное число.str()— превращает что угодно в текст.bool()— превращает значение в логическоеTrueилиFalse.
Пример подготовки признака:
raw_distance = "12.5"
# Превращаем строку в вещественное число
clean_distance = float(raw_distance)
Если вы попытаетесь сделать int("12.5"), Python выдаст ошибку, так как не знает, что делать с точкой внутри текста. А вот при преобразовании дробного числа в целое (int(12.5)) Python просто отбросит дробную часть, и получится 12.
Особого внимания заслуживает преобразование в логический тип и обратно. В мире компьютеров True — это всегда единица, а False — ноль.
Умение жонглировать типами данных — первый шаг к очистке данных. Теперь, когда наши признаки лежат в правильных переменных с нужными типами, мы готовы совершать над ними математические операции, чтобы создавать новые, более сложные признаки для наших моделей.