Digital Archaeology seminar
28th November 2022, University of Durham
Thomas Huet, Jose Pozo, Craig Alexander
This presentation is an introduction to computational archaeology
software 💿 | semantic 🖼 📜 🔢 |
---|---|
logic >_ print(‘hello’) | |
hardware 💻 |
It is also about ancient iconography
It introduces the R package iconr and gives example of study with this package
RStudio is THE graphical interface for R, Rstudio is also in the cloud (RStudio.cloud), VS Code is a standalone source code editor multi-platforms and multi-languages
R markdown is a notebook interface for report generation, Shiny allows the development of web interactive applications, Quarto to create Powerpoint-like web interactive documents
The CRAN features 18,890 available packages. The package iconr uses 18 packages. The most distinctives are:
package | description |
---|---|
![]() |
magick for image manipulation |
![]() |
igraph for graph theory and network analysis |
![]() |
sf makes R a GIS |
![]() |
Momocs for geometric morphometric methods |
sthda.com has good tutorials, stackoverflow is probably the place where you will find the answer you need, if you need some open software for archaeology go to open-archaeo
The 🔝 popular web-platform for source code management and software development (with over 128 million public repositories)
|
![]() |
Dataset: Roca dels Moros, Lleida, Catalunya. 3D model from the Generalitat de Catalunya
Aspectivity consists in representing all aspects and attributes of the subject simultaneously in order to establish a definition
Francfort, H.-P., Huth, C., Olmos, R., Szabó, M., & Verger, S. (2010). “Qu’est-ce que l’art protohistorique ?” Perspective. Actualité en histoire de l’art, (2), 195–214
The figurative purpose of the analogist ontology is to make present networks of correspondence between discontinuous elements
Descola, P. (2021). Les formes du visible. Une anthropologie de la figuration. Seuil.
Main nodes
Separated GUs showing different graphical contents (anthropomorphic figure, spear, shield, comb and ingot)
Shapes
Shape analysis allows GUs of a given type to be compared and classified
Typology
Typology
By generalisation (⬆️ the tree) or by specification (⬇️ the tree), this hierarchical structure allows comparison between GUs:
Attribute nodes
Additional GUs characterising the main node (helmet, phalus)
—— = —— normal undirected edges between contiguous and contemporaneous main nodes a
and b
site | decor | a | b | type | xa | ya | xb | yb | |
---|---|---|---|---|---|---|---|---|---|
24 | Brozas | Brozas | 1 | 2 | = | 354.1114 | -123.3621 | 346.3455 | -151.8371 |
25 | Brozas | Brozas | 3 | 1 | = | 279.0411 | -162.1916 | 354.1114 | -123.3621 |
26 | Brozas | Brozas | 3 | 2 | = | 279.0411 | -162.1916 | 346.3455 | -151.8371 |
27 | Brozas | Brozas | 4 | 1 | = | 211.7366 | -206.1984 | 354.1114 | -123.3621 |
28 | Brozas | Brozas | 4 | 3 | = | 211.7366 | -206.1984 | 279.0411 | -162.1916 |
29 | Brozas | Brozas | 1 | 5 | = | 354.1114 | -123.3621 | 392.9409 | -343.3959 |
30 | Brozas | Brozas | 2 | 5 | = | 346.3455 | -151.8371 | 392.9409 | -343.3959 |
31 | Brozas | Brozas | 3 | 5 | = | 279.0411 | -162.1916 | 392.9409 | -343.3959 |
32 | Brozas | Brozas | 4 | 5 | = | 211.7366 | -206.1984 | 392.9409 | -343.3959 |
33 | Brozas | Brozas | 5 | 6 | = | 392.9409 | -343.3959 | 387.7636 | -564.7240 |
edges list:
[1] "bouclier-=-epee" "bouclier-=-fibule" "bouclier-=-lance"
[4] "bouclier-=-miroir" "bouclier-=-peigne" "fibule-=-lance"
[7] "fibule-=-miroir" "fibule-=-peigne" "lance-=-miroir"
[10] "lance-=-peigne"
- - - + - - - attribute directed edges between contemporaneous nodes where the attribute node b
is an attribute of main node a
site | decor | a | b | type | xa | ya | xb | yb |
---|---|---|---|---|---|---|---|---|
Zarza de Montanchez | Zarza De Montanchez | 1 | 3 | = | 350.7279 | -141.3279 | 289.7853 | -183.1172 |
Zarza de Montanchez | Zarza De Montanchez | 1 | 2 | = | 350.7279 | -141.3279 | 428.2122 | -172.6699 |
Zarza de Montanchez | Zarza De Montanchez | 3 | 4 | = | 289.7853 | -183.1172 | 285.4322 | -207.4942 |
Zarza de Montanchez | Zarza De Montanchez | 3 | 2 | = | 289.7853 | -183.1172 | 428.2122 | -172.6699 |
Zarza de Montanchez | Zarza De Montanchez | 4 | 5 | = | 285.4322 | -207.4942 | 290.6559 | -310.2261 |
Zarza de Montanchez | Zarza De Montanchez | 6 | 4 | = | 418.6354 | -305.0025 | 285.4322 | -207.4942 |
Zarza de Montanchez | Zarza De Montanchez | 5 | 6 | = | 290.6559 | -310.2261 | 418.6354 | -305.0025 |
Zarza de Montanchez | Zarza De Montanchez | 7 | 8 | + | 343.7630 | -466.9358 | 261.9258 | -433.8527 |
Zarza de Montanchez | Zarza De Montanchez | 7 | 9 | + | 343.7630 | -466.9358 | 258.4433 | -486.0892 |
Zarza de Montanchez | Zarza De Montanchez | 7 | 10 | + | 343.7630 | -466.9358 | 342.9527 | -434.1614 |
Zarza de Montanchez | Zarza De Montanchez | 7 | 11 | + | 343.7630 | -466.9358 | 344.2134 | -510.2253 |
Zarza de Montanchez | Zarza De Montanchez | 5 | 7 | = | 290.6559 | -310.2261 | 343.7630 | -466.9358 |
Zarza de Montanchez | Zarza De Montanchez | 6 | 7 | = | 418.6354 | -305.0025 | 343.7630 | -466.9358 |
Zarza de Montanchez | Zarza De Montanchez | 1 | 12 | + | 350.7279 | -141.3279 | 377.1414 | -163.5179 |
edges list:
[1] "bouclier-=-chariot_char" "bouclier-=-lance"
[3] "bouclier-=-personnage" "casque-+-rivet"
[5] "casque-=-epee" "casque-=-miroir"
[7] "chariot_char-+-cheval" "chariot_char-+-cheval#"
[9] "chariot_char-+-roue" "chariot_char-+-roue#"
[11] "chariot_char-=-personnage" "epee-=-lance"
[13] "epee-=-miroir" "lance-=-personnage"
—— > —— diachronic directed edges between non-contemporaneous nodes where the node a
overlaps/is more recent than node b
site | decor | a | b | type | xa | ya | xb | yb |
---|---|---|---|---|---|---|---|---|
Ibahernando | Ibahernando | 1 | 2 | > | 284.1056 | -131.2344 | 351.6009 | -191.5644 |
Ibahernando | Ibahernando | 1 | 3 | > | 284.1056 | -131.2344 | 345.0360 | -296.6023 |
Ibahernando | Ibahernando | 2 | 3 | = | 351.6009 | -191.5644 | 345.0360 | -296.6023 |
Ibahernando | Ibahernando | 3 | 4 | = | 345.0360 | -296.6023 | 367.3566 | -420.6782 |
edges list:
[1] "bouclier-=-epee" "bouclier-=-lance" "ecriture->-bouclier"
[4] "ecriture->-lance"
One GIS project = One decoration
Install and load packages
dataDir <- system.file("extdata", package = "iconr")
imgs_path <- paste0(dataDir, "/imgs.csv")
imgs <- read.table(imgs_path, sep = ";", stringsAsFactors = FALSE)
kable(imgs, "html") %>%
kable_styling(full_width = FALSE, position = "center", font_size = 20)
idf | site | decor | img |
---|---|---|---|
1 | Cerro Muriano | Cerro Muriano 1 | Cerro_Muriano.Cerro_Muriano_1.jpg |
2 | Torrejon Rubio | Torrejon Rubio 1 | Torrejon_Rubio.Torrejon_Rubio_1.jpg |
3 | Brozas | Brozas | Brozas.Brozas.jpg |
4 | Zarza de Montanchez | Zarza De Montanchez | Zarza_de_Montanchez.Zarza_De_Montanchez.jpg |
5 | Ibahernando | Ibahernando | Ibahernando.Ibahernando.jpg |
1. 2.
3.
4.
5.
nodes_path <- paste0(dataDir, "/nodes.shp")
nodes.shp <- st_read(nodes_path, quiet = T)
nodes <- as.data.frame(nodes.shp)
kable(nodes, "html") %>%
kable_styling(full_width = FALSE, position = "center", font_size = 20)
site | decor | id | type | x | y | geometry |
---|---|---|---|---|---|---|
Cerro Muriano | Cerro Muriano 1 | 1 | personnage | 349.8148 | -298.3244 | POINT (349.8148 -298.3244) |
Cerro Muriano | Cerro Muriano 1 | 2 | casque | 349.8148 | -243.9851 | POINT (349.8148 -243.9851) |
Cerro Muriano | Cerro Muriano 1 | 3 | lance | 238.4637 | -298.3244 | POINT (238.4637 -298.3244) |
Cerro Muriano | Cerro Muriano 1 | 4 | bouclier | 446.0222 | -381.1697 | POINT (446.0222 -381.1697) |
Cerro Muriano | Cerro Muriano 1 | 5 | peigne | 283.0041 | -358.0086 | POINT (283.0041 -358.0086) |
Cerro Muriano | Cerro Muriano 1 | 7 | sexe_masculin | 342.6884 | -427.4917 | POINT (342.6884 -427.4917) |
Cerro Muriano | Cerro Muriano 1 | 8 | lingot_pdb | 451.1489 | -237.4782 | POINT (451.1489 -237.4782) |
Torrejon Rubio | Torrejon Rubio 1 | 1 | chariot_char | 306.3033 | -177.1217 | POINT (306.3033 -177.1217) |
Torrejon Rubio | Torrejon Rubio 1 | 2 | bouclier | 374.5779 | -347.8082 | POINT (374.5779 -347.8082) |
Torrejon Rubio | Torrejon Rubio 1 | 3 | arc | 221.6166 | -303.8236 | POINT (221.6166 -303.8236) |
Torrejon Rubio | Torrejon Rubio 1 | 4 | miroir | 211.7693 | -458.0980 | POINT (211.7693 -458.098) |
Torrejon Rubio | Torrejon Rubio 1 | 5 | fibule | 490.1195 | -513.2428 | POINT (490.1195 -513.2428) |
Torrejon Rubio | Torrejon Rubio 1 | 6 | epee | 366.7001 | -563.1358 | POINT (366.7001 -563.1358) |
Torrejon Rubio | Torrejon Rubio 1 | 7 | lance | 298.4255 | -607.7769 | POINT (298.4255 -607.7769) |
Torrejon Rubio | Torrejon Rubio 1 | 8 | cheval | 251.1585 | -141.6715 | POINT (251.1585 -141.6715) |
Torrejon Rubio | Torrejon Rubio 1 | 9 | cheval | 256.4103 | -209.9461 | POINT (256.4103 -209.9461) |
Torrejon Rubio | Torrejon Rubio 1 | 10 | roue | 364.5141 | -138.7608 | POINT (364.5141 -138.7608) |
Torrejon Rubio | Torrejon Rubio 1 | 11 | roue | 363.6435 | -209.2802 | POINT (363.6435 -209.2802) |
Torrejon Rubio | Torrejon Rubio 1 | 12 | fleche | 185.5875 | -312.4591 | POINT (185.5875 -312.4591) |
Brozas | Brozas | 1 | lance | 354.1114 | -123.3621 | POINT (354.1114 -123.3621) |
Brozas | Brozas | 2 | peigne | 346.3455 | -151.8371 | POINT (346.3455 -151.8371) |
Brozas | Brozas | 3 | fibule | 279.0411 | -162.1916 | POINT (279.0411 -162.1916) |
Brozas | Brozas | 4 | miroir | 211.7366 | -206.1984 | POINT (211.7366 -206.1984) |
Brozas | Brozas | 5 | bouclier | 392.9409 | -343.3959 | POINT (392.9409 -343.3959) |
Brozas | Brozas | 6 | epee | 387.7636 | -564.7240 | POINT (387.7636 -564.724) |
Zarza de Montanchez | Zarza De Montanchez | 1 | casque | 350.7279 | -141.3279 | POINT (350.7279 -141.3279) |
Zarza de Montanchez | Zarza De Montanchez | 2 | miroir | 428.2122 | -172.6699 | POINT (428.2122 -172.6699) |
Zarza de Montanchez | Zarza De Montanchez | 3 | epee | 289.7853 | -183.1172 | POINT (289.7853 -183.1172) |
Zarza de Montanchez | Zarza De Montanchez | 4 | lance | 285.4322 | -207.4942 | POINT (285.4322 -207.4942) |
Zarza de Montanchez | Zarza De Montanchez | 5 | bouclier | 290.6559 | -310.2261 | POINT (290.6559 -310.2261) |
Zarza de Montanchez | Zarza De Montanchez | 6 | personnage | 418.6354 | -305.0025 | POINT (418.6354 -305.0025) |
Zarza de Montanchez | Zarza De Montanchez | 7 | chariot_char | 343.7630 | -466.9358 | POINT (343.763 -466.9358) |
Zarza de Montanchez | Zarza De Montanchez | 8 | cheval | 261.9258 | -433.8527 | POINT (261.9258 -433.8527) |
Zarza de Montanchez | Zarza De Montanchez | 9 | cheval | 258.4433 | -486.0892 | POINT (258.4433 -486.0892) |
Zarza de Montanchez | Zarza De Montanchez | 10 | roue | 342.9527 | -434.1614 | POINT (342.9527 -434.1614) |
Zarza de Montanchez | Zarza De Montanchez | 11 | roue | 344.2134 | -510.2253 | POINT (344.2134 -510.2253) |
Zarza de Montanchez | Zarza De Montanchez | 12 | rivet | 377.1414 | -163.5179 | POINT (377.1414 -163.5179) |
Ibahernando | Ibahernando | 1 | ecriture | 284.1056 | -131.2344 | POINT (284.1056 -131.2344) |
Ibahernando | Ibahernando | 2 | lance | 351.6009 | -191.5644 | POINT (351.6009 -191.5644) |
Ibahernando | Ibahernando | 3 | bouclier | 345.0360 | -296.6023 | POINT (345.036 -296.6023) |
Ibahernando | Ibahernando | 4 | epee | 367.3566 | -420.6782 | POINT (367.3566 -420.6782) |
edges_path <- paste0(dataDir, "/edges.shp")
edges.shp <- st_read(edges_path, quiet = T)
edges <- as.data.frame(edges.shp)
kable(edges, "html") %>%
kable_styling(full_width = FALSE, position = "center", font_size = 20)
site | decor | a | b | type | geometry |
---|---|---|---|---|---|
Cerro Muriano | Cerro Muriano 1 | 1 | 4 | = | LINESTRING (349.8148 -298.3... |
Cerro Muriano | Cerro Muriano 1 | 1 | 5 | = | LINESTRING (283.0041 -358.0... |
Cerro Muriano | Cerro Muriano 1 | 3 | 5 | = | LINESTRING (283.0041 -358.0... |
Cerro Muriano | Cerro Muriano 1 | 1 | 2 | + | LINESTRING (349.8148 -298.3... |
Cerro Muriano | Cerro Muriano 1 | 1 | 7 | + | LINESTRING (349.8148 -298.3... |
Cerro Muriano | Cerro Muriano 1 | 3 | 1 | = | LINESTRING (238.4637 -298.3... |
Cerro Muriano | Cerro Muriano 1 | 1 | 8 | = | LINESTRING (349.8148 -298.3... |
Cerro Muriano | Cerro Muriano 1 | 4 | 8 | = | LINESTRING (451.1489 -237.4... |
Torrejon Rubio | Torrejon Rubio 1 | 6 | 5 | = | LINESTRING (366 -563, 490 -... |
Torrejon Rubio | Torrejon Rubio 1 | 4 | 2 | = | LINESTRING (211 -458, 374 -... |
Torrejon Rubio | Torrejon Rubio 1 | 6 | 7 | = | LINESTRING (366 -563, 298 -... |
Torrejon Rubio | Torrejon Rubio 1 | 1 | 2 | = | LINESTRING (306 -177, 374 -... |
Torrejon Rubio | Torrejon Rubio 1 | 1 | 8 | + | LINESTRING (306 -177, 251 -... |
Torrejon Rubio | Torrejon Rubio 1 | 1 | 9 | + | LINESTRING (256 -209, 306 -... |
Torrejon Rubio | Torrejon Rubio 1 | 2 | 3 | = | LINESTRING (374 -347, 221 -... |
Torrejon Rubio | Torrejon Rubio 1 | 3 | 1 | = | LINESTRING (221 -303, 306 -... |
Torrejon Rubio | Torrejon Rubio 1 | 3 | 4 | = | LINESTRING (221 -303, 211 -... |
Torrejon Rubio | Torrejon Rubio 1 | 2 | 5 | = | LINESTRING (374 -347, 490 -... |
Torrejon Rubio | Torrejon Rubio 1 | 2 | 6 | = | LINESTRING (374 -347, 366 -... |
Torrejon Rubio | Torrejon Rubio 1 | 6 | 4 | = | LINESTRING (366 -563, 211 -... |
Torrejon Rubio | Torrejon Rubio 1 | 3 | 12 | + | LINESTRING (221 -303, 185 -... |
Torrejon Rubio | Torrejon Rubio 1 | 1 | 10 | + | LINESTRING (306 -177, 364 -... |
Torrejon Rubio | Torrejon Rubio 1 | 1 | 11 | + | LINESTRING (306 -177, 363 -... |
Brozas | Brozas | 1 | 2 | = | LINESTRING (354.1114 -123.3... |
Brozas | Brozas | 3 | 1 | = | LINESTRING (279.0411 -162.1... |
Brozas | Brozas | 3 | 2 | = | LINESTRING (279.0411 -162.1... |
Brozas | Brozas | 4 | 1 | = | LINESTRING (211.7366 -206.1... |
Brozas | Brozas | 4 | 3 | = | LINESTRING (211.7366 -206.1... |
Brozas | Brozas | 1 | 5 | = | LINESTRING (354.1114 -123.3... |
Brozas | Brozas | 2 | 5 | = | LINESTRING (346.3455 -151.8... |
Brozas | Brozas | 3 | 5 | = | LINESTRING (279.0411 -162.1... |
Brozas | Brozas | 4 | 5 | = | LINESTRING (211.7366 -206.1... |
Brozas | Brozas | 5 | 6 | = | LINESTRING (392.9409 -343.3... |
Zarza de Montanchez | Zarza De Montanchez | 1 | 3 | = | LINESTRING (350.7279 -141.3... |
Zarza de Montanchez | Zarza De Montanchez | 1 | 2 | = | LINESTRING (350.7279 -141.3... |
Zarza de Montanchez | Zarza De Montanchez | 3 | 4 | = | LINESTRING (289.7853 -183.1... |
Zarza de Montanchez | Zarza De Montanchez | 3 | 2 | = | LINESTRING (289.7853 -183.1... |
Zarza de Montanchez | Zarza De Montanchez | 4 | 5 | = | LINESTRING (285.4322 -207.4... |
Zarza de Montanchez | Zarza De Montanchez | 6 | 4 | = | LINESTRING (418.6354 -305.0... |
Zarza de Montanchez | Zarza De Montanchez | 5 | 6 | = | LINESTRING (290.6559 -310.2... |
Zarza de Montanchez | Zarza De Montanchez | 7 | 8 | + | LINESTRING (343.763 -466.93... |
Zarza de Montanchez | Zarza De Montanchez | 7 | 9 | + | LINESTRING (343.763 -466.93... |
Zarza de Montanchez | Zarza De Montanchez | 7 | 10 | + | LINESTRING (343.763 -466.93... |
Zarza de Montanchez | Zarza De Montanchez | 7 | 11 | + | LINESTRING (343.763 -466.93... |
Zarza de Montanchez | Zarza De Montanchez | 5 | 7 | = | LINESTRING (290.6559 -310.2... |
Zarza de Montanchez | Zarza De Montanchez | 6 | 7 | = | LINESTRING (418.6354 -305.0... |
Zarza de Montanchez | Zarza De Montanchez | 1 | 12 | + | LINESTRING (350.7279 -141.3... |
Ibahernando | Ibahernando | 1 | 2 | > | LINESTRING (284.1056 -131.2... |
Ibahernando | Ibahernando | 1 | 3 | > | LINESTRING (284.1056 -131.2... |
Ibahernando | Ibahernando | 2 | 3 | = | LINESTRING (351.6009 -191.5... |
Ibahernando | Ibahernando | 3 | 4 | = | LINESTRING (345.036 -296.60... |
Plot the first graph of the iconr default dataset
dataDir <- system.file("extdata", package = "iconr")
imgs <- read.table(paste0(dataDir, "/imgs.csv"), sep = ";", stringsAsFactors = FALSE)
nodes.shp <- st_read(paste0(dataDir, "/nodes.shp"), quiet = T)
nodes <- as.data.frame(nodes.shp)
edges.shp <- st_read(paste0(dataDir, "/edges.shp"), quiet = T)
edges <- as.data.frame(edges.shp)
lgrph <- list_dec(imgs, nodes, edges)
g <- lgrph[[1]]
plot(g)
Plot the first graph of the iconr default dataset
dataDir <- system.file("extdata", package = "iconr")
imgs <- read.table(paste0(dataDir, "/imgs.csv"), sep = ";", stringsAsFactors = FALSE)
nodes.shp <- st_read(paste0(dataDir, "/nodes.shp"), quiet = T)
nodes <- as.data.frame(nodes.shp)
edges.shp <- st_read(paste0(dataDir, "/edges.shp"), quiet = T)
edges <- as.data.frame(edges.shp)
lgrph <- list_dec(imgs, nodes, edges)
g <- lgrph[[1]]
plot(g)
df.same_edges <- same_elements(lgrph, nd.var = "type", focus = "edges")
knitr::kable(df.same_edges, row.names = TRUE, escape = F, table.attr = "style='width:40%;'",
caption = "Count of common edges between decorations") %>%
column_spec(1, bold=TRUE) %>%
kableExtra::kable_styling(position = "center", font_size = 24)
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
1 | 8 | 0 | 1 | 2 | 0 |
2 | 0 | 15 | 3 | 7 | 1 |
3 | 1 | 3 | 10 | 1 | 2 |
4 | 2 | 7 | 1 | 14 | 1 |
5 | 0 | 1 | 2 | 1 | 4 |
Plot the Ibahernando stelae, GUs id
Plot the Ibahernando stelae, GUs type
Plot the Ibahernando stelae and remove the Latin writing GU (ecriture
, id
= 1
) from the studied graph by selecting GUs contemporaneous to the sword (id
= 4
)
site <- decor <- "Ibahernando"
nds.df <- read_nds(site, decor, dataDir)
eds.df <- read_eds(site, decor, dataDir)
selected.nd <- 4
l_dec_df <- contemp_nds(nds.df, eds.df, selected.nd)
plot_dec_grph(l_dec_df$nodes, l_dec_df$edges, imgs,
site, decor, dataDir,
nd.var = "type")
Díaz-Guardamino Uribe, M. (2010). Las estelas decoradas en la Prehistoria de la Península Ibérica (Universidad Complutense de Madrid, Servicio de Publicaciones)
url: https://eprints.ucm.es/11070/1/T32200.pdf
Spatialized graph
Types
Maximum length (cm)
Orientation (see thesaurus)
Technology (pecked, incised, painted, etc.)
Completness
Betweenness centrality
Closeness centrality
Domination
Cultural attribution
Chronological attribution
The R package iconr - Thomas Huet, Jose Pozo, Craig Alexander - https://github.com/zoometh/iconr