2017-06-13 1 views
1

Je voudrais créer un tracé à partir du manuel web Textmining with R, mais avec mes données. Il cherche essentiellement les meilleurs termes par an et les représente graphiquement (Figure 5.4: http://tidytextmining.com/dtm.html). Mes données sont un peu plus propres que celles avec lesquelles elles ont commencé, mais je suis nouveau avec R. Mes données ont une colonne "Date" qui est dans le format 2016-01-01 (c'est une classe de date). Je n'ai données à partir de 2016, donc je veux faire la même chose, mais plus granulaire, (par exemple par mois ou par jour)Comment extraire le mois de la colonne

library(tidyr) 

year_term_counts <- inaug_td %>% 
extract(document, "year", "(\\d+)", convert = TRUE) %>% 
complete(year, term, fill = list(count = 0)) %>% 
group_by(year) %>% 
mutate(year_total = sum(count)) 

year_term_counts %>% 
filter(term %in% c("god", "america", "foreign", "union", "constitution", 
"freedom")) %>% 
ggplot(aes(year, count/year_total)) + 
geom_point() + 
geom_smooth() + 
facet_wrap(~ term, scales = "free_y") + 
scale_y_continuous(labels = scales::percent_format()) + 
ylab("% frequency of word in inaugural address") 

L'idée est que je choisirais mes mots spécifiques de mon texte et voir comment ils changent au fil des mois.

Merci!

+0

Bienvenue dans SO: Avez-vous essayé de décomposer le 'year_term_counts' par fonction pour examiner les étapes intermédiaires? Développez-vous les résultats comme vous vous y attendez? Cela nous aiderait à voir certaines données. –

+2

Vous devriez envisager d'utiliser la fonction 'month' dans le paquet' lubridate' pour créer une colonne entière contenant le mois. – ccapizzano

+0

Je vais vérifier la fonction du mois, merci! – Alex

Répondre

1

Si vous voulez regarder des unités de temps plus petites, basé sur une colonne de date que vous avez déjà, je vous recommande de regarder la fonction floor_date() ou round_date() de lubridate. Le chapitre particulier de notre livre que vous avez lié à traite de prendre une matrice de document-terme, puis de le ranger, etc. Avez-vous déjà obtenu un format de texte bien rangé pour vos données? Si oui, alors vous pourriez faire quelque chose comme ceci:

date_counts <- tidy_text %>% 
    mutate(date = floor_date(Date, unit = "7 days")) %>% # use whatever time unit you want here 
    count(date, word) %>% 
    group_by(date) %>% 
    mutate(date_total = sum(n)) 

date_counts %>% 
    filter(word %in% c("PUT YOUR LIST OF WORDS HERE")) %>% 
    ggplot(aes(date, n/date_total)) + 
    geom_point() + 
    geom_smooth() + 
    facet_wrap(~ word, scales = "free_y") 
+0

Merci, Julia! J'ai lu ton nouveau livre. Je suis nouveau à R, mais c'est super utile. – Alex