TUS 2024 I.Dönem Sonuçları

Branşlara göre MIN-MAX puanlar

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")

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)
Ali GUNER
Ali GUNER
Professor of Surgery

An academic who engaged in the improvement of scientific methodology/products, and more importantly in the development of the people those who produce science.

Related