Branş-spesific sonuçları görmek için Outputs sayfasına;
Merak edenler kodları görmek isterse de GitHub sayfasına gidebilirsiniz.
Veriler ÖSYM sayfasından .pdf dosyası olarak alınıp, R yazılımı ile düzenlenmiştir.
Veri seti ile ilgili farklı bir değerlendirme isterseniz Twitter üzerinden ya da iletişim formu ile ulaşabilirsiniz. Örn: Kurum spesific veriler.
Yabancı Uyruklu kontenjanları verilere dahil edilmemiştir.
Onlar için de ayrı bir figüre hazırlanabilir.
Verilerde hata varsa muhtemel ÖSYM pdf dosyası ya da kod kaynaklıdır.
R Codes
Import libraries
library(tidyverse)
library(pdftools)
library(glue)
library(ggtext)
my_greens <- c("#13bf13", "#009900")
my_grays <- c("#C0C0C0", "#909090", "#696969")
my_reds <- c("#ff6666")
my_white <- c("#E8E8E8")
Import dataset from ÖSYM link
#
# kadro_tus <- pdftools::pdf_text(pdf = here::here("datasets", "minmax17112023.pdf")) %>%
# as_tibble()
kadro_tus <- pdftools::pdf_text(pdf = here::here("datasets", "minmax_td03062024.pdf")) %>%
as_tibble()
Clean dataset
kadro_tus_init <- kadro_tus %>%
separate_rows(value, sep = "\n") %>%
mutate(value = str_squish(value)) %>%
filter(value != "") %>%
mutate(value = str_remove_all(value, " dipnot \\d")) %>%
filter(!str_detect(value, "Kontenjan|2024-TUS")) %>%
extract(value, into = c("kurum", "b"), "(.*)/(.*)") %>%
extract(b, into = c("brans", "tur", "d"), "(.*)(Yabancı Uyruklu|Genel)(.*)") %>%
mutate(
d = str_trim(d),
brans = str_trim(brans)
) %>%
separate(d, into = c("kontenjan", "yerlesen", "bos", "min", "max"), sep = " ") %>%
separate(kurum, into = c("number", "kurum"), sep = "^\\d+\\s") %>%
select(-number) %>%
mutate(
kurum = str_replace_all(kurum, "Sağlık Bilimleri Üniversitesi", "SBÜ"),
kurum = str_replace_all(kurum, "Eğitim ve Araştırma Hastanesi", "EAH"),
kurum = str_replace_all(kurum, "Tıp Fakültesi", "Tıp F."),
kurum = str_remove_all(kurum, " \\(ANKARA\\)")
) %>%
mutate(across(min:max, ~ if_else(. == "--", NA_character_, .))) %>%
mutate(across(min:max, ~ str_replace_all(., ",", "."))) %>%
mutate(across(kontenjan:max, ~ as.numeric(.))) %>%
mutate(across(min:max, ~ round(., 2)))
clean_tus_2024 <- kadro_tus_init %>%
mutate(
min = if_else(is.na(min), 0, min),
doluluk = 100 * round(yerlesen / kontenjan, 2),
kurum_title = if_else(!str_detect(kurum, "SBÜ|EAH"), str_to_title(kurum), kurum),
equal_kucuk_puan = if_else(min != max, min, NA_real_),
kurum_title = str_remove_all(kurum_title, "Tayfur Ata Sökmen "),
kurum_title = str_remove_all(kurum_title, "Prof. Dr. ")
)
Define a function to plot for a specific BRANCH
func_tus <- function(my_branch) {
clean_branch_2024 <- clean_tus_2024 %>%
filter(brans != "ASKERİ SAĞLIK HİZMETLERİ") %>% # There is no position
filter(brans != "HAVA VE UZAY HEKİMLİĞİ") %>% # There is no position
filter(
tur == "Genel", # There are some errors in yabancı uyruklu-genel data in the dataset
brans == {{ my_branch }}
) %>%
group_by(kurum) %>% # because of the errors, I chose only higher number of position as "GENEL" and ignored the other
arrange(desc(kontenjan)) %>%
slice(1) %>%
ungroup()
minmax_branch <- clean_branch_2024 %>%
filter(min != 0) %>%
summarise(
min = min(min, na.rm = TRUE),
max = max(max, na.rm = TRUE)
)
doluluk_branch <- clean_branch_2024 %>%
summarise(
sum_kontenjan = sum(kontenjan, na.rm = TRUE),
sum_yerlesen = sum(yerlesen, na.rm = TRUE)
) %>%
mutate(doluluk = paste0("%", round(100 * sum_yerlesen / sum_kontenjan, 1)))
lowest <- clean_branch_2024 %>%
filter(min != 0) %>%
arrange(min) %>%
slice_head() %>%
pull(kurum_title)
highest <- clean_branch_2024 %>%
filter(min != 0) %>%
arrange(desc(max)) %>%
slice_head() %>%
pull(kurum_title)
my_subtitle <- glue::glue("Doluluk: {doluluk_branch$doluluk} ({doluluk_branch$sum_yerlesen}/{doluluk_branch$sum_kontenjan})<br><br>
En yüksek: **{highest}** ({minmax_branch$max})<br><br>
En düşük: {lowest} ({minmax_branch$min})")
branch_plot <- clean_branch_2024 %>%
mutate(
color = case_when(
doluluk == 100 ~ my_greens[2],
doluluk == 0 ~ my_reds[1],
TRUE ~ my_grays[2]
),
name = glue::glue("<i style='color:{color}'>{kurum_title}</i> ({yerlesen}\\/{kontenjan})"),
name = fct_reorder(name, min)
) %>%
ggplot(aes(x = min, y = name, fill = color)) +
geom_segment(aes(x = min, xend = max, y = name, yend = name), color = my_grays[3]) +
geom_point(aes(x = min, y = name), color = ifelse(clean_branch_2024$doluluk == 100, my_greens[1], my_grays[1]), size = 2.5) +
geom_point(aes(x = max, y = name), color = ifelse(clean_branch_2024$doluluk == 100, my_greens[2], my_grays[2]), size = 3.5) +
theme_light() +
scale_x_continuous(limits = c(minmax_branch$min - 2, minmax_branch$max + 2), breaks = seq(45, 80, 5)) +
geom_text(aes(x = max, y = name, label = max),
hjust = -.5, size = 3,
color = ifelse(clean_branch_2024$doluluk == 100, my_greens[2], my_grays[2])
) +
geom_text(aes(x = equal_kucuk_puan, y = name, label = equal_kucuk_puan), hjust = 1.5, size = 2.5, color = ifelse(clean_branch_2024$doluluk == 100, my_greens[1], my_grays[2]), check_overlap = TRUE) +
labs(
title = glue:::glue("TUS 2024/I, <span style='color: #95568F;'>{my_branch}</span>"),
subtitle = my_subtitle,
x = "Puan",
y = "",
caption = "<i style='color:#009900'>Yeşil</i> : Kadrolar tam dolu<br><i style='color:#ff6666'>Kırmızı</i>: Kadrolar tam boş<br>kaynak: ÖSYM<br>by @AliGunerMD"
) +
theme(
panel.grid = element_line(color = my_white[1]),
panel.grid.minor.x = element_blank(),
panel.border = element_blank(),
axis.text.y = element_markdown(),
legend.position = "none",
plot.caption = element_markdown(),
plot.title.position = "plot",
plot.title = element_markdown(hjust = .5, size = 14, face = "bold"),
plot.subtitle = element_markdown(hjust = .5)
)
return(branch_plot)
}
use defined function for the BRANCH_NAMES vector
# branch_names <- unique(clean_tus_2024$brans)
branch_names <- clean_tus_2024 %>%
filter(brans != "ASKERİ SAĞLIK HİZMETLERİ") %>%
filter(brans != "HAVA VE UZAY HEKİMLİĞİ") %>%
distinct(brans) %>%
pull(brans)
save_ggplot_for_branch <- function(branch_name) {
branch_plot <- func_tus(my_branch = branch_name)
ggsave(branch_plot,
file = file.path("Outputs_2024_1", paste0(branch_name, ".jpg")),
dpi = 300,
width = 9,
height = 12
)
}
purrr::walk(branch_names, save_ggplot_for_branch)