Πώς να βρείτε τη μέση, τη διάμεση και τη λειτουργία στην Python;

Ο μέσος όρος, ο διάμεσος και ο τρόπος είναι θεμελιώδη θέματα της στατιστικής. Μπορείτε εύκολα να τα υπολογίσετε σε Python, με και χωρίς τη χρήση εξωτερικών βιβλιοθηκών.

Αυτά τα τρία είναι τα κύρια μέτρα του κεντρική τάση. Η κεντρική τάση μας ενημερώνει για τις «κανονικές» ή «μέσες» τιμές ενός συνόλου δεδομένων. Εάν μόλις ξεκινάτε με την επιστήμη των δεδομένων, αυτό είναι το σωστό σεμινάριο για εσάς.

Μέχρι το τέλος αυτού του σεμιναρίου θα:

  • Κατανοήστε την έννοια του μέσου όρου, του μέσου όρου και του τρόπου λειτουργίας
  • Να είστε σε θέση να δημιουργήσετε τις δικές σας συναρτήσεις μέσου όρου, διάμεσου και τρόπου λειτουργίας στην Python
  • Χρησιμοποιήστε τη μονάδα στατιστικών στοιχείων της Python για να ξεκινήσετε γρήγορα τη χρήση αυτών των μετρήσεων

Εάν θέλετε μια έκδοση με δυνατότητα λήψης των παρακάτω ασκήσεων, μη διστάσετε να ελέγξετε τις Αποθετήριο GitHub.

Ας δούμε τους διαφορετικούς τρόπους υπολογισμού της μέσης τιμής, της διάμεσης και της λειτουργίας.

Υπολογισμός του μέσου όρου στην Python

ο σημαίνω ή ο αριθμητικός μέσος όρος είναι το πιο χρησιμοποιούμενο μέτρο της κεντρικής τάσης.

Θυμηθείτε ότι η κεντρική τάση είναι μια τυπική τιμή ενός συνόλου δεδομένων.

Ένα σύνολο δεδομένων είναι μια συλλογή δεδομένων, επομένως ένα σύνολο δεδομένων στην Python μπορεί να είναι οποιαδήποτε από τις ακόλουθες ενσωματωμένες δομές δεδομένων:

  • Λίστες, πλειάδες και σύνολα: μια συλλογή αντικειμένων
  • Χορδές: μια συλλογή χαρακτήρων
  • Λεξικό: μια συλλογή ζευγών κλειδιών-τιμών

Σημείωση: Αν και υπάρχουν άλλες δομές δεδομένων στην Python, όπως ουρές ή στοίβες, θα χρησιμοποιήσουμε μόνο τις ενσωματωμένες.

Μπορούμε να υπολογίσουμε τη μέση τιμή προσθέτοντας όλες τις τιμές ενός συνόλου δεδομένων και διαιρώντας το αποτέλεσμα με τον αριθμό των τιμών. Για παράδειγμα, εάν έχουμε την ακόλουθη λίστα αριθμών:

[1, 2, 3, 4, 5, 6]

Ο μέσος όρος ή ο μέσος όρος θα ήταν 3,5 επειδή το άθροισμα της λίστας είναι 21 και το μήκος του είναι 6. Το είκοσι ένα διαιρούμενο με το έξι είναι 3,5. Μπορείτε να εκτελέσετε αυτόν τον υπολογισμό με τον παρακάτω υπολογισμό:

(1 + 2 + 3 + 4 + 5 + 6) / 6 = 21

Σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε τους παίκτες μιας ομάδας μπάσκετ ως δείγματα δεδομένων μας.

Δημιουργία προσαρμοσμένης μέσης συνάρτησης

Ας ξεκινήσουμε υπολογίζοντας τη μέση (μέση) ηλικία των παικτών σε μια ομάδα μπάσκετ. Το όνομα της ομάδας θα είναι «Pythonic Machines».

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

def mean(dataset):
    return sum(dataset) / len(dataset)

print(mean(pythonic_machine_ages))

Αναλύοντας αυτόν τον κώδικα:

  • Το “pythonic_machine_ages” είναι μια λίστα με τις ηλικίες των παικτών μπάσκετ
  • Ορίζουμε μια συνάρτηση mean() που επιστρέφει το άθροισμα του δεδομένου συνόλου δεδομένων διαιρούμενο με το μήκος του
    • Η συνάρτηση sum() επιστρέφει το συνολικό άθροισμα (ειρωνικά) των τιμών μιας επαναλαμβανόμενης, σε αυτήν την περίπτωση, μιας λίστας. Προσπαθήστε να περάσετε το σύνολο δεδομένων ως όρισμα, θα επιστρέψει 211
    • Η συνάρτηση len() επιστρέφει το μήκος ενός iterable, αν του περάσετε το σύνολο δεδομένων θα λάβετε 8
  • Περνάμε τις ηλικίες της ομάδας μπάσκετ στη συνάρτηση mean() και εκτυπώνουμε το αποτέλεσμα.
  Μπορείτε να λαμβάνετε ειδοποιήσεις σε απόθεμα από καταστήματα; Όχι Σημαντικά.

Εάν ελέγξετε την έξοδο, θα λάβετε:

26.375
# Because 211 / 8 = 26.375

Αυτή η έξοδος αντιπροσωπεύει τη μέση ηλικία των παικτών της ομάδας μπάσκετ. Σημειώστε πώς ο αριθμός δεν εμφανίζεται στο σύνολο δεδομένων, αλλά περιγράφει ακριβώς την ηλικία των περισσότερων παικτών.

Χρησιμοποιώντας mean() από τη Στατιστική Μονάδα Python

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

Δεδομένου ότι είναι μέρος του Πρότυπη βιβλιοθήκη Python δεν θα χρειαστεί να εγκαταστήσετε κανένα εξωτερικό πακέτο με PIP.

Δείτε πώς χρησιμοποιείτε αυτήν την ενότητα:

from statistics import mean

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

print(mean(pythonic_machine_ages))

Στον παραπάνω κώδικα, χρειάζεται απλώς να εισαγάγετε τη συνάρτηση mean() από τη μονάδα στατιστικών και να της μεταβιβάσετε το σύνολο δεδομένων ως όρισμα. Αυτό θα επιστρέψει το ίδιο αποτέλεσμα με την προσαρμοσμένη συνάρτηση που ορίσαμε στην προηγούμενη ενότητα:

26.375

Τώρα έχετε ξεκάθαρη την έννοια του μέσου όρου, ας συνεχίσουμε με τη διάμεση μέτρηση.

Εύρεση του μέσου όρου στην Python

ο διάμεσος είναι η μεσαία τιμή ενός ταξινομημένου συνόλου δεδομένων. Χρησιμοποιείται — και πάλι — για να παρέχει μια «τυπική» τιμή ενός καθορισμένου πληθυσμός.

Στον προγραμματισμό, μπορούμε να ορίσουμε τη διάμεσο ως την τιμή που χωρίζει μια ακολουθία σε δύο μέρη — Το κάτω μισό και το ανώτερο μισό —.

Για να υπολογίσουμε τη διάμεσο, πρώτα, πρέπει να ταξινομήσουμε το σύνολο δεδομένων. Θα μπορούσαμε να το κάνουμε αυτό με αλγόριθμους ταξινόμησης ή χρησιμοποιώντας την ενσωματωμένη συνάρτηση sorted(). Το δεύτερο βήμα είναι να προσδιορίσετε εάν το μήκος δεδομένων είναι περιττό ή ζυγό. Ανάλογα με αυτό μερικές από τις ακόλουθες διαδικασίες:

  • Odd: Η διάμεσος είναι η μεσαία τιμή του συνόλου δεδομένων
  • Ζυγός: Η διάμεσος είναι το άθροισμα των δύο μεσαίων τιμών διαιρούμενο με δύο

Συνεχίζοντας με το σύνολο δεδομένων της ομάδας μπάσκετ, ας υπολογίσουμε το διάμεσο ύψος των παικτών σε εκατοστά:

[181, 187, 196, 196, 198,  203, 207, 211, 215]
# Since the dataset is odd, we select the middle value
median = 198

Όπως μπορείτε να δείτε, καθώς το μήκος του συνόλου δεδομένων είναι περιττό, μπορούμε να πάρουμε τη μεσαία τιμή ως διάμεσο. Ωστόσο, τι θα συνέβαινε αν ένας παίκτης μόλις αποσυρόταν;

Θα χρειαστεί να υπολογίσουμε τη διάμεσο λαμβάνοντας τις δύο μεσαίες τιμές του συνόλου δεδομένων

[181, 187, 196, 198, 203, 207, 211, 215] 
# We select the two middle values, and divide them by 2
median = (198 + 203) / 2
median = 200.5

Δημιουργία προσαρμοσμένης διάμεσης συνάρτησης

Ας εφαρμόσουμε την παραπάνω έννοια σε μια συνάρτηση Python.

Θυμηθείτε τα τρία βήματα που πρέπει να ακολουθήσουμε για να λάβουμε τη διάμεση τιμή ενός συνόλου δεδομένων:

  • Ταξινόμηση του συνόλου δεδομένων: Μπορούμε να το κάνουμε αυτό με τη συνάρτηση sorted().
  • Προσδιορίστε αν είναι περιττό ή ζυγό: Μπορούμε να το κάνουμε αυτό παίρνοντας το μήκος του συνόλου δεδομένων και χρησιμοποιώντας τον τελεστή modulo (%)
  • Επιστρέψτε τη διάμεσο με βάση κάθε περίπτωση:
    • Odd: Επιστρέψτε τη μεσαία τιμή
    • Ζυγός: Επιστρέψτε τον μέσο όρο των δύο μεσαίων τιμών

Αυτό θα είχε ως αποτέλεσμα την ακόλουθη λειτουργία:

pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

def median(dataset):
    data = sorted(dataset)
    index = len(data) // 2
    
    # If the dataset is odd  
    if len(dataset) % 2 != 0:
        return data[index]
    
    # If the dataset is even
    return (data[index - 1] + data[index]) / 2

Εκτύπωση του αποτελέσματος των συνόλων δεδομένων μας:

print(median(pythonic_machines_heights))
print(median(after_retirement))

Παραγωγή:

198
200.5

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

  Πώς να αλλάξετε τα περιθώρια σελίδας στο Word

Το ευρετήριο αποθηκεύει τη μεσαία τιμή — ή την ανώτερη-μεσαία τιμή — του συνόλου δεδομένων, χρησιμοποιώντας τον τελεστή διαίρεσης ακέραιου αριθμού. Για παράδειγμα, αν περνούσαμε τη λίστα “pythonic_machine_heights” θα είχε την τιμή 4.

Θυμηθείτε ότι στην Python τα ευρετήρια ακολουθιών ξεκινούν από το μηδέν, αυτό συμβαίνει επειδή είμαστε σε θέση να επιστρέψουμε το μεσαίο ευρετήριο μιας λίστας, με μια διαίρεση ακέραιου αριθμού.

Στη συνέχεια ελέγχουμε αν το μήκος του συνόλου δεδομένων είναι περιττό συγκρίνοντας το αποτέλεσμα της λειτουργίας modulo με οποιαδήποτε τιμή που δεν είναι μηδέν. Εάν η συνθήκη είναι αληθής, επιστρέφουμε το μεσαίο στοιχείο, για παράδειγμα, με τη λίστα “pythonic_machine_heights”:

>>> pythonic_machine_heights[4]
# 198

Από την άλλη πλευρά, εάν το σύνολο δεδομένων είναι άρτιο, επιστρέφουμε το άθροισμα των μεσαίων τιμών διαιρεμένο με δύο. Σημειώστε αυτά τα δεδομένα[index -1] μας δίνει το κατώτερο μέσο του συνόλου δεδομένων, ενώ τα δεδομένα[index] μας τροφοδοτεί με το ανώτερο μέσο.

Χρησιμοποιώντας την median() από τη στατιστική μονάδα Python

Αυτός ο τρόπος είναι πολύ πιο απλός επειδή χρησιμοποιούμε μια ήδη υπάρχουσα συνάρτηση από τη μονάδα στατιστικών στοιχείων.

Προσωπικά, αν υπάρχει κάτι που έχει ήδη οριστεί για μένα, θα το χρησιμοποιούσα λόγω της αρχής DRY —Μην επαναλαμβάνεσαι — (σε αυτήν την περίπτωση, μην επαναλαμβάνεις τον κώδικα άλλων).

Μπορείτε να υπολογίσετε τη διάμεσο των προηγούμενων συνόλων δεδομένων με τον ακόλουθο κώδικα:

from statistics import median

pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

print(median(pythonic_machines_heights))
print(median(after_retirement))

Παραγωγή:

198
200.5

Υπολογισμός της λειτουργίας στην Python

ο τρόπος είναι η πιο συχνή τιμή στο σύνολο δεδομένων. Μπορούμε να το σκεφτούμε ως τη «δημοφιλή» ομάδα ενός σχολείου, που μπορεί να αντιπροσωπεύει ένα πρότυπο για όλους τους μαθητές.

Ένα παράδειγμα λειτουργίας θα μπορούσε να είναι οι καθημερινές πωλήσεις ενός καταστήματος τεχνολογίας. Η λειτουργία αυτού του συνόλου δεδομένων θα ήταν το προϊόν με τις περισσότερες πωλήσεις μιας συγκεκριμένης ημέρας.

['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']

Όπως καταλαβαίνετε, η λειτουργία του παραπάνω συνόλου δεδομένων είναι “laptop” επειδή ήταν η πιο συχνή τιμή στη λίστα.

Το ωραίο με τη λειτουργία είναι ότι το σύνολο δεδομένων δεν πρέπει να είναι αριθμητικό. Για παράδειγμα, μπορούμε να δουλέψουμε με χορδές.

Ας αναλύσουμε τις πωλήσεις μιας άλλης μέρας:

['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']

Το παραπάνω σύνολο δεδομένων έχει δύο λειτουργίες: “ποντίκι” και “ακουστικά”, επειδή και οι δύο έχουν συχνότητα δύο. Αυτό σημαίνει ότι είναι ένα πολυτροπικό σύνολο δεδομένων.

Τι γίνεται αν δεν μπορούμε να βρούμε τη λειτουργία σε ένα σύνολο δεδομένων, όπως το παρακάτω;

['usb', 'camera', 'smartphone', 'laptop', 'TV']

Αυτό ονομάζεται α ομοιόμορφη κατανομήβασικά, σημαίνει ότι δεν υπάρχει καμία λειτουργία στο σύνολο δεδομένων.

  Πρέπει να ακυρώσετε το δίκτυο WWE;

Τώρα έχετε μια γρήγορη κατανόηση της έννοιας της λειτουργίας, ας την υπολογίσουμε στην Python.

Δημιουργία μιας συνάρτησης προσαρμοσμένης λειτουργίας

Μπορούμε να σκεφτούμε τη συχνότητα μιας τιμής ως ένα ζεύγος κλειδιού-τιμής, με άλλα λόγια, ένα λεξικό Python.

Ανακεφαλαιώνοντας την αναλογία του μπάσκετ, μπορούμε να χρησιμοποιήσουμε δύο σύνολα δεδομένων για να δουλέψουμε: Τους πόντους ανά παιχνίδι και τη χορηγία sneaker ορισμένων παικτών.

Για να βρούμε τη λειτουργία πρώτα πρέπει να δημιουργήσουμε ένα λεξικό συχνότητας με κάθε μία από τις τιμές που υπάρχουν στο σύνολο δεδομένων, στη συνέχεια να λάβουμε τη μέγιστη συχνότητα και να επιστρέψουμε όλα τα στοιχεία με αυτήν τη συχνότητα.

Ας το μεταφράσουμε αυτό σε κώδικα:

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
               'jordan', 'rebook', 'under-armour', 'adidas']

def mode(dataset):
    frequency = {}

    for value in dataset:
        frequency[value] = frequency.get(value, 0) + 1

    most_frequent = max(frequency.values())

    modes = [key for key, value in frequency.items()
                      if value == most_frequent]

    return modes

Έλεγχος του αποτελέσματος μεταβιβάζοντας τις δύο λίστες ως ορίσματα:

print(mode(points_per_game))
print(mode(sponsorship))

Παραγωγή:

[10]
['nike', 'adidas', 'jordan']

Όπως μπορείτε να δείτε, η πρώτη δήλωση εκτύπωσης μας έδωσε μια μοναδική λειτουργία, ενώ η δεύτερη επέστρεψε πολλαπλούς τρόπους λειτουργίας.

Εξηγώντας βαθύτερα τον παραπάνω κώδικα:

  • Δηλώνουμε λεξικό συχνότητας
  • Επαναλαμβάνουμε πάνω από το σύνολο δεδομένων για να δημιουργήσουμε ένα ιστόγραμμα — ο στατιστικός όρος για ένα σύνολο μετρητών (ή συχνοτήτων) —
    • Εάν το κλειδί βρεθεί στο λεξικό τότε, προσθέτει ένα στην τιμή
    • Αν δεν βρεθεί, δημιουργούμε ένα ζεύγος κλειδιού-τιμής με τιμή ένα
  • Η μεταβλητή most_frequent αποθηκεύει — ειρωνικά — τη μεγαλύτερη τιμή (όχι το κλειδί) του λεξικού συχνότητας
  • Επιστρέφουμε τη μεταβλητή modes που αποτελείται από όλα τα πλήκτρα του λεξικού συχνότητας με τη μεγαλύτερη συχνότητα.

Σημειώστε πόσο σημαντική είναι η ονομασία μεταβλητών για τη σύνταξη ευανάγνωστου κώδικα.

Χρήση mode() και multimode() από τη στατιστική μονάδα Python

Για άλλη μια φορά η ενότητα στατιστικών μας παρέχει έναν γρήγορο τρόπο να κάνουμε βασικές λειτουργίες στατιστικών στοιχείων.

Μπορούμε να χρησιμοποιήσουμε δύο λειτουργίες: τρόπος() και multimode().

from statistics import mode, multimode

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
               'jordan', 'rebook', 'under-armour', 'adidas']

Ο παραπάνω κώδικας εισάγει και τις δύο συναρτήσεις και καθορίζει τα σύνολα δεδομένων με τα οποία έχουμε εργαστεί.

Εδώ έρχεται η μικρή διαφορά: Η συνάρτηση mode() επιστρέφει την πρώτη λειτουργία που συναντά, ενώ η multimode() επιστρέφει μια λίστα με τις πιο συχνές τιμές στο σύνολο δεδομένων.

Κατά συνέπεια, μπορούμε να πούμε ότι η προσαρμοσμένη συνάρτηση που ορίσαμε είναι στην πραγματικότητα μια συνάρτηση multimode().

print(mode(points_per_game))
print(mode(sponsorship))

Παραγωγή:

10
nike

Σημείωση: Στην Python 3.8 ή νεότερη έκδοση, η συνάρτηση mode() επιστρέφει την πρώτη λειτουργία που βρήκε. Εάν έχετε μια παλαιότερη έκδοση, θα λάβετε ένα Σφάλμα στατιστικών.

Χρησιμοποιώντας τη συνάρτηση multimode():

print(multimode(points_per_game))
print(multimode(sponsorship))

Παραγωγή:

[10]
['nike', 'adidas', 'jordan']

Εν κατακλείδι

Συγχαρητήρια! Αν ακολουθούσατε μέχρι τώρα, μάθατε πώς να υπολογίζετε τη μέση τιμή, τη διάμεσο και τη λειτουργία, τις κύριες μετρήσεις κεντρικής τάσης.

Αν και μπορείτε να ορίσετε τις προσαρμοσμένες συναρτήσεις σας για να βρείτε τη μέση τιμή, τη διάμεσο και τη λειτουργία, συνιστάται η χρήση της ενότητας στατιστικών στοιχείων, καθώς αποτελεί μέρος της τυπικής βιβλιοθήκης και δεν χρειάζεται να εγκαταστήσετε τίποτα για να αρχίσετε να τη χρησιμοποιείτε.

Στη συνέχεια, διαβάστε μια φιλική εισαγωγή στην ανάλυση δεδομένων στην Python.