Данный отчет состоит из 5 секций:
Код может быть раскрыт при нажатии кнопки “Show”
Итоговая ЗП по вакансии была получена по следующему принципу:
"Зарплата от" указана и "Зарплата до" не указана ~ Итоговая зарплата = "Зарплата от"
"Зарплата от" не указана и "Зарплата до" указана ~ Итоговая зарплата = "Зарплата до"
"Зарплата от" указана и "Зарплата до" указана ~ Итоговая зарплата = среднее значение между зарплатой "от" и "до"
"Зарплата от" не указана и "Зарплата до" не указана ~ Данные не учтены в исследовании
В результате данного действия количество наблюдений в датасете составило 82 175
Курс на момент 28.02.2025:
1 BYR - выведен из обращения, наблюдения удалены из данных
1 EUR = 92.04 RUR
1 KZT = 0.17 RUR
1 USD = 87.70 RUR
1 UZS = 0.01 RUR
1 UAH = 2.11 RUR
1 GEL = 31.16 RUR
В результате данного действия количество наблюдений в датасете составило 82 174
Итоговая зарплата была переведена в Гросс, в зависсимости от указания о том была ли ЗП выдана “на руки” или “до вычета НДФЛ”
Оставим только “живые” вакансии 2024 или 2025 года последней публикации. В результате данного действия количество наблюдений в датасете составило 79 319
Отфильтруем внутрирегиональные выбросы с помошью Метода межквартильного размаха (IQR). В результате данного действия количество наблюдений в датасете составило 76 214
Отфильтруем оставшиеся значения, которые ниже МРОТ для каждого из регионов. В результате данного действия количество наблюдений в датасете составило 75 568
Для рассмотрения в разрезе Регионов (смотр. пункт 4) данные были исследованы на предмет распределения вакансий по Регионам. Из Рис.1 следует, что в некоторых регионах было опубликовано недостаточное количество вакансий, что делает невозможным ссылаться на них при формулировке выводов о каждом конкретном Регионе. В связи с этим для исследования по 4 пункту данные были обрезаны по условию: Не менее 50 вакансий на Регион. В результате данного действия были отфильтрованы данные по 6 регионам и итоговое количество наблюдений в датасете составило 74 456
library(dplyr)
library(stringr)
library(ggplot2)
library(readr)
library(scales)
library(plotly)
library(lubridate)
#Скачиваем данные по заработным платам по функциональному направлению "Юрист". Данные разделены по ФО и регионам
msc_spb_l = read_csv("~/Desktop/SSC/Исследование_ЗП_2025/Lawyer/csv/lawyer_msc_mscobl_spb_lenobl_27.01.2025.csv")
all_l = read_csv("~/Desktop/SSC/Исследование_ЗП_2025/Lawyer/csv/lawyer_centr_dalnevost_juzhn_SKFO_privolzhsk_uralsk_sibir_27.01.2025.csv")
mrot = read_csv("~/Desktop/SSC/Исследование_ЗП_2025/МРОТ.csv")
mrot = na.omit(mrot)
mrot$Регион = str_squish(mrot$Регион)
#Переименуем регионы г.Санкт-Петербург и г. Москва
msc_spb_l$Регион = if_else(msc_spb_l$Город == "Санкт-Петербург","Санкт-Петербург", msc_spb_l$Регион)
msc_spb_l$Регион = if_else(msc_spb_l$Город == "Москва","Москва", msc_spb_l$Регион)
#msc_spb_l$Регион %>% unique()
#all_l$Регион %>% unique()
#Склеим всё в один большой датасет
law = rbind(msc_spb_l, all_l)
#Избавимся от возможных дупликатов одних и тех же данных
#hr$`Страница вакансии на HeadHunter` %>% unique() %>% length()
#Проверим количество регионов
#law$Регион %>% unique() %>% length()
#regions_list = law$Регион %>% unique()
#regions_list = as.data.frame(regions_list)
#names(regions_list)[names(regions_list) == "regions_list"] = "regions_list_re"
#anti_list = anti_join(regions_list_re, regions_list)
law = law %>% distinct()
rm(msc_spb_l, all_l)
#Отбираем ценные для нас колонки
law = law[c("Регион","Город","Название вакансии","Страница вакансии на HeadHunter", "Специализации вакансии","Дата создания","Дата последней публикации","Дата архивации","Зарплата от","Зарплата до","Валюта зарплаты","Зарплата указана")]
#Посмотрим не попали ли к нам не относящиеся к исследованию вакансии
#law$`Специализации вакансии` %>% unique()
#law %>% filter(law$`Специализации вакансии` == "Автослесарь, автомеханик")
#law %>% filter(law$`Специализации вакансии` == "Арт-директор, креативный директор")
#law %>% filter(law$`Специализации вакансии` == "Хостес")
#law %>% filter(law$`Специализации вакансии` == "Машинист")
#law %>% filter(law$`Специализации вакансии` == "Механик")
#law %>% filter(law$`Специализации вакансии` == "Врач)
#Очистим данные от лишних строк
law = law %>% filter(str_detect(law$`Название вакансии`, "Юрист|ЮРИСТ|юрист|Юрисконс|юрисконс|ЮРИСКОНС|Юристконс|юристконс|ЮРИСТКОНС|Право|ПРАВО|право|Legal|LEGAL|legal|Law|law|LAW|Soliciter|soliciter|SOLICITER|Contract|contract|CONTRACT"))
regions_count = law %>%
group_by(Регион) %>%
summarise(count = n())
regions_count = regions_count %>% left_join(mrot)
regions_count_min = regions_count %>% filter(regions_count$count < 50)
regions_count_min = regions_count_min %>% dplyr:: select(Регион)
g1 = ggplot(regions_count, aes(x = reorder(Регион, count), y = count)) +
geom_col(fill = "steelblue") +
coord_flip() +
labs(
title = "Рис.1 Количество вакансий функции Юрист по регионам",
x = "Регион",
y = "Количество вакансий"
) +
theme_minimal() +
theme(
axis.text.y = element_text(size = 12),
axis.text.x = element_text(size = 12),
axis.title = element_text(size = 14),
plot.title = element_text(size = 16, hjust = 0),
plot.title.position = "plot"
)
g1
rm(g1)
#Посчитаем среднюю заработную плату по вилке "От" и "До"
law = law %>% mutate(`Итоговая зарплата` = case_when((law$`Зарплата от` == "не указана" & law$`Зарплата до` == "не указана" ) ~ "0", (law$`Зарплата от` == "не указана" & law$`Зарплата до` != "не указана") ~ law$`Зарплата до`, (law$`Зарплата до` == "не указана" & law$`Зарплата от` != "не указана") ~ law$`Зарплата от`, (law$`Зарплата до` != "не указана" & law$`Зарплата от` != "не указана") ~ "1.01"))
#law %>% filter(law$`Итоговая зарплата` == 0) %>% count()
law$`Итоговая зарплата` = as.numeric(law$`Итоговая зарплата`)
law$`Зарплата от` = as.numeric(law$`Зарплата от`)
law$`Зарплата до` = as.numeric(law$`Зарплата до`)
law$`Итоговая зарплата` = if_else(law$`Итоговая зарплата` == 1.01, rowMeans(law[9:10]), law$`Итоговая зарплата`)
#law %>% filter(law$`Итоговая зарплата` == 0) %>% count()
#Количество нулей не изменилось с предыдущего шага, можем избавиться от всех нулевых значений
law = law %>% filter(`Итоговая зарплата` != 0)
#
#law$`Валюта зарплаты` %>% unique()
#law %>% filter(law$`Валюта зарплаты` == "KZT")
#1)
law$`Итоговая зарплата` = if_else(law$`Валюта зарплаты` == "EUR",law$`Итоговая зарплата`*92.04 ,law$`Итоговая зарплата`)
law$`Итоговая зарплата` = if_else(law$`Валюта зарплаты` == "KZT",law$`Итоговая зарплата`*0.17 ,law$`Итоговая зарплата`)
law$`Итоговая зарплата` = if_else(law$`Валюта зарплаты` == "BYR",law$`Итоговая зарплата`*0 ,law$`Итоговая зарплата`)
law$`Итоговая зарплата` = if_else(law$`Валюта зарплаты` == "USD",law$`Итоговая зарплата`*87.70 ,law$`Итоговая зарплата`)
law$`Итоговая зарплата` = if_else(law$`Валюта зарплаты` == "UZS",law$`Итоговая зарплата`*0.01 ,law$`Итоговая зарплата`)
law$`Итоговая зарплата` = if_else(law$`Валюта зарплаты` == "UAH",law$`Итоговая зарплата`*2.11 ,law$`Итоговая зарплата`)
law$`Итоговая зарплата` = if_else(law$`Валюта зарплаты` == "GEL",law$`Итоговая зарплата`*31.16 ,law$`Итоговая зарплата`)
law = law %>% filter(`Итоговая зарплата` != 0)
#2)
law$`Итоговая зарплата` = if_else(law$`Зарплата указана` == "на руки", law$`Итоговая зарплата`/87*100, law$`Итоговая зарплата`)
g2 = ggplot(data = law) +
geom_point(aes(x = reorder(`Название вакансии`, `Итоговая зарплата`), y = `Итоговая зарплата`), alpha = 0.9, size = 1.5, color = "steelblue") +
labs(title = "Распределение зп по функции: Юрист", x = "", y = "ЗП") +
scale_y_continuous(labels = label_number(scale = 1e0, suffix = "")) +
scale_x_discrete(labels = " ") +
theme_minimal()
#g2
rm(g2)
Посмотрим на динамику спроса на труд (по дате последней публикации) в течение года. На Рис.2 представлен график изображающий изменение количества вакансий по месяцам 2024 года. На графике также подписана средняя заработная плата, соответствующая каждому месяцу. Данный грaфик показывает отношение спроса на труд и его стоимости
law$`Дата создания` = dmy(law$`Дата создания`)
law$`Дата последней публикации` = dmy(law$`Дата последней публикации`)
law$`Дата архивации` = dmy(law$`Дата архивации`)
#sum(if_else(year(law$`Дата последней публикации`) == 2024|year(law$`Дата последней публикации`) == 2025, FALSE, TRUE))
law$`Год последней публикации` = year(law$`Дата последней публикации`)
law = law %>% filter(law$`Год последней публикации`== 2024 | law$`Год последней публикации`== 2025)
days_count = law %>% group_by(`Дата последней публикации`) %>% summarise(n = n())
g7 = ggplot(days_count) + geom_line(aes(x = `Дата последней публикации`, y = n), color = "steelblue") +
xlab("") +
ylab("Количество вакансий") +
scale_y_continuous(labels = scales::comma) +
theme_minimal()
#g7
rm(g7)
law_outliers = law
law_outliers = law_outliers %>% filter(`Итоговая зарплата` >= quantile(law_outliers$`Итоговая зарплата`, 0.1), `Итоговая зарплата` <= quantile(law_outliers$`Итоговая зарплата`, 0.9))
law_outliers = law_outliers %>% left_join(mrot)
#is.na(law_outliers$МРОТ) %>% sum()
law_outliers = law_outliers %>% filter(`Итоговая зарплата` >= МРОТ)
#krsn = law %>% filter(Регион == "Краснодарский край")
#krsn$`Итоговая зарплата` = round(krsn$`Итоговая зарплата`)
#krsn = krsn %>%
# group_by(Регион) %>% mutate(
# Q1 = quantile(`Итоговая зарплата`, 0.25, na.rm = TRUE),
# Q3 = quantile(`Итоговая зарплата`, 0.75, na.rm = TRUE),
# IQR_value = Q3 - Q1,
# lower_bound = Q1 - 1.5 * IQR_value,
# upper_bound = Q3 + 1.5 * IQR_value
# ) %>%
# Фильтруем строки, оставляя только значения, находящиеся в пределах установленных границ
# filter(`Итоговая зарплата` >= lower_bound, `Итоговая зарплата` <= upper_bound) %>%
# ungroup() # Убираем группировку, возвращаясь к исходной структуре данных
# Удаляем вспомогательные столбцы, если они больше не нужны
law$`Итоговая зарплата` = round(law$`Итоговая зарплата`)
law = law %>%
group_by(Регион) %>% mutate(
Q1 = quantile(`Итоговая зарплата`, 0.25, na.rm = TRUE),
Q3 = quantile(`Итоговая зарплата`, 0.75, na.rm = TRUE),
IQR_value = Q3 - Q1,
lower_bound = Q1 - 1.5 * IQR_value,
upper_bound = Q3 + 1.5 * IQR_value
) %>%
# Фильтруем строки, оставляя только значения, находящиеся в пределах установленных границ
filter(`Итоговая зарплата` >= lower_bound, `Итоговая зарплата` <= upper_bound) %>%
ungroup() %>% # Убираем группировку, возвращаясь к исходной структуре данных
# Удаляем вспомогательные столбцы, если они больше не нужны
dplyr::select(-Q1, -Q3, -IQR_value, -lower_bound, -upper_bound)
law = law %>% left_join(mrot)
law = law %>% filter(`Итоговая зарплата` >= МРОТ)
weeks_count = days_count %>% group_by(year = year(`Дата последней публикации`),week = week(`Дата последней публикации`)) %>% summarise(cnt = sum(n))
weeks_count = weeks_count[1:53,]
g8 = ggplot(weeks_count) + geom_line(aes(x = week, y = cnt, color = factor(year)),show.legend = FALSE,) +
labs(title = "Распределение количества вакансий по неделям, 2024", x = "", y = "Количество вакансий") +
scale_color_discrete(name = "Год") +
scale_y_continuous(labels = scales::comma) +
scale_x_continuous(breaks = c(1, 10, 20, 30, 40, 50),
labels = c("1 нед\n Янв","10 нед\n Мар","20 нед\n Май","30 нед\n Июл","40 нед\n Окт","50 нед\n Дек")) +
theme_minimal()
#g8
rm(g8)
months_count = days_count %>% group_by(year = year(`Дата последней публикации`),month_1 = month(`Дата последней публикации`)) %>% summarise(cnt = sum(n))
months_wage = law %>% group_by(year = year(`Дата последней публикации`),month_1 = month(`Дата последней публикации`)) %>% summarise(wage = median(`Итоговая зарплата`))
months_wage = months_wage[,3]
months_count = months_count %>% cbind(months_wage)
months_count = months_count %>% filter(year == 2024)
g9 = ggplot(months_count) +
geom_line(aes(x = month_1, y = cnt), show.legend = FALSE, color = "steelblue") +
labs(title = " Рис.2 Распределение количества вакансий по месяцам и соответствующая месяцу медианная ЗП, 2024", x = "", y = "Количество вакансий") +
scale_y_continuous(labels = scales::comma) +
scale_x_continuous(breaks = 1:12, labels = c("Янв", "Фев", "Мар","Апр", "Май", "Июн","Июл", "Авг", "Сен","Окт", "Ноя", "Дек")) +
geom_label(aes(x = month_1, y = cnt, label = paste0(round(wage/1000,3), "K RUB")),
size = 3, vjust = -0.5, fill = "white", color = "black") +
theme_minimal() +
theme(
axis.text.y = element_text(size = 12),
axis.text.x = element_text(size = 12),
axis.title = element_text(size = 14),
plot.title = element_text(size = 16, hjust = 0),
plot.title.position = "plot"
)
g9
rm(days_count, months_count, weeks_count, g9)
Промежуточный вывод: Из Рис.2 видно, что график имеет куполо-образную форму, наименьшее число вакансий публикуется в январе и декабре, что вероятно связано с новогодними праздниками. После января их количество начинает расти, пока не достигает пика в Июле, когда количество вакансий почти в 2 раза превышает декабрьское. После достижения пикового значения число вакансий начинает уменьшаться, пока не достигает своего минимума. Стоимость труда неравномерно возрастает, визуально не зависмимо от спроса.
Посмотрим на общий уровень заработной платы по функции “Юрист”
average_regions_law = law %>% group_by(Регион) %>% summarise(`Средняя зарплата в регионе` = mean(`Итоговая зарплата`))
average_regions_law = average_regions_law %>% arrange(average_regions_law$`Средняя зарплата в регионе`)
#average_regions_law %>% slice_min(average_regions_law$`Средняя зарплата в регионе`, prop = 0.1)
#Точечно проверим верность результатов
acc_altay = law %>% filter(law$Регион == "Алтайский край")
#median(acc_altay$`Итоговая зарплата`)
acc_ivanov = law %>% filter(law$Регион == "Ивановская область")
#median(acc_ivanov$`Итоговая зарплата`)
acc_kostrom = law %>% filter(law$Регион == "Костромская область")
#median(acc_kostrom$`Итоговая зарплата`)
rm(acc_altay, acc_ivanov, acc_kostrom)
g3 = ggplot(law, aes(x=`Итоговая зарплата`)) +
geom_histogram(aes(y=..density..),
binwidth=.5,
colour="black", fill="white") +
geom_density(alpha=.2, fill="#FF6666")
#g3
rm(g3)
# Вычисляем показатели
mean_val = mean(law$`Итоговая зарплата`, na.rm = TRUE)
median_val = median(law$`Итоговая зарплата`, na.rm = TRUE)
q1 = quantile(law$`Итоговая зарплата`, 0.25, na.rm = TRUE)
q3 = quantile(law$`Итоговая зарплата`, 0.75, na.rm = TRUE)
# Вычисляем плотность для определения максимального значения по y
dens = density(law$`Итоговая зарплата`, na.rm = TRUE)
ymax = max(dens$y)
g4 <- ggplot(law, aes(x = `Итоговая зарплата`)) +
geom_density() +
geom_vline(xintercept = mean_val, color = "red4", linetype = "dashed", size = 1) +
geom_vline(xintercept = median_val, color = "navy", linetype = "dashed", size = 1) +
geom_vline(xintercept = q1, color = "forestgreen", linetype = "dashed", size = 1) +
geom_vline(xintercept = q3, color = "forestgreen", linetype = "dashed", size = 1) +
annotate("text", x = mean_val, y = ymax * 0.2,
label = paste("Среднее:", round(mean_val)),
color = "red4", angle = 90, vjust = -0.5, size = 4.5) +
annotate("text", x = median_val, y = ymax * 0.2,
label = paste("Медиана:", round(median_val)),
color = "navy", angle = 90, vjust = -0.5, size = 4.5) +
annotate("text", x = q1, y = ymax * 0.2,
label = paste("1-й квартиль:", round(q1)),
color = "forestgreen", angle = 90, vjust = -0.5, size = 4.5) +
annotate("text", x = q3, y = ymax * 0.2,
label = paste("3-й квартиль:", round(q3)),
color = "forestgreen", angle = 90, vjust = -0.5, size = 4.5) +
labs(title = "Рис.3 Плотность распределения ЗП по функции: Юрист",
x = "Итоговая зарплата", y = "Плотность") +
scale_y_continuous(labels = NULL, breaks = NULL) +
theme_minimal() +
theme(
axis.text.y = element_text(size = 12),
axis.text.x = element_text(size = 12),
axis.title = element_text(size = 14),
plot.title = element_text(size = 16, hjust = 0),
plot.title.position = "plot"
)
g4
rm(g4)
Промежуточный вывод: Данный график показывает, что первые 50% зарплат по функции “Юрист” распределены от уровня МРОТ до 70 000 рублей, последующие 25% распределены от 70 000 до 92 000 рублей, а оставшиеся 25% от 92 000 до 200 000 рублей. После пика в 1ом квартиле плотность распределения убывает с ростом уровня зарплат. Средняя заработная плата для функции “Юрист” по всем регионам = 76 036 Руб. Регулярные пики могут быть обусловлены склонностью людей к размещению вакансий с целочисленными, “круглыми” зарплатами. Также на графике хорошо видны свойства медианы, значение которой равно 68 966 Руб., она не восприимчива к выбросам и в отличии от среднего не завысит/занизит нам результаты. Поэтому для рссмотрения зарплат в рамках регионов будем использовать Медиану.
Взглянем на распределение заработных плат по регионам
#Отфильтруем регионы с недостатком данных:
law = law %>% filter(!law$Регион %in% regions_count_min$Регион)
set.seed(88)
palette = sample( c("thistle2", "peachpuff2", "lightblue2", "darkseagreen2"), size = 79, replace = TRUE )
df_medians = law %>%
group_by(Регион) %>%
summarize(med = median(`Итоговая зарплата`, na.rm = TRUE)/1000)
df_medians$med = round(df_medians$med)
df_medians_new = df_medians %>% left_join(regions_count)
#WriteXLS("df_medians", ExcelFileName = "df_medians_lawyer.xls")
g5 = ggplot(law, aes(x = `Итоговая зарплата` , y = reorder(Регион,`Итоговая зарплата`, FUN = median), fill = Регион)) +
labs(title = "Рис.4 Распределение зп по функции: Юрист", x = "Итоговая зарплата", y = "Плотность") +
geom_boxplot(show.legend = FALSE) + theme_minimal() + scale_fill_manual(values = palette) +
geom_text(
data = df_medians,
aes(x = med, y = Регион, label = paste(round(med),"т. RUB")),
vjust = 0.5,
hjust = 0.5,
color = "black",
size = 3.5,
fontface = "bold"
) +
theme(
axis.text.y = element_text(size = 12),
axis.text.x = element_text(size = 12),
axis.title = element_text(size = 14),
plot.title = element_text(size = 16, hjust = 0),
plot.title.position = "plot"
)
g5
rm(g5)
Промежуточный вывод: Из графика видно, что в рамках региона разброс зарплат в целом не большой, однако с ростом медианной зарплаты разброс также увеличивается. Наибольшие зарплаты принадлежат в основном регионам Дальневосточного ФО, Москве и Санкт-Петербургу. Равный уровень медианных зарплат обуславливается склонностью компаний часто указывать одни и те же значения заработных плат, которые после всех видоизменений (приведению к Гросс, переводу в рубли) перестают быть круглыми.
#rm(palette, df_medians)
#rm(palette, df_medians)
median_regions_law = law %>% group_by(Регион) %>% summarise(`Медианная зарплата в регионе` = median(`Итоговая зарплата`))
median_regions_law = median_regions_law %>% arrange(median_regions_law$`Медианная зарплата в регионе`)
#median_regions_law %>% slice_min(median_regions_law$`Медианная зарплата в регионе`, prop = 0.2)
medians = median_regions_law %>% slice_min(median_regions_law$`Медианная зарплата в регионе`, prop = 0.12)
medians = medians[,1]
acc_boxplot = law %>% filter(law$Регион %in% medians$Регион | (law$Регион == "Санкт-Петербург"| law$Регион == "Москва"))
df_medians = acc_boxplot %>%
group_by(Регион) %>%
summarize(med = median(`Итоговая зарплата`, na.rm = TRUE)/1000)
Рассмотрим подробней регионы с наименьшей медианной зарплатой (нижние 10%) и сравним их с Москвой и Санкт-Петербургом:
# Определяем порядок уровней (если требуется)
acc_boxplot$Регион = factor(acc_boxplot$Регион, levels = levels(reorder(acc_boxplot$Регион, acc_boxplot$`Итоговая зарплата`, FUN = median)))
# Создаем именованный вектор цветов
region_colors = c(
"Тамбовская область" = "darkseagreen2",
"Республика Северная Осетия-Алания" = "peachpuff2",
"Республика Алтай" = "peachpuff2",
"Республика Мордовия" = "thistle2",
"Республика Марий Эл" = "thistle2",
"Курганская область" = "lightblue2",
"Смоленская область" = "lightblue2",
"Костромская область" = "darkseagreen2",
"Республика Хакасия" = "thistle2",
"Санкт-Петербург" = "lightblue2",
"Москва" = "lightblue2"
)
g6 = ggplot(acc_boxplot, aes(x = `Итоговая зарплата`, y = Регион, fill = Регион)) +
labs(title = "Рис.5 Распределение зп по функции: Юрист",
x = "Итоговая зарплата", y = "Регион") +
geom_boxplot(show.legend = FALSE) +
theme_minimal() +
scale_fill_manual(values = region_colors) +
geom_text(
data = df_medians,
aes(x = med, y = Регион, label = paste(round(med),"т. RUB")),
vjust = 0.5,
hjust = 0.7,
color = "black",
size = 3.4,
fontface = "bold"
) +
scale_x_continuous(labels = function(x) format(x, scientific = FALSE)) +
theme(
axis.text.y = element_text(size = 12),
axis.text.x = element_text(size = 12),
axis.title = element_text(size = 14),
plot.title = element_text(size = 16, hjust = 0),
plot.title.position = "plot"
)
g6
Промежуточный вывод: Наименьшие зарплаты принадлежат в
основном регионам: Республика Северная Осетия-Алания, Тамбовская
область, Республика Мордовия, Курганская область, Республика Алтай,
Республика Марий Эл, Костромская область, Смоленская область, Республика
Хакасия. Разброс зарплат по функции “Юрист” в большинстве из них не
превышает 20 000 руб, тогда как в Санкт-Петербурге и Москве разброс
превышает 30 000 руб.
#rm(df_medians, acc_boxplot)
rm(g6, medians)
По итогу данного исследования можно сделать следующие выводы:
Вакансии по функции “Юрист” публикуются неравномерно в течение года. Большего всего вакансий публикуется в Июле. Меньше всего публикуется в Декабре. Стоимость труда неравномерно возрастает, визуально практически не зависмимо от спроса.
Первые 50% зарплат по функции “Юрист” распределены от уровня МРОТ до 70 000 рублей. После пика в 1ом квартиле плотность распределения убывает с ростом уровня зарплат. Средняя заработная плата для функции “Юрист” по всем регионам = 76 036 Руб. Медианная заработная плата = 68 966 Руб.
В рамках региона разброс зарплат в целом относительно не большой, однако с ростом медианной зарплаты разброс увеличивается. Наибольшие зарплаты принадлежат в основном Москве, Санкт-Петербургу и регионам Дальневосточного ФО. По этой причине рекомендуется исключить данные регионы из рассмотрения
Наименьшие зарплаты принадлежат регионам: Республика Северная Осетия-Алания, Тамбовская область, Республика Мордовия, Курганская область, Республика Алтай, Республика Марий Эл, Костромская область, Смоленская область, Республика Хакасия