Habrastatistics: εξερεύνηση των περισσότερων και λιγότερο επισκέψιμων ενοτήτων του ιστότοπου
Γεια σου Χαμπρ.
В προηγούμενο μέρος Η επισκεψιμότητα του Habr αναλύθηκε σύμφωνα με τις κύριες παραμέτρους - τον αριθμό των άρθρων, τις απόψεις και τις αξιολογήσεις τους. Ωστόσο, το θέμα της δημοτικότητας των ενοτήτων του ιστότοπου παρέμεινε ανεξέταστο. Έγινε ενδιαφέρον να το δούμε αυτό με περισσότερες λεπτομέρειες και να βρούμε τους πιο δημοφιλείς και πιο μη δημοφιλείς κόμβους. Τέλος, θα εξετάσω το εφέ geektimes με περισσότερες λεπτομέρειες, τελειώνοντας με μια νέα επιλογή των καλύτερων άρθρων με βάση τις νέες κατατάξεις.
Για όσους ενδιαφέρονται για το τι έγινε, η συνέχεια είναι κάτω από το κόψιμο.
Να σας υπενθυμίσω για άλλη μια φορά ότι τα στατιστικά και οι βαθμολογίες δεν είναι επίσημα, δεν έχω καμία πληροφορία εκ των έσω. Επίσης δεν είναι εγγυημένο ότι δεν έκανα κάπου λάθος ή έχασα κάτι. Αλλά και πάλι, νομίζω ότι βγήκε ενδιαφέρον. Θα ξεκινήσουμε πρώτα με τον κωδικό όσοι δεν ενδιαφέρονται για αυτό μπορούν να παραλείψουν τις πρώτες ενότητες.
Συλλογή δεδομένων
Στην πρώτη έκδοση του αναλυτή, ελήφθησαν υπόψη μόνο ο αριθμός των προβολών, των σχολίων και των αξιολογήσεων των άρθρων. Αυτό είναι ήδη καλό, αλλά δεν σας επιτρέπει να κάνετε πιο σύνθετα ερωτήματα. Ήρθε η ώρα να αναλύσετε τις θεματικές ενότητες του ιστότοπου, αυτό θα σας επιτρέψει να κάνετε αρκετά ενδιαφέρουσα έρευνα, για παράδειγμα, να δείτε πώς έχει αλλάξει η δημοτικότητα της ενότητας "C++" κατά τη διάρκεια πολλών ετών.
Ο αναλυτής άρθρων έχει βελτιωθεί, τώρα επιστρέφει τους κόμβους στους οποίους ανήκει το άρθρο, καθώς και το ψευδώνυμο του συγγραφέα και τη βαθμολογία του (πολλά ενδιαφέροντα πράγματα μπορούν να γίνουν και εδώ, αλλά αυτά θα έρθουν αργότερα). Τα δεδομένα αποθηκεύονται σε ένα αρχείο csv που μοιάζει με αυτό:
2018-12-18T12:43Z,https://habr.com/ru/post/433550/,"Мессенджер Slack — причины выбора, косяки при внедрении и особенности сервиса, облегчающие жизнь",votes:7,votesplus:8,votesmin:1,bookmarks:32,
views:8300,comments:10,user:ReDisque,karma:5,subscribers:2,hubs:productpm+soft
...
Θα λάβουμε μια λίστα με τους κύριους θεματικούς κόμβους του ιστότοπου.
def get_as_str(link: str) -> Str:
try:
r = requests.get(link)
return Str(r.text)
except Exception as e:
return Str("")
def get_hubs():
hubs = []
for p in range(1, 12):
page_html = get_as_str("https://habr.com/ru/hubs/page%d/" % p)
# page_html = get_as_str("https://habr.com/ru/hubs/geektimes/page%d/" % p) # Geektimes
# page_html = get_as_str("https://habr.com/ru/hubs/develop/page%d/" % p) # Develop
# page_html = get_as_str("https://habr.com/ru/hubs/admin/page%d" % p) # Admin
for hub in page_html.split("media-obj media-obj_hub"):
info = Str(hub).find_between('"https://habr.com/ru/hub', 'list-snippet__tags')
if "*</span>" in info:
hub_name = info.find_between('/', '/"')
if len(hub_name) > 0 and len(hub_name) < 32:
hubs.append(hub_name)
print(hubs)
Η συνάρτηση find_between και η κλάση Str επιλέγουν μια συμβολοσειρά ανάμεσα σε δύο ετικέτες, τις χρησιμοποίησα νωρίτερα. Οι θεματικοί κόμβοι επισημαίνονται με ένα "*", ώστε να μπορούν να επισημανθούν εύκολα και μπορείτε επίσης να αφαιρέσετε το σχόλιο των αντίστοιχων γραμμών για να λάβετε ενότητες άλλων κατηγοριών.
Η έξοδος της συνάρτησης get_hubs είναι μια αρκετά εντυπωσιακή λίστα, την οποία αποθηκεύουμε ως λεξικό. Παραθέτω συγκεκριμένα τη λίστα ολόκληρη για να εκτιμήσετε τον όγκο της.
Οι υπόλοιποι κόμβοι διατηρήθηκαν με τον ίδιο τρόπο. Τώρα είναι εύκολο να γράψετε μια συνάρτηση που επιστρέφει το αποτέλεσμα είτε το άρθρο ανήκει σε geektimes είτε σε διανομέα προφίλ.
Εμφανίζουμε τον αριθμό των δημοσιευμένων άρθρων χρησιμοποιώντας το Matplotlib:
Χώρισα τα άρθρα "geektimes" και "geektimes only" στο γράφημα, επειδή Ένα άρθρο μπορεί να ανήκει και στις δύο ενότητες ταυτόχρονα (για παράδειγμα, "DIY" + "μικροελεγκτές" + "C++"). Χρησιμοποίησα τον χαρακτηρισμό "προφίλ" για να επισημάνω άρθρα προφίλ στον ιστότοπο, αν και ίσως ο αγγλικός όρος προφίλ για αυτό δεν είναι απολύτως σωστός.
Στο προηγούμενο μέρος ρωτήσαμε για το "φαινόμενο geektimes" που σχετίζεται με την αλλαγή στους κανόνες πληρωμής για άρθρα για geektimes από αυτό το καλοκαίρι. Ας εμφανίσουμε τα άρθρα του geektimes ξεχωριστά:
Το αποτέλεσμα είναι ενδιαφέρον. Η κατά προσέγγιση αναλογία των προβολών των άρθρων του geektimes προς το σύνολο είναι περίπου 1:5. Όμως, ενώ ο συνολικός αριθμός των προβολών κυμάνθηκε αισθητά, η προβολή των άρθρων «ψυχαγωγίας» παρέμεινε περίπου στο ίδιο επίπεδο.
Μπορείτε επίσης να παρατηρήσετε ότι ο συνολικός αριθμός των προβολών των άρθρων στην ενότητα "geektimes" εξακολουθεί να μειώνεται μετά την αλλαγή των κανόνων, αλλά "με το μάτι", όχι περισσότερο από το 5% των συνολικών τιμών.
Είναι ενδιαφέρον να δούμε τον μέσο αριθμό προβολών ανά άρθρο:
Για άρθρα «ψυχαγωγίας» είναι περίπου 40% πάνω από το μέσο όρο. Αυτό μάλλον δεν προκαλεί έκπληξη. Η αποτυχία στις αρχές Απριλίου δεν είναι ξεκάθαρη για μένα, ίσως αυτό συνέβη ή είναι κάποιου είδους σφάλμα ανάλυσης ή ίσως κάποιος από τους συγγραφείς του geektimes πήγε διακοπές ;).
Παρεμπιπτόντως, το γράφημα δείχνει δύο ακόμη αξιοσημείωτες κορυφές στον αριθμό των προβολών των άρθρων - τις διακοπές της Πρωτοχρονιάς και του Μαΐου.
Κόμβοι
Ας περάσουμε στην υποσχεμένη ανάλυση των κόμβων. Ας παραθέσουμε τους 20 κορυφαίους κόμβους ανά αριθμό προβολών:
Παραδόξως, ο πιο δημοφιλής κόμβος από άποψη προβολών ήταν η «Ασφάλεια Πληροφοριών» στους 5 κορυφαίους ηγέτες περιλάμβαναν επίσης τον «Προγραμματισμό» και τη «Λαϊκή επιστήμη».
Το Antitop καταλαμβάνει το Gtk και το Κακάο.
Θα σου πω ένα μυστικό, φαίνονται και οι κορυφαίοι κόμβοι εδώ, αν και ο αριθμός των προβολών δεν εμφανίζεται εκεί.
Εκτίμηση
Και τέλος, η υποσχεμένη βαθμολογία. Χρησιμοποιώντας δεδομένα ανάλυσης κόμβων, μπορούμε να εμφανίσουμε τα πιο δημοφιλή άρθρα για τους πιο δημοφιλείς κόμβους για φέτος το 2019.
Και τέλος, για να μην προσβληθεί κανείς, θα δώσω τη βαθμολογία του λιγότερο επισκέψιμου κόμβου "gtk". Μέσα σε ένα χρόνο δημοσιεύτηκε одна Το άρθρο, το οποίο επίσης «αυτόματα» καταλαμβάνει την πρώτη γραμμή της βαθμολογίας.