Στατιστικά Προγράμματα II

Μάθημα 2: Εισαγωγικά για την R

Αλέξανδρος Ρέκκας

2026-03-04

Το περιβάλλον: RStudio

Το RStudio είναι το κυρίαρχο IDE (Integrated Development Environment) για την R (αντίστοιχο του Jupyter ή του VS Code).

Source (Πάνω Αριστερά) Εδώ γράφετε και αποθηκεύετε τα scripts σας (όπως ένα αρχείο .py).

Environment (Πάνω Δεξιά) Δείχνει τις ενεργές μεταβλητές (objects) και τα datasets που βρίσκονται στη μνήμη RAM.

Console (Κάτω Αριστερά) Εδώ η R εκτελεί τις εντολές και τυπώνει τα αποτελέσματα (σαν το Python terminal).

Files/Plots/Help (Κάτω Δεξιά) Διαχείριση αρχείων, εμφάνιση γραφημάτων και πρόσβαση στο Help.

Μεταβλητές και ανάθεση (<-)

Στην Python χρησιμοποιούμε το =.
Στην R, το τυπικό σύμβολο εκχώρησης είναι το αριστερό βελάκι <-.

Η R κατανοεί δυναμικά τους τύπους δεδομένων (numeric, character, logical).

x <- 10
my_string <- "Hello Stats"
is_true <- TRUE # Προσοχή: Όλα κεφαλαία, σε αντίθεση με το True της Python

x * 2
[1] 20

Διανύσματα (Vectors)

Ένα διάνυσμα (vector) είναι μια μονοδιάστατη δομή δεδομένων που περιέχει στοιχεία του ίδιου τύπου.

Δημιουργούνται με τη συνάρτηση c() (από το combine ή concatenate).


# Δημιουργία διανύσματος
scores <- c(85, 92, 78, 90)

# Επιλογή στοιχείου (Subsetting)
scores[2]
[1] 92
# Δημιουργία ακολουθίας (Προσοχή: Το 5 συμπεριλαμβάνεται!)
1:5
[1] 1 2 3 4 5

Αρίθμηση

Προσοχή: Η R ξεκινάει την αρίθμηση (indexing) από το 1!

Στην Python, το πρώτο στοιχείο μιας λίστας βρίσκεται στη θέση 0.
Στην R, βρίσκεται στη θέση 1.
Αυτή είναι η πιο συνηθισμένη πηγή σφαλμάτων όταν μεταβαίνετε από την Python στην R.


my_numbers <- c(10, 20, 30, 40)
my_numbers[1]
[1] 10

Διανυσματοποίησης (vectorization)

prices <- c(10, 20, 30)

# Εφαρμόζεται παντού αυτόματα!
prices * 1.2
[1] 12 24 36

Επιλογή υποσυνόλου

# Επιλογή 10 τυχαίων τιμών από την N(0, 1)
values <- rnorm(10)
values
 [1]  0.3912114  0.9213983 -1.2659750 -0.6281914  0.1543779  0.4487731
 [7]  0.7813155 -1.3644493 -0.9371209  0.8552818

Μπορούμε να διαλέξουμε τις πρώτες 3 τιμές της μεταβλητής values:

values[1:3]
[1]  0.3912114  0.9213983 -1.2659750

Μπορούμε να διαλέξουμε την 3η τιμές και την 5η τιμή της μεταβλητής values:

values[c(3, 5)]
[1] -1.2659750  0.1543779

Επιλογή υποσυνόλου

Άσκηση

Να διαλέξετε τις πρώτες 3 και την 5η τιμή της μεταβλητής values.

Επιλογή υποσυνόλου

Άσκηση

Να διαλέξετε τις θετικές τιμές της μεταβλητής values.

Λύση
values[values > 0]

Απουσία τιμών

  • Στην Python χρησιμοποιούμε None ή np.nan.
  • Η R χρησιμοποιεί το NA (Not Available).

Αν κάνετε πράξεις με NA, το αποτέλεσμα είναι NA.


data <- c(5, 10, NA, 20)

mean(data)
[1] NA


Χρησιμοποιήστε την επιλογή na.rm = TRUE για να τα αγνοήσετε.


mean(data, na.rm = TRUE)
[1] 11.66667

Data frames

  • Το data frame είναι ένας δισδιάστατος πίνακας.
  • Είναι το αντίστοιχο των Pandas της R.
  • Δεν χρειάζεται import βιβλιοθήκης.
  • Κάθε στήλη ενός data frame είναι στην ουσία ένα διάνυσμα (vector).
# Χρήση του ενσωματωμένου dataset mtcars
head(mtcars, n = 3) # Οι πρώτες 3 γραμμές
               mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1

Data frames

Χρησιμοποιούμε το $ για να απομονώσουμε μια στήλη.


# Απομόνωση στήλης
mtcars$mpg[1:5]
[1] 21.0 21.0 22.8 21.4 18.7

Βασικά στατιστικά μεγέθη

Η R έχει ενσωματωμένες τις περισσότερες στατιστικές συναρτήσεις (mean(), median(), sd(), var(), cor()).

# Συσχέτιση μεταξύ κατανάλωσης (mpg) και βάρους (wt)
cor(mtcars$mpg, mtcars$wt)
[1] -0.8676594


Η συνάρτηση summary() παρέχει άμεσα περιγραφικά στατιστικά (min, max, τεταρτημόρια, μέσο) για ένα vector ή ένα ολόκληρο data frame.

# Περιγραφικά στατιστικά για τη στήλη Ιπποδύναμης (hp)
summary(mtcars$hp)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   52.0    96.5   123.0   146.7   180.0   335.0 

Έλεγχοι If / Else

Η λογική είναι ίδια με την Python, αλλά η σύνταξη διαφέρει:

  • Χρησιμοποιούμε παρενθέσεις () για τη συνθήκη.
  • Χρησιμοποιούμε άγκιστρα {} για το μπλοκ κώδικα.
x <- 15

if (x > 10) {
  print("Υψηλή τιμή")
} else {
  print("Χαμηλή τιμή")
}
[1] "Υψηλή τιμή"

Έλεγχοι If / Else

Το elif της Python γράφεται ως else if στην R.


Άσκηση

Αν γράψετε τον κώδικα που να τυπώνει το αντίστοιχο μήνυμα αν το x είναι κάτω από 10. Να κάνει το ίδιο αν το x είναι κάτω από 15. Αλλιώς να τυπώνει ότι το x είναι μεγαλύτερο του 15.

Λύση
if (x < 10) {
  print("Το x είναι μικρότερο του 10")
} else if (x < 15) {
  print("Το x είναι μικρότερο του 15")
} else {
  print("Το x είναι μεγαλύτερο ή ίσο του 15")
}

Δομές επανάληψης

Η σύνταξη χρησιμοποιεί το πρότυπο for (μεταβλητή in ακολουθία) { … }.

# Επανάληψη πάνω σε ακολουθία
for (i in 1:3) {
  print(paste("Επανάληψη νούμερο:", i))
}
[1] "Επανάληψη νούμερο: 1"
[1] "Επανάληψη νούμερο: 2"
[1] "Επανάληψη νούμερο: 3"

Δομές επανάληψης


Άσκηση

Να δημιουργήσετε ένα διάνυσμα x με τιμές από 10 έως 20. Μετά να γράψετε μία επανάληψη όπου κάθε στοιχείο του x θα αυξάνεται κατά 1. Υπάρχει πιο σωστός τρόπος;

Λύση
x <- 10:20

for (i in 1:11) {
  x[i] <- x[i] + 1
}

# Σωστός τρόπος
x <- x + 1

Δομές επανάληψης

Τι κάνουμε αν δεν είναι εύκολο να υπολογίσουμε το πλήθος των στοιχείων της x;

Μπορούμε να χρησιμοποιήσουμε την εντολή seq_along()

z1 <- 50:54

seq_along(z1)
[1] 1 2 3 4 5
z2 <- c("Κώστας", "Ευγενία", "Βασίλης", "Καλλιόπη")

seq_along(z2)
[1] 1 2 3 4

Άρα, στην προηγούμενη άσκηση μία άλλη λύση θα ήταν:

x <- 10:20
for (i in seq_along(x)) {
  x[i] <- x[i] + 1
}

Συναρτήσεις

  • Στην Python ορίζουμε συναρτήσεις με τη λέξη def.
  • Στην R, δημιουργούμε μια συνάρτηση με την εντολή function() και την εκχωρούμε σε ένα αντικείμενο (object).
# Συνάρτηση ύψωσης στο τετράγωνο
square <- function(x) {
  result <- x^2
  
  result
}

square(c(10, 15, 20))
[1] 100 225 400

Συναρτήσεις


Άσκηση

Γράψτε μία συνάρτηση που υπολογίζει τα z-score ενός δείγματος.

Λύση
z_score <- function(x) {
  sd_x <- sd(x, na.rm = TRUE)
  mean_x <- mean(x, na.rm = TRUE)
  if (sd_x > 0) {
    result <- (x - mean_x) / sd_x
  } else {
    result <- "The standard deviation is 0!"
  }
  
  result
}

# !!!!
# Τι κάνουμε αν το x έχει μόνο ένα στοιχείο;

Εγκατάσταση και χρήση πακέτων

install.packages("ggplot2")
library(ggplot2)