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()

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 | 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()

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 | 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.