The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
library(instaR)
To use the instagram API, go to https://instagram.com/developer/ and click on manage client and then register a client. Choose a name etc. For website and redirect URL, write in localhost:1410. This will give you client ID and secret. Plug these in as follows:
my_oauth <- instaOAuth(app_id="1f1f8228974248ba804b4c02fb3c082f", app_secret="a8a727a6b21e488988207686c88ec49e")
save(my_oauth, file="my_oauth")
Now it is time to load clarifai:
library(clarifai)
Clarifai ships with instagram handles of politicians. Load the file using:
filepath <- system.file("inst/extdata/congress.csv", package = "clarifai")
pols <- read.csv(filepath)
Next, download data from instagram:
# getUserMedia(pols$instagram[1], token=my_oauth)
res <- list()
for (i in 1:nrow(pols)) {
# Not all politicians have instagram accounts.
if (pols$instagram[i]!="") {
# Not all have public posts
res[[i]] <- tryCatch(getUserMedia(pols$instagram[i], token=my_oauth), error=function(err) NA)
} else {
res[[i]] <- NA
}
}
# rbind
res2 <- do.call(rbind, res) # nrow = 8088 (may change for runs in the future)
Merge it with some pols data
# Get pols data ready
small_pols <- pols[,c("first_name", "last_name", "party", "instagram", "dw_nominate")]
small_pols_2 <- subset(small_pols, instagram!="") # take out no username/NA
# Merge
res2[, c("first_name", "last_name", "party", "instagram", "dw_nominate")] <-
small_pols_2[match(res2$username, small_pols_2$instagram),]
# write.csv(res2, file="res2.csv", row.names=F)
Now, get image labels from clarifai:
labs <- list()
# Not implemented optimally.
# You can push all images at once. And that is the best than 8k requests.
for (i in 1:nrow(res2)) {
labs[[i]] <- tryCatch(tag_image_urls(res2$image_url[i]), error=function(err) NA)
}
labs_df <- do.call(rbind, labs)
Next merge the labels back into the data:
# Merge
labs_df[,names(res2)] <- res2[match(labs_df$img_url, res2$image_url),]
# write.csv(labs_df, file="labs_df.csv", row.names=F)
# This data frame is available in the extdata folder
Let us analyze data. Popular tags:
head(table(labs_df$tags)[order(-table(labs_df$tags))], 40)
## people politics adult men group government business women portrait leader
## 1592 1137 1132 999 910 795 793 773 763 670
## clothing politician education speech election indoors meeting room competition many
## 554 472 456 435 433 426 360 352 347 345
Do Republican instagram accounts have more photos with military tags than Democrats?
table(grepl("military", labs_df$tags), labs_df$party)
## D R
## FALSE 19806 16030
## TRUE 94 90
How about women?
table(grepl("women", labs_df$tags), labs_df$party)
## D R
## FALSE 19458 15853
## TRUE 442 267
table(grepl("men", labs_df$tags), labs_df$party)
See also for men:
## D R
## FALSE 18265 14978
## TRUE 1635 1142
Protest?
table(grepl("protest", labs_df$tags), labs_df$party)
## D R
## FALSE 19734 16024
## TRUE 166 96
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.