Skip to content

Instantly share code, notes, and snippets.

@ngehlenborg
Last active March 5, 2016 04:49
Show Gist options
  • Save ngehlenborg/e4fd69ae5d1268f18d39 to your computer and use it in GitHub Desktop.
Save ngehlenborg/e4fd69ae5d1268f18d39 to your computer and use it in GitHub Desktop.
require(RISmed);
require(ggplot2);
makeJournalQuery <- function( journals ) {
query <- paste( "(" , paste( "\"", journals, "\"[Journal]", sep="", collapse=" OR " ), ")", sep="" );
return ( query );
}
queryPapers <- function( year, query, journals ) {
query <- paste( '((', query, '[Title/Abstract]) AND ("', year,'"[Date - Publication]) AND ', makeJournalQuery( journals ), ')', sep="" )
queryPubs <- EUtilsSummary( query, type='esearch', db='pubmed' )
all <- paste( '(("', year,'"[Date - Publication]) AND ', makeJournalQuery( journals ), ')', sep="" )
allPubs <- EUtilsSummary( all, type='esearch', db='pubmed' )
return ( list(queryPubs=queryPubs@count,allPubs=allPubs@count) );
}
queryPapersRange <- function( query, journals, startYear, endYear ) {
years <- c();
queryTerms <- c();
queryPubs <- c();
allPubs <- c();
percentQueryPubs <- c();
journalList <- c();
count <- 1;
for (year in startYear:endYear) {
result <- queryPapers( year, query, journals );
years <- rbind( years, year );
queryPubs <- rbind( queryPubs, result$queryPubs );
allPubs <- rbind( allPubs, result$allPubs );
percentQueryPubs <- rbind( percentQueryPubs, result$queryPubs/result$allPubs * 100 );
queryTerms <- rbind( queryTerms, query )
journalList <- rbind( journalList, paste( journals, collapse="|" ) );
count <- count + 1;
}
return ( data.frame( years=years, query=queryTerms, queryPubs=queryPubs, allPubs=allPubs, percentQueryPubs=percentQueryPubs, journals=journalList, row.names=years ) );
}
multiQueryPapersRange <- function( queries, journalsList, startYear, endYear ) {
results <- data.frame();
for ( i in 1:length( queries ) ) {
for ( j in 1:length( journalsList ) ) {
results <- rbind( results, queryPapersRange( query=queries[i], journals=journalsList[[j]], startYear, endYear ) );
}
}
return ( results );
}
plotResults <- function( queries, journalsList, startYear, endYear, relative=TRUE ) {
results <- multiQueryPapersRange( queries, journalsList, startYear, endYear );
if ( relative ) {
ggplot( results, aes( years, percentQueryPubs, group=interaction(factor(query),factor(journals)))) + scale_x_continuous(breaks=startYear:endYear) + scale_y_continuous(limits = c(0, max(results$percentQueryPubs))) + geom_line(aes(color=interaction(factor(query),factor(journals)))) + ggtitle( paste( "\"", paste( queries, collapse="|" ), "\" in abstracts and titles of \n", paste( unique(results$journals), collapse="+" ), " articles", sep="") ) + labs( x="year", y=paste("% publications mentioning query terms", sep="") ) + guides(color=guide_legend(title=NULL)) + theme(legend.position="top");
}
else {
ggplot( results, aes( years, queryPubs, group=interaction(factor(query),factor(journals)))) + scale_x_continuous(breaks=startYear:endYear) + scale_y_continuous(limits = c(0, max(results$queryPubs))) + geom_line(aes(color=interaction(factor(query),factor(journals)))) + ggtitle( paste( "\"", paste( queries, collapse="|" ), "\" in abstracts and titles of \n", paste( unique(results$journals), collapse="+" ), " articles", sep="") ) + labs( x="year", y=paste("# publications mentioning query terms", sep="") ) + guides(color=guide_legend(title=NULL)) + theme(legend.position="top");
}
}
@ngehlenborg
Copy link
Author

rplot03

plotResults( c( "cancer", "oncogene", "tumor suppressor" ), list( c( "Nature" ), c( "Science" ) ), 1960, 2015 );

@ngehlenborg
Copy link
Author

rplot04

plotResults( c( "ontology" ), list( c( "Bioinformatics (Oxford, England)", "BMC bioinformatics") ), 2000, 2015 );

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment