Closed Daniel-Mietchen closed 4 years ago
Here is a version with the same kind of filtering that we do for the topic profile:
#defaultView:Graph
SELECT ?author1 ?author1Label ?rgb ?author2 ?author2Label
WITH {
# Find works published in the given venue
SELECT ?work WHERE {
?work wdt:P1433 wd:Q3359737 .
}
} AS %works
WITH {
# Limit the number of authors
SELECT (COUNT(?work) AS ?count) ?author1 WHERE {
INCLUDE %works
?work wdt:P50 ?author1 .
}
GROUP BY ?author1
ORDER BY DESC(?count)
LIMIT 25
} AS %authors
WHERE {
INCLUDE %works
INCLUDE %authors
?work wdt:P50 ?author1 , ?author2 .
FILTER (?author1 != ?author2)
OPTIONAL { ?author1 wdt:P21 ?gender1 . }
BIND( IF(?gender1 = wd:Q6581097, "3182BD", "E6550D") AS ?rgb)
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en,fr,de,ru,es,zh,jp".
}
}
Taking into account the recent streamlining of the co-author query for topics, here is an adaptation for venues:
#defaultView:Graph
SELECT ?author1 ?author1Label ?rgb ?author2 ?author2Label
WITH {
# Find works published in the given venue
SELECT ?work WHERE {
?work wdt:P1433 wd:Q3359737 .
}
} AS %works
WITH {
# Limit the number of authors
SELECT (COUNT(?work) AS ?count1) ?author1 WHERE {
INCLUDE %works
?work wdt:P50 ?author1 .
}
GROUP BY ?author1
ORDER BY DESC(?count1)
LIMIT 25
} AS %authors1
WITH {
# Limit the number of coauthors
SELECT DISTINCT ?author2 ?author1 (COUNT(?work) AS ?count2) WHERE {
INCLUDE %works
INCLUDE %authors1
?work wdt:P50 ?author1 , ?author2 .
FILTER (?author1 != ?author2)
}
GROUP BY ?author2 ?author1
ORDER BY DESC(?count2)
LIMIT 250
} AS %authors2
WHERE {
# INCLUDE %authors1
INCLUDE %authors2
OPTIONAL { ?author1 wdt:P21 ?gender1 . }
BIND( IF(?gender1 = wd:Q6581097, "3182BD", "E6550D") AS ?rgb)
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en,fr,de,ru,es,zh,jp".
}
}
The above times out for PLOS ONE (Q564954), but reducing the LIMITs to 15 and 150 works:
#defaultView:Graph
SELECT ?author1 ?author1Label ?rgb ?author2 ?author2Label
WITH {
# Find works published in the given venue
SELECT ?work WHERE {
?work wdt:P1433 wd:Q564954 .
}
} AS %works
WITH {
# Limit the number of authors
SELECT (COUNT(?work) AS ?count1) ?author1 WHERE {
INCLUDE %works
?work wdt:P50 ?author1 .
}
GROUP BY ?author1
ORDER BY DESC(?count1)
LIMIT 15
} AS %authors1
WITH {
# Limit the number of coauthors
SELECT DISTINCT ?author2 ?author1 (COUNT(?work) AS ?count2) WHERE {
INCLUDE %works
INCLUDE %authors1
?work wdt:P50 ?author1 , ?author2 .
FILTER (?author1 != ?author2)
}
GROUP BY ?author2 ?author1
ORDER BY DESC(?count2)
LIMIT 150
} AS %authors2
WHERE {
# INCLUDE %authors1
INCLUDE %authors2
OPTIONAL { ?author1 wdt:P21 ?gender1 . }
BIND( IF(?gender1 = wd:Q6581097, "3182BD", "E6550D") AS ?rgb)
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en,fr,de,ru,es,zh,jp".
}
}
Similar to the one we have for organizations (example).
Problem, as usual: performance, e.g. as per this example for PLOS Neglected Tropical Diseases, so we should perhaps filter in some way, e.g. for the most prolific authors, as we do in topic profiles (example).