8. Beards Through Time

With the inaccessibility of barbers and hairdressers for much of the last year in the UK due to world events, we naturally start looking for styling inspiration not in social media, but obviously in depictions of beards in historical objects. Let’s see what home styling tips we can pickup from the Metropolitian Museum and V&A collections.

import sys
sys.path.append("/srv/explore-the-collections/code/ivpy/src/")

Beards at the Met

The Met API lets us search amongst its objects, returning a list of object identifers we can then use to get further details for each object, including a thumbnail image we can show.

import requests
import pandas as pd
import csv

req = requests.get('https://collectionapi.metmuseum.org/public/collection/v1/search?q=beard')

met_beard_object_ids = req.json()['objectIDs']
met_beard_objects = []
max_objects = 20
count = 0

for obj_id in met_beard_object_ids:
    
    req = requests.get(f'https://collectionapi.metmuseum.org/public/collection/v1/objects/{obj_id}')
    obj_data = req.json()
    
    met_beard_objects.append([obj_data['objectID'], obj_data['title'], obj_data['objectName'], obj_data['medium'], obj_data['artistDisplayName'], obj_data['accessionYear'], obj_data['primaryImageSmall']])
    
    if count > max_objects:
        break
    else:
        count += 1
        
met_beard_objects_df = pd.DataFrame(data=met_beard_objects, columns=['Object ID','Title', 'Object', 'Medium', 'Artist', 'Accession Year', 'Thumbnail'])
met_beard_objects_df.sample(10)
Object ID Title Object Medium Artist Accession Year Thumbnail
10 257430 Bronze statuette of a standing male figure Statuette of a bearded man Bronze 2000 https://images.metmuseum.org/CRDImages/gr/web-...
21 256899 Limestone male figure in Egyptian dress Statue of a bearded votary in Egyptian costume Limestone 1874 https://images.metmuseum.org/CRDImages/gr/web-...
3 552044 Head of a bearded man wearing a pointed cap, p... Head, bearded man Faience 1917 https://images.metmuseum.org/CRDImages/eg/web-...
19 246277 Bronze head of a bearded man or god Head from a statuette Bronze 1896 https://images.metmuseum.org/CRDImages/gr/web-...
0 242408 Limestone head of a bearded man Head of a bearded man Limestone 1874 https://images.metmuseum.org/CRDImages/gr/web-...
2 241121 Terracotta figure Statuette of a bearded woman ("Bearded Aphrodi... Terracotta 1874 https://images.metmuseum.org/CRDImages/gr/web-...
16 436260 Study Head of an Old Man with a White Beard Painting Oil on wood Anthony van Dyck 1922 https://images.metmuseum.org/CRDImages/ep/web-...
20 247544 Glass head pendant Pendant in the form of a man's head Glass 1906 https://images.metmuseum.org/CRDImages/gr/web-...
8 547233 Figurine of a man Statuette, standing man, beard Ivory (elephant) 1954 https://images.metmuseum.org/CRDImages/eg/web-...
1 247001 Marble statue of a bearded Hercules Statue of Herakles Marble, Island 1903 https://images.metmuseum.org/CRDImages/gr/web-...
from ivpy import attach,show,compose,montage,histogram,scatter
attach(met_beard_objects_df, "Thumbnail")
show()
_images/data-exploration-8_4_0.png

Some excellent historical beard inspiration there.

Beards at the V&A

We can use the API to search for beards mentioned in object records at the V&A.

vam_beard_objects_df = pd.read_csv('https://api.vam.ac.uk/v2/objects/search?q=Beard%20-Collection&images_exist=1&response_format=csv&page_size=50')
vam_beard_objects_df.sample(10)
accessionNumber accessionYear systemNumber objectType _primaryTitle _primaryPlace _primaryMaker__name _primaryMaker__association _primaryDate _primaryImageId _sampleMaterial _sampleTechnique _sampleStyle _currentLocation__displayName _objectContentWarning _imageContentWarning
11 6742(IS) NaN O481169 Scarf NaN Jaipur Unknown NaN ca. 1851 2013GV2087 cotton printed NaN In store False False
35 A.18-2000 2000.0 O40370 Relief Profile head of a bearded man England Emily Addis Fawcett sculptor 1888 2006AM7291 marble NaN NaN In store False False
2 E.212-1991 1991.0 O193659 Print Chinoise Great Britain Beard, Linda maker ca. 1970-1980 2009BX1611 paper line block chinoise Prints & Drawings Study Room, level C False False
44 IS.133:75/B-1964 1964.0 O392136 Page NaN Mughal Empire Unknown NaN late 17th century 2013GJ0269 opaque watercolour painted Mughal In store False False
12 85667 NaN O1290861 photograph Assyrian sculpture relief of a bearded man Palestine Cowper, Isabel Agnes photographer ca. 1880s 2015HP3891 NaN NaN NaN In store False False
29 A.192-1980 1980.0 O312508 Roundel Head of bearded man England Adams, George Gammon maker ca. 1850 2006AE3163 wax NaN NaN In store False False
48 M.79-1949 1949.0 O165064 Mask NaN Benin Unknown NaN 19th century 2012FT6042 bronze cire perdue NaN In store False False
23 C.422-1917 1917.0 O4741 Head NaN Egypt Unknown NaN 1400 BC-1300 BC 2006AN6421 Glass cast ANCIENT Glass, Room 131 False False
31 S.5009-2009 2009.0 O1141402 Silk programme NaN London unknown printer 1876 2010EM1225 ink printed NaN In store False False
4 S.1452-1984 1984.0 O98221 False beard False beard Great Britain Unknown makers ca. early 20th century 2019MK5310 hair wig-making NaN In store False False
IIIF_IMAGE_URL = "https://framemark.vam.ac.uk/collections/%s/full/!100,100/0/default.jpg"
vam_beard_objects_df._primaryImageId = [IIIF_IMAGE_URL % item for item in vam_beard_objects_df._primaryImageId]
attach(vam_beard_objects_df, "_primaryImageId")
show()
_images/data-exploration-8_9_0.png

A range of objects there, but still with some excellent beards visible

Let’s look now if we can see any trends in beards depictioned on objects over the last thousand years.

Beards over the last millenium - V&A

import pandas as pd

start_century = 1000
end_century = 2100
beard_objects_df = pd.DataFrame()

for century in range(start_century, end_century, 100):
  beard_obj_century = pd.read_json(f'https://api.vam.ac.uk/v2/objects/clusters/object_type/search?q=Beard%20-Collection&year_made_from={century}&year_made_to={century+99}&cluster_size=20')
# Remove some object types with very low counts to make graphic more readable
  beard_obj_century.drop( beard_obj_century[ beard_obj_century['count'] < 5 ].index, inplace=True)
  beard_obj_century['century'] = century 
  beard_objects_df = beard_objects_df.append(beard_obj_century)
    
beard_objects_df.head(15)
id value count count_max_error century
0 Panel Panel 14 0 1300
1 Statuette Statuette 6 0 1300
2 Relief Relief 5 0 1300
0 Panel Panel 114 0 1400
1 Relief Relief 24 0 1400
2 Statuette Statuette 19 0 1400
3 Fragment of a panel Fragment of a panel 8 0 1400
4 Statue Statue 6 0 1400
5 Figure Figure 5 0 1400
0 Panel Panel 103 0 1500
1 Medal Medal 91 0 1500
2 Statuette Statuette 25 0 1500
3 Print Print 21 0 1500
4 Plaquette Plaquette 18 0 1500
5 Relief Relief 14 0 1500
import altair as alt

alt.Chart(beard_objects_df).mark_circle().encode(
    x='century:O',
    y='value:O',
    size='sum(count):Q'
)

So it seems like the 14th and 15th centuries were a good time for beards on objects in the V&A Collection, things have tailed off a little recently sadly. Let’s try the same for the Met. We need to handle the count aggregations ourselves for this (just taking the top 100 objects)

Beards over the last millenium - Met

import requests
import pandas as pd
import csv
from time import sleep

req = requests.get('https://collectionapi.metmuseum.org/public/collection/v1/search?q=beard')

met_summer_object_ids = req.json()['objectIDs']
met_summer_objects = []
max_objects = 20
count = 0

start_century = 1000
end_century = 2100

beard_objects_df = met_beard_centuries_df = pd.DataFrame()

for century in range(start_century, end_century, 100):
  req = requests.get(f'https://collectionapi.metmuseum.org/public/collection/v1/search?q=beard&dateBegin={century}&dateEnd={century+99}')
  req_json = req.json()

  if req_json['total'] < 1:
    continue

  met_beard_object_ids = req_json['objectIDs']
    
  object_types = {}
  # We just take the top 100 objects (with pauses) to be nice to the Met API server
  nice = 0
  for obj_id in met_beard_object_ids[0:100]:
     
    req = requests.get(f'https://collectionapi.metmuseum.org/public/collection/v1/objects/{obj_id}')
    obj_data = req.json()

    if obj_data['objectName'] in object_types:
      object_types[obj_data['objectName']] += 1
    else:
      object_types[obj_data['objectName']] = 1
    
    if nice > 25:
        sleep(1)
        nice = 0
    else:
        nice += 1
  
  century_df = pd.DataFrame([(type,object_types[type]) for type in object_types], columns=['type', 'count'])
    
  century_df['century'] = century
                   
  met_beard_centuries_df = met_beard_centuries_df.append(century_df)
  
met_beard_centuries_df.head(10)
type count century
0 Handscroll 1 1100
0 Box 1 1200
1 Section from a non-illustrated manuscript 1 1200
0 Painting, triptych 1 1300
1 Painting, cassone panel 1 1300
0 Painting 11 1400
1 Relief 1 1400
2 Handscroll 1 1400
3 Painting, diptych 1 1400
4 Missal; Manuscript 1 1400
import altair as alt

alt.Chart(met_beard_centuries_df).mark_circle().encode(
    x='century:O',
    y='type:O',
    size='sum(count):Q'
)

So for our sample from the Met, a fairly low but consistent presence of beards in paintings from the 14th century onwards, with an intriguing spike in the 17th century for armchairs (perhaps a furniture maker with the name of ‘Beard’ rather than a trend for armchairs made from beard hair, do let us know if you know more).

Further Beard Studies

An obvious next step would be to run some image analysis on the matched objects to extract and classify beard styles over the millenia. We will return to this important research project when time allows.