This is an individual assignment, which aims to analyze the ÖSYM data using Tidyverse.

  1. Get the highest max_score programs from each exam_type.

First, we start with setting up the workspace by calling tidyverse and loading the dataframe:

library(tidyverse)
## ── Attaching packages ────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 2.2.1     ✔ purrr   0.2.4
## ✔ tibble  1.4.2     ✔ dplyr   0.7.4
## ✔ tidyr   0.8.0     ✔ stringr 1.3.0
## ✔ readr   1.1.1     ✔ forcats 0.3.0
## ── Conflicts ───────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
load("~/Desktop/ETM 2018 Spring/ETM 58D/Assignments/ÖSYM Individual (20.04)/osym_data_2017_v2.RData")

Then, we print the data to have a brief understanding of the format:

print(osym_data_2017)
## # A tibble: 11,465 x 14
##    program_id university_name  city  faculty_name  program_name  exam_type
##    <chr>      <chr>            <chr> <chr>         <chr>         <chr>    
##  1 100110266  ABANT İZZET BAY… BOLU  Bolu Sağlık … Hemşirelik    YGS_2    
##  2 100110487  ABANT İZZET BAY… BOLU  Bolu Turizm … Gastronomi v… YGS_4    
##  3 100110724  ABANT İZZET BAY… BOLU  Bolu Turizm … Turizm İşlet… YGS_6    
##  4 100130252  ABANT İZZET BAY… BOLU  Bolu Turizm … Turizm İşlet… YGS_6    
##  5 100110433  ABANT İZZET BAY… BOLU  Diş Hekimliğ… Diş Hekimliği MF_3     
##  6 100110609  ABANT İZZET BAY… BOLU  Diş Hekimliğ… Diş Hekimliğ… MF_3     
##  7 100110018  ABANT İZZET BAY… BOLU  Eğitim Fakül… Bilgisayar v… MF_1     
##  8 100110027  ABANT İZZET BAY… BOLU  Eğitim Fakül… Fen Bilgisi … MF_2     
##  9 100110036  ABANT İZZET BAY… BOLU  Eğitim Fakül… İlköğretim M… MF_1     
## 10 100110045  ABANT İZZET BAY… BOLU  Eğitim Fakül… İngilizce Öğ… DİL_1    
## # ... with 11,455 more rows, and 8 more variables: general_quota <chr>,
## #   general_placement <chr>, min_score <dbl>, max_score <dbl>,
## #   val_quota <dbl>, val_placement <dbl>, val_min_score <dbl>,
## #   val_max_score <dbl>

In order to find out max_score programs for each exam type, first we need to find out how many exam types are there using unique() function.

attach(osym_data_2017)
unique(exam_type)
##  [1] "YGS_2" "YGS_4" "YGS_6" "MF_3"  "MF_1"  "MF_2"  "DİL_1" "TS_1" 
##  [9] "TM_3"  "TM_2"  "TS_2"  "TM_1"  "MF_4"  "DİL_3" "MF"    "YGS_5"
## [17] "DİL_2" "YGS_1" "YGS_3"

Now, let’s find the result for exam type MF_4 as an example:

We create a new dataset with just the information of program name, max score and exam type.

osym_data_2017_q1 <- osym_data_2017 %>% select(program_name, 
    max_score, exam_type)

Then, we filter this dataset for MF_4

filtered_by_mf4 <- osym_data_2017_q1 %>% filter(exam_type == 
    "MF_4")

Now, we arrange this new dataset as per the decreasing order of max_score

filtered_by_mf4 %>% arrange(desc(max_score))
## # A tibble: 2,742 x 3
##    program_name                                        max_score exam_type
##    <chr>                                                   <dbl> <chr>    
##  1 Elektrik - Elektronik Mühendisliği (İngilizce)           575. MF_4     
##  2 Elektrik - Elektronik Mühendisliği (İngilizce) (Ta…      569. MF_4     
##  3 Elektrik - Elektronik Mühendisliği (İngilizce) (Ta…      566. MF_4     
##  4 Bilgisayar Mühendisliği (İngilizce)                      563. MF_4     
##  5 Bilgisayar Mühendisliği (İngilizce) (Tam Burslu)         551. MF_4     
##  6 Bilgisayar Mühendisliği (İngilizce) (Tam Burslu)         550. MF_4     
##  7 Elektrik - Elektronik Mühendisliği (İngilizce)           548. MF_4     
##  8 Endüstri Mühendisliği (İngilizce)                        544. MF_4     
##  9 Makine Mühendisliği (İngilizce) (Tam Burslu)             540. MF_4     
## 10 Endüstri Mühendisliği (İngilizce) (Tam Burslu)           540. MF_4     
## # ... with 2,732 more rows

Which shows that for MF_4 exam type, the program with highest max_score is Electrical and Electronics Engineering.

  1. Plot the top 10 programs of İSTANBUL ÜNİVERSİTESİ in terms of total quota in a bar chart.

First we filter our original data to obtain all data for just İSTANBUL ÜNİVERSİTESİ, with descending order of “general_quota”:

osym_data_2017_q2 <- osym_data_2017 %>% filter(university_name == 
    "İSTANBUL ÜNİVERSİTESİ") %>% arrange(desc(as.numeric(general_quota))) %>% 
    slice(1:10)

Then, we create the bar graph as follows:

ggplot(osym_data_2017_q2, aes(x = program_name, y = as.numeric(general_quota), 
    fill = general_quota)) + geom_bar(stat = "identity") + theme(axis.text.x = element_text(angle = 90))

  1. Calculate the fill rate (sum(general_placement)/sum(general_quota)) per city and return the top 10 cities.

osym_data_2017_q3 <- osym_data_2017 %>% select(city,general_placement,general_quota) %>% group_by(city) %>% summarise(fill_rate = sum(general_placement)/sum(general_quota)) %>% arrange(desc(fill_rate)) %>% slice(1:10)

Unfortunately, this code created an error and I couldn’t solve it, so I can’t show a result for this part.

  1. Find full (general_placement == general_quota) Endüstri Mühendisliği programs (use grepl) and draw a scatterplot of min_score vs max_score. Set transparency parameter (alpha) to 0.7. Set program colors according to whether it is a foundation university or state university. (Tip: State university programs ids start with 1, foundation 2, KKTC 3 and other abroad 4. You can use substr function.).

Now, we should see the difference in using “grepl” rather than regular filtering:

ind_eng <- osym_data_2017 %>% filter(grepl("Endüstri Mühendisliği", 
    program_name))
ind_eng_2 <- osym_data_2017 %>% filter(program_name == "Endüstri Mühendisliği")
print(ind_eng)
## # A tibble: 209 x 14
##    program_id university_name  city   faculty_name program_name  exam_type
##    <chr>      <chr>            <chr>  <chr>        <chr>         <chr>    
##  1 106510023  ABDULLAH GÜL ÜN… KAYSE… Mühendislik… Endüstri Müh… MF_4     
##  2 110410161  ADANA BİLİM VE … ADANA  Mühendislik… Endüstri Müh… MF_4     
##  3 100810383  AKSARAY ÜNİVERS… AKSAR… Mühendislik… Endüstri Müh… MF_4     
##  4 100830254  AKSARAY ÜNİVERS… AKSAR… Mühendislik… Endüstri Müh… MF_4     
##  5 110510045  ALANYA ALAADDİN… ANTAL… Mühendislik… Endüstri Müh… MF_4     
##  6 202910887  ALTINBAŞ ÜNİVER… İSTAN… Mühendislik… Endüstri Müh… MF_4     
##  7 202910145  ALTINBAŞ ÜNİVER… İSTAN… Mühendislik… Endüstri Müh… MF_4     
##  8 202910136  ALTINBAŞ ÜNİVER… İSTAN… Mühendislik… Endüstri Müh… MF_4     
##  9 202911161  ALTINBAŞ ÜNİVER… İSTAN… Mühendislik… Endüstri Müh… MF_4     
## 10 202910366  ALTINBAŞ ÜNİVER… İSTAN… Mühendislik… Endüstri Müh… MF_4     
## # ... with 199 more rows, and 8 more variables: general_quota <chr>,
## #   general_placement <chr>, min_score <dbl>, max_score <dbl>,
## #   val_quota <dbl>, val_placement <dbl>, val_min_score <dbl>,
## #   val_max_score <dbl>
print(ind_eng_2)
## # A tibble: 31 x 14
##    program_id university_name   city  faculty_name  program_name exam_type
##    <chr>      <chr>             <chr> <chr>         <chr>        <chr>    
##  1 110410161  ADANA BİLİM VE T… ADANA Mühendislik … Endüstri Mü… MF_4     
##  2 100810383  AKSARAY ÜNİVERSİ… AKSA… Mühendislik … Endüstri Mü… MF_4     
##  3 110510045  ALANYA ALAADDİN … ANTA… Mühendislik … Endüstri Mü… MF_4     
##  4 101011032  ANADOLU ÜNİVERSİ… ESKİ… Mühendislik … Endüstri Mü… MF_4     
##  5 101410833  ATATÜRK ÜNİVERSİ… ERZU… Mühendislik … Endüstri Mü… MF_4     
##  6 101510117  BALIKESİR ÜNİVER… BALI… Mühendislik … Endüstri Mü… MF_4     
##  7 101810202  BAYBURT ÜNİVERSİ… BAYB… Mühendislik … Endüstri Mü… MF_4     
##  8 102910297  ÇUKUROVA ÜNİVERS… ADANA Mühendislik … Endüstri Mü… MF_4     
##  9 103110478  DOKUZ EYLÜL ÜNİV… İZMİR Mühendislik … Endüstri Mü… MF_4     
## 10 103210195  DUMLUPINAR ÜNİVE… KÜTA… Mühendislik … Endüstri Mü… MF_4     
## # ... with 21 more rows, and 8 more variables: general_quota <chr>,
## #   general_placement <chr>, min_score <dbl>, max_score <dbl>,
## #   val_quota <dbl>, val_placement <dbl>, val_min_score <dbl>,
## #   val_max_score <dbl>

With “grepl”, we were able to see all programs that include “Endüstri Mühendisliği”, however regular filtering just shows the programs which are directly named as “Endüstri Mühendisliği”.

After obtaining the data, we find the full programs and make the scatter plot:

full_programs <- ind_eng %>% filter(general_quota == general_placement)
print(full_programs)
## # A tibble: 119 x 14
##    program_id university_name  city  faculty_name  program_name  exam_type
##    <chr>      <chr>            <chr> <chr>         <chr>         <chr>    
##  1 106510023  ABDULLAH GÜL ÜN… KAYS… Mühendislik … Endüstri Müh… MF_4     
##  2 202910136  ALTINBAŞ ÜNİVER… İSTA… Mühendislik … Endüstri Müh… MF_4     
##  3 202910366  ALTINBAŞ ÜNİVER… İSTA… Mühendislik … Endüstri Müh… MF_4     
##  4 101011032  ANADOLU ÜNİVERS… ESKİ… Mühendislik … Endüstri Müh… MF_4     
##  5 206410262  ANTALYA BİLİM Ü… ANTA… Mühendislik … Endüstri Müh… MF_4     
##  6 200210997  ATILIM ÜNİVERSİ… ANKA… Mühendislik … Endüstri Müh… MF_4     
##  7 200210413  ATILIM ÜNİVERSİ… ANKA… Mühendislik … Endüstri Müh… MF_4     
##  8 200210404  ATILIM ÜNİVERSİ… ANKA… Mühendislik … Endüstri Müh… MF_4     
##  9 200510701  BAHÇEŞEHİR ÜNİV… İSTA… Mühendislik … Endüstri Müh… MF_4     
## 10 200510507  BAHÇEŞEHİR ÜNİV… İSTA… Mühendislik … Endüstri Müh… MF_4     
## # ... with 109 more rows, and 8 more variables: general_quota <chr>,
## #   general_placement <chr>, min_score <dbl>, max_score <dbl>,
## #   val_quota <dbl>, val_placement <dbl>, val_min_score <dbl>,
## #   val_max_score <dbl>

Out of 209 programs, 119 are full.

program_id <- as.numeric(program_id)
ggplot(data = full_programs, aes(x = min_score, y = max_score)) + 
    geom_point(alpha = 0.7)

Also, among full programs, we can see how many are state and how many are foundation:

program_id <- as.numeric(program_id)
devlet <- full_programs %>% filter(program_id <= 1e+08)
vakif <- full_programs %>% filter(program_id <= 2e+08, program_id >= 
    1e+08)
print(devlet)
## # A tibble: 27 x 14
##    program_id university_name  city   faculty_name program_name  exam_type
##    <chr>      <chr>            <chr>  <chr>        <chr>         <chr>    
##  1 106510023  ABDULLAH GÜL ÜN… KAYSE… Mühendislik… Endüstri Müh… MF_4     
##  2 101011032  ANADOLU ÜNİVERS… ESKİŞ… Mühendislik… Endüstri Müh… MF_4     
##  3 102210295  BOĞAZİÇİ ÜNİVER… İSTAN… Mühendislik… Endüstri Müh… MF_4     
##  4 102910297  ÇUKUROVA ÜNİVER… ADANA  Mühendislik… Endüstri Müh… MF_4     
##  5 103110478  DOKUZ EYLÜL ÜNİ… İZMİR  Mühendislik… Endüstri Müh… MF_4     
##  6 103810198  ESKİŞEHİR OSMAN… ESKİŞ… Mühendislik… Endüstri Müh… MF_4     
##  7 103810559  ESKİŞEHİR OSMAN… ESKİŞ… Mühendislik… Endüstri Müh… MF_4     
##  8 104010131  GALATASARAY ÜNİ… İSTAN… Mühendislik… Endüstri Müh… MF_4     
##  9 104110642  GAZİ ÜNİVERSİTE… ANKARA Mühendislik… Endüstri Müh… MF_4     
## 10 104112108  GAZİ ÜNİVERSİTE… ANKARA Mühendislik… Endüstri Müh… MF_4     
## # ... with 17 more rows, and 8 more variables: general_quota <chr>,
## #   general_placement <chr>, min_score <dbl>, max_score <dbl>,
## #   val_quota <dbl>, val_placement <dbl>, val_min_score <dbl>,
## #   val_max_score <dbl>
print(vakif)
## # A tibble: 91 x 14
##    program_id university_name  city  faculty_name  program_name  exam_type
##    <chr>      <chr>            <chr> <chr>         <chr>         <chr>    
##  1 202910136  ALTINBAŞ ÜNİVER… İSTA… Mühendislik … Endüstri Müh… MF_4     
##  2 202910366  ALTINBAŞ ÜNİVER… İSTA… Mühendislik … Endüstri Müh… MF_4     
##  3 206410262  ANTALYA BİLİM Ü… ANTA… Mühendislik … Endüstri Müh… MF_4     
##  4 200210997  ATILIM ÜNİVERSİ… ANKA… Mühendislik … Endüstri Müh… MF_4     
##  5 200210413  ATILIM ÜNİVERSİ… ANKA… Mühendislik … Endüstri Müh… MF_4     
##  6 200210404  ATILIM ÜNİVERSİ… ANKA… Mühendislik … Endüstri Müh… MF_4     
##  7 200510701  BAHÇEŞEHİR ÜNİV… İSTA… Mühendislik … Endüstri Müh… MF_4     
##  8 200510507  BAHÇEŞEHİR ÜNİV… İSTA… Mühendislik … Endüstri Müh… MF_4     
##  9 200510491  BAHÇEŞEHİR ÜNİV… İSTA… Mühendislik … Endüstri Müh… MF_4     
## 10 200611037  BAŞKENT ÜNİVERS… ANKA… Mühendislik … Endüstri Müh… MF_4     
## # ... with 81 more rows, and 8 more variables: general_quota <chr>,
## #   general_placement <chr>, min_score <dbl>, max_score <dbl>,
## #   val_quota <dbl>, val_placement <dbl>, val_min_score <dbl>,
## #   val_max_score <dbl>
  1. Find the top 10 faculties with the highest quotas and draw a bar chart. Ignore similar names and typos in faculty names.
top10 <- osym_data_2017 %>% group_by(faculty_name) %>% summarise(total_quota = sum(as.numeric(general_quota)))
top10 <- top10 %>% arrange(desc(total_quota)) %>% slice(1:10)
print(top10)
## # A tibble: 10 x 2
##    faculty_name                         total_quota
##    <chr>                                      <dbl>
##  1 İktisadi ve İdari Bilimler Fakültesi      65322.
##  2 Mühendislik Fakültesi                     47389.
##  3 Fen - Edebiyat Fakültesi                  42299.
##  4 Eğitim Fakültesi                          36051.
##  5 İşletme Fakültesi                         24340.
##  6 Sağlık Bilimleri Fakültesi                24286.
##  7 Açıköğretim Fakültesi                     23400.
##  8 İktisat Fakültesi                         23045.
##  9 Edebiyat Fakültesi                        21803.
## 10 Hukuk Fakültesi                           13824.
  1. Find all full medicine programs (Tıp but not Tıp Mühendisliği) of foundation universities group by university calculate total quotas per university and maximum max_score and minimum min_score as bounds, ordered and colored by total quota. (Tip: Use geom_crossbar)

We can again use “grepl” to find requested programs:

medicals <- osym_data_2017 %>% filter(grepl("Tıp", program_name)) %>% 
    filter(!grepl("Mühendis", program_name))
medicals <- medicals %>% group_by(university_name) %>% summarise(total_quota = sum(as.numeric(general_quota)), 
    max = max(max_score), min = min(min_score))
print(medicals)
## # A tibble: 93 x 4
##    university_name                           total_quota   max   min
##    <chr>                                           <dbl> <dbl> <dbl>
##  1 ABANT İZZET BAYSAL ÜNİVERSİTESİ                  140.  483.  465.
##  2 ACIBADEM MEHMET ALİ AYDINLAR ÜNİVERSİTESİ         70.  542.  486.
##  3 ADIYAMAN ÜNİVERSİTESİ                            115.  490.  454.
##  4 ADNAN MENDERES ÜNİVERSİTESİ                      195.  492.  467.
##  5 AFYON KOCATEPE ÜNİVERSİTESİ                      170.  487.  461.
##  6 AHİ EVRAN ÜNİVERSİTESİ                            60.  469.  456.
##  7 AKDENİZ ÜNİVERSİTESİ                             260.  533.  486.
##  8 AKSARAY ÜNİVERSİTESİ                              30.  469.  461.
##  9 ALANYA ALAADDİN KEYKUBAT ÜNİVERSİTESİ             60.  485.  467.
## 10 ALTINBAŞ ÜNİVERSİTESİ                             60.  480.  423.
## # ... with 83 more rows

Now we can plot the graph accordingly:

ggplot(medicals) + geom_crossbar(aes(x = university_name, ymin = min, 
    ymax = max, y = 500)) + theme(axis.text.x = element_text(angle = 90, 
    size = 5))

  1. Freestyle: Do an analysis that compares the mechanical engineering (Makine Mühendisliği) and civil engineering (İnşaat Mühendisliği) programs.

  2. Freestyle: Compare Koç University with Bilkent University.

  3. Freestyle: Do your best.