Анализ президентских выборов в России (2018): различия между версиями
Материал из Поле цифровой дидактики
Нет описания правки |
Нет описания правки |
||
| Строка 154: | Строка 154: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Результаты == | ||
=== График 1. Распределение голосов по кандидатам === | === График 1. Распределение голосов по кандидатам === | ||
| Строка 187: | Строка 187: | ||
=== Подтверждение гипотезы === | === Подтверждение гипотезы === | ||
Гипотеза о положительной связи между явкой и поддержкой основного кандидата '''подтвердилась'''. Коэффициент корреляции 0.929 указывает на очень сильную зависимость. | Гипотеза о положительной связи между явкой и поддержкой основного кандидата '''подтвердилась'''. Коэффициент корреляции 0.929 указывает на очень сильную зависимость. | ||
=== Практическая значимость === | |||
* Разработан воспроизводимый R-рецепт для анализа выборов | |||
* Создана методика визуализации электоральной статистики | |||
* Результаты могут использоваться для политологических исследований | |||
== Используемые источники == | |||
* Kaggle - Russian Presidential Elections 2018 Voting Data: https://www.kaggle.com/datasets/valenzione/russian-presidental-elections-2018-voting-data | |||
* Документация R: https://www.r-project.org/ | |||
* Документация ggplot2: https://ggplot2.tidyverse.org/ | |||
[[Категория:ИНДОР-211]] | |||
[[Категория:Работы ИНДОР-211]] | |||
[[Категория:RRecipe]] | |||
[[Категория:BigDataWorks]] | |||
Текущая версия от 10:07, 14 апреля 2026
Анализ президентских выборов в России (2018)
Общая информация
- Авторы: Студентки группы - PolezhaevaMA, Самира Мохаммад
- Дата исследования: 13 апреля 2026
- Источник: Russian Presidential Elections 2018 Voting Data
- Платформа: Kaggle
- Дата публикации: 30 апреля 2018 г.
Исходные данные
- Файл: voting_data_eng.csv (8.9 MB)
- Структура: 94 487 строк (избирательных участков), 23 столбца
- Регионов: 85
- Ссылка: https://www.kaggle.com/datasets/valenzione/russian-presidental-elections-2018-voting-data
Описание исследования
Цель
Проанализировать результаты президентских выборов в России 2018 года на уровне избирательных участков и регионов.
Задачи
- Выявить распределение голосов между кандидатами
- Сравнить явку избирателей по регионам
- Определить регионы-лидеры по количеству голосов за Путина
- Найти связь между явкой и поддержкой основного кандидата
Гипотеза
На участках с более высокой явкой доля голосов за основного кандидата выше, чем на участках с низкой явкой.
Используемые технологии
| Технология | Назначение |
|---|---|
| R 4.5.3 | Язык программирования |
| RStudio | Среда разработки |
| dplyr | Обработка и агрегация данных |
| ggplot2 | Визуализация (создание графика) |
| tidyr | Преобразование форматов данных |
| scales | Форматирование процентов |
Программный код
# АНАЛИЗ ПРЕЗИДЕНТСКИХ ВЫБОРОВ В РОССИИ 2018
library(dplyr)
library(ggplot2)
library(readr)
library(tidyr)
library(scales)
# 1. ЗАГРУЗКА ДАННЫХ
votes <- read_csv("voting_data_eng.csv")
# 2. ПРЕДОБРАБОТКА
votes_clean <- votes %>%
mutate(
total_voters = `Number of voters enlisted`,
Putin_votes = `Putin Vladimir Vladimirovich`,
Putin_share = Putin_votes / total_voters,
Grudinin_share = `Grudinin Pavel Nikolaevich` / total_voters,
Zhirinovskiy_share = `Zhirinovskiy Vladimir Volfovich` / total_voters,
Sobchak_share = `Sobchak Ksenia Anatolyevna` / total_voters,
Yavlinskiy_share = `Yavlinskiy Gregory Alekseivich` / total_voters,
turnout = `Number of valid ballot papers` / total_voters
) %>%
filter(total_voters >= 10, Putin_share <= 1, Putin_share >= 0)
# 3. ГРАФИК 1: КРУГОВАЯ ДИАГРАММА
pie_data <- votes_clean %>%
summarise(
Путин = sum(Putin_votes),
Грудинин = sum(`Grudinin Pavel Nikolaevich`),
Жириновский = sum(`Zhirinovskiy Vladimir Volfovich`),
Собчак = sum(`Sobchak Ksenia Anatolyevna`),
Явлинский = sum(`Yavlinskiy Gregory Alekseivich`)
) %>%
pivot_longer(everything(), names_to = "candidate", values_to = "votes") %>%
mutate(percentage = votes / sum(votes) * 100)
p1 <- ggplot(pie_data, aes(x = "", y = percentage, fill = candidate)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y", start = 0) +
geom_text(aes(label = paste0(round(percentage, 1), "%")),
position = position_stack(vjust = 0.5), size = 5) +
scale_fill_manual(values = c("#1E88E5", "#E53935", "#FFC107", "#8E24AA", "#43A047")) +
labs(title = "Распределение голосов по кандидатам") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))
ggsave("graph1_pie.png", p1, width = 8, height = 8, dpi = 300)
# 4. ГРАФИК 2: ЯВКА ПО РЕГИОНАМ
turnout_by_region <- votes_clean %>%
group_by(region_name) %>%
summarise(turnout = mean(turnout) * 100) %>%
arrange(desc(turnout)) %>% head(20)
p2 <- ggplot(turnout_by_region, aes(x = reorder(region_name, turnout), y = turnout, fill = turnout)) +
geom_bar(stat = "identity") +
scale_fill_gradient(low = "lightblue", high = "darkblue") +
coord_flip() +
labs(title = "Топ-20 регионов по явке", x = "", y = "Явка (%)") +
theme_minimal()
ggsave("graph2_turnout.png", p2, width = 10, height = 8, dpi = 300)
# 5. ГРАФИК 3: ПУТИН vs ЯВКА
p3 <- ggplot(votes_clean, aes(x = turnout * 100, y = Putin_share * 100)) +
geom_point(alpha = 0.1, size = 0.5, color = "steelblue") +
geom_smooth(method = "lm", color = "red", se = TRUE) +
labs(title = "Зависимость доли Путина от явки",
x = "Явка (%)", y = "Доля Путина (%)") +
theme_minimal()
ggsave("graph3_putin_turnout.png", p3, width = 10, height = 6, dpi = 300)
# 6. ГРАФИК 4: ГОЛОСА ЗА ПУТИНА ПО ГОРОДАМ
cities_data <- votes_clean %>%
group_by(region_name) %>%
summarise(votes = sum(Putin_votes) / 1000) %>%
arrange(desc(votes)) %>% head(20)
p4 <- ggplot(cities_data, aes(x = reorder(region_name, votes), y = votes, fill = votes)) +
geom_bar(stat = "identity") +
scale_fill_gradient(low = "lightcoral", high = "darkred") +
coord_flip() +
labs(title = "Голоса за Путина по городам (тыс.)", x = "", y = "Тысяч голосов") +
theme_minimal()
ggsave("graph4_cities.png", p4, width = 12, height = 8, dpi = 300)
# 7. СТАТИСТИКА
total_stats <- votes_clean %>%
summarise(
Путин = round(mean(Putin_share) * 100, 1),
Грудинин = round(mean(Grudinin_share) * 100, 1),
Жириновский = round(mean(Zhirinovskiy_share) * 100, 1),
Явка = round(mean(turnout) * 100, 1)
)
cor_putin_turnout <- cor(votes_clean$Putin_share, votes_clean$turnout)
print(total_stats)
print(paste("Корреляция Путин ↔ Явка:", round(cor_putin_turnout, 3)))
Результаты
График 1. Распределение голосов по кандидатам

Анализ:
- Путин — 79.2% голосов
- Грудинин — 12.1%
- Жириновский — 5.9%
- Собчак — 1.7%
- Явлинский — 1.1%
График 2. Явка по регионам

Анализ:
- Самые высокие показатели явки: Чеченская Республика (95%), Дагестан (92%), Тыва (90%)
- Самые низкие: крупные города (Москва — 65%, Санкт-Петербург — 68%)
График 3. Зависимость доли голосов за Путина от явки

Анализ:
- Корреляция: +0.929 (очень сильная положительная)
- На участках с высокой явкой доля Путина значительно выше
График 4. Количество голосов за Путина по городам

Выводы
Подтверждение гипотезы
Гипотеза о положительной связи между явкой и поддержкой основного кандидата подтвердилась. Коэффициент корреляции 0.929 указывает на очень сильную зависимость.
Практическая значимость
- Разработан воспроизводимый R-рецепт для анализа выборов
- Создана методика визуализации электоральной статистики
- Результаты могут использоваться для политологических исследований
Используемые источники
- Kaggle - Russian Presidential Elections 2018 Voting Data: https://www.kaggle.com/datasets/valenzione/russian-presidental-elections-2018-voting-data
- Документация R: https://www.r-project.org/
- Документация ggplot2: https://ggplot2.tidyverse.org/
