Exploring the Louvre

Priya Jacob
11 min readJul 30, 2021
Photo by Jean Carlo Emer on Unsplash

“Not all those who wander are lost” - J.R.R. Tolkien

Part 1 of ‘Graphing the Louvre’ was all about modeling the “Louvre Online Collection Database” as a Graph, using Neo4j. Part 2 of this series will explore connections within the Collection, compare facts & figures and draw inferences & insights. So let’s get started!

Here’s what the Graph schema looks like as modeled in Part 1.

It’s a good idea to start off by profiling / sampling our modeled data.

MATCH (n)
RETURN LABELS(n) AS label, COUNT(n) AS count, COLLECT(toLower(apoc.map.sortedProperties(PROPERTIES(n))[0][1]))[..25] AS properties
ORDER BY count DESC

Since there are one too many categories to explore that could take a lifetime, let’s start with the Louvre’s impressive collection of over 10,000 Paintings. It helps to know what information exists for a majority of them, so that we could then structure our analysis around the same, for meaningful and un-skewed results.

MATCH (e:Exhibit:Painting)-[r]->(n)
RETURN TYPE(r) AS connection, LABELS(n) AS entity, COUNT(r) AS connections, COUNT(DISTINCT e) AS paintings, COUNT(DISTINCT n) AS entities
ORDER BY paintings DESC

What does the distribution by ‘Collection’ look like? Well most belong to the ‘Department of Paintings’, no brainer there.

Is the ‘Collection’ classification reflective of the data?

MATCH (p:Painting)-->(c:Collection)
RETURN c.collection AS collection, COUNT(p) AS `#paintings`,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(p)-[:PLACE]->(pe)|pe.place])))[..25] AS place,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(p)-[:PERIOD]->(e)|e.period])))[..25] AS period,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(p)-[:MOVEMENT]->(m)|m.movement])))[..25] AS movement,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(p)-[:GENRE]->(g)|g.genre])))[..25] AS genre,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(p)-[:CREATOR]->(a)|a.name])))[..25] AS artists
ORDER BY `#paintings` DESC

How are Paintings distributed by their ‘Location’? We particularly look at numbers attributed to the Louvre and its annexes within/outside the country.

MATCH (p:Painting)-->(l:Location)
RETURN l.location AS location, COUNT(p) AS `#paintings`
ORDER BY `#paintings` DESC
MATCH (p:Painting)-->(l:Location)
WITH l.location AS location, COUNT(p) AS `#paintings`
RETURN apoc.agg.statistics(`#paintings`, [0.25, 0.5, 0.75, 0.95, 0.99, 1.0]) AS locationStats;
MATCH (p:Painting)-->(l:Location)
WHERE l.location CONTAINS 'LOUVRE' OR l.location CONTAINS 'DELACROIX'
RETURN l.location AS location, COUNT(p) AS `#paintings`
ORDER BY `#paintings` DESC

The Painting ‘Location’ shows most of them as non-disclosed and others mostly in the Louvre from the ‘Room’ information tagged against them. The rest find themselves in Museums in and around France. Below is what the ones in possession of the Louvre look like.

What’s the distribution of Paintings in terms of ‘Holding’ and ‘Lease’ Authority? Is the ‘Location’ of the Painting found to be in alignment of its Lease Authority where applicable?

MATCH (p:Painting)-[:HOLDING]->(a:Authority)
RETURN a.authority AS holdingAuthority, COUNT(p) AS `#paintings`
ORDER BY `#paintings` DESC
MATCH (p:Painting)-[:LEASE]->(a:Authority)
RETURN a.authority AS leaseAuthority, COUNT(p) AS `#paintings`
ORDER BY `#paintings` DESC
MATCH (p:Painting)-[:HOLDING]->(a:Authority)
RETURN a.authority AS holdingAuthority, COUNT(p) AS `#paintings`, apoc.coll.toSet(apoc.coll.flatten(COLLECT([(p)-[:LEASE]->(l)|l.authority]))) AS leaseAuthority
ORDER BY `#paintings` DESC
MATCH (p:Painting)-[:LEASE]->(a:Authority)
RETURN a.authority AS leaseAuthority, COUNT(p) AS `#paintings`,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(p)-[:HOLDING]->(h)|h.authority]))) AS holdingAuthority
ORDER BY `#paintings` DESC
MATCH (p:Painting)-[:LEASE]->(a:Authority)
RETURN a.authority AS leaseAuthority, COUNT(p) AS `#paintings`,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(p)-[:HOLDING]->(h)|h.authority]))) AS holdingAuthority,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(p)-[:LOCATION]->(l)|l.location]))) AS location
ORDER BY `#paintings` DESC

From a preliminary analysis, it all does check out.

What’s popularly depicted in the Paintings at the Louvre? Do they align with their ‘Genre’ in any way? What ‘Materials’ were used in their making?

MATCH (f1:Feature)<-[r1:FEATURE]-(p:Painting)-[r2:FEATURE]->(f2:Feature)
WITH f1.feature AS f1, f2.feature AS f2, COUNT(p) AS `#paintings`
WITH DISTINCT apoc.coll.sort([f1, f2]) AS top2Features, `#paintings`
RETURN top2Features, `#paintings`, apoc.coll.toSet([(f:Feature)<-[:FEATURE]-(e:Painting)-[:GENRE]->(g:Genre) WHERE f.feature IN top2Features|g.genre]) AS genre
ORDER BY `#paintings` DESC
LIMIT 25

‘Foliage’ and ‘Landscape’ figure as the two most depicted features or elements. I picked this Landscape by “Joseph Mallord William, Turner”, and a Cityscape by “Johan Barthold, Jongkind”, from among the associated genres. How does the “Notre-Dame de Paris” in the painting compare today?

https://www.wikidata.org/wiki/Q15280947
https://www.wikidata.org/wiki/Q19015063
MATCH (m1:Material)<-[r1:MATERIAL]-(p:Painting)-[r2:MATERIAL]->(m2:Material)
WITH m1.material AS m1, m2.material AS m2, COUNT(p) AS `#paintings`
WITH DISTINCT apoc.coll.sort([m1, m2]) AS top2Materials, `#paintings`
RETURN top2Materials, `#paintings`, apoc.coll.toSet([(m:Material)<-[:MATERIAL]-(e:Painting)-[:TECHNIQUE]->(t:Technique) WHERE m.material IN top2Materials|t.technique]) AS technique
ORDER BY `#paintings` DESC
LIMIT 25

No surprises there, ‘oil on canvas’ was the most suited medium for Paintings back in the day, followed by ‘oil on wood’ & ‘oil on paper’. What’s also then interesting is the use of ‘plaster & mortar’ for Fresco painting, and the use of ‘gold’ on ‘canvas’ & ‘wood’. I’d be interested to know if these mediums were attributed to a ‘Period’ or ‘Movement’ of the time.

MATCH (p:Painting)-->(m:Material)
WITH p, COLLECT(m.material) AS materials
WHERE ALL(x IN materials WHERE x IN ["ENDUIT", "MORTIER", "FRESQUE"]) AND p.wikiURI IS NOT NULL
RETURN p.arkID AS ark, p.title AS title, p.wikiURI AS wikiURI, [(p)-[:CREATOR]->(a)|a.name] AS artist, materials
LIMIT 50
MATCH (p:Painting)-->(m:Material)
WITH p, COLLECT(m.material) AS materials
WHERE ALL(x IN materials WHERE x IN ["ENDUIT", "MORTIER", "FRESQUE"]) AND p.wikiURI IS NOT NULL
WITH p, [(p)-[:CREATOR]->(a)|a] AS artists
UNWIND artists AS artist
RETURN artist.name AS artist, artist.dateOfBirth AS artistDOB, COUNT(p) AS `#paintings`, artist.wikiMovement AS movement
ORDER BY `#paintings` DESC

It appears the Artists were part of the Early and High Renaissance periods. “Sandro Botticelli” was one among the Early Renaissance Artists (known to have also painted the Sistine Chapel among others), and many years later, Artists such as “Raphael”, would come to be inspired by the works of Artists before their time. I picked these amazing Frescos from the maestros, on display at the Louvre.

https://www.wikidata.org/wiki/Q6287319, https://www.wikidata.org/wiki/Q1114881
https://www.wikidata.org/wiki/Q3027582

Next we look at the use of ‘gold’, ‘oil paint’ & ‘wood’ in Paintings and look for a connection to the Art ‘Period’ / ‘Movement’ in question.

MATCH (p:Painting)-->(m:Material)
WITH p, COLLECT(m.material) AS materials
WHERE
//ALL(x IN ["OR", "PEINTURE À L'HUILE", "PANNEAU DE BOIS"] WHERE x IN materials)
ALL(x IN ["OR", "PANNEAU DE PEUPLIER", "TEMPERA"] WHERE x IN materials)
AND p.wikiURI IS NOT NULL
RETURN p.arkID AS ark, p.title AS title, p.wikiURI AS wikiURI, [(p)-[:CREATOR]->(a)|a.name] AS artist, materials
LIMIT 50
MATCH (p:Painting)-->(m:Material)
WITH p, COLLECT(m.material) AS materials
WHERE
ALL(x IN ["OR", "PANNEAU DE PEUPLIER", "TEMPERA"] WHERE x IN materials)
AND p.wikiURI IS NOT NULL
WITH p, [(p)-[:CREATOR]->(a)|a] AS artists
UNWIND artists AS artist
RETURN artist.name AS artist, artist.dateOfBirth AS artistDOB, COUNT(p) AS `#paintings`, artist.wikiMovement AS movement
ORDER BY `#paintings` DESC

The Artists seen here belonged to the “Proto Renaissance” or pre-Renaissance period (c.1300–1400) in Italy. “Giotto Di Bondone” (1267–1337) was one such progressive Artist who pioneered a form of figurative “realism”, fully developed later on by Artists belonging to the “Renaissance” period. The “Proto Renaissance” drew inspiration from “Byzantine Art” and the “Sienese School”, as also reflective of our data. Seen below are few of the countless many renditions of the “Virgin with Child” in gold & oil paint on wood.

Right, now it’s time to turn to the Artists (Painters) in the Louvre! Who are the topmost Artists by number of Paintings? What were some of their famous works of art? What/Who were they influenced by? Which era did they belong to?

MATCH (a:Artist)
WITH a, size(()-[:CREATOR]->(a)) AS `#paintings`
WHERE `#paintings` >= 50 AND NOT a.name = 'ANONYME'
RETURN a.name AS artist, a.dateOfBirth AS DOB, a.wikiID AS wikiID, a.wikiGenre AS genre, a.wikiMovement AS movement, `#paintings`
ORDER BY `#paintings` DESC
LIMIT 10

That brings up Artists with over 50 Paintings.

Photo by Federico Scarionati on Unsplash

Other thanDelacroix, Eugène”, to whom a whole museum has been dedicated alongside the Louvre, you would think world renowned Artists such as “Leonardo da Vinci” or “Michelangelo” would rank higher. But they have little on display at the Louvre. It is said that 25% of all “Leonardo da Vinci” paintings are in the Louvre (and that includes the famous “Mona Lisa”), which itself looks to be a small number. “Michelangelo” on the other hand was more a Sculptor and his hand at painting can be witnessed in full glory at the Sistine Chapel. All the same, they do have ‘other’ Exhibits to their name at the Louvre.

It’s interesting how a generation of Artists were inspired by the ones before them and the lineage is fascinating, to say the least. It is said that “Eugène Delacroix” born in the 18th century, was greatly inspired by “Michelangelo”, 3 centuries apart, born in the 15th. It’s easy to visualize generations that taught and assimilated knowledge down centuries through our Graph! … and as it turns out, everything is (almost, always) connected!

MATCH (d:Artist {name:'DELACROIX, EUGÈNE'}), (m:Artist {name:'BUONARROTI, MICHELANGELO DIT MICHEL-ANGE'}), path = shortestpath((d)-[:TEACHER*]-(m))
RETURN path

Why not chart the Master’s trajectory too?

MATCH p=(s)-[:TEACHER*]->(:Artist {name:"BUONARROTI, MICHELANGELO DIT MICHEL-ANGE"})-[:TEACHER*]->(t)
RETURN p

… that takes us all the way back to year 1240 with the birth of Cimabué. It’s a pity Wikidata has no reference to the students of Michelangelo’s students’ (at this time of writing) for it’s hard to believe there couldn’t have been any.

…for just look at what Leonardo da Vinci left behind.

Right, so much for Paintings at the Louvre! We now explore the exquisite world of Sculptures. As always, we start by profiling our data.

MATCH (e:Exhibit:Sculpture)-[r]->(n)
RETURN TYPE(r) AS connection, LABELS(n) AS entity, COUNT(r) AS connections, COUNT(DISTINCT e) AS sculptures, COUNT(DISTINCT n) AS entities
ORDER BY sculptures DESC

For over 35,000 Sculptures that have been curated by the Louvre, information on their ‘Collection’, ‘Authority’, ‘Location’, ‘Material & Techniques’, ‘Features’ & ‘Period’ is seen for most of them. Let’s look at the ‘Collection’, ‘Authority’ & ‘Location’ distribution for them.

MATCH (s:Sculpture)-->(c:Collection)
RETURN c.collection AS collection, COUNT(s) AS `#sculptures`
ORDER BY `#sculptures` DESC
MATCH (s:Sculpture)-->(l:Location)
RETURN l.location AS location, COUNT(s) AS `#sculptures`
ORDER BY `#sculptures` DESC
MATCH (s:Sculpture)-->(l:Location)
WHERE l.location CONTAINS 'LOUVRE' OR l.location CONTAINS 'DELACROIX'
RETURN l.location AS location, COUNT(s) AS `#sculptures`
ORDER BY `#sculptures` DESC
MATCH (s:Sculpture)-[:HOLDING]->(a:Authority)
RETURN a.authority AS holdingAuthority, COUNT(s) AS `#sculptures`
ORDER BY `#sculptures` DESC
MATCH (s:Sculpture)-[:LEASE]->(a:Authority)
RETURN a.authority AS leaseAuthority, COUNT(s) AS `#sculptures`
ORDER BY `#sculptures` DESC
MATCH (s:Sculpture)-[:HOLDING]->(a:Authority)
RETURN a.authority AS holdingAuthority, COUNT(s) AS `#sculptures`, apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:LEASE]->(l)|l.authority]))) AS leaseAuthority
ORDER BY `#sculptures` DESC
MATCH (s:Sculpture)-[:LEASE]->(a:Authority)
RETURN a.authority AS leaseAuthority, COUNT(s) AS `#sculptures`,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:HOLDING]->(h)|h.authority]))) AS holdingAuthority
ORDER BY `#sculptures` DESC
MATCH (s:Sculpture)-[:LEASE]->(a:Authority)
RETURN a.authority AS leaseAuthority, COUNT(s) AS `#sculptures`,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:HOLDING]->(h)|h.authority]))) AS holdingAuthority,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:LOCATION]->(l)|l.location]))) AS location
ORDER BY `#sculptures` DESC

Right, most of the Sculptures make up the Egyptian, Oriental, Greek, Etruscan & Roman Antique Collection and some are part of the Middle Ages & Renaissance times. About 6000+ odd are located in the Louvre and its annexes. Almost all of them are held by the Louvre and less than 10% are on long term lease.

Let’s look at what ‘Materials’ the Sculptures were mostly made from and their associations with the Louvre ‘Collection’, the ‘Place’, ‘Period’, ‘Genre’ and ‘Creators’ of the time. Below is a sample.

MATCH (s:Sculpture)-->(m:Material)
RETURN m.material AS material, COUNT(s) AS `#sculptures`,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:COLLECTION]->(c)|c.collection])))[..25] AS collection,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:PLACE]->(pe)|pe.place])))[..25] AS place,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:PERIOD]->(pd)|pd.period])))[..25] AS period,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:GENRE]->(g)|g.genre])))[..25] AS genre,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:CREATOR]->(a)|a.name])))[..25] AS artists
ORDER BY `#sculptures` DESC
LIMIT 25

Materials such as ‘mineral’, ‘clay’, ‘earth’, ‘stone’ & ‘metal’ rank highest among others such as ‘marble’, ‘copper alloy’, ‘bronze’, ‘limestone’, ‘wood’, ‘plaster’ etc. And because I find sculpting off a marble block extreme artistry (for the chisel falling wrongly on a block of marble could have meant several years lost in the making), here’s what analysis around use of marble shows.

MATCH (s:Sculpture)-->(m:Material)
WHERE m.material CONTAINS 'MARBRE'
RETURN m.material AS material, COUNT(s) AS `#sculptures`,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:COLLECTION]->(c)|c.collection])))[..10] AS collection,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:PLACE]->(pe)|pe.place])))[..10] AS place,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:PERIOD]->(pd)|pd.period])))[..10] AS period,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:GENRE]->(g)|g.genre])))[..10] AS genre,
apoc.coll.toSet(apoc.coll.flatten(COLLECT([(s)-[:CREATOR]->(a)|a.name])))[..10] AS artists
ORDER BY `#sculptures` DESC
LIMIT 5

Of the most famous Sculptures at the Louvre, some are found to have been sculpted from “Carrara Marble”, my favorites being “Pierre Puget” & “Antonio Canova”, with the ones by the former standing out owing to his excruciating attention to detail. “Psyche Revived by Cupid’s Kiss”, the ebulliently romantic statue by Antonio Canova, one of the last of the era-defining Italians, captures the most poignant moment of the story with immense tenderness.

MATCH (s:Sculpture)-->(a:Artist)
WHERE a.name CONTAINS 'PUGET'
OPTIONAL MATCH (s)-->(m:Material)
RETURN s.arkID AS ark, s.wikiURI AS wikiURI, s.title AS title, COLLECT(m.material) AS materials, s.materialsAndTechniques AS materialsAndTechniques, s.currentLocation AS location
ORDER BY s.title
MATCH (s:Sculpture)-->(a:Artist)
WHERE a.name CONTAINS 'CANOVA'
OPTIONAL MATCH (s)-->(m:Material)
RETURN s.arkID AS ark, s.wikiURI AS wikiURI, s.title AS title, COLLECT(m.material) AS materials, s.materialsAndTechniques AS materialsAndTechniques, s.currentLocation AS location
ORDER BY s.title

How do we leave out the greatest Sculptor that ever lived, the one who thought that if people knew how much work went into earning his mastery or in making of a masterpiece, they wouldn’t think it to be wonderful at all !

“The sculpture is already complete within the marble block, before I start my work. It is already there, I just have to chisel away the superfluous material.”
Michelangelo

Michelangelo developed an unparalleled ability to translate pathos, despair, and anguish to the figures he sculpted from marble, manifested in the Pietá in St. Peter’s Basilica, and his famous statue of David. It’s interesting to know “The Rebellious Slave” was sculpted from both marble and plaster by Michelangelo himself, with both on display at the Louvre. Amazing, isn’t it?

https://collections.louvre.fr/en/ark:/53355/cl010091778, https://www.wikidata.org/wiki/Q3203231

Alright then! those were some facts about the Sculptures at the Louvre and I’m sure there are plenty more. There are also several other categories to explore at the Louvre but that’s for another day and time.

Takeaways? There’s more to the Louvre than the “Mona Lisa”! Yes, that too. But more importantly (!), if you’ve been able to model your data successfully as a Graph using Neo4j, it’s relatively easy to query & extract insights from it. But you can certainly do a lot more with it. Stay tuned for what that may be!

--

--