Carnegie Hall experienced a veritable rock explosion during its 1971-72 season, with 70 rock concerts between September 1971 and June 1972.
Here are two ways to learn about these events. First, explore a birthplace map of the rockers who performed on these concerts by clicking on the 🔴 red map markers!
CH’s Rock Explosion of 1971-72
We created a map to explore the birthplaces of rock performers from Carnegie Hall’s 1971-72 season, a table to link to information on each performance, and a link to the Billboard Hot 100 charts from the week of each concert.
Carnegie Hall experienced a veritable rock explosion during its 1971-72 season, with 70 rock concerts between September 1971 and June 1972. The years following the 1964 appearances by the Beatles and Rolling Stones showed steady yearly increases in the number of rock events at Carnegie Hall, from one in 1967-68, four in 1968-69, and 13 in 1969-70. But even given a jump to 38 events in 1970-71, the 70 rock concerts in 1971-72 marked a nearly unprecedented increase.
As a means to begin exploring the origins, impact, and cultural context of this period in both rock music’s and Carnegie Hall’s history, we correlated 1) a birthplace map of the performers on these events; 2) links to detailed performance information (where available); and 3) links to the Billboard Hot 100 charts corresponding to the week of each event. Since the Hot 100 reflects album sales and popular tastes, it offers an interesting contemporary lens through which to consider these events. We used performance history data from our SPARQL endpoint and data and display templates from Wikidata’s query service.
We first ran a very basic SPARQL query to obtain the Carnegie Hall name IDs of the performers on these 70 concerts (e.g. this ID for Neil Young), which we used to create a Wikidata query to plot the birthplace of each performer on a map, using the Wikidata property for Carnegie Hall Agent ID, P4104, and the query service’s built-in map template:
#defaultView:Map
SELECT ?person ?personLabel ?personImage ?birthPlaceLabel ?location (YEAR(?date) as ?year)
(IRI(CONCAT("https://www.carnegiehall.org/About/History/Performance-History-Search?q=&dex=prod_PHS&pf=",
(STR(ENCODE_FOR_URI(?personLabel))))) AS ?phsLink)
WHERE
{
VALUES ?chAgentID {"124647" "124688" "124689" "11159" "124817" "124704" "124687" "69564" "124762"
"78264" "78265" "124741" "124613" "124724" "124725" "124782" "34392"
"56064" "53286" "80081" "69354" "69356" "73058" "64230" "61695" "124780"
"76004" "124716" "18592" "82746" "69353" "124781" "80080" "104468"
"104470" "104469" "63464" "124783" "124719" "124718" "104471" "124599"
"124600" "66122" "118317" "25403" "82747" "47555" "14113" "15294" "124610"
"124819" "124611" "63461" "82742" "33038" "39010" "124631" "119910"
"119907" "52619" "66121" "44128" "30315" "14578" "59400" "55994" "47902"
"38883" "44127" "14100" "73043" "104474" "20112" "82745" "124815"
"119909" "124706" "118316" "124634" "82748" "20869" "16156" "68198"
"23603" "124639" "63467" "45335" "63468" "63463" "6445" "35199" "119911"
"48889" "63470" "124814" "24423" "57388" "59309" "124759" "17430"
"59983" "124755" "63462" "63466" "124643" "64306" "124646" "44507"
"124609" "124612" "124763" "10103" "124810" "124636" "124640" "82743"
"63471" "66130" "124644" "66129" "18504" "26354" "124809" "30297"
"55993" "124635" "124777" "18505" "50618" "124785" "63472" "78263"
"118315" "61577" "66128" "106792" "104472" "124616" }
?person wdt:P569 ?date ;
wdt:P19 ?birthPlace ;
wdt:P4104 ?chAgentID .
?birthPlace wdt:P625 ?location .
OPTIONAL { ?person wdt:P18 ?personImage }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?year
For the Carnegie Hall event data, we created a second query for our own SPARQL endpoint to retrieve the ID, title, and date for each event, along with a formatted link to our online Performance History Search, which provides a convenient means to view the details of each performance:
PREFIX chgenres: <http://data.carnegiehall.org/genres/>
PREFIX mo: <http://purl.org/ontology/mo/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX schema: <http://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT DISTINCT (str(?label) AS ?eventTitle) ?date ?phsLink
WHERE {
?event rdfs:label ?label ;
mo:genre chgenres:39 ;
schema:startDate ?date ;
schema:location ?place .
?place rdfs:label ?venueLabel .
BIND(IRI(REPLACE(str(?event), "http://data.carnegiehall.org/events/", "https://www.carnegiehall.org/About/History/Performance-History-Search?q=&dex=prod_PHS&event=")) AS ?phsLink).
FILTER(?date >= xsd:dateTime("1971-09-01T00:00:00") && ?date <= xsd:dateTime("1972-09-01T00:00:00"))
}
ORDER BY ?date
Note that both this query and the performer ID query mentioned above make use of event-level statements about the genre of the performance (http://data.carnegiehall.org/genres/39
). To learn more about our approach to the concept of genre in our performance history data, please see this discussion post.
Finally, we wrote a Python script that includes a SPARQL query our own SPARQL endpoint to retrieve the ID, title, the date/time for each event, and a formatted link to our online Performance History Search, which provides a convenient means to view the details of each performance. This is combined with some date processing to find the corresponding Billboard Hot 100 chart from the week of each event. Since the Hot 100 is published weekly on Saturday, each event date is used to calculate what the date for Saturday of that week would have been, which is then combined with the base URL for the Hot 100 charts:
# !/usr/local/bin/python3.8.1
# ----Copyright (c) 2021 Carnegie Hall | The MIT License (MIT)----
# ----For the full license terms, please visit https://github.com/CarnegieHall/linked-data/blob/master/LICENSE----
## Argument[0] is script to run
## Argument[1] is path to JSON results from SPARQL query of CH rock events
import json
from datetime import datetime, timedelta
import dateutil.parser
from SPARQLWrapper import SPARQLWrapper, JSON
def get_next_weekday(startdate):
"""
@startdate: given date, in format 'YYYY-MM-DD'
"""
d = datetime.strptime(startdate, '%Y-%m-%d')
t = timedelta((12 - d.weekday()) % 7)
return (d + t).strftime('%Y-%m-%d')
query = 'PREFIX chgenres: '
query = query + 'PREFIX dcterms: '
query = query + 'PREFIX schema: '
query = query + 'PREFIX mo: '
query = query + 'PREFIX rdfs: '
query = query + 'PREFIX skos: '
query = query + 'PREFIX xsd: '
query = query + 'select distinct ?event (str(?label) AS ?eventTitle) ?date ?phsLink where {'
query = query + '?event rdfs:label ?label ;'
query = query + 'mo:genre chgenres:39 ;'
query = query + 'schema:startDate ?date ;'
query = query + 'schema:location ?place .'
query = query + '?place rdfs:label ?venueLabel .'
query = query + '''BIND(IRI(REPLACE(str(?event), "http://data.carnegiehall.org/events/", "https://www.carnegiehall.org/About/History/Performance-History-Search?q=&dex=prod_PHS&event=")) AS ?phsLink).'''
query = query + '''FILTER(?date >= xsd:dateTime("1971-09-01T00:00:00") && ?date <= xsd:dateTime("1972-09-01T00:00:00"))}'''
query = query + 'ORDER BY ?date'
sparql = SPARQLWrapper("http://data.carnegiehall.org/sparql/")
sparql.setQuery(query)
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
data = {}
for result in results["results"]["bindings"]:
eventID = result["event"]["value"]
eventTitle = result["eventTitle"]["value"]
eventDate = result["date"]["value"]
href_phs = result["phsLink"]["value"]
displayDate = dateutil.parser.isoparse(eventDate).strftime('%a %b %-d %Y at %-I%p')
data[str(eventID)] = {}
data[str(eventID)]['eventURL'] = href_phs
data[str(eventID)]['eventTitle'] = eventTitle
data[str(eventID)]['displayDate'] = displayDate
eventDateTime = dateutil.parser.parse(eventDate)
startdate = str(datetime.date(eventDateTime))
hot100_date = get_next_weekday(startdate)
href_hot100 = 'https://www.billboard.com/charts/hot-100/'
text_hot100 = 'Billboard Hot 100 for this week'
hot100_formattedLink = f'{href_hot100}{hot100_date}'
data[str(eventID)]['hot100'] = hot100_formattedLink
what we learned
Wikidata’s out-of-the-box display templates are a wonderful way to easily create data visualizations, and do not require hosting your own dataset or creating your own visualization tools. They allow us to leverage the Carnegie Hall Agent ID property to surface interesting connections between CH’s named entities and external data/resources. The Billboard Hot 100 charts offer an interesting contemporary lens through which to view these rock concerts, since the programmatic content of the performances directly correlates to popular trends in a way that more “typical” Carnegie Hall performances featuring canonical classical works usually does not.
further investigation
We hope to soon write a blog post or article exploring this fascinating season of concerts in greater depth. This would include research in our archival collections to consult board minutes and executive files from the seasons preceding and following 1971-72, in order to better understand both the sudden spike in rock bookings and the subsequent sharp drop-off.