TUS 2023 II.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.
Orjinal veri dosyasında Genel/Yabancı Uyruklu ayrımı bazı merkezler için hatalı yazılmıştır. Daha yüksek kontenjanı olan satırın doğru olduğu varsayılarak diğer satır dışlanmıştır.


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

Define a function to plot for a specific BRANCH

func_tus <- function(my_branch) {
  clean_branch_2023 <- clean_tus_2023 %>%
    filter(brans != "ASKERİ SAĞLIK HİZMETLERİ") %>% # 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_2023 %>%
    filter(min != 0) %>%
    summarise(
      min = min(min, na.rm = TRUE),
      max = max(max, na.rm = TRUE)
    )

  doluluk_branch <- clean_branch_2023 %>%
    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_2023 %>%
    filter(min != 0) %>%
    arrange(min) %>%
    slice_head() %>%
    pull(kurum_title)

  highest <- clean_branch_2023 %>%
    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_2023 %>%
    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_2023$doluluk == 100, my_greens[1], my_grays[1]), size = 2.5) +
    geom_point(aes(x = max, y = name), color = ifelse(clean_branch_2023$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_2023$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_2023$doluluk == 100, my_greens[1], my_grays[2]), check_overlap = TRUE) +
    labs(
      title = glue:::glue("TUS 2023/II, <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_2023$brans)

branch_names <- clean_tus_2023 %>%
  filter(brans != "ASKERİ SAĞLIK HİZMETLERİ") %>%
  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_2023_2", paste0(branch_name, ".jpg")),
    dpi = 300,
    width = 9,
    height = 11
  )
}

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