
- •Глава 1. Анализ предметной области 6
- •Глава 2. Описание набора данных 9
- •Глава 3. Выполнение задания 13
- •Введение
- •Глава 1. Анализ предметной области
- •1.1. Применение языка Python для анализа данных
- •1.2. Синтаксис языка Python
- •1.3. Библиотеки и инструменты для анализа и визуализации данных
- •Глава 2. Описание набора данных
- •2.1. Общая информация о наборе данных
- •2.2. Описание столбцов набора данных
- •2.3. Базовая статистика
- •Глава 3. Выполнение задания
- •3.1. Загрузка первичных данных
- •3.2. Очистка данных
- •3.3. Выполнение запросов для выявления закономерностей
- •3.4. Визуализация данных
- •3.5 Корреляционный и регрессионный анализ
- •Приложение
Приложение
Приложение А.
Блок кода 1. Импорт библиотек
# Импорт библиотек для дальнейшей работы с файлом1 import NumPy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
# Создание DataFrame и запись БД в переменную df df= pd.read_csv('Road Accident Data.csv')
# отображение первых пяти строк БД df.head(5) |
Блок кода 2. Информация о БД
# вывод информации о фрейме данных df, включая количество записей, количество столбцов, типы данных каждого столбца и количество ненулевых значений. df.info() # вывод статистического описания числовых столбцов df.describe() |
Приложение Б.
Блок кода 1. Удаление столбцов
# Удаление небалансированных столбцов. df.drop(columns='Carriageway_Hazards', inplace=True)
|
Блок кода 2. Заполнение отсутствующих значений
# Заполняем отсутствующие значения наиболее часто встречающимися значениями. most_freq_surface_conditions = df['Road_Surface_Conditions'].mode()[0] df['Road_Surface_Conditions'].fillna(most_freq_surface_conditions, inplace=True)
most_freq_road_type = df['Road_Type'].mode()[0] df['Road_Type'].fillna(most_freq_road_type, inplace=True)
# Заменяем значения в столбце "Accident_Severity". df['Accident_Severity'].replace('Fetal', 'Fatal', inplace=True)
# Удаляем ненужные столбцы. df.drop(columns=['Latitude', 'Longitude','Junction_Control','Local_Authority_(District)','Police_Force'], inplace=True) |
Блок кода 3. Сопоставление состояния
# Сопоставление состояния дорожного покрытия с соответствующими погодными условиями для заполнения недостающих значений conditions_mapping = { 'Dry': 'Fine no high winds', 'Wet or damp': 'Raining no high winds', 'Snow': 'Snowing no high winds', 'Frost or ice': 'Snowing + high winds' }
df['Weather_Conditions'].fillna(df['Road_Surface_Conditions'].map(conditions_mapping), inplace=True) df['Weather_Conditions'].fillna('Other', inplace=True)
|
Приложение В.
Блок кода 1. Происшествия по дням недели
# Подсчет количества происшествий по дням недели day_counts = df['Day_of_Week'].value_counts()
# Преобразование в строку result_str = ', '.join([f"{day}: {count}" for day, count in day_counts.items()])
# Вывод результата print(result_str)
|
Блок кода 2. Происшествия по скоростному режиму
speed_counts = df['Speed_limit'].value_counts()
# Преобразование в строку result_str = ', '.join([f"{speed}: {count}" for speed, count in speed_counts.items()])
# Вывод результата print(result_str)
|
Блок кода 3. Происшествия по датам
date_min = df['Accident Date'].min() date_max = df['Accident Date'].max() print(f"Диапазон дат: от {date_min.date()} до {date_max.date()}")
# Подсчет количества происшествий по датам date_counts = df['Accident Date'].value_counts().sort_index()
# Вывод результата for date, count in date_counts.items(): print(f"{date.date()}: {count}") |
Приложение Г.
Блок кода 1. Диаграмма
# Указываем размерность фигур plt.figure(figsize=(15, 5))
# Создание графика sns.countplot(data=df, x='Road_Surface_Conditions', palette="YlGnBu", hue='Urban_or_Rural_Area')
# Редактирование легенды plt.legend(bbox_to_anchor=(1, 1), loc='center', fontsize='small') |
Блок кода 2. Круговая диаграмма
df['Day_of_Week'].value_counts().plot(kind='pie', autopct='%0.1f%%', explode=[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1], shadow=True, colors=sns.color_palette("YlGnBu"))
plt.title('Percentage of Accidents by Day of the Week') plt.ylabel(' ') |
Блок кода 3. Линейная диаграмма
# Создание линейной диаграммы для расчета процента аварий на каждую дату
plt.figure(figsize=(15,5)) df['Accident Date'] = pd.to_datetime(df['Accident Date']) date_counts = df['Accident Date'].value_counts(normalize=True) * 100 plt.figure(figsize=(10, 5)) sns.lineplot(x=date_counts.index, y=date_counts.values, color=sns.color_palette("YlGnBu")[2]) plt.title('Percentage of Accidents by Date') plt.xlabel('Date') plt.ylabel('Percentage of Accidents')
|