setwd("~/Desktop/DIM/DIM_2021_9")

Bölqələrin IX siniflərin buraxılış imtahanlarının nəticələrinə görə klasterlərə bölünməsi


Giriş


Biz 2011-ci ildə 9-cu siniflərdə aparılan buraxılış imtahanlarını təhlil etmişik. Təhlillər buraxılış imtahanlarının əsas hissəsini təşkil edən azərbaycan bölməsi üzrə aparılmışdır. Bu zaman ana dilindən və riyaziyyatdan imtahan verənlərin sayı eyni olmuşdur (117012-nəfər). Xarici dildən bir çox fəndən imtahan verildiyindən biz yalnız, ingilis dilindən imtahan verənlərə baxmışıq. Sonra onların sıra nömrələrindən istifadə edərək eyni şagirdləri müəyyənləşdirib bir data düzəltmişik. Bu datada bütün bölgələrdən imtahan verən 98929-şagirdin ana dilindən, riyaziyyatdan və xarıcı dil kimi ingilis dilindən həm tam testdən həm də alttestlərdən aldıqları çiy ballar göstərilmişdir. İndi isə biz bu datadan istifadə edərək aşağıdakı kimi vacib bir suala cavab tapacayıq.


2021-ci il doqquzuncu siniflərin azərbaycan bölməsi üzrə buraxılış imtahanlarının ana dili, riyaziyyat və ingilis dilindən nəticələrinə görə bölgələrin durumu necədir?


İlk baxışda adama elə gəlir ki, biz hər üç imtahandan olan nəticələri toplayarıq sonra bölgələıri bu cəm balların orta qiymətinə görə sıralayarıq. Nəticədə, hər bir bölgənin bu sıralamada harada durduğunu taparıq. Lakin bu bizim qoyduğumuz sualın cavabı deyil. Bölgələr öz aralarında məhz bu göstəriciyə görə müxtəlif təbii klasterlərə (qruplara) bölünürlər. Bu klasterlərin optimal sayının və onların tərkibinin müəyyən edilməsi üçün ciddi statistik metodlar tələb olunur. Biz bu məsəlıəni K-orta qiymətin (K-means) tapılması adlanan metotdan istifadə edərək həll edəcəyik.


K-orta qiymətin (K-means) hesablanması alqoritmi haqda


Ədəbiyyatda K-orta qiymətin hesablanması haqda bir çox alqoritmlər vardır. Standart alqoritm olaraq Xartiqan-Vong (Hartigan and Wong 1979) alqoritminə baxılır. Bu yanaşmada hər bir klasterin daxili dəyişkənliyi (within-cluster sum of square) hesablanır. Sonra bütün klasterlər üzrə bu dəyişkənliklər toplanır (total within-cluster sum of square) və ona total dəyişkənlik deyilir.

Klasterlər üzrə total dəyişgənlik, klastrerlərin müəyyən edilməsi üçün bir meyar olur. Biz onun mümkün qədər kiçik olmasına çalışacağıq.

K-orta qiymətin hesablanması alqoritmi aşağıdakı kimidir:

Qeyd edək ki, bu alqoritmin heç də həmişə müsbət həlli olmur və əlavə metodlar mövcutdur. Bizim halda bu metod yaxşı işləyir


Paketlərin yüklənməsi


library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.6     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.4     ✓ stringr 1.4.0
## ✓ readr   2.0.2     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library("ggfortify")
library(cluster)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine

Datanın yüklənməsi



DF <- DF_1_2_3_Saf_1 %>% 
  group_by(Bölgə) %>% 
  summarise(Ana_dili_Bal_Or = mean(Ana_dili_Bal),
            Riy_Bal_Or = mean(Riy_Bal),
            Xar_dil_Bal_Or = mean(Xar_dil_Bal))
  names(DF)
## [1] "Bölgə"           "Ana_dili_Bal_Or" "Riy_Bal_Or"      "Xar_dil_Bal_Or"

Fənlər üzrə balların standartlaşdırılması

Klasterlərin qrulmasında bu mərhələnin vacib rolu var. Bizim halda üç şkala vardır. Ana dili üzrə ballar, riyaziyyat üzrə ballar və ingilis dili fənni üzrə ballar. Bunlardan ana dili və ingilis dili fənni üzrə ballar 0-30 intervalında dəyişir. Lakin, riyaziyyatdan ballar 0-25 intervalında dəyişır. Bu səbəbdən hər üç dəyişəndə z-qiymətlərə keçmək lazım gəlir. Yəni, ballar orta qiyməti 0, orta kvadratik meyli 1 olan şkalaya gətirilir.


DF_S <- DF %>% 
  mutate(Ana_dili_Bal_S = scale(Ana_dili_Bal_Or),
         Riy_Bal_S = scale(Riy_Bal_Or),
         Xar_dil_Bal_S = scale(Xar_dil_Bal_Or)) %>% 
  select(1, 5:7)
names(DF_S) <- c("Bölgə", "Ana_dili", "Riyaziyyat", "Ingilis_dili")
nrow(DF_S)
## [1] 76

Birinci fundamental sual: K-klasterlərin optimal sayını necə tapmalı


Bizim 76 bölgəmiz vardır. Biz ona bütövlükdə bir klaster kimi baxa bilərik. Sonra onu iki, üç, dörd və nəhayət, 76 klasterə bölə bilərik. Lakin, bunların içərisində bir optimal bölgü vardır ki, hansısa bir qayda ilə onu əvvəlcədən müəyyən edə bilməliyik. Aydındır ki, bütün dataya bir klaster kimi baxanda total dəyişkənlik maksimum qiymət alır, bütün dataya bölgələrin sayı qədər yəni, 76 klaster kimi baxanda total dəyişkənlik minimum, yəni, sifır qiyməti alır. Həqiqət, haradasa bu iki halın arasındadır. K-nın tapılması üçün müxtəlif üsullar vardır. Biz “Daş uçqunu” deyilən metoddan istifadə edəcəyik. Bu metodda K = 1, 2, 3 … 12 üçün total dəyişiklik hesablanır və dəyişikliyin qismən stabilləşdiyi K qeyd olunur.


data <- DF_S[,2:4]
wssplot <- function(data, nc=15, seed=1234){
  wss <- (nrow(data)-1)*sum(apply(data,2, var))
  for (i in 2:nc){
    set.seed(seed)
    wss[i] <- sum(kmeans(data, centers=i)$withinss)}
  plot(1:nc, wss, type="b", xlab="Number of Clusters",
       ylab="Within groups sum of squares")
  wss
}
wssplot(data)

##  [1] 225.000000 108.274032  55.986634  34.590318  24.080268  20.971141
##  [7]  17.039270  17.341819  15.867626  14.769540  12.355749  10.749863
## [13]  10.971640   8.275732   8.116401

Biz bu qrafikdə “Dirsək” əmələ gələn nöqtəni tapmalıyıq. Bunu qrafikin özündən də K-nın müxtəlif qiymətlərində verilən TD (total dəyişiklik) qiymətlərinə baxmaqla da görmək olar. K= 6 olduqda, TD = 20.971141, K= 7 olduqda, TD = 17.039270, K= 8 olduqda, TD = 17.341819 olur. Deməli, 7 klasterdən 8 klasterə keçəndə TD-çox az dəyişir. Başqa sözlə, K-nın optimal qiyməti olaraq K= 7 götürə bilərik.


Aşağıdakı kod çəngəsi ilə biz bölgələri 7 klasterə bölürük


kmean <- kmeans(data, 7)

Bölqələrə uyğun nöqtələrinin klasterlərin içində verilməsi


autoplot(kmean, data, frame = TRUE, loadings.label=TRUE, loadings=TRUE, 
         loadings.label.size=4, loadings.colour='blue',
         label.size = 1)+
geom_text(vjust=-1, label=rownames(data)) +
  theme(plot.background=element_blank(),
        panel.background=element_rect(fill='transparent',color='black',size=1),
        legend.text=element_text(hjust=1),
        legend.key=element_blank()) 

Biz bu qrqfiki ətraflı şərh etməyə çalışacağıq. Əslində, bu qrafik 3-ölçülü fəzadadır. Burada onun iki ölçülü proyeksiyası verilmişdir. Bizim hər bir bölgəmiz üç göstəricisi ilə verilir və onlar üç koordinat sistemin əməlıə gətirir. Bu göstəricilər ana dilindən bölgələr üzrə orta qiymət, riyaziyyatdan bölqələr üzrə orta qiymət və ingilis dilindən bölğələr üzrə orta qiymətlərdir. Bütün datanın mərkəzi göy oxların çıxdığı nöqtədir. Bu nöqtə koordinat sistemində (0, 0, 0)-nöqtəsinə uygundur. Çünki, biz standartlaşdırılmış qiymətlərə baxırıq. Burada bölgələr adlarının əlifba sırası ilə verilmişdir. Məsələn, solda aşağıda əlifba sırasında 31-cı bölqə və 16-cı bölgə bir klaster əmələ gətirir. Bunlar Təhsil Nazirliyinə tabeli və özəl liseylər dıgəri isə Dəmiryol iseyləridir. Bundan sonra gələn ikinci klasterə daxil olan bölgələrin sıra nömrələri (1, 8, 33, 36, 39, 42, 50, 63) və nəhayət, sonuncu klasterə (15, 52) iki bölgə, Daşkəsən rayonu və Respublika Olimpiya İdman Liseyi aid edilir.


Klasterlərə daxil olan bölgələrin adları


Biz aşağıda 7 klasterin hər birinə daxıl olan bölgələrin adlarını veririk


ARX <- cbind(DF_S, as.factor(kmean$cluster))
colnames(ARX) <- c("Bölgə", "Ana_dili", "Riyaziyyat", "İngils_dili", "Claster")
ARXN <- ARX %>% 
  select(Bölgə, Claster) %>% ##  Bölgələrin əlifba sırasıyla düzülməsi
  arrange(Bölgə)
ARXN <- cbind(Sırası = 1:76, ARXN)
knitr::kable(ARXN)
Sırası Bölgə Claster
1 Abşeron rayonu 3
2 Ağcabədi rayonu 4
3 Ağdam rayonu 2
4 Ağdaş rayonu 6
5 Ağstafa rayonu 1
6 Ağsu rayonu 4
7 Astara rayonu 2
8 Bakı şəhəri 3
9 Balakən rayonu 2
10 Beyləqan rayonu 6
11 Bərdə rayonu 4
12 Biləsuvar rayonu 1
13 Cəbrayıl rayonu 1
14 Cəlilabad rayonu 4
15 Daşkəsən rayonu 7
16 Dəmiryol Liseyləri 5
17 Füzuli rayonu 6
18 Gədəbəy rayonu 4
19 Gəncə şəhəri 1
20 Goranboy rayonu 6
21 Göyçay rayonu 2
22 Göygöl rayonu 4
23 Hacıqabul rayonu 6
24 İmişli rayonu 6
25 İsmayıllı rayonu 1
26 Kəlbəcər rayonu 2
27 Kürdəmir rayonu 4
28 Laçın rayonu 1
29 Lerik rayonu 6
30 Lənkəran rayonu 2
31 Liseylər (TN tabeli və özəl) 5
32 Masallı rayonu 2
33 Mingəçevir şəhəri 3
34 Naftalan şəhəri 1
35 Naxçıvan MR Babək ray. 1
36 Naxçıvan MR Culfa ray. 3
37 Naxçıvan MR Kəngərli ray. 1
38 Naxçıvan MR Ordubad ray. 1
39 Naxçıvan MR Şahbuz ray. 3
40 Naxçıvan MR Sədərək ray. 6
41 Naxçıvan MR Şərur ray. 1
42 Naxçıvan şəhəri 3
43 Neftçala rayonu 2
44 Oğuz rayonu 1
45 Qax rayonu 1
46 Qazax rayonu 2
47 Qəbələ rayonu 1
48 Qobustan rayonu 6
49 Quba rayonu 6
50 Qubadlı rayonu 3
51 Qusar rayonu 4
52 Respublika Olimpiya İdman Liseyi 7
53 Saatlı rayonu 4
54 Sabirabad rayonu 6
55 Şabran rayonu 1
56 Salyan rayonu 2
57 Şamaxı rayonu 6
58 Samux rayonu 4
59 Şəki rayonu 1
60 Şəmkir rayonu 4
61 Şirvan şəhəri 1
62 Siyəzən rayonu 2
63 Sumqayıt şəhəri 3
64 Şuşa rayonu 2
65 Tərtər rayonu 4
66 Tovuz rayonu 2
67 Ucar rayonu 2
68 Xaçmaz rayonu 2
69 Xızı rayonu 6
70 Xocalı rayonu 6
71 Xocavənd rayonu 1
72 Yardımlı rayonu 6
73 Yevlax rayonu 2
74 Zaqatala rayonu 1
75 Zəngilan rayonu 1
76 Zərdab rayonu 4

Birinci klasterə daxil olan bölgələr


ARXN_1 <- ARXN %>% 
  filter(Claster == "1") %>% 
  select(Sırası,Bölgə)

İkinci klasterə daxil olan bölgələr


ARXN_2 <- ARXN %>% 
  filter(Claster == "2") %>% 
  select(Sırası,Bölgə)

Üçüncü klasterə daxil olan bölgələr


ARXN_3 <- ARXN %>% 
  filter(Claster == "3") %>% 
  select(Sırası,Bölgə)

Dördüncü klasterə daxil olan bölgələr


ARXN_4 <- ARXN %>% 
  filter(Claster == "4") %>% 
  select(Sırası,Bölgə)

Beşinci klasterə daxil olan bölgələr


ARXN_5 <- ARXN %>% 
  filter(Claster == "5") %>% 
  select(Sırası,Bölgə)

Altıncı klasterə daxil olan bölgələr


ARXN_6 <- ARXN %>% 
  filter(Claster == "6") %>% 
  select(Sırası,Bölgə)

Yeddinci klasterə daxil olan bölgələr


ARXN_7 <- ARXN %>% 
  filter(Claster == "7") %>% 
  select(Sırası,Bölgə)

Yekun <- list(I_klaster = ARXN_5, II_klaster = ARXN_3, III_klaster = ARXN_1,
                 IV_klaster = ARXN_2, V_klaster = ARXN_6, VI_klaster = ARXN_4,
                 VII_klaster = ARXN_7)
print(Yekun)
## $I_klaster
##   Sırası                        Bölgə
## 1     16           Dəmiryol Liseyləri
## 2     31 Liseylər (TN tabeli və özəl)
## 
## $II_klaster
##   Sırası                   Bölgə
## 1      1          Abşeron rayonu
## 2      8             Bakı şəhəri
## 3     33       Mingəçevir şəhəri
## 4     36  Naxçıvan MR Culfa ray.
## 5     39 Naxçıvan MR Şahbuz ray.
## 6     42         Naxçıvan şəhəri
## 7     50          Qubadlı rayonu
## 8     63         Sumqayıt şəhəri
## 
## $III_klaster
##    Sırası                     Bölgə
## 1       5            Ağstafa rayonu
## 2      12          Biləsuvar rayonu
## 3      13           Cəbrayıl rayonu
## 4      19              Gəncə şəhəri
## 5      25          İsmayıllı rayonu
## 6      28              Laçın rayonu
## 7      34           Naftalan şəhəri
## 8      35    Naxçıvan MR Babək ray.
## 9      37 Naxçıvan MR Kəngərli ray.
## 10     38  Naxçıvan MR Ordubad ray.
## 11     41    Naxçıvan MR Şərur ray.
## 12     44               Oğuz rayonu
## 13     45                Qax rayonu
## 14     47             Qəbələ rayonu
## 15     55             Şabran rayonu
## 16     59               Şəki rayonu
## 17     61             Şirvan şəhəri
## 18     71           Xocavənd rayonu
## 19     74           Zaqatala rayonu
## 20     75           Zəngilan rayonu
## 
## $IV_klaster
##    Sırası           Bölgə
## 1       3    Ağdam rayonu
## 2       7   Astara rayonu
## 3       9  Balakən rayonu
## 4      21   Göyçay rayonu
## 5      26 Kəlbəcər rayonu
## 6      30 Lənkəran rayonu
## 7      32  Masallı rayonu
## 8      43 Neftçala rayonu
## 9      46    Qazax rayonu
## 10     56   Salyan rayonu
## 11     62  Siyəzən rayonu
## 12     64     Şuşa rayonu
## 13     66    Tovuz rayonu
## 14     67     Ucar rayonu
## 15     68   Xaçmaz rayonu
## 16     73   Yevlax rayonu
## 
## $V_klaster
##    Sırası                    Bölgə
## 1       4             Ağdaş rayonu
## 2      10          Beyləqan rayonu
## 3      17            Füzuli rayonu
## 4      20          Goranboy rayonu
## 5      23         Hacıqabul rayonu
## 6      24            İmişli rayonu
## 7      29             Lerik rayonu
## 8      40 Naxçıvan MR Sədərək ray.
## 9      48          Qobustan rayonu
## 10     49              Quba rayonu
## 11     54         Sabirabad rayonu
## 12     57            Şamaxı rayonu
## 13     69              Xızı rayonu
## 14     70            Xocalı rayonu
## 15     72          Yardımlı rayonu
## 
## $VI_klaster
##    Sırası            Bölgə
## 1       2  Ağcabədi rayonu
## 2       6      Ağsu rayonu
## 3      11     Bərdə rayonu
## 4      14 Cəlilabad rayonu
## 5      18   Gədəbəy rayonu
## 6      22    Göygöl rayonu
## 7      27  Kürdəmir rayonu
## 8      51     Qusar rayonu
## 9      53    Saatlı rayonu
## 10     58     Samux rayonu
## 11     60    Şəmkir rayonu
## 12     65    Tərtər rayonu
## 13     76    Zərdab rayonu
## 
## $VII_klaster
##   Sırası                            Bölgə
## 1     15                  Daşkəsən rayonu
## 2     52 Respublika Olimpiya İdman Liseyi

Bu Yekun cədvəldə Bölgələrin klasterlər üzrə adları və onların sıra nömrələri verilmişdir


Klasterlərə uyğun səviyyələrin adlanması


ARXN <- mutate(ARXN, Səviyyələr = ifelse(Claster =="5", "I-Səviyyə",
                              ifelse(Claster =="3","II-Səviyyə",
                                     ifelse(Claster =="1", "III-Səviyyə",
                                            ifelse(Claster =="2", "IV-Səviyyə",
                                                   ifelse(Claster =="6", "V-Səviyyə",
                                                          ifelse(Claster =="4","VI-Səviyyə","VII-Səviyyə")))))))

Bölgə_ARX <- ARXN %>% 
  select(Sırası, Bölgə, Səviyyələr, Claster) %>% 
  arrange(Səviyyələr)
knitr::kable(Bölgə_ARX)
Sırası Bölgə Səviyyələr Claster
16 Dəmiryol Liseyləri I-Səviyyə 5
31 Liseylər (TN tabeli və özəl) I-Səviyyə 5
1 Abşeron rayonu II-Səviyyə 3
8 Bakı şəhəri II-Səviyyə 3
33 Mingəçevir şəhəri II-Səviyyə 3
36 Naxçıvan MR Culfa ray. II-Səviyyə 3
39 Naxçıvan MR Şahbuz ray. II-Səviyyə 3
42 Naxçıvan şəhəri II-Səviyyə 3
50 Qubadlı rayonu II-Səviyyə 3
63 Sumqayıt şəhəri II-Səviyyə 3
5 Ağstafa rayonu III-Səviyyə 1
12 Biləsuvar rayonu III-Səviyyə 1
13 Cəbrayıl rayonu III-Səviyyə 1
19 Gəncə şəhəri III-Səviyyə 1
25 İsmayıllı rayonu III-Səviyyə 1
28 Laçın rayonu III-Səviyyə 1
34 Naftalan şəhəri III-Səviyyə 1
35 Naxçıvan MR Babək ray. III-Səviyyə 1
37 Naxçıvan MR Kəngərli ray. III-Səviyyə 1
38 Naxçıvan MR Ordubad ray. III-Səviyyə 1
41 Naxçıvan MR Şərur ray. III-Səviyyə 1
44 Oğuz rayonu III-Səviyyə 1
45 Qax rayonu III-Səviyyə 1
47 Qəbələ rayonu III-Səviyyə 1
55 Şabran rayonu III-Səviyyə 1
59 Şəki rayonu III-Səviyyə 1
61 Şirvan şəhəri III-Səviyyə 1
71 Xocavənd rayonu III-Səviyyə 1
74 Zaqatala rayonu III-Səviyyə 1
75 Zəngilan rayonu III-Səviyyə 1
3 Ağdam rayonu IV-Səviyyə 2
7 Astara rayonu IV-Səviyyə 2
9 Balakən rayonu IV-Səviyyə 2
21 Göyçay rayonu IV-Səviyyə 2
26 Kəlbəcər rayonu IV-Səviyyə 2
30 Lənkəran rayonu IV-Səviyyə 2
32 Masallı rayonu IV-Səviyyə 2
43 Neftçala rayonu IV-Səviyyə 2
46 Qazax rayonu IV-Səviyyə 2
56 Salyan rayonu IV-Səviyyə 2
62 Siyəzən rayonu IV-Səviyyə 2
64 Şuşa rayonu IV-Səviyyə 2
66 Tovuz rayonu IV-Səviyyə 2
67 Ucar rayonu IV-Səviyyə 2
68 Xaçmaz rayonu IV-Səviyyə 2
73 Yevlax rayonu IV-Səviyyə 2
4 Ağdaş rayonu V-Səviyyə 6
10 Beyləqan rayonu V-Səviyyə 6
17 Füzuli rayonu V-Səviyyə 6
20 Goranboy rayonu V-Səviyyə 6
23 Hacıqabul rayonu V-Səviyyə 6
24 İmişli rayonu V-Səviyyə 6
29 Lerik rayonu V-Səviyyə 6
40 Naxçıvan MR Sədərək ray. V-Səviyyə 6
48 Qobustan rayonu V-Səviyyə 6
49 Quba rayonu V-Səviyyə 6
54 Sabirabad rayonu V-Səviyyə 6
57 Şamaxı rayonu V-Səviyyə 6
69 Xızı rayonu V-Səviyyə 6
70 Xocalı rayonu V-Səviyyə 6
72 Yardımlı rayonu V-Səviyyə 6
2 Ağcabədi rayonu VI-Səviyyə 4
6 Ağsu rayonu VI-Səviyyə 4
11 Bərdə rayonu VI-Səviyyə 4
14 Cəlilabad rayonu VI-Səviyyə 4
18 Gədəbəy rayonu VI-Səviyyə 4
22 Göygöl rayonu VI-Səviyyə 4
27 Kürdəmir rayonu VI-Səviyyə 4
51 Qusar rayonu VI-Səviyyə 4
53 Saatlı rayonu VI-Səviyyə 4
58 Samux rayonu VI-Səviyyə 4
60 Şəmkir rayonu VI-Səviyyə 4
65 Tərtər rayonu VI-Səviyyə 4
76 Zərdab rayonu VI-Səviyyə 4
15 Daşkəsən rayonu VII-Səviyyə 7
52 Respublika Olimpiya İdman Liseyi VII-Səviyyə 7

Bu son cədvəldə Bölgələr verdikləri imtahanların müəyyən etdiyi səviyyələrə görə sıralanmışdır.