dir.create(file.path(params$output_folder))
dir.create(file.path(params$archive_folder))
get_meetups <- function (url, query) {
req <- GET(url, query=query)
print(paste(req$url))
json <- content(req, as = "text")
things <- fromJSON(json, flatten=TRUE)
return(things)
}
get_rladies_groups <- function (folder) {
groups_url <- "https://api.meetup.com/find/groups"
groups_query_params <- list(
key=params$meetup_api_key,
sign=TRUE,
page=200,
radius="global")
# by topic
meetup_groups_topic <- get_meetups(groups_url, append(groups_query_params, c(topic_id=1513883, order="members")))
# by text + category
meetup_groups_text <- get_meetups(groups_url, append(groups_query_params, c(text="r-ladies", category=34)))
meetup_groups_aggr <- bind_rows(meetup_groups_topic, meetup_groups_text %>% anti_join(meetup_groups_topic, by="id"))
meetup_groups <- meetup_groups_aggr %>% filter(str_detect(name, "[Rr]([ -]?)[Ll]adies"))
meetup_groups <- meetup_groups %>%
mutate(events_url = paste("https://api.meetup.com/", urlname, "/events", sep="")) %>%
select(-meta_category.category_ids) # remove lists
write_csv(meetup_groups, paste(folder, "rladies_meetup_groups.csv", sep="/"),
na = "")
write_csv(meetup_groups_topic %>% select(-meta_category.category_ids),
paste(folder, "rladies_meetup_groups_topic.csv", sep="/"),
na = "")
write_csv(meetup_groups_text %>% select(-meta_category.category_ids),
paste(folder, "rladies_meetup_groups_text.csv", sep="/"),
na = "")
return(meetup_groups)
}
Filter out groups with no next event.
meetup_groups <- read_csv(paste(params$output_folder, "rladies_meetup_groups.csv", sep="/"))
get_rladies_groups_no_upcoming <- function(folder, groups){
meetup_groups_no_upcoming <- meetup_groups %>% filter(is.na(next_event.id))
write_csv(meetup_groups_no_upcoming,
paste(folder, "rladies_meetup_groups_no_upcoming.csv", sep="/"),
na = "")
return(meetup_groups_no_upcoming)
}
For groups that don’t have a next event, get the last event they had.
# This gets throttled, can't use function
#get_rladies_recent_past_events <- function (folder, meetup_groups) {
meetup_groups_no_upcoming <- no_upcoming
folder <- params$archive_folder
recent_past_events_query_params <- list(
key=params$meetup_api_key,
sign=TRUE,
status="past",
scroll="recent_past"
)
dir.create(file.path(paste(folder, "rladies_meetup_events_recent_past", sep="/")))
meetup_events_past <- data_frame()
for (n in 1:nrow(meetup_groups_no_upcoming)) {
events_url <- meetup_groups_no_upcoming[n,]["events_url"]
print(paste("Trying url:", events_url$events_url))
meetups <- get_meetups(events_url$events_url, recent_past_events_query_params)
if(length(meetups)== 0) {
next()
}
meetups <- meetups %>% mutate(photo_album.photo_sample=NA)
meetup_events_past <- bind_rows(meetup_events_past, meetups)
write_csv(meetup_events_past, paste0(folder, "/rladies_meetup_events_recent_past/_meetup_events_recent_past_", n, ".csv"),
na = "")
}
write_csv(meetup_events_past, paste(folder,"rladies_meetup_events_recent_past.csv", sep="/"),
na = "")
#return(meetup_events_past)
#}
Create a new archive folder and get the latest data.
# Run this first when updating archives
dir.create(file.path(params$archive_folder))
meetup_groups <- get_rladies_groups(params$archive_folder)
groups_no_upcoming <- get_rladies_groups_no_upcoming(params$archive_folder, meetup_groups)
# TODO add try/catch for throttling - or just pull past events since last pull and merge with last pull
# past_events <- get_rladies_past_events(params$archive_folder, groups_no_upcoming)
# Run ^^ manually in above code block for now then run code block below to copy archive folder to output
system2("rm", args = c("-r", params$output_folder))
system2("cp", args = c("-R", paste(params$archive_folder), paste(params$output_folder)))
Groups that haven’t yet had a first event. Organizers should be contacted to see how we can help them.
no_upcoming <- read_csv(paste(params$output_folder, "rladies_meetup_groups_no_upcoming.csv", sep="/"))
past_events <- read_csv(paste(params$output_folder, "rladies_meetup_events_recent_past.csv", sep="/"))
no_first_event <- no_upcoming %>%
anti_join(past_events %>% select(group.id), by=c("id"="group.id"))
no_first_event <- no_first_event %>%
mutate(created=as.POSIXct(created/1000, tz="UTC", origin="1970-01-01"),
meetup_age=difftime(Sys.Date(), created, unit="days"),
chapter=str_replace(name, "R[ -]?[Ll]adies( )?(- )?", "")) %>%
separate(timezone, c("region"), extra="drop", fill="left")
ggplot(no_first_event, aes(x=reorder(chapter, meetup_age), y=meetup_age)) +
geom_bar(aes(fill=region), stat="identity") +
theme_few() +
coord_flip() +
labs(x="Chapter", y="Age (Days)", title="Meetup Groups with no First Event")
Groups that haven’t had an event in awhile. Organizers should be contacted to see how we can help them.
no_upcoming <- read_csv(paste(params$output_folder, "rladies_meetup_groups.csv", sep="/"))
past_events <- read_csv(paste(params$output_folder, "rladies_meetup_events_recent_past.csv", sep="/"))
latest_events <- past_events %>%
filter(status=="past") %>%
rename(event.id = id, event.time = time) %>%
group_by(group.name) %>%
top_n(1, event.time)
groups_lagged <- no_upcoming %>%
inner_join(latest_events %>%
select(group.id, event.id, event.time),
by=c("id"="group.id"))
groups_lagged <- groups_lagged %>%
rename(last_event=event.time) %>%
mutate(created=as.POSIXct(created/1000, tz="UTC", origin="1970-01-01"),
meetup_age=difftime(Sys.Date(), created, unit="days"),
chapter=str_replace(name, "R[ -]?[Ll]adies( )?(- )?", ""),
last_event=as.POSIXct(last_event/1000, tz="UTC", origin="1970-01-01"),
last_event_days=difftime(Sys.Date(), last_event, unit="days")
) %>%
separate(timezone, c("region"), extra="drop", fill="left")
# Special case chapter names
groups_lagged <- groups_lagged %>%
mutate(chapter=ifelse(chapter=="Spotkania Entuzjastów R-Warsaw RUG Meetup & Warsaw", "Warsaw", chapter))
groups_lagged %>% select(chapter, last_event_days, last_event) %>% arrange(-last_event_days)
## # A tibble: 60 x 3
## chapter last_event_days last_event
## <chr> <time> <dttm>
## 1 İzmiR 333.50000 days 2017-02-22 12:00:00
## 2 Connecticut 331.04167 days 2017-02-24 23:00:00
## 3 Santa Rosa 212.97917 days 2017-06-23 00:30:00
## 4 Adelaide 150.66667 days 2017-08-24 08:00:00
## 5 Montenegro 149.29167 days 2017-08-25 17:00:00
## 6 Buffalo 148.43750 days 2017-08-26 13:30:00
## 7 Miami 130.04167 days 2017-09-13 23:00:00
## 8 San Francisco 119.12500 days 2017-09-24 21:00:00
## 9 Munich 109.29167 days 2017-10-04 17:00:00
## 10 Los Angeles 95.95833 days 2017-10-18 01:00:00
## # ... with 50 more rows
ggplot(groups_lagged, aes(x=reorder(chapter, last_event_days), y=last_event_days)) +
geom_bar(aes(fill=region), stat="identity") +
theme_few() +
coord_flip() +
labs(x="Chapter", y="Last Event (Days)", title="Meetup Groups with no Next Event")
ggplot(groups_lagged %>% filter(last_event_days > 60), aes(x=reorder(chapter, last_event_days), y=last_event_days)) +
geom_bar(aes(fill=region), stat="identity") +
theme_few() +
coord_flip() +
labs(x="Chapter", y="Last Event (Days)", title="Meetup Groups with no Next Event (> 60 days since last event)")
Groups that aren’t showing up the R-Ladies Topic search. Organizers should add the R-Ladies topic to their group description.
meetup_groups_topic <- read_csv(paste(params$output_folder, "rladies_meetup_groups_topic.csv", sep="/"))
meetup_groups_text <- read_csv(paste(params$output_folder, "rladies_meetup_groups_text.csv", sep="/"))
# group + organizer to contact
meetups_missing_topic <- meetup_groups_text %>% anti_join(meetup_groups_topic, by="id")
# Special case chapter names
meetups_missing_topic <- meetups_missing_topic %>%
mutate(name=ifelse(name=="Spotkania Entuzjastów R-Warsaw RUG Meetup & R-Ladies Warsaw", "R-Ladies Warsaw", name))
meetups_missing_topic %>% filter(str_detect(name, "[Rr]([ -]?)[Ll]adies")) %>%
arrange(-members) %>%
select(name, localized_location, organizer.name, members, created)
## # A tibble: 14 x 5
## name localized_location organizer.name
## <chr> <chr> <chr>
## 1 R-Ladies Warsaw Warsaw, Poland Przemyslaw Biecek
## 2 R-Ladies Taipei Taipei, Taiwan Ju-Yin Tang
## 3 R-Ladies Budapest Budapest, Hungary Ágnes Salánki
## 4 R-Ladies Lisboa Lisbon, Portugal Carolina Frias
## 5 R-Ladies İzmiR Izmir, Turkey Göknur
## 6 RLadiesCDMX México City, Mexico R Ladies
## 7 R-Ladies Rio de Janeiro Rio de Janeiro, Brazil Carolina Frias
## 8 R Ladies - Twin Cities Minneapolis, MN PyRus
## 9 R-Ladies Adelaide Adelaide, Australia Maria Dmtrv
## 10 R-Ladies St. Louis Saint Louis, MO RLadiesSTL
## 11 R-Ladies Connecticut Hartford, CT Mine Cetinkaya-Rundel
## 12 R-Ladies Bogotá Bogotá, Colombia Verónica Toro
## 13 R-Ladies Buffalo Buffalo, NY Lori Shepherd
## 14 R-Ladies Americana Americana, Brazil Mariana Ribeiro Mendes
## # ... with 2 more variables: members <int>, created <dbl>