Найти тему

Статистика пожаров в R

Оглавление

Эта информация будет интересна узкому кругу специалистов, занимающихся вопросами анализа статистики пожаров. А именно, только тем кто решится анализировать статистику в программной среде R.

Для освоения материалов понадобится, прежде всего, иметь доступ к базе данных с карточками учета пожаров (эта информация не секретная, но и в открытом доступе её пока нет). Выборки из базы данных можно делать средствами Microsoft Access. И собственно сама программная среда R (с оболочкой RStudio) нужна для статистической обработки.

Количество пожаров по районам города и месяцам

1. SQL-запрос на выбор данных по субъекту Российской Федерации

SELECT F2 AS Part, F5 AS Dates
FROM FR2019
WHERE (F1=1176) AND AND (F4=0);

Запрос выполняет выборку ( SELECT ) по двум показателям: F2 - код района и F5 - дата пожара. Выборка из базы данных FR2019. По следующим условиям ( WHERE ): F1 - код региона (в данном случае 1176 - Забайкальский край), F4 - номер дополнительной карточки, который для корректности результатов должен быть равен нулю.

Результаты запроса следует сохранить в файл, предлагаю использовать формат CSV.

2. Код R

Далее в R выполняются обязательные действия по предварительной обработке данных, которые можно было бы сделать и в SQL (кому как удобнее).

2.1 Чтение данных

Предположим, что файл с данными находится в папке Data:

v <- read.csv2("Data/Zabaykal.csv", header = T, sep = ";") # Забайкалье

Продвигаясь последовательно слева направо, разберем, что происходит при выполнении предыдущей строки кода:
v - переменная, в которую сохраняются считанные из файла Zabaykal.csv данные (тип переменной - data.frame);
<- - оператор присвоения, допускается использовать оператор "=" (знак равно), оба оператора в данном случае будут выполнять идентичные действия;
read.csv2( ) - функция для чтения из файлов формата CSV, содержит следующие параметры:
"Data/Zabaykal.csv" - имя файла с данными;
header = T - параметр указывает, что в исходном файле есть строка заголовков, T - сокращение от TRUE, допускаются оба варината написания;
sep = ";" - символ разделитель данных;
# Забайкалье - текст строки после знака # воспринимается R как комментарий.

После проведения действий описанных далее, должен получится следующий график:

Количество пожаров по месяцам 2019 года по административным районам г. Читы: 
2-Центральный; 3-Ингодинский; 4-Железнодорожный; 5-Черновский
Количество пожаров по месяцам 2019 года по административным районам г. Читы: 2-Центральный; 3-Ингодинский; 4-Железнодорожный; 5-Черновский

Код R

library(ggplot2); library(doBy); library(lubridate)
v <- read.csv2("Data/Zabaykal.csv", header = T, sep = ";") # Забайкалье
v$Dates <- dmy_hms(v$Dates) # Преобразование даты
v$Months <- as.factor(month(v$Dates)) # Месяцы
v <- v[v$Part < 7,]
v$Part <- as.factor(v$Part)
g <- summaryBy(Months ~ Part + Months, data = v, FUN = length)
names(g) <- c("Район", "Месяц", "Пожары")
ggplot(data = g, aes(Месяц, Пожары, group = Район, col = Район)) +
geom_point(size = 2) + geom_line(size = 1.0)

Разберем, какие действия выполняются этим кодом.

Функция library( ) - подключает дополнительные пакеты с инструментами.
ggplot2 - пакет для послойного создания диаграмм;
doBy - пакет содержит функции для групповой обработки данных;
lubridate - пакет для работы с показателями даты и времени.

Использование пакетов позволяет расширять базовые возможности R. Любой пользователь R может самостоятельно написать собственный пакет инструментов.

v$Dates <- dmy_hms(v$Dates) # Преобразование даты
Знак доллара в R является разделителем. Переменная v в нашем случае содержит таблицу с двумя столбцами (Part и Dates).
v$Dates - указывает, что запись будет производится в столбец Dates.
Функция
dmy_hms() - преобразует дату из текстового формата.

v$Months <- as.factor(month(v$Dates)) # Месяцы
Столбца
Months в таблице v изначально не было. В R можно создавать новые столбцы в таблицах типа data.frame, просто указав имя и присвоив значения данных.
Функция month() возвращает номер месяца в формате целого числа (int).
Функция
as.factor() - преобразует аргумент в фактор.

v <- v[v$Part < 7,]
Из таблицы v удаляются строки с информацией о пожарах, где код района (
Part ) больше семи. По сути происходит сначала выборка из v по условию и последующее присвоение переменной v.
Запятая после семерки тут ставится обязательно.

g <- summaryBy(Months ~ Part + Months, data = v, FUN = length)
summaryBy() функция из пакета doBy вычисляет количество пожаров с группировкой по месяцам и районам ( Months ~ Part ).
Аргумент FUN = указывает какая функция должна использоваться для групповых вычислений. Здесь функция
length, которая определяет количество значений в переменной.
Аргумент data = указывает откуда берутся данные.

names(g) <- c("Район", "Месяц", "Пожары")
Колонкам таблицы v присваиваются новые имена.
Функция c() здесь создает вектор из трех значений.

Функция ggplot() - на основе передаваемых в нее данных строит диаграмму. Алгоритм построения будет рассмотрен отдельно.