Лабораторная работа №6. Анализ данных в Python
1) Загрузка и базовый осмотр (Pandas)
pd.read_csv(path, encoding=...) — загрузка CSV; у вас подходит encoding='latin1'.
df.head(n) — просмотр первых n строк для проверки структуры.
df.shape — размер таблицы (строки, столбцы).
df.info() — типы столбцов, количество ненулевых значений.
df.describe() — базовые статистики для числовых колонок
df.sample(n) — случайные n строк
2) Чистка и приведение типов
df.drop_duplicates() — убрать дубликаты строк.
df.isnull().sum() — посчитать пропуски по столбцам.
df.fillna({...}) - заполнить пропуски
df.dropna() — удалить пропуски
df[column].str.replace(pattern, repl, regex=True) — удалить единицы измерения/символы ('hp', 'km/h', '$', ',', ' cc', ' sec', ' Nm').
pd.to_numeric(series, errors='coerce') — перевести строку в число; некорректные значения → NaN.
df[column].astype(dtype) — приведение типа (например, 'Seats' → int).
df[column].str.extract(regex) — извлечь числа из строк, когда формат сложный (например, из '5,204 cc'взять 5204).
df[column].str.lower()/strip() — нормализация категорий (например, топливо).
3) Преобразования датасета
df[column] = ... — создать новые столбцы.
df[column].apply(func) — применить функцию построчно (например, парсер единиц).
df[column].replace() / map() — сопоставление значений (нормализация меток).
4) Группировки и агрегации
df.groupby([column])[num_cols].agg(['mean','median','count']) — сводка по бренду/топливу.
df[column].value_counts(normalize=True) — частота категорий (абсолютная/относительная в зависимости от параметра normalize).
df.sort_values(column, ascending=True) — сортировка по столбцу.
df[column].nunique() — число уникальных значений столбца.
df[column].unique() — список уникальных значений столбца.
5) Корреляции и статистики
df.corr(numeric_only=True) — матрица корреляции численных признаков (Показывает направление и силу связи между численными признаками)
6) Визуализация (Seaborn/Matplotlib)
sns.histplot(x, bins, kde=True) — гистограмма распределения.
sns.countplot(x|y, order=...) — столбчатая диаграмма частот категорий.
sns.boxplot(x=cat, y=num) — “диаграмма размаха” (используется при сравнении распределений, позволяет определить медиану и дисперсию).
sns.scatterplot(x=num, y=num, hue=cat) — точечная диаграмма.
sns.heatmap(df.corr(...), annot=True) — карта корреляций.
plt.figure(figsize=(w,h)) — функция задания размера графика
plt.title() — функция задания заголовка графика
plt.xlabel(), plt.ylabel() — функции задания названий осей для графика.
Задания
Загрузите CSV с правильной кодировкой и убедитесь, что видите первые строки. Выведите информацию о полях датасета.
Подсказка: pd.read_csv('...', encoding='latin1'), df.head(), df.info().Укажите: количество строк/столбцов, список столбцов, типы данных, доли пропусков.
Подсказка: df.shape, df.columns, df.info(), df.isnull().sum().
Поработайте с полями:
- HorsePower → убрать ' hp'; Total Speed → убрать ' km/h';
- Performance(0 - 100 )KM/H → убрать ' sec'
- Cars Prices → убрать '$', ',', пробелы;
- CC/Battery Capacity → убрать ',' и ' cc' (Замечание: в датасете присутствую электрокары, объем двигателя которых измеряется в киловатт-часах. В рамках данной лабораторной дополнительных действий в их отношении принимать не надо, функция pd.to_numeric вернет NaN при попытке парсинга. Пока что от электрокаров приходится избавляться).
- Torque → убрать ' Nm';
- Seats → привести к числу.
Подсказка: str.replace(..., regex=True)
Приведите к float/int поля из списка выше. Подсказка: pd.to_numeric(..., errors='coerce').
Удалите дубликаты. Подсказка: df.drop_duplicates(inplace=True);
Найдите min/max/mean/median для числовых столбцов;
Заполните пропуски в числовых признаках медианами. Подсказка: df.fillna({...});
Заполните пропуски в строковых (категориальных) признаках значением “Unknown”;
Найдите самую дорогую модель, самую быструю и самую мощную;
Постройте гистограммы для Cars Prices, HorsePower, Total Speed. Сделайте выводы о средней цене, мощности и скорости машин.
Постройте круговую диаграмму топ-10 брендов по числу моделей. Подсказка: brand_counts = df['Company Names'].value_counts()
Для полученных топ-10 брендов постройте диаграммы размаха по полям Cars Prices, HorsePower, Total Speed. Сделайте выводы о медианных значениях величин, а также о дисперсии (отклонении от среднего).
Постройте матрицу корреляций и heatmap. Отметьте 3 самые сильные связи с ценой. Подсказка: df.corr(numeric_only=True), sns.heatmap(...).
- 14 октября 2025, 23:30