- •Изучение набора данных iris.Csv с использованием Pandas и Seaborn:
- •Загрузить данные из файла как Pandas DataFrame
- •1.2. Вызвав у датафрейма метод head, проверить корректность загруженных данных
- •1.3. Вызвав у датафрейма метод describe, получить характеристики. Опишите полученный результат.
- •1.6.1. Постройте гистограммы для разного количества столбцов: 5,10,15,20,30. Выберите на ваш взгляд такое количество столбцов, который лучшие образом описывает форму распределения признаков.
- •1.7. Постройте гистограммы, чтобы вместо столбцов изображались ступеньки.
- •2.2. Выведите первые 10 наблюдений набора данных.
- •2.3. Рассчитайте характеристики, полученные методом describe в п. 1.3 с использованием методов NumPy. Обращайте внимание на то, где оценка смещенная, а где нет.
- •1.8. Добавьте на гистограммы график ядерной оценки плотности.
- •2. Изучение набора данных iris.Csv с использованием NumPy:
- •2.1. Загрузите данные из файла как массив NumPy
- •3. Изучение набора данных вашего варианта:
- •3.1. Оцените и опишите набор данных вашего варианта с использованием методов, рассмотренных ранее. Сделайте выводы о кол-во классов, наличию выбросов, пересечении классов, и т.Д.
- •4. Преобразование данных:
- •4.1. Получите из датафрейма из п. 1.4 столбец с названием классов. Используя LabelEncoder и OneHotEncoder получите различные способы кодирования меток класса. В чем различия полученных кодировок?
- •4.2. Для датафрейма из п. 1.4, получите все столбцы признаков (столбцы не содержащие метки классов). Преобразуйте полученные столбцы в массив NumPy.
1.8. Добавьте на гистограммы график ядерной оценки плотности.
Для добавления на гистограммы графика ядерной оценки плотности используем kde=True. Реализация представлена в Листинге 1.8.1. Результат представлен на Рисунке 1.8.2.
Листинг 1.8.1 – Реализация рисования гистограммы распределения с добавлением ядерной оценки плотности.
fig, axes = plt.subplots(1, 4, figsize=(20, 5)) for ax, column in zip(axes, df.columns[:-1]): sns.histplot(data=df, x=column, hue='target', bins=10, multiple='layer', element='step', ax=ax, kde=True) fig.suptitle(f'Режим пересечения') plt.tight_layout() plt.show() |
Рисунок 1.8.2 – Гистограммы распределения с добавлением ядерной оценки плотности
2. Изучение набора данных iris.Csv с использованием NumPy:
2.1. Загрузите данные из файла как массив NumPy
Для загрузки данных используем функцию numpy.genfromtxt. Она загружает данные из файла, разделяя их запятыми. skip_header=1 – пропускает первую строку, если в файле есть заголовки. Реализация представлена в Листинге 2.1.1.
Листинг 2.1.1 – Загрузка данных из файла как массив NumPy
import numpy as np data = np.genfromtxt("iris.csv", delimiter=",", skip_header=1) |
2.2. Выведите первые 10 наблюдений набора данных.
Для вывода первых 10 наблюдений используем срез. Реализация представлена в Листинге 2.2.1. Результат приведен в Листинге 2.2.2.
Листинг 2.2.1 – Вывод первых десяти записей датасета
print(data[:10]) |
Листинг 2.2.2 – Первые десять записей датасета
[[0. 5.1 3.5 1.4 0.2 0. ] [1. 4.9 3. 1.4 0.2 0. ] [2. 4.7 3.2 1.3 0.2 0. ] [3. 4.6 3.1 1.5 0.2 0. ] [4. 5. 3.6 1.4 0.2 0. ] [5. 5.4 3.9 1.7 0.4 0. ] [6. 4.6 3.4 1.4 0.3 0. ] [7. 5. 3.4 1.5 0.2 0. ] [8. 4.4 2.9 1.4 0.2 0. ] [9. 4.9 3.1 1.5 0.1 0. ]] |
2.3. Рассчитайте характеристики, полученные методом describe в п. 1.3 с использованием методов NumPy. Обращайте внимание на то, где оценка смещенная, а где нет.
Для расчета характеристик используются методы: shape[0], который определяет количество наблюдений; mean, который рассчитывает среднее значение по каждому признаку; std, который рассчитывает стандартное отклонение с несмещённой оценкой (ddof=1); min и max, которые рассчитывают минимальное и максимальное значения; percentile, который вычисляет квартили (25%, 50%, 75%). Реализация приведена в Листинге 2.3.1. Результат представлен в Листинге 2.3.2.
Листинг 2.3.1 – Расчет характеристик датасета.
count = data.shape[0] mean = np.mean(data, axis=0) std = np.std(data, axis=0, ddof=1) min_val = np.min(data, axis=0) percentiles_25 = np.percentile(data, 25, axis=0) percentiles_50 = np.percentile(data, 50, axis=0) percentiles_75 = np.percentile(data, 75, axis=0) max_val = np.max(data, axis=0)
print('sepal length (cm), sepal width (cm), petal length (cm), petal width (cm)') print(f"count: {count}") print(f"mean: {mean}") print(f"std: {std}") print(f"min: {min_val}") print(f"25%: {percentiles_25}") print(f"50%: {percentiles_50}") print(f"75%: {percentiles_75}") print(f"max: {max_val}") |
Листинг 2.3.2 – Результат расчета характеристик датасета.
sepal length (cm), sepal width (cm), petal length (cm), petal width (cm) count: 150 mean: [74.5 5.84333333 3.05733333 3.758 1.19933333 1. ] std: [43.44536799 0.82806613 0.43586628 1.76529823 0.76223767 0.81923192] min: [0. 4.3 2. 1. 0.1 0. ] 25%: [37.25 5.1 2.8 1.6 0.3 0. ] 50%: [74.5 5.8 3. 4.35 1.3 1. ] 75%: [111.75 6.4 3.3 5.1 1.8 2. ] max: [149. 7.9 4.4 6.9 2.5 2. ] |
