Στο παρόν άρθρο θα εξετάσουμε τις παραβάσεις/παραβιάσεις του ελληνικού εναέριου χώρου. Θα τις εξετάσουμε από το αρχείο enaerParab.xlsx.

ETOS MHNAS PARAB_KEK PARAB_EEX OPL_SXHM EMPLOKES YPERPT_ETH_ED SYNOLO_AER
2009 Ir 65 106 37 13 7 250
2009 Fe 47 123 34 17 2 259
2009 Mr 92 152 36 26 3 306
2009 Ar 41 160 32 27 7 229
2009 Ma 121 163 35 8 2 281
2009 In 57 146 34 25 7 247
2009 Il 50 217 42 33 12 310
2009 Au 48 225 38 34 4 293
2009 Se 43 103 31 27 1 253
2009 Ok 42 69 25 18 0 204
2009 No 47 108 26 5 2 219
2009 De 50 106 25 4 4 227
2010 Ir 70 107 26 1 0 239
2010 Fe 35 84 28 0 1 220
2010 Mr 52 114 40 1 1 324
2010 Ar 45 77 27 0 0 239
2010 Ma 129 156 30 1 0 266
2010 In 56 97 34 1 0 292
2010 Il 58 128 46 7 4 316
2010 Au 43 87 34 0 0 246
2010 Se 46 105 29 2 1 233
2010 Ok 58 92 23 0 1 215
2010 No 74 98 22 0 4 206
2010 De 63 94 28 0 8 234
2011 Ir 70 104 34 0 1 274
2011 Fe 46 84 33 0 0 265
2011 Mr 41 71 31 0 0 245
2011 Ar 47 81 31 0 0 254
2011 Ma 128 133 22 0 0 232
2011 In 41 74 25 0 0 212
2011 Il 46 81 32 0 0 198
2011 Au 41 86 30 0 0 192
2011 Se 43 89 30 5 0 199
2011 Ok 31 54 14 10 2 127
2011 No 27 42 9 1 1 96
2011 De 59 63 16 0 0 147
2012 Ir 66 84 16 1 1 146
2012 Fe 32 53 10 0 1 81
2012 Mr 93 69 21 0 0 174
2012 Ar 37 50 16 0 0 110
2012 Ma 104 107 19 0 0 194
2012 In 60 58 23 0 0 157
2012 Il 50 43 15 0 0 96
2012 Au 34 37 13 0 0 77
2012 Se 36 35 9 0 0 69
2012 Ok 35 31 9 0 0 75
2012 No 75 49 14 0 1 135
2012 De 45 30 11 0 0 91
2013 Ir 47 63 13 0 0 103
2013 Fe 47 63 9 0 0 88
2013 Mr 88 48 11 0 0 118
2013 Ar 40 45 8 0 1 74
2013 Ma 94 111 14 0 1 119
2013 In 34 31 9 0 0 62
2013 Il 48 56 14 0 2 105
2013 Au 29 34 11 0 1 76
2013 Se 48 45 14 0 3 109
2013 Ok 25 26 7 0 0 65
2013 No 52 69 11 0 2 99
2013 De 25 45 8 0 1 66
2014 Ir 71 239 18 0 2 138
2014 Fe 31 100 8 0 0 68
2014 Mr 47 109 13 0 2 105
2014 Ar 65 233 12 2 0 109
2014 Ma 136 426 14 0 2 156
2014 In 52 196 8 0 0 79
2014 Il 45 119 13 0 1 96
2014 Au 40 173 11 0 0 77
2014 Se 104 249 14 0 1 129
2014 Ok 45 125 11 0 3 88
2014 No 79 118 9 0 0 100
2014 De 86 157 14 6 3 124
2015 Ir 36 63 10 2 2 79
2015 Fe 35 97 11 0 5 84
2015 Mr 59 210 14 5 3 127
2015 Ar 65 173 10 5 2 136
2015 Ma 187 362 25 29 5 276
2015 In 66 167 16 14 1 143
2015 Il 61 153 10 5 10 111
2015 Au 39 83 5 4 0 73
2015 Se 70 135 8 5 1 87
2015 Ok 100 190 12 5 3 118
2015 No 60 75 6 1 0 80
2015 De 48 71 6 5 4 70
2016 Ir 68 83 5 3 2 89
2016 Fe 76 136 9 7 1 101
2016 Mr 69 109 5 4 0 77
2016 Ar 130 267 12 14 24 133
2016 Ma 157 321 11 6 6 159
2016 In 46 131 3 1 4 54
2016 Il 25 34 2 0 2 31
2016 Au 21 39 0 0 0 15
2016 Se 53 88 1 0 4 49
2016 Ok 69 176 7 4 4 78
2016 No 122 126 13 13 2 145
2016 De 66 161 18 16 8 85
2017 Ir 65 133 16 10 5 70
2017 Fe 81 257 26 8 11 83
2017 Mr 47 172 20 10 3 79
2017 Ar 65 254 18 20 3 97
2017 Ma 190 642 30 29 1 201
2017 In 71 202 21 25 5 96
2017 Il 59 187 20 17 4 84
2017 Au 111 346 26 15 2 139
2017 Se 134 343 34 16 0 168
2017 Ok 132 401 28 19 2 143
2017 No 93 212 7 6 3 89
2017 De 55 168 11 1 0 81
2018 Ir 94 353 11 7 1 89
2018 Fe 82 377 9 3 6 90
2018 Mr 70 190 18 9 0 68
2018 Ar 101 280 20 14 5 124
2018 Ma 202 361 16 10 0 239
2018 In 98 385 11 8 11 161
2018 Il 84 271 10 9 0 126
2018 Au 68 276 14 5 2 109
2018 Se 113 273 13 7 0 161
2018 Ok 214 381 25 15 4 236
2018 No 134 233 21 13 0 180
2018 De 141 325 28 28 18 192
2019 Ir 146 338 33 33 7 199
2019 Fe 81 245 17 16 0 124
2019 Mr 135 378 26 21 6 193
2019 Ar 136 281 23 32 5 184
2019 Ma 290 506 44 41 2 327
2019 In 127 663 28 30 10 137
2019 Il 118 355 29 39 6 161
2019 Au 95 341 27 39 11 106
2019 Se 132 413 21 15 3 171
2019 Ok 139 507 32 32 21 180
2019 No 199 342 25 28 9 208
2019 De 185 444 39 57 44 234
2020 Ir 189 597 55 69 62 261
2020 Fe 131 541 41 67 54 172
2020 Mr 181 425 36 30 58 190
2020 Ar 132 507 38 46 81 160
2020 Ma 93 420 27 36 47 120
2020 In 120 459 20 25 36 149
2020 Il 125 558 23 28 20 142
2020 Au 281 457 38 51 6 283

Οι στήλες αρχικά ήταν ΠΑΡΑΒΑΣΕΙΣ ΚΕΚ (ICAO), ΠΑΡΑΒΙΑΣΕΙΣ ΕΕΧ, ΟΠΛΙΣΜΕΝΟΙ ΣΧΗΜΑΤΙΣΜΟΙ, ΕΜΠΛΟΚΕΣ, ΥΠΕΡΠΤΗΣΗ ΕΘΝΙΚΟΥ ΕΔΑΦΟΥΣ, ΣΥΝΟΛΟ ΑΕΡΟΣΚΑΦΩΝ κι έχουν μετονομαστεί σε ETOS, MHNAS, PARAB_KEK, PARAB_EEX, OPL_SXHM, EMPLOKES και YPERPT_ETH_ED.

Αυτό που θα κάνουμε εδώ είναι να συγκρίνουμε τις παραβάσεις ΚΕΚ (ICAO), τις παραβιάσεις ΕΕΧ, τους οπλισμένους σχηματισμούς, τις εμπλοκές και τις υπερπτήσεις εθνικού εδάφους από μήνα σε μήνα του 2009, ώστε να δούμε αν υπάρχουν διαφοροποιήσεις μέσα στο έτος. Επίσης θα μελετήσουμε ξεχωριστά τους καλοκαιρινούς μήνες.

Αρχικά γράφουμε:

e_a <- enaerParab[enaerParab$ETOS == 2009, -c(1,8)]
e_aKALOK <- e_a[6:8,]

Ώστε να συλλέξουμε τα δεδομένα που θέλουμε.

Ακολούθως εγκαθιστούμε το πακέτο fmsb, μιας και θα μας χρειαστεί για το γράφημα με το οποίο θα συγκρίνουμε τις παραβάσεις/παραβιάσεις των μηνών αυτών.

if(!require(fmsb)){
    install.packages("fmsb")
    library(fmsb)
}

Ακολούθως δημιουργούμε τις συναρτήσεις astrogramma1() και astrogramma(), οι οποίες θα κάνουν τη δουλειά που θέλουμε. Εμείς θα χρησιμοποιούμε μόνο την astrogramma. Η astrogramma1 είναι βοηθητική.

astrogramma1 <- function(dedomena, xroma = rainbow(length(dedomena[,1])), 
                         vlabels = colnames(dedomena)[-1], vlcex = 0.7, title = NULL, ...){
  m <- min(dedomena[,-1])
  M <- max(dedomena[,-1])
  n <- length(dedomena[1,])
  m_row <- rep(m, n-1)
  M_row <- rep(M, n-1)
  max_min <- rbind(M_row, m_row)
  rownames(max_min) <- c("Max", "Min")
  rownames(dedomena) <- dedomena[,1]
  data <- dedomena[,-1]
  colnames(max_min) <- colnames(data)
  data <- rbind(max_min,data)
  radarchart(
    data, axistype = 1,
    # Customize the polygon
    pcol = xroma, pfcol = scales::alpha(xroma, 0.5), plwd = 2, plty = 1,
    # Customize the grid
    cglcol = "grey", cglty = 1, cglwd = 0.8,
    # Customize the axis
    axislabcol = "grey", 
    # Variable labels
    vlcex = vlcex, vlabels = vlabels,
    caxislabels = (0:5)*(M/5), title = title, ...
  )
  for (k in 1:length(data[,1])){
    rn <- dedomena[k,1]
    mtext(rn, side = 1, line = k-1, col = xroma[k], adj = 0.5)
  }
   
}
 
astrogramma <- function(dedomena, mazi = T, xroma = rainbow(length(dedomena[,1])), 
                        vlabels = colnames(dedomena)[-1], vlcex = 0.7, title = NULL, ...) {
  if (mazi) {
    astrogramma1(dedomena, xroma, 
                 vlabels, vlcex, title, ...)
  } else {
    op <- par(mar = c(1, 1, 1, 1))
    par(mfrow = c(3,2))
    nn <- length(dedomena[,1])
    for (i in 1:nn){
      df0 <- dedomena[i,]
      astrogramma1(df0, xroma = rainbow(nn)[i])
    }
    par(op)
  }
}

Ακολούθως γράφουμε:

astrogramma(e_aKALOK)

Και μας εξάγεται το μήνυμα σφάλματος Error in .rowNamesDF<-(x, value = value) : invalid 'row.names' length.

Αυτό οφείλεται στο ότι δεν είναι ο πίνακας δεδομένων μας σε κατάλληλη για τη συνάρτηση μορφή. Δεν θα εμβαθύνουμε στους λόγους αυτού του προβλήματος, απλά θα πούμε ότι αυτό λύνεται εύκολα μέσω της συνάρτησης as.data.frame(). Σε αυτήν θα εκχωρήσουμε ως όρισμα τον πίνακα που μας ενδιαφέρει. Δηλαδή γράφουμε:

e_aKALOK_PD <- as.data.frame(e_aKALOK)

Οπότε γράφουμε:

astrogramma(e_aKALOK_PD)

Έχουμε τα αστρογράμματά μας. Βέβαια, το ένα έχει σχεδιαστεί πάνω από το άλλο κι αυτό ίσως ενοχλήσει κάποιους. Αυτό μπορούμε να το διορθώσουμε, γράφοντας απλώς FALSE σαν δεύτερο όρισμα στη συνάρτηση astrogramma().

astrogramma(e_aKALOK_PD, FALSE)

Έτσι έχουμε τα ξεχωριστά αστρογράμματα για τους μήνες που θέλαμε.

Στο σημείο αυτό είναι ώρα να πούμε πώς λειτουργούνε τα αστρογράμματα:

  • Στις άκρες ενός πολυγώνου βρίσκονται τα ονόματα των μεταβλητών που μας ενδιαφέρουν. Εδώ είναι οι παραβάσεις ΚΕΚ (PARAB_KEK), οι παραβιάσεις ΕΕΧ (PARAB_EEX), οι οπλισμένοι σχηματισμοί (OPL_SXHM), οι εμπλοκές (EMPLOKES) και οι υπερπτήσεις εθνικού εδάφους (YPERPT_ETH_ED).

  • Η τιμή της μεταβλητής υποδηλώνεται από ένα σημείο σε μια απόσταση από το κέντρο του πολυγώνου. Όσο μεγαλύτερη είναι η τιμή της μεταβλητής, τόσο πιο μακριά από το κέντρο του πολυγώνου θα βρίσκεται το σημείο. Εκεί θα πάνε οι κορυφές του αστρογράμματος.

  • Ενώνουμε όλα τα σημεία αυτά κι έχουμε το αστρόγραμμα.

Έτσι, βλέπουμε ότι οι παραβάσεις ΚΕΚ είναι σαφώς λιγότερες από τις παραβιάσεις ΕΕΧ. Μπορούμε επίσης να δούμε ότι η κατανομή αυτών των παραβάσεων/παραβιάσεων δεν αλλάζει ουσιοδώς στους τρεις αυτούς καλοκαιρινούς μήνες.

Πριν προχωρήσουμε στη μελέτη μας, θα πρέπει να επισημάνουμε εδώ ότι ο πίνακας δεδομένων μας θα πρέπει να είναι σε συγκεκριμένη μορφή. Θα πρέπει οι μεταβλητές που θα αποτελούν τις κορυφές του αστρογράμματος να είναι τα ονόματα των στηλών μας (εδώ είναι τα είδη παραβάσεων/παραβιάσεων). Επίσης οι στήλες μας θα πρέπει να είναι αποκλειστικά αυτές, και μόνο η πρώτη στήλη να είναι οι τιμές του πλαισίου στο οποίο εξετάζουμε τις μεταβλητές μας (εδώ η πρώτη στήλη ήταν οι μήνες).

Πάμε, λοιπόν να δούμε τα αστρογράμματα και για όλους τους μήνες του έτους. Γράφουμε:

astrogramma(e_a)

Οπότε και πάλι προκύπτει το μνήμα σφάλματος Error in .rowNamesDF<-(x, value = value) : invalid 'row.names' length.

Αυτό, όπως και πριν, το διορθώνουμε γράφοντας:

e_a_PD <- as.data.frame(e_a)

και με την κάτωθι εντολή έχουμε τα αστρογράμματα:

astrogramma(e_a_PD)

Εδώ τα πράγματα είναι ακόμα πιο ενοχλητικά από πριν. Όχι μόνο το ένα αστρόγραμμα επικαλύπτει το άλλο, αλλά και οι ετικέτες των μηνών έχουν βγει εκτός της εικόνας. Οπότε γράφουμε εναλλακτικά:

astrogramma(e_a_PD, FALSE)

Ο κώδικας που χρησιμοποιήσαμε είναι ο παρακάτω:

e_a <- enaerParab[enaerParab$ETOS == 2009, -c(1,8)]
e_aKALOK <- e_a[6:8,]
if(!require(fmsb)){
    install.packages("fmsb")
    library(fmsb)
}
astrogramma1 <- function(dedomena, xroma = rainbow(length(dedomena[,1])), 
                         vlabels = colnames(dedomena)[-1], vlcex = 0.7, title = NULL, ...){
  m <- min(dedomena[,-1])
  M <- max(dedomena[,-1])
  n <- length(dedomena[1,])
  m_row <- rep(m, n-1)
  M_row <- rep(M, n-1)
  max_min <- rbind(M_row, m_row)
  rownames(max_min) <- c("Max", "Min")
  rownames(dedomena) <- dedomena[,1]
  data <- dedomena[,-1]
  colnames(max_min) <- colnames(data)
  data <- rbind(max_min,data)
  radarchart(
    data, axistype = 1,
    # Customize the polygon
    pcol = xroma, pfcol = scales::alpha(xroma, 0.5), plwd = 2, plty = 1,
    # Customize the grid
    cglcol = "grey", cglty = 1, cglwd = 0.8,
    # Customize the axis
    axislabcol = "grey", 
    # Variable labels
    vlcex = vlcex, vlabels = vlabels,
    caxislabels = (0:5)*(M/5), title = title, ...
  )
  for (k in 1:length(data[,1])){
    rn <- dedomena[k,1]
    mtext(rn, side = 1, line = k-1, col = xroma[k], adj = 0.5)
  }
   
}
 
astrogramma <- function(dedomena, mazi = T, xroma = rainbow(length(dedomena[,1])), 
                        vlabels = colnames(dedomena)[-1], vlcex = 0.7, title = NULL, ...) {
  if (mazi) {
    astrogramma1(dedomena, xroma, 
                 vlabels, vlcex, title, ...)
  } else {
    op <- par(mar = c(1, 1, 1, 1))
    par(mfrow = c(3,2))
    nn <- length(dedomena[,1])
    for (i in 1:nn){
      df0 <- dedomena[i,]
      astrogramma1(df0, xroma = rainbow(nn)[i])
    }
    par(op)
  }
}
astrogramma(e_aKALOK)
e_aKALOK_PD <- as.data.frame(e_aKALOK)
astrogramma(e_aKALOK_PD)
astrogramma(e_aKALOK_PD, FALSE)
astrogramma(e_a)
e_a_PD <- as.data.frame(e_a)
astrogramma(e_a_PD)
astrogramma(e_a_PD, FALSE)