This is an individual assignment, which aims to analyze the ÖSYM data using Tidyverse.
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.
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))
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.
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>
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.
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))
Freestyle: Do an analysis that compares the mechanical engineering (Makine Mühendisliği) and civil engineering (İnşaat Mühendisliği) programs.
Freestyle: Compare Koç University with Bilkent University.
Freestyle: Do your best.