Προγραμματισμός

Πώς να κάνετε αναζήτηση στο Twitter με rtweet και R

Το Twitter είναι μια εξαιρετική πηγή ειδήσεων για το R - ειδικά κατά τη διάρκεια συνεδρίων όπως το useR! και RStudio Conference. Και χάρη στο R και το πακέτο rtweet, μπορείτε να δημιουργήσετε το δικό σας εργαλείο για να κατεβάσετε tweets για εύκολη αναζήτηση, ταξινόμηση και φιλτράρισμα. Ας ρίξουμε μια ματιά, βήμα προς βήμα.

Πρώτα θέλετε να εγκαταστήσετε οποιοδήποτε από τα πακέτα του έργου rtweet που δεν έχετε ήδη: rtweet, αντιδραστικό, κόλλα, stringr, httpuv και dplyr. Στη συνέχεια, για να ξεκινήσετε, φορτώστε rtweet και dplyr.

# Εάν πρέπει να εγκαταστήσετε οποιοδήποτε από αυτά:

# install.packages ("rtweet")

# install.packages ("αντιδρώντα")

# install.packages ("κόλλα")

# install.packages ("stringr")

# install.packages ("httpuv")

# install.packages ("dplyr")

# install.packages ("purrr")

βιβλιοθήκη (rtweet)

βιβλιοθήκη (dplyr)

Εξουσιοδοτήστε το API του Twitter

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

Ο Michael Kearney, ο οποίος έγραψε rtweet, δίνει στους χρήστες rtweet δύο επιλογές. Ο ευκολότερος τρόπος είναι απλά να ζητήσετε κάποια tweets. Εάν δεν υπάρχουν αποθηκευμένα διαπιστευτήρια στο σύστημά σας, θα πρέπει να ανοίξει ένα παράθυρο προγράμματος περιήγησης που σας ζητά να εγκρίνετε το αίτημα. Μετά από αυτό, ένα διακριτικό εξουσιοδότησης θα αποθηκευτεί στο αρχείο .Renviron, ώστε να μην χρειαστεί να εξουσιοδοτήσετε ξανά στο μέλλον.

Μπορείτε να μεταβείτε στο rtweet.info για να δείτε την άλλη μέθοδο, η οποία περιλαμβάνει τη δημιουργία λογαριασμού προγραμματιστή Twitter και ένα νέο έργο για τη δημιουργία διαπιστευτηρίων εξουσιοδότησης. Εάν πρόκειται να χρησιμοποιήσετε το Rtweet πολύ, πιθανότατα θα θέλετε να το κάνετε αυτό. Αλλά για να ξεκινήσετε, ο ευκολότερος τρόπος είναι, λοιπόν, ευκολότερος.

Εισαγωγή tweets

Για να αναζητήσετε tweet με ένα συγκεκριμένο hashtag (ή φράση που δεν είναι hashtag), χρησιμοποιείτε το διαισθητικό όνομα sαυτιά_tweets () λειτουργία. Χρειάζονται αρκετά επιχειρήματα, συμπεριλαμβανομένου του ερωτήματος, όπως #rstudioconf ή #rstats; αν θέλετε να συμπεριλάβετε retweets; και τον αριθμό των tweets που θα επιστρέψουν. Ο αριθμός είναι προεπιλεγμένος στα 100.

Ενώ μπορείτε να λάβετε έως και 18.000 tweets εντός 15 λεπτών, υπάρχει ένας σημαντικός περιορισμός κατά τη χρήση του API Twitter για αναζήτηση μιας λέξης ή φράσης: τα αποτελέσματα αναζήτησης επιστρέφουν μόνο έξι έως εννέα ημέρες, εκτός εάν πληρώνετε για έναν λογαριασμό premium API API Σε αντίθεση με τον ιστότοπο του Twitter, δεν μπορείτε να χρησιμοποιήσετε το rtweet για αναζήτηση tweets από μια διάσκεψη του προηγούμενου έτους. Δεν θα μπορείτε να κάνετε αναζήτηση δυο εβδομάδες μετά από μια διάσκεψη για να λάβετε αυτά τα tweets. Επομένως, θα θέλατε να αποθηκεύσετε τα tweets που τραβάτε τώρα που ίσως θέλετε στο μέλλον.

Υπάρχουν περισσότερα επιχειρήματα που μπορείτε να χρησιμοποιήσετε για να προσαρμόσετε την αναζήτησή σας, αλλά ας ξεκινήσουμε με μια βασική αναζήτηση: 200 tweets με το #rstudioconf hashtag, χωρίς retweets.

tweet_df <- search_tweets ("# rstudioconf", n = 200,

include_rts = FALSE)

Εάν εκτελέσετε αυτόν τον κωδικό και δεν έχετε χρησιμοποιήσει ποτέ ξανά το rtweet, θα σας ζητηθεί να εξουσιοδοτήσετε μια εφαρμογή Twitter.

Σημειώστε ότι παρόλο που ζητάτε 200 tweets, ενδέχεται να επιστρέψετε λιγότερα. Ένας λόγος είναι ότι ενδέχεται να μην υπάρχουν 200 tweets για το ερώτημά σας τις τελευταίες έξι έως εννέα ημέρες. Ένα άλλο είναι ότι το Twitter μπορεί πράγματι να έχει αρχικά εξάγει 200 ​​tweets, αλλά μετά το φιλτράρισμα των retweets, απομένουν λιγότερα.

Το πλαίσιο δεδομένων tweet_df επιστρέφει με 90 στήλες δεδομένων για κάθε tweet:

Sharon Machlis,

Οι στήλες που με ενδιαφέρουν συνήθως είναι status_id, create_at, screen_name, text, favourite_count, retweet_count, και urls_expanded_url. Μπορεί να θέλετε κάποιες άλλες στήλες για την ανάλυσή σας. αλλά για αυτό το σεμινάριο, θα επιλέξω μόνο αυτές τις στήλες.

Αναζητήστε, φιλτράρετε και αναλύστε τα tweets σας

Υπάρχουν πολλές ενδιαφέρουσες απεικονίσεις και αναλύσεις που μπορείτε να κάνετε με τα δεδομένα Twitter και R. Ορισμένες από αυτές είναι ενσωματωμένες στο rtweet. Αλλά γράφω αυτό το σεμινάριο φορώντας το καπέλο του τεχνικού δημοσιογράφου. Θέλω έναν εύκολο τρόπο να βλέπω νέα και δροσερά πράγματα που ίσως δεν γνωρίζω.

Τα πιο δημοφιλή tweets από μια διάσκεψη μπορεί να βοηθήσουν με αυτό. Και αν χρησιμοποιώ το rtweet και το API του Twitter, δεν χρειάζεται να βασίζομαι στον «δημοφιλή» αλγόριθμο του Twitter. Μπορώ να κάνω τις δικές μου αναζητήσεις και να ορίσω τα δικά μου κριτήρια για το "δημοφιλές". Ίσως θέλω να αναζητήσω κορυφαία tweets από την τρέχουσα ημέρα, ενώ βρίσκεται σε εξέλιξη ένα συνέδριο ή να φιλτράρω για ένα συγκεκριμένο θέμα που με ενδιαφέρει - όπως "λαμπερό" ή "purrr" - ταξινομημένο με βάση τις περισσότερες επισημάνσεις "μου αρέσει" ή τα περισσότερα retweets.

Ένας από τους ευκολότερους τρόπους για να κάνετε τέτοιου είδους αναζητήσεις και είδη είναι με έναν πίνακα με δυνατότητα ταξινόμησης. Το DT είναι ένα δημοφιλές πακέτο για αυτό. Αλλά πρόσφατα πειραματίζομαι με ένα άλλο: αντιδραστικό.

Η προεπιλεγμένη αντιδρώντας () είναι είδος μπλα. Για παράδειγμα:

tweet_table_data <- επιλέξτε (tweets, -user_id, -status_id)

βιβλιοθήκη (αντιδραστική)

αντιδραστικό (tweet_table_data)

Αυτός ο κώδικας παράγει έναν πίνακα που μοιάζει με αυτό:

Sharon Machlis,

Μπορούμε όμως να προσθέσουμε ορισμένες προσαρμογές, όπως:

αντιδραστικό (tweet_table_data,

φιλτράρισμα = TRUE, αναζήτηση = TRUE, περίγραμμα = TRUE,

ριγέ = TRUE, highlight = TRUE,

defaultPageSize = 25, showPageSizeOptions = TRUE,

showSortable = TRUE, pageSizeOptions = c (25, 50, 75, 100, 200), defaultSortOrder = "desc",

στήλες = λίστα (

create_at = colDef (defaultSortOrder = "asc"),

screen_name = colDef (defaultSortOrder = "asc"),

κείμενο = colDef (html = TRUE, minWidth = 190, resizable = TRUE),

Favor_count = colDef (φιλτράρισμα = FALSE),

retweet_count = colDef (φιλτράρισμα = FALSE),

urls_expanded_url = colDef (html = TRUE)

)

)

Το αποτέλεσμα είναι ένας πίνακας που μοιάζει με αυτό:

Sharon Machlis,

Διαμορφώστε τον πίνακα με δυνατότητα αντίδρασης δεδομένων

Στο κομμάτι κώδικα παραπάνω, το φιλτράρεται = ΑΛΗΘΟΣ Το όρισμα πρόσθεσε φίλτρα αναζήτησης κάτω από κάθε κεφαλίδα στήλης και ερευνήσιμος πρόσθεσε το συνολικό πλαίσιο αναζήτησης πίνακα επάνω δεξιά. Ανάβοντας συνορεύει, ριγέ, και αποκορύφωμα κάνει ό, τι μπορείτε να περιμένετε: Προσθέτει περίγραμμα τραπεζιού, προσθέτει χρώμα εναλλασσόμενης σειράς "ρίγες" και επισημαίνει μια σειρά αν βάλετε έναν δρομέα σε αυτό.

Έβαλα το δικό μου defaultPageSize έως 25. ΤοshowPageSizeOptions Το όρισμα μου επιτρέπει να αλλάξω διαδραστικά το μήκος της σελίδας και, στη συνέχεια, καθορίζω επιλογές μεγέθους σελίδας που θα εμφανίζονται σε ένα αναπτυσσόμενο μενού κάτω από τον πίνακα (δεν είναι ορατό στο στιγμιότυπο οθόνης). ο showSortable Το όρισμα προσθέτει μικρά εικονίδια βέλους δίπλα στα ονόματα των στηλών, ώστε οι χρήστες να γνωρίζουν ότι μπορούν να κάνουν κλικ για ταξινόμηση. Και ορίζω κάθε στήληdefaultSortOrder να κατεβαίνουμε αντί να ανεβαίνουμε. Αν λοιπόν κάνω κλικ στη στήλη του αριθμού των retweets ή των επισημάνσεων "μου αρέσει", θα το βλέπω ως το μεγαλύτερο έως το λιγότερο, τουλάχιστον στο μεγαλύτερο.

Τέλος, υπάρχει το στήλες διαφωνία. Αυτή είναι μια λίστα που περιέχει έναν ορισμό στήλης για κάθε στήλη. Ανατρέξτε στα αντιδρώσιμα αρχεία βοήθειας για περισσότερες λεπτομέρειες σχετικά με άλλες διαθέσιμες επιλογές. Σε αυτό το παράδειγμα, έχω ορίσει δημιουργήθηκε_at και Όνομα οθόνης στήλες να έχουν μια προεπιλεγμένη σειρά ταξινόμησης αύξουσα. Για το κείμενο στήλη, το έχω ορίσει να εμφανίζει HTML ως HTML, ώστε να μπορώ να προσθέσω συνδέσμους με δυνατότητα κλικ. Έθεσα επίσης ένα ελάχιστο πλάτος στήλης 190 pixel και έκανα την αλλαγή μεγέθους της στήλης - έτσι οι χρήστες μπορούν να κάνουν κλικ και να σύρουν για να την κάνουν ευρύτερη ή στενότερη.

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

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

Κάντε τον πίνακα δεδομένων σας πιο χρήσιμο

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

Πιστεύω ότι είναι βολικό να προσθέσετε ένα μικρό κλικ με δυνατότητα κλικ στο τέλος κάθε κειμένου του tweet στο οποίο μπορείτε να κάνετε κλικ για να δείτε το πραγματικό tweet στο Twitter. Αποφάσισα >> αν και θα μπορούσε να είναι οποιοσδήποτε χαρακτήρας ή χαρακτήρες.

Για να δημιουργήσω μια διεύθυνση URL, πρέπει να γνωρίζω τη μορφή ενός tweet, το οποίο εάν κοιτάξετε οποιοδήποτε tweet στον ιστότοπο του Twitter, μπορείτε να δείτε ότι είναι//twitter.com/username/status/tweetID. 

Χρησιμοποιώντας το κόλλα κόλλας, αυτό θα αποδοθεί ως εξής:

κόλλα :: κόλλα ("// twitter.com/{screen_name}/status/{status_id}")

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

Ο πλήρης κωδικός μου για τη δημιουργία στήλης με σύνδεσμο με δυνατότητα κλικ στο tweet μετά το κείμενο του tweet:

Tweet = κόλλα :: κόλλα ("{text} >>") 

Και ο κώδικας για τη δημιουργία ενός πλαισίου δεδομένων για έναν διαδραστικό πίνακα:

tweet_table_data%

επιλέξτε (user_id, status_id, create_at, screen_name, text, favourite_count, retweet_count, urls_expanded_url)%>%

αλλάσσω(

Tweet = κόλλα :: κόλλα ("{text} >>")

)%>%

επιλέξτε (DateTime = create_at, User = screen_name, Tweet, Likes = favour_count, RTs = retweet_count, URLs = urls_expanded_url)

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

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

make_url_html <- function (url) {

εάν (μήκος (url) <2) {

αν (! is.na (url)) {

as.character (κόλλα ("{url}"))

} αλλιώς {

""

}

} αλλιώς {

paste0 (purrr :: map_chr (url, ~ paste0 ("", .x, "", collapse = ",")), collapse = ",")

}

}

τρέχω purrr :: map_chr () στην τιμή της διεύθυνσης URL εάν υπάρχουν δύο ή περισσότερες διευθύνσεις URL έτσι ώστε κάθε διεύθυνση URL να λαμβάνει το δικό της HTML. και μετά τα επικολλάω και τα συμπτύσσω σε μια συμβολοσειρά ενός χαρακτήρα για να εμφανιστεί στον πίνακα.

Μόλις η λειτουργία μου λειτουργεί, χρησιμοποιώ purrr :: map_chr () ξανά για να επαναλάβετε κάθε στοιχείο της στήλης:

tweet_table_data $ URLs <- purrr :: map_chr (tweet_table_data $ URLs, make_url_html)

Μην ανησυχείτε αν δεν καταλαβαίνετε αυτό το κομμάτι, καθώς είναι πολύ περισσότερο για τη στήλη purrr και λίστας παρά το rtweet και το αντιδραστικό. Και δεν είναι απαραίτητο να αναζητήσετε και να ταξινομήσετε τα tweets. μπορείτε πάντα να κάνετε κλικ στο αρχικό tweet και να δείτε συνδέσμους με δυνατότητα κλικ εκεί.

Τέλος, μπορώ να τρέξω τα προσαρμοσμένα μου αντιδρώντας () κωδικός στα νέα δεδομένα του πίνακα tweet:

αντιδραστικό (tweet_table_data,

φιλτραρίσιμο = TRUE, με δυνατότητα αναζήτησης = TRUE, περίγραμμα = TRUE, striped = TRUE, highlight = TRUE,

showSortable = TRUE, defaultSortOrder = "desc", defaultPageSize = 25, showPageSizeOptions = TRUE, pageSizeOptions = c (25, 50, 75, 100, 200),

στήλες = λίστα (

DateTime = colDef (defaultSortOrder = "asc"),

Χρήστης = colDef (defaultSortOrder = "asc"),

Tweet = colDef (html = TRUE, minWidth = 190, resizable = TRUE),

Likes = colDef (φιλτράρισμα = FALSE, format = colFormat (διαχωριστικά = TRUE)),

RTs = colDef (φιλτράρισμα = FALSE, format = colFormat (διαχωριστικά = TRUE)),

Διευθύνσεις URL = colDef (html = TRUE)

)

)

Εάν παρακολουθείτε, θα πρέπει να έχετε το δικό σας διαδραστικό πίνακα που μπορεί να αναζητά, να ταξινομεί και να φιλτράρει tweet διάσκεψης ή θεμάτων.

Συμβουλές για συλλέκτες tweet

Ένα πράγμα που πρέπει να θυμάστε: Εάν παρακολουθείτε ένα hashtag διάσκεψης κατά τη διάρκεια μιας διάσκεψης, θα θελήσετε να τραβήξετε αρκετά tweets για να λάβετε ολόκληρο το συνέδριο. Επομένως, ελέγξτε την πρώτη ημερομηνία στο πλαίσιο δεδομένων tweet. Εάν αυτή η ημερομηνία είναι μετά την έναρξη του συνεδρίου, ζητήστε περισσότερα tweets. Εάν το hashtag της διάσκεψης σας έχει περισσότερα από 18.000 tweets (όπως συνέβη όταν παρακολουθούσα το CES), θα πρέπει να βρείτε κάποιες στρατηγικές για να πάρετε ολόκληρο το σετ. Δείτε το retryonratelimit επιχείρημα για αναζήτηση_tweets () εάν θέλετε να συλλέξετε ένα σύνολο 18.000+ σετ tweets διασκέψεων διάσκεψης που ξεκινούν 6 ημέρες ή λιγότερο

Τέλος, φροντίστε να αποθηκεύσετε τα δεδομένα σας σε ένα τοπικό αρχείο όταν τελειώσει το συνέδριο! Μια εβδομάδα αργότερα, δεν θα έχετε πλέον πρόσβαση σε αυτά τα tweet μέσω αναζήτηση_tweets () και το API του Twitter.

Και ρίξτε μια ματιά στο επεισόδιο μπόνους "Do More with R" για να δείτε πώς να μετατρέψετε αυτήν την εφαρμογή παρακολούθησης Twitter σε μια διαδραστική εφαρμογή Shiny.

Για περισσότερες συμβουλές R, μεταβείτε στη σελίδα Do More With R στη διεύθυνση //bit.ly/domorewithR ή στη λίστα αναπαραγωγής Do More With R στο κανάλι TECHtalk YouTube.