Files
ML/lab_1.ipynb
2025-10-17 01:36:07 +04:00

7.3 KiB
Raw Permalink Blame History

Лабораторная работа №1

Тема: Анализ биографических данных с помощью Python, Pandas и визуализации

Выполнил: Студент группы ИСЭбд-3 Осягина А. А.

Цель работы

Изучить методы работы с табличными данными в библиотеке pandas,
научиться проводить предварительный анализ, статистическую обработку
и визуализацию данных на примере биографического датасета.

Шаг 1. Импорт библиотек

In [ ]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Для отображения графиков в Jupyter
%matplotlib inline

# Настройки графиков
sns.set(style="whitegrid")

Шаг 2. Загрузка данных

In [ ]:
# Указываем путь к CSV (можно заменить на свой)
file_path = "biographies.csv"

# Чтение CSV в DataFrame
df = pd.read_csv(file_path)

# Просмотр первых строк
df.head()

Шаг 3. Первичный анализ данных

In [ ]:
# Общая информация
df.info()

# Статистика по числовым столбцам
df.describe(include="all")

Шаг 4. Очистка данных

In [ ]:
# Заполнение пропусков в 'Manner of death'
df['Manner of death'] = df['Manner of death'].fillna('unknown')

# Проверка пропусков
df.isnull().sum()

Шаг 5. Анализ по профессиям

In [ ]:
occupation_counts = df['Occupation'].value_counts().head(10)

plt.figure(figsize=(10,5))
sns.barplot(x=occupation_counts.values, y=occupation_counts.index)
plt.title("Топ-10 профессий")
plt.xlabel("Количество персон")
plt.ylabel("Профессия")
plt.show()

Шаг 6. Анализ возраста смерти

In [ ]:
plt.figure(figsize=(10,6))
sns.histplot(df['Age of death'].dropna(), bins=20, kde=True)
plt.title("Распределение возраста смерти")
plt.xlabel("Возраст")
plt.ylabel("Количество персон")
plt.show()

Шаг 7. Способы смерти

In [ ]:
death_counts = df['Manner of death'].value_counts()

plt.figure(figsize=(10,6))
sns.barplot(x=death_counts.values, y=death_counts.index)
plt.title("Распределение способов смерти")
plt.xlabel("Количество персон")
plt.ylabel("Способ смерти")
plt.show()

Шаг 8. Анализ по странам

In [ ]:
# Топ-10 стран по количеству персон
country_counts = df['Country'].str.split(';').explode().str.strip().value_counts().head(10)

plt.figure(figsize=(10,6))
sns.barplot(x=country_counts.values, y=country_counts.index)
plt.title("Топ-10 стран по количеству персон")
plt.xlabel("Количество персон")
plt.ylabel("Страна")
plt.show()

Выводы

  1. Датасет успешно загружен и очищен от пропусков.
  2. Наибольшее количество персон принадлежит к профессии Artist и Politician.
  3. Средний возраст смерти составляет ~6070 лет.
  4. Основной способ смерти — natural causes, но встречаются также homicide, suicide, accident и capital punishment.
  5. Больше всего персон связано с Францией, Германией, Великобританией и США.

Контрольные вопросы

1. Какие основные типы данных поддерживает Pandas DataFrame?
Pandas поддерживает числовые типы (int, float), строки (object), даты (datetime), булевы значения и категориальные данные.

2. Для чего используется метод describe()?
Для получения основных статистических характеристик по данным (среднее, минимум, максимум, квартили и т.д.).

3. Как можно отобразить пропуски в данных?
С помощью методов isnull(), sum() или визуализации тепловой карты.

4. В чём разница между value_counts() и groupby()?

  • value_counts() считает частоту уникальных значений в Series.
  • groupby() позволяет агрегировать данные по категориям и выполнять разные операции (сумма, среднее и др.).

5. Какие библиотеки используются для визуализации?
matplotlib и seaborn.