Alignement de données vers ArkeoGIS à l’aide du logiciel R

Ce tutoriel a pour objet de servir d’exemple pour l’automatisation d’un alignement de données issues d’une base déposée sur la plateforme Heurist, vers le thésaurus d’ArkeoGIS à l’aide du logiciel libre R. Il est nécessaire de connaître un minimum ce logiciel pour pouvoir suivre ce tutoriel. Ce document est fondé sur la base de données issue d’une thèse de doctorat (Scholtus 2021).
Auteur·rice

Lizzie Scholtus

Date de publication

28 février 2023


# Liste des librairies utilisées dans ce documents

library(kableExtra)
library(plyr)
library(dplyr)
library(stringr)
library(rlist)
library(tidyr)


1 Présentation des données originelles


Le jeu de données utilisé ici provient d’une base données hébergée sur le site Heurist qui permet la création de bases de données relationnelles et l’export des données croisées au format csv. Dans cet export, Table 1, se trouvent les informations relatives aux objets et leurs typologies, ainsi qu’aux sites sur lesquels ils ont éte mis au jour.
Par ailleurs, certaines informations, concernant plus particulièrement les sites, n’ont pas été importées dans cette base, mais sont conservées au format Access. Ces éléments ont été exportés au format csv (Table 2) et peuvent être reliés à la table objets grâce à l’identifiant de site.

Tous les éléments nécessaire à l’import dans ArkeoGIS sont donc déjà présents dans ces deux jeux de données, mais pas forcément dans les bonnes colonnes ni au bon format. Ces tables doivent donc être assemblées et nettoyées, puis être alignées sur le thésaurus spécifique au site ArkeoGIS avant d’y être déposées.


# Import des deux jeux de donnés dans R

objets <- read.csv2("data/Objet.csv", sep = ",", encoding = "UTF-8")
sites <- read.csv2("data/Site.csv", sep = ";", encoding = "UTF-8")
Table 1: Export de la table objets depuis Heurist incluant les informations liées
Objet.H.ID Unique.public.identifier catégorie.objet Materiaux Site.objet.H.ID Unique.public.identifier.1 Lieu.dit Commune.H.ID Name...Title Mappable.location..geospatial. Type.objet.H.ID rec_Title Datation.type.H.ID Name...Title.1 Bibliographie..Référence.biblio..H.ID rec_Title.1
42244 APP0001 harnais Alliage cuivreux 6929 SIT0092 Augusta Raurica 5906 Augst POINT(7.71468 47.53557) 7437 harnais - Artefacts APH-4000, Bishop 1988 7026|7027|7028 0 : 25 apr|25 : 50 apr|50 : 75 apr 201387|181260 Artefacts APH-4068|Deschler-Erb 1999, n° 386
42245 APP0010 harnais Alliage cuivreux 6545 SIT0575 Rheingönheim 5136 Ludwigshafen am Rhein POINT(8.41944 49.44514) 7437 harnais - Artefacts APH-4000, Bishop 1988 7026|7027|7028 0 : 25 apr|25 : 50 apr|50 : 75 apr 203143|201387|193274 Bishop 1992, fig. 15, n°1-2|Artefacts APH-4068|Ulbert 1969, Pl.28 n°4
42246 APP0100 harnais Alliage cuivreux 6918 SIT0091 Vindonissa 5895 Windisch an der Aare POINT(8.21842 47.47899) 7447 harnais - Artefacts APH-4000, Bishop 1988 7030|7031|7032|7033 100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr 193339|201165 Unz, Deschler-Erb 1997, pl. 63, n° 1812|Artefacts APH-4051


Table 2: Export de la table sites depuis Access
ID_SITE Centroide Etat.de.la.recherche Occupation Datation Bibliographie Activités.artisanales Type.de.site
SIT0001 VRAI Fouillé Non renseigné IVe s. av. - IVe s. apr. R. Cordie-Hachenberg, A. Haffner 1991, Haffner 1971 Funéraire
SIT0002 VRAI Non renseigné Non renseigné Habitat indéterminé
SIT0003 VRAI Non renseigné Non renseigné Indéterminé

2 Nettoyage de la table


La première étape, pour préparer le jeu de données, consiste à nettoyer la table en enlevant les colonnes inutiles. Cette opération est évidemment différentes selon les jeux de données. Il s’agit en particulier ici des identifiants uniques permettant les liens entre les différentes tables dans Heurist, c’est-à-dire toutes les colonnes contenant l’information H.ID dans leur titre.
À l’aide d’une expression régulière, il est alors possible de supprimer toutes les colonnes finissant par les lettres ID.


# Supprimer les colonnes inutiles avec une expressions régulières

n_objet <- as.data.frame(objets[,-grep(".*ID$", colnames(objets))])
Table 3: Table objets après suppression des colonnes non utiles
Unique.public.identifier catégorie.objet Materiaux Unique.public.identifier.1 Lieu.dit Name...Title Mappable.location..geospatial. rec_Title Name...Title.1 rec_Title.1
APP0001 harnais Alliage cuivreux SIT0092 Augusta Raurica Augst POINT(7.71468 47.53557) harnais - Artefacts APH-4000, Bishop 1988 0 : 25 apr|25 : 50 apr|50 : 75 apr Artefacts APH-4068|Deschler-Erb 1999, n° 386
APP0010 harnais Alliage cuivreux SIT0575 Rheingönheim Ludwigshafen am Rhein POINT(8.41944 49.44514) harnais - Artefacts APH-4000, Bishop 1988 0 : 25 apr|25 : 50 apr|50 : 75 apr Bishop 1992, fig. 15, n°1-2|Artefacts APH-4068|Ulbert 1969, Pl.28 n°4
APP0100 harnais Alliage cuivreux SIT0091 Vindonissa Windisch an der Aare POINT(8.21842 47.47899) harnais - Artefacts APH-4000, Bishop 1988 100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr Unz, Deschler-Erb 1997, pl. 63, n° 1812|Artefacts APH-4051


3 Transformer la table au format ArkeoGIS


Pour que le jeu de données soit compatible avec la plateforme ArkeoGIS, il doit être composé des 22 colonnes suivantes. Pour chacune, une valeur et un type précis sont définis (voir le manuel en ligne pour plus d’informations).
Dans la table utilisée pour cet exemple, si certaines colonnes sont déjà au bon format, d’autres vont nécessiter quelques manipulations.

Astuce

Le modèle de données est téléchargeable ici


# Import du modèle de données ArkeoGIS

arkeoGIS <- read.csv2("data/Model.csv", sep = ";")
 [1] "SITE_SOURCE_ID"     "SITE_NAME"          "MAIN_CITY_NAME"    
 [4] "GEONAME_ID"         "PROJECTION_SYSTEM"  "LONGITUDE"         
 [7] "LATITUDE"           "ALTITUDE"           "CITY_CENTROID"     
[10] "OCCUPATION"         "STATE_OF_KNOWLEDGE" "STARTING_PERIOD"   
[13] "ENDING_PERIOD"      "CARAC_NAME"         "CARAC_LVL1"        
[16] "CARAC_LVL2"         "CARAC_LVL3"         "CARAC_LVL4"        
[19] "CARAC_EXP"          "BIBLIOGRAPHY"       "COMMENTS"          
[22] "WEB_IMAGES"        


3.1 Les colonnes à renommer


Pour un certain nombre de colonnes, aucune modifications n’est nécessaire. Il suffit de les renommer en fonction de la table fournit dans le manuel d’ArkeoGIS.

  • SITE_SOURCE_ID : cette colonne, désigne l’identifiant unique se reportant au site sur lequel l’objet a été mis au jour. Ici, cette information se trouve dans la colonne Unique.public.identifier.1, la colonne Unique.public.identifier indiquant l’identifiant unique de l’objet en lui même.

  • SITE_NAME : le nom du site se trouve dans la colonne Lieu.dit.

  • MAIN_CITY_NAME : la commune sur laquelle se situe le site se trouve dans la colonne Name…Title.

  • BIBLIOGRAPHY : la bibliographie se rapportant à l’objet se trouve dans la colonne rec_Title.1.


# Renommer les colonnes déjà existantes

colnames(n_objet)[c(4:6, 10)] <- colnames(arkeoGIS[c(1:3, 20)])
Table 4: Table objets après avoir renommer une partie des colonnes
Unique.public.identifier catégorie.objet Materiaux SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME Mappable.location..geospatial. rec_Title Name...Title.1 BIBLIOGRAPHY
APP0001 harnais Alliage cuivreux SIT0092 Augusta Raurica Augst POINT(7.71468 47.53557) harnais - Artefacts APH-4000, Bishop 1988 0 : 25 apr|25 : 50 apr|50 : 75 apr Artefacts APH-4068|Deschler-Erb 1999, n° 386
APP0010 harnais Alliage cuivreux SIT0575 Rheingönheim Ludwigshafen am Rhein POINT(8.41944 49.44514) harnais - Artefacts APH-4000, Bishop 1988 0 : 25 apr|25 : 50 apr|50 : 75 apr Bishop 1992, fig. 15, n°1-2|Artefacts APH-4068|Ulbert 1969, Pl.28 n°4
APP0100 harnais Alliage cuivreux SIT0091 Vindonissa Windisch an der Aare POINT(8.21842 47.47899) harnais - Artefacts APH-4000, Bishop 1988 100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr Unz, Deschler-Erb 1997, pl. 63, n° 1812|Artefacts APH-4051


3.2 Les colonnes à créer sans manipulations


Afin de correspondre à la structure des données ArkeoGIS, certaines colonnes et leur données doivent être ajoutées car elles ne sont pas encore présentes dans le jeu de données.

  • La colonne GEONAME_ID est utilisée pour récupérer les coordonnées de sites pour lesquels l’information ne serait pas indiquée dans le jeu de données, ce qui n’est pas le cas ici. Cette colonne doit donc être ajoutée, mais sans nouvelles données.
Astuce

La colonne GEONAME_ID indique l’identifiant unique d’une localité qui peut être trouvé sur le site Geonames. Il est aussi possible d’exporter et aligner directement des localités sur ce référentiel (voir Marlet et al. (2022)).

  • La colonne ALTITUDE reprend une information qui n’est pas disponible dans ce jeu de données.

  • La colonne PROJECTION_SYSTEM indique le système de projection dans lequel les coordonnées sont indiquées, à l’aide de son code EPSG. Ici, il s’agit du système WGS84 dont le code est 4326.

Astuce

Il existe un code EPSG pour chaque système de projection. On peut les trouver sur Wikipédia ou sur le site epsg.

  • La colonne CARAC_NAME précise dans ArkeoGIS à quelle partie du thésaurus la ligne décrite fait référence (Immobilier, Mobilier, Production, Paysage, Analyses). Dans les données utilisées on ne trouve que du mobilier.

  • La colonne CARAC_EXP indique si l’élément décrit est exceptionnel ou non.

  • La colonne WEB_IMAGES indique un lien vers une ou des url permettant l’accès à des illustrations au format jpg, png ou gif.


# Créer les colonnes à ajouter et leur contenu

n_objet[, colnames(arkeoGIS[c(4,8)])] <- NA
n_objet[, colnames(arkeoGIS[5])] <- "4326"
n_objet[, colnames(arkeoGIS[14])] <- "Mobilier"
n_objet[, colnames(arkeoGIS[19])] <- "Non"
n_objet[, colnames(arkeoGIS[22])] <- NA
Table 5: Ajout de nouvelles colonnes à la table objets
Unique.public.identifier catégorie.objet Materiaux SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME Mappable.location..geospatial. rec_Title Name...Title.1 BIBLIOGRAPHY GEONAME_ID ALTITUDE PROJECTION_SYSTEM CARAC_NAME CARAC_EXP WEB_IMAGES
APP0001 harnais Alliage cuivreux SIT0092 Augusta Raurica Augst POINT(7.71468 47.53557) harnais - Artefacts APH-4000, Bishop 1988 0 : 25 apr|25 : 50 apr|50 : 75 apr Artefacts APH-4068|Deschler-Erb 1999, n° 386 NA NA 4326 Mobilier Non NA
APP0010 harnais Alliage cuivreux SIT0575 Rheingönheim Ludwigshafen am Rhein POINT(8.41944 49.44514) harnais - Artefacts APH-4000, Bishop 1988 0 : 25 apr|25 : 50 apr|50 : 75 apr Bishop 1992, fig. 15, n°1-2|Artefacts APH-4068|Ulbert 1969, Pl.28 n°4 NA NA 4326 Mobilier Non NA
APP0100 harnais Alliage cuivreux SIT0091 Vindonissa Windisch an der Aare POINT(8.21842 47.47899) harnais - Artefacts APH-4000, Bishop 1988 100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr Unz, Deschler-Erb 1997, pl. 63, n° 1812|Artefacts APH-4051 NA NA 4326 Mobilier Non NA


3.3 Les colonnes en fonction d’une autre table


On trouve dans la table sites les informations pour compléter les données des colonnes ArkeoGIS CITY_CENTROID, OCCUPATION, STATE_OF_KNOWLEDGE qui sont relative au site de découverte et non à l’objet en lui même. Pour ce faire, il faut fusionner la table objets et la table sites en fonction de l’identifiant unique des sites, ce qui va permettre de répéter les informations pour chaque objet mis au jour sur un même site. Cependant, avant de pouvoir fusionner les deux jeux de données, les deux colonnes contenant l’identifiant unique du site, et permettant le lien, doivent être nommées de la même manière.


# Renommer la colonne ID_Site dans la table `sites`

colnames(sites)[1] <- "SITE_SOURCE_ID"

# Fusionner les jeux de données

n_objet <- droplevels(merge(sites[,1:4], n_objet, by = "SITE_SOURCE_ID"))

# Renommer les colonnes pour ArkeoGIS

colnames(n_objet)[2:4] <- colnames(arkeoGIS[c(9, 11, 10)])
Table 6: Ajout des colonnes de la table sites dans la table objets
SITE_SOURCE_ID CITY_CENTROID STATE_OF_KNOWLEDGE OCCUPATION Unique.public.identifier catégorie.objet Materiaux SITE_NAME MAIN_CITY_NAME Mappable.location..geospatial. rec_Title Name...Title.1 BIBLIOGRAPHY GEONAME_ID ALTITUDE PROJECTION_SYSTEM CARAC_NAME CARAC_EXP WEB_IMAGES
SIT0001 VRAI Fouillé Non renseigné FIB2747 fibule Alliage cuivreux Wederath-Belginum Wederath POINT(7.16444 49.86499) fibule - Gaspar 2007 type 37a|fibule - Feugère 1985 type 26b1|fibule - Riha 1994 type 5.17.3 25 : 50 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr Haffner 1971, 20-21, Taf. 14|Artefacts FIB-4518 NA NA 4326 Mobilier Non NA
SIT0001 VRAI Fouillé Non renseigné PER1594 perle Verre Wederath-Belginum Wederath POINT(7.16444 49.86499) perle - Riha 1990 type 11.1.1 25 : 50 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr Cordie-Hackenberg, Haffner 1997, Taf. 417, j|Artefacts PRL-4001 NA NA 4326 Mobilier Non NA
SIT0001 VRAI Fouillé Non renseigné FIB2751 fibule Alliage cuivreux Wederath-Belginum Wederath POINT(7.16444 49.86499) fibule - Gaspar 2007 type 50|fibule - Feugère 1985 type 26c2|fibule - Riha 1994 type 7.16 50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr Artefacts FIB-4726|Cordie-Hackenberg, Haffner 1997, pl. 618, k NA NA 4326 Mobilier Non NA


Les trois colonnes importées sont définies par des champs prédéfinis fixes dans le manuel d’ArkeoGIS. Il est donc nécessaire de vérifier qu’elles y correspondent bien, et le cas échéant de les modifier en conséquence.

  • La colonne CITY_CENTROID fonctionne selon un système oui-non. Toutefois, l’import dans R a changé ces valeurs en TRUE-FALSE.
# Changer les valeurs de la colonne CITY_CENTROID

n_objet$CITY_CENTROID <- factor(n_objet$CITY_CENTROID)
levels(n_objet$CITY_CENTROID) <- c("Non", "Oui")

Table 7: Contenu de la colonne CITY_CENTROID

(a) Avant
Var1 Freq
FAUX 11472
VRAI 18980
(b) Après
Var1 Freq
Non 11472
Oui 18980


Note

Les valeurs de cette colonne peuvent être corrélées à l’utilisation de geonames dans la colonne GEONAME_ID, afin de définir les coordonnées d’un site. Dans l’exemple utilisé ici aucun geonames n’est utilisé, cependant un certain nombre de site sont localisés par des coordonnées non précises et cette information est notifiée dans cette colonne.


  • La colonne STATE_OF_KNOWLEDGE n’accepte qu’un certain nombre d’entrées spécifiques et ne prend pas en compte les cellules vides. Il est donc nécessaire de remplacer ces dernières par la mention Non renseigné. Il faut aussi homogénéiser les entrées pour Prospecté pédestre, que l’on trouve écrit de trois façons différentes. L’utilisation d’une expression régulière nous permet de faire cette modification en une seule ligne.


# Remplacer les cellules vides par la mention "Non renseigné"

n_objet$STATE_OF_KNOWLEDGE[n_objet$STATE_OF_KNOWLEDGE == ""] <- "Non renseigné"

# Homogénéiser la mention "Prospecté pédestre"

n_objet$STATE_OF_KNOWLEDGE <- sub("^Prospect.+$", "Prospecté pédestre", n_objet$STATE_OF_KNOWLEDGE)

Table 8: Contenu de la colonne STATE_OF_KNOWLEDGE

(a) Avant
Var1 Freq
27
Fouillé 7833
Littérature 104
Non renseigné 21661
Prospecté 91
Prospecté pédestre 511
Prospection pédestre 4
Sondé 221
(b) Après
Var1 Freq
Fouillé 7833
Littérature 104
Non renseigné 21688
Prospecté pédestre 606
Sondé 221


  • La colonne OCCUPATION est, elle aussi, structurée par un certain nombre d’entrées prédéfinies. Ici, il est seulement nécessaire de remplacer les lignes vides par la mention Non renseigné.


# Remplacer les cellules vides par la mention "Non renseigné"

n_objet$OCCUPATION[n_objet$OCCUPATION == ""] <- "Non renseigné"

Table 9: Contenu de la colonne OCCUPATION

(a) Avant
Var1 Freq
27
Continue 1332
Multiple 2
Non renseigné 27135
Unique 1956
(b) Après
Var1 Freq
Continue 1332
Multiple 2
Non renseigné 27162
Unique 1956


3.4 Les colonnes à créer d’après les données d’autres colonnes


Pour certaines colonnes les informations nécessaires à l’import dans ArkeoGIS sont déjà présentes dans la table, mais ne sont pas aux bons formats ou sont mélangées à d’autres élements. Il est donc nécessaire de les récupérer, de les modifier et de les intégrer au sein des bonnes colonnnes.


3.4.1 Les coordonnées


C’est le cas en particulier ici des coordonnées des sites. Ces informations sont indiquées dans la colonne Mappable.location..geospatial. sous la forme de données géospatialisées (Table 10 les longitudes et latitudes sont rassemblées dans la même colonne). Il faut les séparer et les insérer dans deux colonnes différentes.

Table 10: Les coordonnées dans les données sources
x
POINT(7.16444 49.86499)
POINT(7.16444 49.86499)
POINT(7.16444 49.86499)
POINT(7.16444 49.86499)
POINT(7.16444 49.86499)
POINT(7.16444 49.86499)
# Créer une table pour stocker les coordonnées
coord <- data.frame(LONGITUDE = numeric(), LATITUDE = numeric())

# Récupérer les coordonnés à l'aide d'une expression régulière et les stocker dans la table `coord`
coord <- strcapture("POINT\\((\\d+\\.\\d+)\\s(\\d+\\.\\d+)\\)", n_objet$Mappable.location..geospatial., coord)
summary(coord)
   LONGITUDE        LATITUDE    
 Min.   :4.920   Min.   :46.23  
 1st Qu.:6.173   1st Qu.:47.54  
 Median :6.956   Median :48.31  
 Mean   :6.966   Mean   :48.45  
 3rd Qu.:7.715   3rd Qu.:49.19  
 Max.   :9.028   Max.   :50.44  
 NA's   :8       NA's   :8      
# Rassembler la table `objets` et la table `coord` (Cette opération 
# fonctionne parce que l'ordre des rangs n'a pas été modifié)
# Puis supprimer la colonne Mappable.location..geospatial.
n_objet <- cbind(n_objet, coord)
n_objet <- n_objet[,-10]
Table 11: Ajouter les bonnes colonnes de coordonnées dans la table objets
SITE_SOURCE_ID CITY_CENTROID STATE_OF_KNOWLEDGE OCCUPATION Unique.public.identifier catégorie.objet Materiaux SITE_NAME MAIN_CITY_NAME rec_Title Name...Title.1 BIBLIOGRAPHY GEONAME_ID ALTITUDE PROJECTION_SYSTEM CARAC_NAME CARAC_EXP WEB_IMAGES LONGITUDE LATITUDE
SIT0001 Oui Fouillé Non renseigné FIB2747 fibule Alliage cuivreux Wederath-Belginum Wederath fibule - Gaspar 2007 type 37a|fibule - Feugère 1985 type 26b1|fibule - Riha 1994 type 5.17.3 25 : 50 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr Haffner 1971, 20-21, Taf. 14|Artefacts FIB-4518 NA NA 4326 Mobilier Non NA 7.16444 49.86499
SIT0001 Oui Fouillé Non renseigné PER1594 perle Verre Wederath-Belginum Wederath perle - Riha 1990 type 11.1.1 25 : 50 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr Cordie-Hackenberg, Haffner 1997, Taf. 417, j|Artefacts PRL-4001 NA NA 4326 Mobilier Non NA 7.16444 49.86499
SIT0001 Oui Fouillé Non renseigné FIB2751 fibule Alliage cuivreux Wederath-Belginum Wederath fibule - Gaspar 2007 type 50|fibule - Feugère 1985 type 26c2|fibule - Riha 1994 type 7.16 50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr Artefacts FIB-4726|Cordie-Hackenberg, Haffner 1997, pl. 618, k NA NA 4326 Mobilier Non NA 7.16444 49.86499


3.4.2 Les dates


Les informations de datation se trouvent, dans la table objets, regroupées par phase d’existence de l’objet, au sein d’une unique colonne Name…Title.1 (Table 12). Il est donc nécessaire de les séparer en récupérant la première phase pour la colonne STARTING_PERIOD et la dernière pour la colonne ENDING_PERIOD. Cependant, certaines lignes ne possèdent qu’une seule période d’existence, représentant à la fois la date de début et de fin, ce qui nécessite des manipulations supplémentaires. Par ailleurs, certaines lignes étant réellement vides, il n’est pas possible de simplement remplacer les données manquantes de la première application de la fonction strcapture par celles de la seconde.

Table 12: Les datations dans les données sources
x
25 : 50 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr
25 : 50 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr
50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr
25 : 50 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr
25 : 50 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr
25 : 50 apr|50 : 75 apr|75 : 100 apr|100 : 150 apr|150 : 200 apr|200 : 250 apr|250 : 300 apr
# Récupérer les dates de début et de fin`à l'aide d'une expression régulière
# et les stocker dans des colonnes séparées

date <- data.frame(STARTING_PERIOD = character(), ENDING_PERIOD = character())
date <- strcapture(
  "^(\\d+\\s:\\s\\d+\\s\\w+)\\s?\\w+?\\|?.*\\|(\\d+\\s:\\s\\d+\\s\\w+)\\s?\\w+?$", 
  n_objet[,11], date)

# Récupérer les dates uniques

date2 <- data.frame(STARTING_PERIOD = character())
date2 <- strcapture("^(\\d+\\s:\\s\\d+\\s\\w+)\\s?\\w+?$", n_objet[,11], date2)

# Dupliquer la colonne pour avoir une date de fin

date2$ENDING_PERIOD <- date2$STARTING_PERIOD

# Ajouter un identifiant unique identique aux deux tables
# cela fonctionne puisque les données manquantes sont indiquées
# par des NAs et que l'ordre des données est conservé

date$ID <- paste0("ID", 1:nrow(date))
date2$ID <- paste0("ID", 1:nrow(date2))

# Joindre les deux tables en remplaçant les données manquantes de la table
# `date` par les données de la table `date2`

date3 <- dplyr::left_join(date, date2, by = "ID") %>%
  ## Cette opération crée des nouvelles colonnes STARTING_PERIOD et ENDING_PERIOD
  ## x et y
  
  # Remplacer les NAs par les données disponibles dans les colonnes y
  dplyr::mutate(STARTING_PERIOD = ifelse(is.na(STARTING_PERIOD.x), 
                                         STARTING_PERIOD.y, STARTING_PERIOD.x)) %>%
  dplyr::mutate(ENDING_PERIOD = ifelse(is.na(ENDING_PERIOD.x), 
                                       ENDING_PERIOD.y, ENDING_PERIOD.x)) %>%
  
  # Supprimer les colonnes en trop
  dplyr::select(-STARTING_PERIOD.y, -STARTING_PERIOD.x) %>%
  dplyr::select(-ENDING_PERIOD.y, -ENDING_PERIOD.x) %>%
  
  # Et remplacer les NA restant par la mention "indéterminé"
  replace(is.na(.), "Indéterminé")

# Supprimer la colonne ID

date3 <- date3[,-1]
Table 13: Résultats de la transformation des dates
STARTING_PERIOD ENDING_PERIOD
25 : 50 ap 250 : 300 ap
25 : 50 ap 250 : 300 ap
50 : 75 ap 150 : 200 ap
25 : 50 ap 250 : 300 ap
25 : 50 ap 250 : 300 ap
25 : 50 ap 250 : 300 ap


Il faut aussi transformer ces dates au format ArkeoGIS en supprimant les mention apr ou ap et en remplaçant les mentions av par un symbole -. Enfin, les données manquantes doivent indiquer l’information Indéterminé.

# Remplacer les mention "av" ou "apr" de la colonne STARTING_PERIOD

date3$STARTING_PERIOD <- gsub("(\\d+)\\s:\\s(\\d+)\\sap.*", "\\1:\\2", 
                              date3$STARTING_PERIOD)
date3$STARTING_PERIOD <- gsub("(\\d+)\\s:\\s(\\d+)\\sa.*", "-\\1:-\\2", 
                              date3$STARTING_PERIOD)

# Remplacer les mention "av" ou "apr" de la colonne ENDING_PERIOD

date3$ENDING_PERIOD <- gsub("(\\d+)\\s:\\s(\\d+)\\sap.*", "\\1:\\2", 
                            date3$ENDING_PERIOD)
date3$ENDING_PERIOD <- gsub("(\\d+)\\s:\\s(\\d+)\\sa.*", "-\\1:-\\2", 
                            date3$ENDING_PERIOD)

Table 14: Les différentes datations possibles après modification

(a) STARTING_PERIOD
Var1 Freq
-125:-75 1238
-150:-125 13505
-175:-150 10
-200:-175 283
-225:-200 205
-25:-0 1497
-260:-225 293
-50:-25 192
-75:-50 227
0:25 3871
100:150 646
150:200 656
200:250 1157
25:50 1859
250:300 1056
300:350 1674
350:400 781
50:75 1033
75:100 261
Indéterminé 8
(b) ENDING_PERIOD
Var1 Freq
-125:-75 524
-150:-125 236
-175:-150 365
-200:-175 5
-225:-200 37
-25:-0 274
-260:-225 10
-50:-25 13541
-75:-50 183
0:25 141
100:150 1475
150:200 916
200:250 975
25:50 398
250:300 2906
300:350 1438
350:400 3663
50:75 570
75:100 2787
Indéterminé 8


Les datations sont désormais prêtes à être intégrées à la table objets. Toutefois, il est aussi possible de les modifier à nouveau pour les faire correspondre à la chronologie de l’Europe continentale employée dans ArkeoGIS1. Pour celles avant J.-C., les dates de ce travail sont fondées sur cette même chronologie (Barral et Fichtl (2012)), mais diffèrent d’ArkeoGIS à un an près (voir Table 15). Pour les dates apr. J.-C., le système employé dans les données sources correspond au calendrier Grégorien, mais peut en partie être relié la chronologie d’ArkeoGIS en modifiant également les bornes d’un an.

Table 15: Extrait de la chronologie utilisée dans ArkeoGIS pour l’Europe continentale
IdArkeogis PERIOD_NAME_LVL1 START_LVL1 STOP_LVL1 PERIOD_NAME_LVL2 START_LVL2 STOP_LVL2 PERIOD_NAME_LVL3 START_LVL3 STOP_LVL3 PERIOD_NAME_LVL4 START_LVL4 STOP_LVL4 IdArkPeriodo IdArkPactols X
38 2160 NA NA La Tène A -480 -381 NA NA NA NA http://n2t.net/ark:/99152/p09hq4ntk3v https://ark.frantiq.fr/ark:/26678/pcrtbm5GVtzrbP
39 2161 NA NA NA NA La Tène A1 -480 -421 NA NA http://n2t.net/ark:/99152/p09hq4nndw9
40 2162 NA NA NA NA NA NA La Tène A1a -480 -451 http://n2t.net/ark:/99152/p09hq4n7gkg
41 2163 NA NA NA NA NA NA La Tène A1b -450 -421 http://n2t.net/ark:/99152/p09hq4n43g3
42 2164 NA NA NA NA La Tène A2 -420 -381 NA NA http://n2t.net/ark:/99152/p09hq4n54cn
43 2165 NA NA La Tène B -380 -261 NA NA NA NA http://n2t.net/ark:/99152/p09hq4nj4h9 https://ark.frantiq.fr/ark:/26678/pcrtpz5a27rtgG
Astuce

Les différentes chronologies utilisées dans ArkeoGIS sont listées ici. Celles possédant un DOI sont téléchargeables en suivant le lien de celui-ci ou en se rendant directement sur le dépôt Nakala.


# Modifier les dates pour correspondre à la chronologie utilisée dans ArkeoGIS

for (i in 1:ncol(date3)) {
  
  date3[,i] <- as.factor(date3[,i])
  
  levels(date3[,i]) <- c("-125:-76", "-150:-126", "-175:-151", "-200:-176", "-225:-201", 
                         "-25:-1", "-260:-226", "-50:-26", "-75:-51", "1:25", "101:150", 
                         "151:200", "201:250", "26:50", "251:300", "301:350", "351:400", 
                         "51:75", "76:100", "Indéterminé")
}

# Rassembler la table `objets` et la table `date3` (cette opération 
# fonctionne parce que l'ordre des rangs n'a pas été modifié)
# Puis supprimer la colonne Name...Title.1

n_objet <- cbind(n_objet, date3)
n_objet <- n_objet[,-11]

Table 16: Modifier et ajouter les dates au jeu de données

(a) Extrait des colonnes de datation
STARTING_PERIOD ENDING_PERIOD
15 -75:-51 -50:-26
16 -75:-51 -50:-26
17 -125:-76 -75:-51
18 -75:-51 -50:-26
19 26:50 251:300
20 -25:-1 -25:-1
(b) Ajout des colonnes dans la table objet
SITE_SOURCE_ID CITY_CENTROID STATE_OF_KNOWLEDGE OCCUPATION Unique.public.identifier catégorie.objet Materiaux SITE_NAME MAIN_CITY_NAME rec_Title BIBLIOGRAPHY GEONAME_ID ALTITUDE PROJECTION_SYSTEM CARAC_NAME CARAC_EXP WEB_IMAGES LONGITUDE LATITUDE STARTING_PERIOD ENDING_PERIOD
SIT0001 Oui Fouillé Non renseigné FIB2747 fibule Alliage cuivreux Wederath-Belginum Wederath fibule - Gaspar 2007 type 37a|fibule - Feugère 1985 type 26b1|fibule - Riha 1994 type 5.17.3 Haffner 1971, 20-21, Taf. 14|Artefacts FIB-4518 NA NA 4326 Mobilier Non NA 7.16444 49.86499 26:50 251:300
SIT0001 Oui Fouillé Non renseigné PER1594 perle Verre Wederath-Belginum Wederath perle - Riha 1990 type 11.1.1 Cordie-Hackenberg, Haffner 1997, Taf. 417, j|Artefacts PRL-4001 NA NA 4326 Mobilier Non NA 7.16444 49.86499 26:50 251:300
SIT0001 Oui Fouillé Non renseigné FIB2751 fibule Alliage cuivreux Wederath-Belginum Wederath fibule - Gaspar 2007 type 50|fibule - Feugère 1985 type 26c2|fibule - Riha 1994 type 7.16 Artefacts FIB-4726|Cordie-Hackenberg, Haffner 1997, pl. 618, k NA NA 4326 Mobilier Non NA 7.16444 49.86499 51:75 151:200


3.4.3 Les commentaires


La colonne commentaire n’existe pas encore dans la table objets. Elle est créée en fonction des informations contenues dans d’autres colonnes et en particulier catégorie.objet, Materiaux, rec_Title. Par ailleurs, dans cette dernière colonne qui correspond à la typologie des objets, certaines informations sont redondantes et il faut la nettoyer avant de pouvoir concatener l’ensemble des informations.

# Nettoyer la colonne `rec_Title`

n_objet[,10] <- gsub("\\w+\\s-\\s", "", n_objet[,10])
n_objet[,10] <- gsub("\\|", ", ", n_objet[,10])

Table 17: Contenu de la colonne rec_Title

(a) Avant
x
fibule - Gaspar 2007 type 37a|fibule - Feugère 1985 type 26b1|fibule - Riha 1994 type 5.17.3
perle - Riha 1990 type 11.1.1
fibule - Gaspar 2007 type 50|fibule - Feugère 1985 type 26c2|fibule - Riha 1994 type 7.16
fibule - Gaspar 2007 type 37a|fibule - Feugère 1985 type 26b1|fibule - Riha 1994 type 5.17.3
perle - Riha 1990 type 11.1.1
perle - Riha 1990 type 11.1.1
(b) Après
x
Gaspar 2007 type 37a, Feugère 1985 type 26b1, Riha 1994 type 5.17.3
Riha 1990 type 11.1.1
Gaspar 2007 type 50, Feugère 1985 type 26c2, Riha 1994 type 7.16
Gaspar 2007 type 37a, Feugère 1985 type 26b1, Riha 1994 type 5.17.3
Riha 1990 type 11.1.1
Riha 1990 type 11.1.1


# Assembler les différentes colonnes dans une nouvelle colonne COMMENTS 
# en précisant la fonction de chaque élément

n_objet$COMMENTS <- paste0("OBJET : ", n_objet$catégorie.objet, 
                           ". MATERIAU : ", n_objet$Materiaux, 
                           ". TYPO : ", n_objet$rec_Title, ".")
Table 18: Contenu de la colonne COMMENTS
x
OBJET : fibule. MATERIAU : Alliage cuivreux. TYPO : Gaspar 2007 type 37a, Feugère 1985 type 26b1, Riha 1994 type 5.17.3.
OBJET : perle. MATERIAU : Verre. TYPO : Riha 1990 type 11.1.1.
OBJET : fibule. MATERIAU : Alliage cuivreux. TYPO : Gaspar 2007 type 50, Feugère 1985 type 26c2, Riha 1994 type 7.16.
OBJET : fibule. MATERIAU : Alliage cuivreux. TYPO : Gaspar 2007 type 37a, Feugère 1985 type 26b1, Riha 1994 type 5.17.3.
OBJET : perle. MATERIAU : Verre. TYPO : Riha 1990 type 11.1.1.
OBJET : perle. MATERIAU : Verre. TYPO : Riha 1990 type 11.1.1.


Les colonnes utilisées pour créer les commentaires ne sont pas supprimées tout de suite, puisqu’elles nous serviront pour créer les caractérisation des objets. Seule la colonne contenant la typologie ne sera plus utile.

n_objet <- n_objet[,-10]
Table 19: Ajout de la colonne COMMENT à la table objets
SITE_SOURCE_ID CITY_CENTROID STATE_OF_KNOWLEDGE OCCUPATION Unique.public.identifier catégorie.objet Materiaux SITE_NAME MAIN_CITY_NAME BIBLIOGRAPHY GEONAME_ID ALTITUDE PROJECTION_SYSTEM CARAC_NAME CARAC_EXP WEB_IMAGES LONGITUDE LATITUDE STARTING_PERIOD ENDING_PERIOD COMMENTS
SIT0001 Oui Fouillé Non renseigné FIB2747 fibule Alliage cuivreux Wederath-Belginum Wederath Haffner 1971, 20-21, Taf. 14|Artefacts FIB-4518 NA NA 4326 Mobilier Non NA 7.16444 49.86499 26:50 251:300 OBJET : fibule. MATERIAU : Alliage cuivreux. TYPO : Gaspar 2007 type 37a, Feugère 1985 type 26b1, Riha 1994 type 5.17.3.
SIT0001 Oui Fouillé Non renseigné PER1594 perle Verre Wederath-Belginum Wederath Cordie-Hackenberg, Haffner 1997, Taf. 417, j|Artefacts PRL-4001 NA NA 4326 Mobilier Non NA 7.16444 49.86499 26:50 251:300 OBJET : perle. MATERIAU : Verre. TYPO : Riha 1990 type 11.1.1.
SIT0001 Oui Fouillé Non renseigné FIB2751 fibule Alliage cuivreux Wederath-Belginum Wederath Artefacts FIB-4726|Cordie-Hackenberg, Haffner 1997, pl. 618, k NA NA 4326 Mobilier Non NA 7.16444 49.86499 51:75 151:200 OBJET : fibule. MATERIAU : Alliage cuivreux. TYPO : Gaspar 2007 type 50, Feugère 1985 type 26c2, Riha 1994 type 7.16.


3.4.4 La bilbiographie


La colonne BIBLIOGRAPHY a déjà été renommée lors d’une étape précédente (voir Section 3.1). Elle nécessite toutefois, une légère mise en forme et l’ajout de la référence correspondant à la base source.

# Nettoyer la colonne BIBLIOGRAPHY

n_objet[,10] <- gsub("\\|", ", ", n_objet[,10])

# Ajouter la référence de la base source

n_objet[,10] <- paste0("Scholtus 2021, ", n_objet$Unique.public.identifier, ", ", n_objet[,10])

Table 20: Mettre en forme les informations bibliographiques

(a) Avant
x
Haffner 1971, 20-21, Taf. 14|Artefacts FIB-4518
Cordie-Hackenberg, Haffner 1997, Taf. 417, j|Artefacts PRL-4001
Artefacts FIB-4726|Cordie-Hackenberg, Haffner 1997, pl. 618, k
Haffner 1971, 20-21, Taf. 14|Artefacts FIB-4518
Cordie-Hackenberg, Haffner 1997, Taf. 532|Artefacts PRL-4001
Artefacts PRL-4001
(b) Après
x
Scholtus 2021, FIB2747, Haffner 1971, 20-21, Taf. 14, Artefacts FIB-4518
Scholtus 2021, PER1594, Cordie-Hackenberg, Haffner 1997, Taf. 417, j, Artefacts PRL-4001
Scholtus 2021, FIB2751, Artefacts FIB-4726, Cordie-Hackenberg, Haffner 1997, pl. 618, k
Scholtus 2021, FIB2748, Haffner 1971, 20-21, Taf. 14, Artefacts FIB-4518
Scholtus 2021, PER1600, Cordie-Hackenberg, Haffner 1997, Taf. 532, Artefacts PRL-4001
Scholtus 2021, PER1597, Artefacts PRL-4001


3.5 Créer les colonnes de description des objets


Dans la structure d’ArkeoGIS, les mobiliers sont définis par un système de thésaurus stricte avec quatre niveaux de précision (Table 21). Ce thésaurus est accessible dans le manuel en ligne ou en le téléchargeant.

En ce qui concerne le mobilier, qui correspond à l’ensemble des données de cette base source, les niveaux précisent d’abord le matériau de l’objet, puis sa catégorie et enfin son identification. Ainsi, il est possible d’utiliser les colonnes catégorie.objet et Materiaux pour corréler les deux tables. Il est cependant nécessaire de faire encore un nettoyage de données pour que cela fonctionne.

mobilier <- read.csv2("data/Mobilier.csv", sep = ";", encoding = "UTF-8")
Table 21: Extrait du thésaurus pour décrire le mobilier dans ArkeoGIS
IDArkeoGIS CARAC_NAME CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4 IdArk IdPactols IdAat
208 Mobilier Os http://ark.frantiq.fr/ark:/26678/pcrtpy5s63Sdhx 15222
209 Mobilier Os Ossements humains http://ark.frantiq.fr/ark:/26678/pcrtf0jhaoDXkJ 16033
210 Mobilier Os Ossements humains Tabletterie https://ark.frantiq.fr/ark:/26678/pcrtEaFZFvpInN 17206
211 Mobilier Os Ossements humains Outils https://ark.frantiq.fr/ark:/26678/pcrtxs8Kml8jLw 16050 http://vocab.getty.edu/page/aat/300024841
212 Mobilier Os Ossements humains Parure https://ark.frantiq.fr/ark:/26678/pcrtNBrnOdttU9 16131 http://vocab.getty.edu/page/aat/300261068
213 Mobilier Os Ossements humains Autres NA


3.5.1 La CARAC_LVL1


La première étape consiste à modifier la colonne Materiaux pour la faire correspondre aux entrées existant dans la colonne CARAC_LVL1.

# Créer la colonne CARAC_LVL1 en fonction des matériaux

n_objet[colnames(arkeoGIS[15])] <- n_objet$Materiaux

# Modifier les données pour correspondre au thésaurus

n_objet[,22] <- gsub("Alliage.*|Argent|Fer|Laiton|Bronze|Electrum|Plomb|Or|Potin", 
                     "Métal", n_objet[,22])
n_objet[,22] <- gsub("Agate|Ambre|Pierre|Cornaline|Cristal de roche|Jais", 
                     "Lithique", n_objet[,22])

## Pour supprimer les multiples matériaux et ne conserver que le premier
n_objet[,22] <- gsub("^(\\w+)\\|.*", "\\1", n_objet[,22])

n_objet[,22] <- gsub("Bois de cerf|Ivoire", "Os", n_objet[,22])

Table 22: Contenu de la colonne Materiaux

(a) Avant
Var1 Freq
5264
Agate 24
Alliage au plomb 1
Alliage cuivreux 7434
Alliage cuivreux|Fer 1
Alliage cuivreux|Or 2
Alliage cuivreux|Os 3
Alliage cuivreux|Pierre 2
Alliage cuivreux|Sardonyx 1
Alliage cuivreux|Verre 3
Ambre 9
Argent 4202
Argent|Pierre 1
Bois de cerf 26
Bronze 3977
Céramique 388
Cornaline 2
Cristal de roche 1
Electrum 1
Fer 161
Fer|Pierre 2
Fer|Verre 2
Inconnu 3
Ivoire 6
Jais 3
Laiton 2
Métal 3
Or 685
Os 1624
Os|Bronze|Fer 1
Plomb 2
Potin 3864
Verre 2752
(b) Après
Var1 Freq
5264
Céramique 388
Inconnu 3
Lithique 39
Métal 20349
Os 1657
Verre 2752


On constate cependant que le matériau manque pour un nombre assez important d’objets. Puisqu’il s’agit du premier niveau d’ArkeoGIS, il n’est pas possible d’ignorer cet élément et il est donc nécessaire d’essayer de récupérer cette information.

Table 23: Catégories d’objets pour lesquels le matériau n’est pas précisé
Var1 Freq
bague 1
bracelet 25
Épée 166
épingle 1
fibule 11
monnaie 4860
perle 200
# Attribuer un matériaux selon la catégorie d'objet, lorsqu'il est manquant

n_objet$CARAC_LVL1[n_objet$Materiaux == "" & n_objet$catégorie.objet == "Épée"] <- "Métal"
n_objet$CARAC_LVL1[n_objet$Materiaux == "" & n_objet$catégorie.objet == "monnaie"] <- "Métal"
n_objet$CARAC_LVL1[n_objet$Materiaux == "" & n_objet$catégorie.objet == "fibule"] <- "Métal"
n_objet$CARAC_LVL1[n_objet$Materiaux == "" & n_objet$catégorie.objet == "épingle"] <- "Métal"

n_objet$CARAC_LVL1[n_objet$Materiaux == "Inconnu" & n_objet$catégorie.objet == "fibule"] <- "Métal"

n_objet$CARAC_LVL1[n_objet$Materiaux == "" & n_objet$catégorie.objet == "bague"] <- "Verre"
n_objet$CARAC_LVL1[n_objet$Materiaux == "" & n_objet$catégorie.objet == "perle"] <- "Verre"
n_objet$CARAC_LVL1[n_objet$Materiaux == "" & n_objet$catégorie.objet == "bracelet"] <- "Verre"
Table 24: Contenu de la colonne Materiaux
Var1 Freq
Céramique 388
Lithique 39
Métal 25390
Os 1657
Verre 2978


3.5.2 Les CARAC_LVL2, 3 et 4


Puisque nous avons maintenant défini correctement la colonne CARAC_LVL1, nous allons pouvoir nous servir de celle-ci et de la colonne Unique.public.identifier pour compléter les niveaux 2, 3 et 4 de caractérisation. Pour ce faire, la Table 25 nous permet de retrouver les différentes associations de catégories et de matériaux puis de les rechercher dans le thésaurus d’ArkeoGIS pour les importer aux lignes correspondantes.

Toutefois, toutes les associations n’existent pas dans le thésaurus. Ainsi, s’il est effectivement possible de trouver une caractérisation décrivant des bagues en métal, celles en os seront renseignées sous le terme Parure. Pour cette raison, il est nécessaire de procéder en plusieurs étapes pour récupérer les lignes du thésaurus correspondant aux différentes associations possibles. Il sera ensuite possible d’utiliser la fonction merge pour rassembler les jeux de données.

Table 25: Répartition des catégories d’objets en fonction des matériaux (CARAC_LVL1)
Céramique Lithique Métal Os Verre
bague 0 2 991 3 24
boucle d’oreille 0 0 41 0 0
bouton 0 0 121 32 0
bracelet 0 0 335 0 1488
ceinture 0 0 781 27 0
Épée 0 0 218 32 0
épingle 0 3 201 1512 0
fibule 0 0 4851 0 0
harnais 0 0 784 1 0
monnaie 0 0 16980 0 0
pendentif 0 2 47 41 2
perle 388 32 40 9 1464


3.5.2.1 Pour les associations existantes


Une des difficultés réside dans le fait que la catégorie de l’objet n’est pas toujours renseignée dans le même niveau de caractérisation au sein du thésaurus. Un autre problème est la différence de casse entre le thésaurus, dans lequel chaque terme commence par une majuscule, et les données sources dans lesquelles il n’y en a pas toujours. Aussi, la catégorie Monnaie, qui est au singulier dans les données sources, se présente au pluriel dans ArkeoGIS. Les termes Harnais et Pendentif doivent être modifié par des synonymes pour correspondre parfaitement au thésaurus. Enfin, l’entrée Boucle d’oreille pose problème dans les données source à cause de la forme de l’apostrophe.

Le code ci-dessous, et l’utilisation ensuite d’une boucle for permettent de rechercher cette catégorie dans l’ensemble des colonnes en fonction des matériaux possibles et de stocker les différentes lignes du thésaurus possibles dans un nouvel objet.


# Ajouter une majuscule au début de chaque terme catégorie dans les données source

n_objet$catégorie.objet <- stringr::str_to_sentence(n_objet$catégorie.objet)

# Remplacer les termes problématiques

n_objet$catégorie.objet[n_objet$catégorie.objet == "Monnaie"] <- "Monnaies"
n_objet$catégorie.objet[n_objet$catégorie.objet == "Harnais"] <- "Harnachement"
n_objet$catégorie.objet[n_objet$catégorie.objet == "Pendentif"] <- "Pendeloque"
n_objet$catégorie.objet <- gsub("Boucle d.*", "Boucle d'oreille", n_objet$catégorie.objet)

# Récupérer les occurrences uniques de chaque catégorie

catego <- unique(n_objet$catégorie.objet)

Table 26: Contenu de la colonne catégorie.objet

(a) Avant
Var1 Freq
bague 1020
boucle d’oreille 41
bouton 153
bracelet 1823
ceinture 808
Épée 250
épingle 1716
fibule 4851
harnais 785
monnaie 16980
pendentif 92
perle 1933
(b) Après
x
Fibule
Perle
Épée
Harnachement
Bracelet
Pendeloque
Monnaies
Ceinture
Bouton
Bague
Boucle d'oreille
Épingle
# Extraire les colonnes du thésaurus
## En fonction du matériau (materio)
## de la catégorie d'objet (catego)
## en recherchant cette dernière dans l'ensemble des colonnes

materio <- unique(n_objet$CARAC_LVL1)
mobilier2 <- mobilier[,3:6]

IDS <- list()

for (m in 1:length(materio)) {
  IDS[[m]] <- list()
  
  for (c in 1:length(catego)) {
  
  IDS[[m]][[c]] <- list()
  
    for (i in 1:ncol(mobilier2)) {
      
      IDS[[m]][[c]][[i]] <- mobilier2[mobilier2$CARAC_LVL1 == materio[[m]] 
                                      & mobilier2[,i] == catego[[c]],]
      names(IDS[[m]])[[c]] <- catego[[c]]
      IDS[[m]][[c]] <- rlist::list.clean(IDS[[m]][[c]], 
                                         function(x) length(x) == 0L, TRUE)
    }
    
    IDS[[m]] <- rlist::list.clean(IDS[[m]], function(x) length(x) == 0L, TRUE)
  }
  IDS <- rlist::list.clean(IDS, function(x) length(x) == 0L, TRUE)
}

# Extraire les données des listes pour en faire une table
# La colonne `catégorie.objet` est créée afin de servir de clé de jointure pour la suite

for (i in 1:length(IDS)) {
  for (t in 1:length(IDS[[i]])){
    for (v in 1:length(IDS[[i]][[t]])) {
      IDS[[i]][[t]][[v]] <- cbind(as.data.frame(IDS[[i]][[t]][[v]]), 
                                  catégorie.objet = names(IDS[[i]])[[t]])
    }
    IDS[[i]][[t]] <- as.data.frame(IDS[[i]][[t]])
  }
  IDS[[i]] <- Reduce(rbind, IDS[[i]])
}

# Rassembler les différentes associations en un même jeu de données

IDS <- Reduce(rbind, IDS)
Table 27: Extraction des colonnes de caractérisations et de l’identifiant unique selon les différentes associations possibles
CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4 catégorie.objet
Métal Parure Fibule Fibule
Métal Armement Épée Épée
Métal Harnachement Harnachement
Métal Harnachement Mors Harnachement
Métal Harnachement Passe-guides Harnachement
Métal Harnachement Hipposandale Harnachement
Métal Harnachement Char Harnachement
Métal Parure Parure annulaire Bracelet Bracelet
Métal Parure Pendeloque Pendeloque
Métal Monnaies Monnaies
Métal Monnaies Or Monnaies
Métal Monnaies Argent Monnaies
Métal Monnaies Bronze Monnaies
Métal Monnaies Potin Monnaies
Métal Monnaies Electrum Monnaies
Métal Monnaies Monnaie fourrée Monnaies
Métal Monnaies Fausse monnaie Monnaies
Métal Monnaies Autres Monnaies
Métal Parure Ceinture Ceinture
Métal Parure Parure annulaire Bague Bague
Métal Parure Boucle d'oreille Boucle d'oreille
Métal Parure Épingle Épingle
Verre Parure Perle Perle
Verre Parure Bracelet Bracelet
Lithique Parure Perle Perle


On remarque sur la Table 27 que pour les catégories Harnachement et Monnaies plusieurs entrées sont possibles. Si pour les monnaies, nous pourrons utiliser la colonne Materiaux pour préciser les monnaies du jeu de données source, pour les élément de harnachement il ne sera pas possible d’être plus précis et il faut donc supprimer les rangs supplémentaires.

# Supprimer les rangs avec des niveaux de précision trop important pour la catégorie "Harnachement"

IDS[IDS == ""] <- NA
IDS <- IDS[IDS$CARAC_LVL2 == "Harnachement" & is.na(IDS$CARAC_LVL3) == TRUE 
           | IDS$CARAC_LVL2 != "Harnachement",]
Table 28: Suppression des niveaux de précisions trop importants
CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4 catégorie.objet
1 Métal Parure Fibule NA Fibule
2 Métal Armement Épée NA Épée
3 Métal Harnachement NA NA Harnachement
8 Métal Parure Parure annulaire Bracelet Bracelet
9 Métal Parure Pendeloque NA Pendeloque
10 Métal Monnaies NA NA Monnaies
11 Métal Monnaies Or NA Monnaies
12 Métal Monnaies Argent NA Monnaies
13 Métal Monnaies Bronze NA Monnaies
14 Métal Monnaies Potin NA Monnaies
15 Métal Monnaies Electrum NA Monnaies
16 Métal Monnaies Monnaie fourrée NA Monnaies
17 Métal Monnaies Fausse monnaie NA Monnaies
18 Métal Monnaies Autres NA Monnaies
19 Métal Parure Ceinture NA Ceinture
20 Métal Parure Parure annulaire Bague Bague
21 Métal Parure Boucle d'oreille NA Boucle d'oreille
22 Métal Parure Épingle NA Épingle
23 Verre Parure Perle NA Perle
24 Verre Parure Bracelet NA Bracelet
25 Lithique Parure Perle NA Perle


3.5.2.2 Pour les associations non existantes


Comme nous l’avons indiqué plus haut, certaines catégories d’objets ne sont pas directement représentées dans le thésaurus d’ArkeoGIS. Pour celles-ci, il est nécessaire de réduire le niveau de précision. On peut se reporter à nouveau au tableau Table 25 pour vérifier quelles sont les associations manquantes. Il apparaît qu’il s’agit essentiellement d’éléments de parure en matériau autre que le métal, ainsi que de quelques éléments en os qui pourront être renseignés par la mention Autres.

# Récupérer les différentes associations de catégories et de matériaux

categorie <- as.data.frame(table(n_objet$catégorie.objet, n_objet$CARAC_LVL1))
categorie <- categorie[categorie$Freq != 0, 1:2]

# Indiquer un niveau moins important de description (Parure et Autres)
categorie <- transform(
  categorie, Niv0 = ifelse(Var1 == "Fibule" | Var1 == "Perle" | Var1 == "Bague" | Var1 == "Boucle d'oreille" |
                        Var1 == "Bouton" | Var1 == "Bracelet" | Var1 == "Ceinture" | Var1 == "Épingle" | Var1 == "Pendeloque",
                        "Parure", "Autres")
)

# Supprimer les associations déjà trouvées précédemment

colnames(categorie)[1:2] <- colnames(IDS[c(5,1)])
categorie <- droplevels(dplyr::anti_join(categorie, IDS, by = c("catégorie.objet", "CARAC_LVL1") ))
Table 29: Relier les catégories, à des niveaux de précisions plus faible
catégorie.objet CARAC_LVL1 Niv0
Perle Céramique Parure
Bague Lithique Parure
Épingle Lithique Parure
Pendeloque Lithique Parure
Bouton Métal Parure
Perle Métal Parure
Bague Os Parure
Bouton Os Parure
Ceinture Os Parure
Épée Os Autres
Épingle Os Parure
Harnachement Os Autres
Pendeloque Os Parure
Perle Os Parure
Bague Verre Parure
Pendeloque Verre Parure


Il est désormais possible d’utiliser la table categorie avec le même code que précédemment, adapté pour récupérer les lignes correspondantes du thésaurus.

materio2 <- unique(categorie$CARAC_LVL1)
catego2 <- as.character(unique(categorie$catégorie.objet))
niv <- unique(categorie$Niv0)

IDS2 <- list()

for (m in 1:length(materio2)) {
  IDS2[[m]] <- list()
  
  for (c in 1:length(catego2)) {
    
    IDS2[[m]][[c]] <- list()
    
    for (n in 1:length(niv)) {
  
      IDS2[[m]][[c]][[n]] <- list()
  
      for (i in 1:ncol(mobilier2)) {
      
      
        IDS2[[m]][[c]][[n]][[i]] <- mobilier2[mobilier2$CARAC_LVL1 == materio2[[m]] 
                                              & mobilier2[,i] == niv[[n]],]
        names(IDS2[[m]])[[c]] <- catego2[[c]]
        names(IDS2[[m]][[c]])[[n]] <- niv[[n]]
        IDS2[[m]][[c]][[n]] <- rlist::list.clean(IDS2[[m]][[c]][[n]], 
                                                 function(x) length(x) == 0L, TRUE)
      }
    
      IDS2[[m]][[c]] <- rlist::list.clean(IDS2[[m]][[c]], function(x) length(x) == 0L, TRUE)
    }
    IDS2[[m]] <- rlist::list.clean(IDS2[[m]], function(x) length(x) == 0L, TRUE)
  }
  IDS2 <- rlist::list.clean(IDS2, function(x) length(x) == 0L, TRUE)
}

# Extraire les données des listes pour en faire une table
# La colonne `catégorie.objet` est créée afin de servir de clé de jointure pour la suite

for (i in 1:length(IDS2)) {
  for (t in 1:length(IDS2[[i]])){
    for (v in 1:length(IDS2[[i]][[t]])) {
      for (w in 1:length(IDS2[[i]][[t]][[v]])){
        IDS2[[i]][[t]][[v]][[w]] <- cbind(as.data.frame(IDS2[[i]][[t]][[v]][[w]]), 
                                          catégorie.objet = names(IDS2[[i]])[[t]], 
                                          Niv0 = names(IDS2[[i]][[t]])[[v]])
      }
      
      IDS2[[i]][[t]][[v]] <- Reduce(rbind, IDS2[[i]][[t]][[v]])
    }
    IDS2[[i]][[t]] <- Reduce(rbind, IDS2[[i]][[t]])
  }
  IDS2[[i]] <- Reduce(rbind, IDS2[[i]])
}

# Rassembler les différentes associations en un même jeu de données

IDS2 <- Reduce(rbind, IDS2)

# Supprimer les lignes déjà présentes dans l'objet IDS

IDS2 <- droplevels(dplyr::anti_join(IDS2, IDS, by = c("catégorie.objet", "CARAC_LVL1")))


# Affiner la sélection pour ne conserver que les lignes qui correspondent
# aux associations effectivement présentes dans le jeu source

IDS2 <- droplevels(left_join(categorie, IDS2, by = c("catégorie.objet", "CARAC_LVL1", 
                                                     "Niv0")))

IDS2[IDS2 == ""] <- NA

parure <- list()
autres <- list()
for (i in 1:ncol(IDS2)) {
  if(i < ncol(IDS2)) {
    parure[[i]] <- droplevels(subset(IDS2, IDS2[,i] == "Parure" 
                                     & is.na(IDS2[,i+1]) == TRUE))
    autres[[i]] <- droplevels(subset(IDS2, IDS2[,i] == "Autres" 
                                     & is.na(IDS2[,i+1]) == TRUE))
  }
}

parure <- Reduce(rbind, parure)
autres <- Reduce(rbind, autres)
IDS2 <- rbind(parure, autres)
rownames(IDS2) <- c()
Table 30: Récupération des associations avec un niveau de précision moins important
catégorie.objet CARAC_LVL1 Niv0 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4
1 Bague Lithique Parure Parure NA NA
27 Bague Lithique Parure Parure Autres NA
7 Pendeloque Verre Parure Parure NA NA
8 Perle Céramique Parure Autres Parure NA
9 Bague Os Parure Ossements humains Parure NA
10 Bague Os Parure Ossements animaux Parure NA
11 Bague Os Parure Indéterminé Parure NA
12 Bouton Os Parure Ossements humains Parure NA
13 Bouton Os Parure Ossements animaux Parure NA
14 Bouton Os Parure Indéterminé Parure NA
15 Ceinture Os Parure Ossements humains Parure NA
16 Ceinture Os Parure Ossements animaux Parure NA
17 Ceinture Os Parure Indéterminé Parure NA


Il reste toutefois encore quelques problèmes à régler dans la sélection obtenue Table 30. En effet, pour les objets en os, le thésaurus permet de préciser s’il s’agit d’ossements humains ou animaux. Puisque c’est une information que nous n’avons pas, il faut supprimer ces possibilités et ne conserver que l’entrée Indéterminé. De même, il y a parfois plusieurs possibilités pour une seule association. C’est ici le cas pour les bagues lithiques (rang 1 et 27 de la Table 30), qui peuvent être désignées par Parure ou Parure / Autres. Il est nécessaire de faire un choix et supprimer ces doublons pour que la fusion des jeux de données fonctionne.2

# Supprimer les rangs avec les types d'ossements dans la colonne CARAC_LVL2

IDS2 <- IDS2[-grep("Ossements", IDS2$CARAC_LVL2),]

# Supprimer les associations Parure / Autres

autres <- filter(IDS2, IDS2$CARAC_LVL2 == "Parure" & IDS2$CARAC_LVL3 == "Autres")

IDS2 <- droplevels(dplyr::anti_join(IDS2, autres, by = 
                                      c("catégorie.objet", "CARAC_LVL1", 
                                        "CARAC_LVL2", "CARAC_LVL3")))


Table 31: Les différentes associations possibles dans le jeu de données
catégorie.objet CARAC_LVL1 Niv0 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4
Bague Lithique Parure Parure NA NA
Épingle Lithique Parure Parure NA NA
Pendeloque Lithique Parure Parure NA NA
Bouton Métal Parure Parure NA NA
Perle Métal Parure Parure NA NA
Bague Verre Parure Parure NA NA
Pendeloque Verre Parure Parure NA NA
Perle Céramique Parure Autres Parure NA
Bague Os Parure Indéterminé Parure NA
Bouton Os Parure Indéterminé Parure NA
Ceinture Os Parure Indéterminé Parure NA
Épingle Os Parure Indéterminé Parure NA
Pendeloque Os Parure Indéterminé Parure NA
Perle Os Parure Indéterminé Parure NA
Épée Os Autres Indéterminé Autres NA
Harnachement Os Autres Indéterminé Autres NA

3.5.2.3 Rassembler les données


Il est désormais possible de fusionner le jeu de données source avec les différentes variantes du thésaurus : pour les associations existantes, pour les monnaies et pour les associations non existantes.

La première étape est de séparer les informations concernant les monnaies du thésaurus IDS et de les stocker dans un nouvel objet IDS_mon. Il est désormais possible de fusionner la table n_objet avec les éléments du thésaurus IDS, puis de supprimer les colonnes inutiles et réordonner les autres suivant l’ordre prévu dans ArkeoGIS.

# Séparer les monnaies du thésaurus puisqu'elles fonctionnent différemment

IDS_mon <- droplevels(subset(IDS, CARAC_LVL2 == "Monnaies"))
IDS <- droplevels(subset(IDS, CARAC_LVL2 != "Monnaies"))

# Fusionner le thésaurus simple (`IDS`) avec le jeu de données

IDS <- droplevels(merge(IDS, n_objet, by=c("CARAC_LVL1", "catégorie.objet")))
IDS <- IDS[,c("Unique.public.identifier", colnames(arkeoGIS))]
Table 32: Extrait du jeu de données pour les associations existantes
Unique.public.identifier SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE STARTING_PERIOD ENDING_PERIOD CARAC_NAME CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4 CARAC_EXP BIBLIOGRAPHY COMMENTS WEB_IMAGES
PER1370 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 201:250 301:350 Mobilier Lithique Parure Perle NA Non Scholtus 2021, PER1370, Riha 1990, n° 1353 OBJET : perle. MATERIAU : Agate. TYPO : Riha 1990 type 11.33.1. NA
PER1367 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 1:25 151:200 Mobilier Lithique Parure Perle NA Non Scholtus 2021, PER1367, Riha 1990, n° 2952b OBJET : perle. MATERIAU : Agate. TYPO : Riha 1990 type 11.32. NA
PER1371 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 201:250 301:350 Mobilier Lithique Parure Perle NA Non Scholtus 2021, PER1371, Riha 1990, n° 1357c OBJET : perle. MATERIAU : Agate. TYPO : Riha 1990 type 11.33.1. NA
PER1372 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 201:250 301:350 Mobilier Lithique Parure Perle NA Non Scholtus 2021, PER1372, Riha 1990, n° 1357d OBJET : perle. MATERIAU : Agate. TYPO : Riha 1990 type 11.33.1. NA
PER1368 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 201:250 301:350 Mobilier Lithique Parure Perle NA Non Scholtus 2021, PER1368, Riha 1990, n° 1351 OBJET : perle. MATERIAU : Agate. TYPO : Riha 1990 type 11.33.1. NA
PER1381 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 1:25 351:400 Mobilier Lithique Parure Perle NA Non Scholtus 2021, PER1381, Artefacts PRL-4160, Riha 1990, n° 2790g OBJET : perle. MATERIAU : Cornaline. TYPO : Riha 1990 type 11.34. NA


Pour les associations non existante, c’est-à-dire la table IDS2, il est d’abord nécessaire d’ajouter les informations sur la catégorie des objets, en particulier la colonne Niv0, au jeu de données source pour permettre la fusion. Toutefois, cette opération ajoute des duplicatas qu’il faut ensuite supprimer.

# Fusionner le thésaurus plus complexe (`IDS2`) avec le jeu de données
n_objet2 <- droplevels(merge(n_objet, categorie[,c(1,3)], by="catégorie.objet"))
IDS2 <- droplevels(merge(IDS2, n_objet2, by=c("CARAC_LVL1", "catégorie.objet", "Niv0")))
IDS2 <- IDS2[,c("Unique.public.identifier", colnames(arkeoGIS))]

# Supprimer les duplicatas

IDS2 <- IDS2[!duplicated(IDS2),]
Table 33: Extrait du jeu de données pour les associations non existantes
Unique.public.identifier SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE STARTING_PERIOD ENDING_PERIOD CARAC_NAME CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4 CARAC_EXP BIBLIOGRAPHY COMMENTS WEB_IMAGES
1 PER0560 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 26:50 251:300 Mobilier Céramique Autres Parure NA Non Scholtus 2021, PER0560, Riha 1990, n° 829 OBJET : perle. MATERIAU : Céramique. TYPO : Riha 1990 type 11.1.1. NA
3 PER0775 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 26:50 251:300 Mobilier Céramique Autres Parure NA Non Scholtus 2021, PER0775, Riha 1990, n° 1045 OBJET : perle. MATERIAU : Céramique. TYPO : Riha 1990 type 11.1.1. NA
5 PER0777 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 26:50 251:300 Mobilier Céramique Autres Parure NA Non Scholtus 2021, PER0777, Riha 1990, n° 1047 OBJET : perle. MATERIAU : Céramique. TYPO : Riha 1990 type 11.1.1. NA
6 PER0519 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 26:50 251:300 Mobilier Céramique Autres Parure NA Non Scholtus 2021, PER0519, Riha 1990, n° 788 OBJET : perle. MATERIAU : Céramique. TYPO : Riha 1990 type 11.1.1. NA
7 PER0566 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 26:50 251:300 Mobilier Céramique Autres Parure NA Non Scholtus 2021, PER0566, Riha 1990, n° 835 OBJET : perle. MATERIAU : Céramique. TYPO : Riha 1990 type 11.1.1. NA
8 PER0846 SIT0092 Augusta Raurica Augst NA 4326 7.71468 47.53557 NA Oui Non renseigné Non renseigné 26:50 251:300 Mobilier Céramique Autres Parure NA Non Scholtus 2021, PER0846, Riha 1990, n° 1116 OBJET : perle. MATERIAU : Céramique. TYPO : Riha 1990 type 11.1.1. NA


Enfin, pour ajouter le thésaurus dédié aux monnaies, IDS_mon, il convient d’abord d’indiquer la mention NA, pour les matériaux précisés dans le jeu de données source.

# Fusionner le thésaurus des monnaies avec le jeu de données
n_objet$Materiaux[n_objet$Materiaux == ""] <- NA

IDS_mon <- droplevels(merge(IDS_mon, n_objet, 
                            by.x=c("CARAC_LVL1", "catégorie.objet","CARAC_LVL3"), 
                            by.y=c("CARAC_LVL1", "catégorie.objet","Materiaux")))
IDS_mon <- IDS_mon[,c("Unique.public.identifier", colnames(arkeoGIS))]
Table 34: Extrait du jeu de données pour les monnaies
Unique.public.identifier SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE STARTING_PERIOD ENDING_PERIOD CARAC_NAME CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4 CARAC_EXP BIBLIOGRAPHY COMMENTS WEB_IMAGES
MON6709 SIT0175 Rotacker Kirchzarten - Zarten NA 4326 7.953658 47.96279 NA Oui Non renseigné Non renseigné -150:-126 -50:-26 Mobilier Métal Monnaies Argent NA Non Scholtus 2021, MON6709, n°408, Nick 2006 OBJET : monnaie. MATERIAU : Argent. TYPO : KALETEDOY, Lingon. NA
MON3625 SIT0352 Robache Saint-Dié-des-Vosges NA 4326 6.956481 48.30710 NA Non Non renseigné Non renseigné -150:-126 -50:-26 Mobilier Métal Monnaies Argent NA Non Scholtus 2021, MON3625, n°358, Lagadec, Liéger 1998 OBJET : monnaie. MATERIAU : Argent. TYPO : KALETEDOY, Lingon. NA
MON3980 SIT0352 Robache Saint-Dié-des-Vosges NA 4326 6.956481 48.30710 NA Non Non renseigné Non renseigné -150:-126 -50:-26 Mobilier Métal Monnaies Argent NA Non Scholtus 2021, MON3980, Lagadec, Liéger 1998, n°358 OBJET : monnaie. MATERIAU : Argent. TYPO : KALETEDOY, Lingon. NA
MON3957 SIT0352 Robache Saint-Dié-des-Vosges NA 4326 6.956481 48.30710 NA Non Non renseigné Non renseigné -150:-126 -50:-26 Mobilier Métal Monnaies Argent NA Non Scholtus 2021, MON3957, Lagadec, Liéger 1998, n°358 OBJET : monnaie. MATERIAU : Argent. TYPO : KALETEDOY, Lingon. NA
MON4199 SIT0352 Robache Saint-Dié-des-Vosges NA 4326 6.956481 48.30710 NA Non Non renseigné Non renseigné -150:-126 -50:-26 Mobilier Métal Monnaies Argent NA Non Scholtus 2021, MON4199, n°358, Lagadec, Liéger 1998 OBJET : monnaie. MATERIAU : Argent. TYPO : KALETEDOY, Lingon. NA
MON3501 SIT0352 Robache Saint-Dié-des-Vosges NA 4326 6.956481 48.30710 NA Non Non renseigné Non renseigné -150:-126 -50:-26 Mobilier Métal Monnaies Argent NA Non Scholtus 2021, MON3501, Lagadec, Liéger 1998, n°358 OBJET : monnaie. MATERIAU : Argent. TYPO : KALETEDOY, Lingon. NA


Pour finir, ces trois tables sont assemblées pour recréer un unique jeu de données nommé total et la colonne Unique.public.identifier est supprimée.

# Rassembler les données

total <- rbind(IDS, IDS2, IDS_mon)

# Supprimer la colonne Unique.public.identifier

total <- total[,-1]


4 Ajouter de nouvelles lignes pour les sites


La table total est désormais prête à être importées dans ArkeoGIS. Toutefois, nous avions vu dans la Section 1 que bien qu’il s’agisse ici d’une table dédiée aux mobiliers, une seconde table permettait de définir plus précisément les sites d’où ces objets proviennent. Il est donc possible d’ajouter des lignes dans le jeu de données total pour préciser ces sites.


4.1 Récupérer les informations sur les sites


La première étape consiste à récupérer dans une nouvelle table sites2 les occurrences unique de chaque site de la table total à l’aide de l’identifiant unique SITE_SOURCE_ID. L’on peut ensuite effacer les colonnes de datations, caractéristiques et bibliographie puisque celles-ci seront remplacées par des données correspondant aux sites en eux-même. Les données de la colonne COMMENTS, quant à elles, sont effacées.

# Récupérer les occurrences uniques de chaque site

sites2 <- distinct(total, SITE_SOURCE_ID, .keep_all = TRUE)

# Supprimer les colonnes qui seront remplacées

sites2 <- sites2[,c(1:11, 21, 22)]

# Effacer le contenu de la colonne COMMENTS

sites2[,12] <- NA


4.2 Les datations


La colonne Datation de la table sites (Table 35 : Avant) ne correspond pas à la structure et au format demandés par ArkeoGIS pour les datations. Elles ne sont pas non plus structurées, on y trouve des informations sous formes de dates ou de texte sans logique. Elles nécessitent donc un nettoyage et une homogénéisation.

Il s’agit, d’abord, de remplacer les informations textuelles par les dates de la chronologie de l’Europe continentale proposée par ArkeoGIS, mais aussi de structurer les données pour qu’elles aient toutes le même format et soient manipulables par la suite.

# Remplacer les noms de périodes par les dates correspondantes

sites[,5] <- sites[,5] %>%
  str_replace_all(c("[Pp]ériode augustéenne|[Aa]ugustéen|début époque romaine" = "-25:14",
                    "Bas-?\\s?Empire" = "236:476",
                    "haut Moyen-Age" = "477:986",
                    "Fin Ier-IIe s. ap. J.-C." = "76:200",
                    "Gallo-romain|[Gg]al+o|époque romaine" = "-25:476",
                    "Hallstatt" = "-800:-481",
                    "Mérovingien" = "477:800",
                    "Haut-?\\s?Empire" = "15:235",
                    "Auguste-Claude" = "-25:50",
                    "IIIe s\\.|IIIe" = "201:300",
                    "Milieu Ier ap. J.-C." = "26:75",
                    "Ier" = "1:100",
                    "IVe s. av." = "-400:-301",
                    "IVe s. apr.|IVe s. ap. J.-C." = "301:400",
                    "Ve" = "401:500",
                    "VIIe s. apr." = "601:700",
                    "IIe s. apr." = "101:200",
                    "La Tène\\s|LT\\s" = "-480:-26",
                    "LTA-B" = "-480:-261",
                    "LTA" = "-480:-381",
                    "LTB" = "-380:-261",
                    "LTC1" = "-260:-201",
                    "LTC2" = "-200:-151",
                    "LTC" = "-260:-151",
                    "LTD1-D2a" = "-150:-51",
                    "LTD1b_D2a" = "-125:-51",
                    "LTD1a" = "-150:-126",
                    "LTD1b" = "-125:-76",
                    "LTD1" = "-150:-76",
                    "LT?D2a" = "-75:-51",
                    "LTD2b|Précoce" = "-50:-26",
                    "LTD2" = "-75:-26",
                    "LTD" = "-150:-26",
                    
                    "Non renseigné|^$" = "Indéterminé",
                    ";|/|au" = "-",
                    "--" = " - -",
                    "(\\d+)-\\s" = "\\1 - ",
                    "(\\d+)-(\\d+)" = "\\1 - \\2"
                    ))

Table 35: Contenu de la colonne Datations

(a) Avant
Var1 Freq
586
-10:30 2
-120:-50 4
-150:-126 1
-150:-26 79
-150:-76 3
-150:26 1
-150:30 1
-200:-151 5
-225:-201 2
Augustéen 2
Bas-Empire 1
Bas-Empire au haut Moyen-Age 1
Fin Ier-IIe s. ap. J.-C. 1
Gallo 8
Hallstatt - Mérovingien 1
Haut-Empire 4
Haut-Empire - Bas-Empire 1
Haut-Empire - IIIe 1
Haut-Empire au Bas-Empire 20
Haut-Empire au haut Moyen-Age 6
Haut-Empire au IIIe s. 2
Ier-Ve 1
IIIe s. au Bas Empire 2
IIIe s. au haut Moyen-Age 1
Indéterminé 2
IVe s. av. - IVe s. apr. 1
La Tène au Bas-Empire 5
LT - Gallo 2
LTA-B / LTD 1
LTA - Haut-Empire 1
LTB-Gallo 1
LTC 12
LTC-gallo 1
LTC-Gallo 4
LTC-LTD 2
LTC1 2
LTC1-Gallo 1
LTC1-LTC2 1
LTC2 1
LTC2-Gallo 2
LTC2-LTD1 8
LTC2-LTD1a 1
LTC2-LTD2 1
LTC2 - IVe s. ap. J.-C. 1
LTC2 ; Auguste-Claude 1
LTD 142
LTD-augustéen 1
LTD-gallo 1
LTD-Gallo 63
LTD-Gallo-romain 2
LTD-Galo 1
LTD - Augustéen 1
LTD - Gallo 1
LTD - période augustéenne 2
LTD - VIIe s. apr. 1
LTD1 4
LTD1-D2a 1
LTD1-Gallo 1
LTD1-Période augustéenne 1
LTD1 - début époque romaine 1
LTD1b 3
LTD1b-Gallo 2
LTD1b-LD2a 1
LTD1b-LTD2a 1
LTD1b - IIe s. apr. 1
LTD1b_D2a - époque romaine 1
LTD2 6
LTD2-Galllo 1
LTD2-Gallo 7
LTD2-Haut Empire 2
LTD2 - Gallo 1
LTD2b - Augustéen 2
Mérovingien 1
Milieu Ier ap. J.-C. 1
Non renseigné 1
Période augustéenne 2
Précoce - Augustéen 1
(b) Après
Var1 Freq
-10:30 2
-120:-50 4
-125:-51 - -25:476 1
-125:-76 3
-125:-76 - -25:476 2
-125:-76 - -75:-51 2
-125:-76 - 101:200 1
-150:-126 1
-150:-26 221
-150:-26 - -25:14 4
-150:-26 - -25:476 68
-150:-26 - 601:700 1
-150:-51 1
-150:-76 7
-150:-76 - -25:14 2
-150:-76 - -25:476 1
-150:26 1
-150:30 1
-200:-151 6
-200:-151 - -150:-126 1
-200:-151 - -150:-76 8
-200:-151 - -25:476 2
-200:-151 - -25:50 1
-200:-151 - -75:-26 1
-200:-151 - 301:400 1
-225:-201 2
-25:14 4
-25:476 8
-260:-151 12
-260:-151 - -150:-26 2
-260:-151 - -25:476 5
-260:-201 2
-260:-201 - -200:-151 1
-260:-201 - -25:476 1
-380:-261 - -25:476 1
-400:-301 - 301:400 1
-480:-26 - -25:476 2
-480:-26 - 236:476 5
-480:-261 - -150:-26 1
-480:-381 - 15:235 1
-50:-26 - -25:14 3
-75:-26 6
-75:-26 - -25:476 9
-75:-26 - 15:235 2
-800:-481 - 477:800 1
1:100 - 401:500 1
15:235 4
15:235 - 201:300 3
15:235 - 236:476 21
15:235 - 477:986 6
201:300 - 236:476 2
201:300 - 477:986 1
236:476 1
236:476 - 477:986 1
26:75 1
477:800 1
76:200 1
Indéterminé 589


Il est désormais possible de reprendre le code utilisé Section 3.4.2 pour créer les colonnes STARTING_PERIOD, ENDING_PERIOD dans la table sites2, en adaptant les expressions régulières aux données actuelles.

# Récupérer les dates de début et de fin dans des colonnes séparées

date <- data.frame(STARTING_PERIOD = character(), ENDING_PERIOD = character())
date <- strcapture("^(-?\\d+:-?\\d+)\\s-\\s(-?\\d+:-?\\d+)$", sites$Datation, date)

# Récupérer les dates uniques

date2 <- data.frame(STARTING_PERIOD = character())
date2 <- strcapture("^(-?\\d+:-?\\d+)$", sites$Datation, date2)
# Dupliquer la colonne pour avoir une date de fin
date2$ENDING_PERIOD <- date2$STARTING_PERIOD

# Ajouter un identifiant unique identique aux deux tables
# cela fonctionne puisque les données manquantes sont indiquées
# par des NAs et que l'ordre des données est conservé

date$ID <- paste0("ID", 1:nrow(date))
date2$ID <- paste0("ID", 1:nrow(date2))

# Joindre les deux tables en remplaçant les données manquantes de la table
# `date` par les données de la table `date2`
# Et remplacer les NA restant par la mention "indéterminé"

date3 <- dplyr::left_join(date, date2, by = "ID") %>%
  
  ## Cette opération crée des nouvelles colonnes STARTING_PERIOD et ENDING_PERIOD
  ## x et y
  # Remplacer les NAs par les données disponibles dans les colonnes y
  
  dplyr::mutate(STARTING_PERIOD = ifelse(is.na(STARTING_PERIOD.x), 
                                         STARTING_PERIOD.y, STARTING_PERIOD.x)) %>%
  dplyr::mutate(ENDING_PERIOD = ifelse(is.na(ENDING_PERIOD.x), 
                                       ENDING_PERIOD.y, ENDING_PERIOD.x)) %>%
  
  # Supprimer les colonnes en trop
  
  dplyr::select(-STARTING_PERIOD.y, -STARTING_PERIOD.x) %>%
  dplyr::select(-ENDING_PERIOD.y, -ENDING_PERIOD.x) %>%
  
  # Et remplacer les NA restant par la mention "indéterminé"
  
  replace(is.na(.), "Indéterminé")

# Supprimer la colonne ID

date3 <- date3[,-1]
Table 36: Extrait des nouvelles colonnes de datations
STARTING_PERIOD ENDING_PERIOD
-400:-301 301:400
Indéterminé Indéterminé
Indéterminé Indéterminé
-150:-26 -150:-26
-75:-26 -75:-26
-150:-76 -150:-76


Ces nouvelles colonnes de datations peuvent désormais être ajoutées à la table sites.

# Ajouter les dates à la table `sites`

sites <- cbind(sites, date3)
Table 37: Ajout des colonnes de datation à la table sites
SITE_SOURCE_ID Centroide Etat.de.la.recherche Occupation Datation Bibliographie Activités.artisanales Type.de.site STARTING_PERIOD ENDING_PERIOD
SIT0001 VRAI Fouillé Non renseigné -400:-301 - 301:400 R. Cordie-Hachenberg, A. Haffner 1991, Haffner 1971 Funéraire -400:-301 301:400
SIT0002 VRAI Non renseigné Non renseigné Indéterminé Habitat indéterminé Indéterminé Indéterminé
SIT0003 VRAI Non renseigné Non renseigné Indéterminé Indéterminé Indéterminé Indéterminé
SIT0004 VRAI Non renseigné Non renseigné -150:-26 Nick 2006 Féliu 2008 Habitat de plaine -150:-26 -150:-26
SIT0005 VRAI Sondé Unique -75:-26 ArkeoGIS D. Mischka 2007 Hofmann 1999, 74 Weber-Jenisch 1995, 136 Röder 1995, 176-17 Bender et alii 1993 Féliu 2008 Habitat indéterminé -75:-26 -75:-26
SIT0006 VRAI Prospecté pédestre Unique -150:-76 Hofmann 1999, 79 Weber-Jenisch 1995, 138-139 Burkhardt 1998 Féliu 2008 Fer Dépôt; Habitat indéterminé -150:-76 -150:-76


4.3 Relier les informations aux sites présents dans la base objet


Maintenant que les dates sont au format défini pour ArkeoGIS, il est possible de les ajouter à la table sites2, c’est-à-dire celle contenant les sites mentionnés dans la table objets, en même temps que les informations bibliographiques, en s’appuyant sur l’identifiant unique des sites.

# Ajouter les colonnes de dates et bibliographie dans la table `sites2`

sites2 <- droplevels(merge(sites2, sites[,c(1,6,7:10)], by = "SITE_SOURCE_ID"))

# Renommer la colonne bibliographie pour correspondre à ArkeoGIS

colnames(sites2)[14] <- colnames(arkeoGIS[20])
Table 38: Ajout des colonnes de datation et de bibliographie à la table sites2
SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE COMMENTS WEB_IMAGES BIBLIOGRAPHY Activités.artisanales Type.de.site STARTING_PERIOD ENDING_PERIOD
SIT0001 Wederath-Belginum Wederath NA 4326 7.164440 49.86499 NA Oui Non renseigné Fouillé NA NA R. Cordie-Hachenberg, A. Haffner 1991, Haffner 1971 Funéraire -400:-301 301:400
SIT0002 Cherain-Brisy Cherain NA 4326 5.865210 50.17996 NA Oui Non renseigné Non renseigné NA NA Habitat indéterminé Indéterminé Indéterminé
SIT0003 Han-sur-Lesse Han-sur-Lesse NA 4326 5.186230 50.12674 NA Oui Non renseigné Non renseigné NA NA Indéterminé Indéterminé Indéterminé
SIT0004 Klosteräcker Breisach-Hochstetten NA 4326 7.625970 48.02291 NA Oui Non renseigné Non renseigné NA NA Nick 2006 Féliu 2008 Habitat de plaine -150:-26 -150:-26
SIT0005 Münsterberg Breisach NA 4326 7.579663 48.02931 NA Oui Unique Sondé NA NA ArkeoGIS D. Mischka 2007 Hofmann 1999, 74 Weber-Jenisch 1995, 136 Röder 1995, 176-17 Bender et alii 1993 Féliu 2008 Habitat indéterminé -75:-26 -75:-26
SIT0006 Kegelriß Ehrenkirchen-Ehrenstetten NA 4326 7.776640 47.89846 NA Oui Unique Prospecté pédestre NA NA Hofmann 1999, 79 Weber-Jenisch 1995, 138-139 Burkhardt 1998 Féliu 2008 Fer Dépôt; Habitat indéterminé -150:-76 -150:-76


4.4 Ajouter les caractéristiques pour les sites


La table sites contient deux informations pour caractériser les sites qui correspondent à deux thésaurus différents dans ArkeoGIS : les types de sites et les activités artisanales. Il est donc nécessaire de procéder en deux étapes successives.


4.4.1 Les types de sites


Les types de sites sont renseignés par la caractéristique Immobilier dans ArkeoGIS.

immo <- read.csv2("data/Immobilier.csv", sep = ";", encoding = "UTF-8")
Table 39: Extrait du thésaurus pour décrire l’immobilier dans ArkeoGIS
IDArkeoGIS CARAC_NAME CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4 IdArk IdPactols IdAat
2446 Immobilier Édifice public https://ark.frantiq.fr/ark:/26678/pcrt4HEc49rMp7 17636
2447 Immobilier Édifice public Amphithéâtre https://ark.frantiq.fr/ark:/26678/pcrtEmYHAsBI3W 13174
2448 Immobilier Édifice public Odéon https://ark.frantiq.fr/ark:/26678/pcrtzY8mRfSGA7 15958
2449 Immobilier Édifice public Théâtre https://ark.frantiq.fr/ark:/26678/pcrtU6s8jjsWol 17297
524 Immobilier Habitat http://ark.frantiq.fr/ark:/26678/pcrtbptj4SOA1W 14990 http://vocab.getty.edu/page/aat/300008347
525 Immobilier Habitat Non renseigné NA
Astuce

Le thésaurus peut aussi être téléchargé ici.


La première étape d’alignement sur ce thésaurus consiste donc à préciser dans la table sites2 que les caractéristiques suivantes font référence à l’immobilier en créant la colonne CARAC_NAME.

# Créer la colonne CARAC_NAME avec l'information "Immobilier"

sites2[,colnames(arkeoGIS[14])] <- "Immobilier"


Les caractéristiques suivantes, comme pour le mobilier, nécessitent un nettoyage des données existantes et une adaptation au thésaurus. Par ailleurs, il peut y avoir plusieurs types de sites dans une même cellule, séparés par un ; (Table 40). Cette information doit être extraite et le site concerné dupliqué autant de fois qu’il y a de descriptif (Table 41).

# Séparer et multiplier les rangs avec plusieurs types

sites2 <- tidyr::separate_rows(sites2, Type.de.site, sep = ";")

# Supprimer les espaces superflus en début et fin de cellules

sites2$Type.de.site <- str_trim(sites2$Type.de.site)

Table 40: Contenu de la colonne Type.de.site dans la table sites

(a) Avant
Var1 Freq
184
Autre 5
Camp militaire 5
Dépôt 12
Dépôt; Habitat de plaine 4
Dépôt; Habitat indéterminé 2
Funéraire 164
Funéraire; Habitat indéterminé 2
Funéraire; Indéterminé 5
Habitat de hauteur 2
Habitat de hauteur; Indéterminé; Site fortifié 1
Habitat de hauteur; Site fortifié 20
Habitat de plaine 65
Habitat de plaine; Indéterminé 2
Habitat de plaine; Site fortifié 6
Habitat indéterminé 77
Habitat indéterminé; Indéterminé 3
Habitat indéterminé; Indéterminé; Site fortifié 2
Habitat indéterminé; Sanctuaire 2
Habitat indéterminé; Site fortifié 26
Indéterminé 423
Sanctuaire 10
Site d'exploitation 2
Site fortifié 1
Structure isolée 1
Trouvaille isolée 18
(b) Après
Var1 Freq
180
Autre 5
Camp militaire 5
Dépôt 17
Funéraire 159
Habitat de hauteur 22
Habitat de plaine 64
Habitat indéterminé 106
Indéterminé 429
Sanctuaire 12
Site d'exploitation 2
Site fortifié 49
Trouvaille isolée 18
Table 41: La table sites2après séparation des valeurs multiples
SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE COMMENTS WEB_IMAGES BIBLIOGRAPHY Activités.artisanales Type.de.site STARTING_PERIOD ENDING_PERIOD CARAC_NAME
SIT0068 Besançon Besançon NA 4326 6.01815 47.24878 NA Oui Non renseigné Non renseigné NA NA Habitat indéterminé -150:-26 -150:-26 Immobilier
SIT0069 Dragages du Doubs Besançon NA 4326 6.01815 47.24878 NA Oui Non renseigné Non renseigné NA NA Habitat indéterminé -150:-26 -150:-26 Immobilier
SIT0069 Dragages du Doubs Besançon NA 4326 6.01815 47.24878 NA Oui Non renseigné Non renseigné NA NA Site fortifié -150:-26 -150:-26 Immobilier
SIT0070 Extra muros Besançon NA 4326 6.01815 47.24878 NA Oui Non renseigné Non renseigné NA NA Habitat indéterminé -150:-26 -150:-26 Immobilier
SIT0071 Arsenal Besançon NA 4326 6.01815 47.24878 NA Oui Non renseigné Non renseigné NA NA Habitat indéterminé -150:-26 -150:-26 Immobilier
SIT0071 Arsenal Besançon NA 4326 6.01815 47.24878 NA Oui Non renseigné Non renseigné NA NA Site fortifié -150:-26 -150:-26 Immobilier


Parce que les sites présents dans la base source ne sont décrits que par 13 types différents et parce qu’ils peuvent correspondre à plusieurs entrées dans le thésaurus d’ArkeoGIS, il est plus simple d’effectuer cet alignement à la main ici. Par ailleurs, la plupart de ces types ne sont pas assez spécifiques pour permettre de remplir les quatre niveaux de caractérisation du thésaurus. Ainsi, excepté pour l’information Sanctuaire, seule la CARAC_LVL1 est implémentée.
Enfin, certains types ne permettent pas de décrire un site et devront être enlevés par la suite. En attendant, l’information Indéterminé est indiquée.

# Récupérer dans une table les différents types de site

immo2 <- as.data.frame(table(sites2$Type.de.site))

# Ajouter les colonnes de caractérisation vides dans cette table

col <- c("CARAC_LVL1", "CARAC_LVL2", "CARAC_LVL3", "CARAC_LVL4")
immo2[, col] <- NA

# Pour chaque niveau de caractérisation indiquer la valeur correspondante dans ArkeoGIS

immo2$CARAC_LVL1 <- immo2$Var1 %>%
  str_replace_all(c(
    "Site d'exploitation|Indéterminé|Trouvaille isolée|Autre" = NA,
    "Camp militaire|Site fortifié" = "Enceinte",
    "Dépôt" = "Dépôt",
    "Funéraire" = "Funéraire",
    "Habitat.*" = "Habitat",
    "Sanctuaire" = "Rituel"
  ))
immo2$CARAC_LVL1[immo2$Var1 == ""] <- NA

immo2$CARAC_LVL2 <- immo2$Var1 %>%
  str_replace_all(c(
    "Site d'exploitation|Indéterminé|Trouvaille isolée|Autre" = NA,
    "Camp militaire|Site fortifié" = NA,
    "Dépôt" = NA,
    "Funéraire" = NA,
    "Habitat.*" = NA,
    "Sanctuaire" = "Édifice religieux"
  ))
immo2$CARAC_LVL2[immo2$Var1 == ""] <- NA

immo2$CARAC_LVL3 <- immo2$Var1 %>%
  str_replace_all(c(
    "Site d'exploitation|Indéterminé|Trouvaille isolée|Autre" = NA,
    "Camp militaire|Site fortifié" = NA,
    "Dépôt" = NA,
    "Funéraire" = NA,
    "Habitat.*" = NA,
    "Sanctuaire" = "Sanctuaire"
  ))
immo2$CARAC_LVL3[immo2$Var1 == ""] <- NA

# supprimer la colonne Freq qui provient de la fonction table utilisée au début

immo2 <- immo2[,-2]
Table 42: Alignement des types de sites sur le thésaurus d’ArkeoGIS
Var1 CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4
NA NA NA NA
Autre NA NA NA NA
Camp militaire Enceinte NA NA NA
Dépôt Dépôt NA NA NA
Funéraire Funéraire NA NA NA
Habitat de hauteur Habitat NA NA NA
Habitat de plaine Habitat NA NA NA
Habitat indéterminé Habitat NA NA NA
Indéterminé NA NA NA NA
Sanctuaire Rituel Édifice religieux Sanctuaire NA
Site d'exploitation NA NA NA NA
Site fortifié Enceinte NA NA NA
Trouvaille isolée NA NA NA NA
# Ajouter les colonnes de caractéristiques pour chaque site correspondant

sites2 <- droplevels(merge(sites2, immo2, by.x = "Type.de.site", by.y = "Var1"))
Table 43: Ajout du thésaurus ArkeoGIS dans la table sites2
Type.de.site SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE COMMENTS WEB_IMAGES BIBLIOGRAPHY Activités.artisanales STARTING_PERIOD ENDING_PERIOD CARAC_NAME CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4
208 Funéraire SIT0001 Wederath-Belginum Wederath NA 4326 7.164440 49.86499 NA Oui Non renseigné Fouillé NA NA R. Cordie-Hachenberg, A. Haffner 1991, Haffner 1971 -400:-301 301:400 Immobilier Funéraire NA NA NA
482 Habitat indéterminé SIT0002 Cherain-Brisy Cherain NA 4326 5.865210 50.17996 NA Oui Non renseigné Non renseigné NA NA Indéterminé Indéterminé Immobilier Habitat NA NA NA
616 Indéterminé SIT0003 Han-sur-Lesse Han-sur-Lesse NA 4326 5.186230 50.12674 NA Oui Non renseigné Non renseigné NA NA Indéterminé Indéterminé Immobilier NA NA NA NA
434 Habitat de plaine SIT0004 Klosteräcker Breisach-Hochstetten NA 4326 7.625970 48.02291 NA Oui Non renseigné Non renseigné NA NA Nick 2006 Féliu 2008 -150:-26 -150:-26 Immobilier Habitat NA NA NA
458 Habitat indéterminé SIT0005 Münsterberg Breisach NA 4326 7.579663 48.02931 NA Oui Unique Sondé NA NA ArkeoGIS D. Mischka 2007 Hofmann 1999, 74 Weber-Jenisch 1995, 136 Röder 1995, 176-17 Bender et alii 1993 Féliu 2008 -75:-26 -75:-26 Immobilier Habitat NA NA NA
195 Dépôt SIT0006 Kegelriß Ehrenkirchen-Ehrenstetten NA 4326 7.776640 47.89846 NA Oui Unique Prospecté pédestre NA NA Hofmann 1999, 79 Weber-Jenisch 1995, 138-139 Burkhardt 1998 Féliu 2008 Fer -150:-76 -150:-76 Immobilier Dépôt NA NA NA


Il faut encore supprimer les lignes pour lesquelles aucun alignement n’a pu être effectuer. Toutefois, il y avait parmi ces types la mention Site d’exploitation qui renvoie à des sites de production et donc à la partie suivante (Section 4.4.2). Il faut changer la mention Immobilier, par Production pour ces éléments avant de supprimer toutes les autres lignes avec la mention NA dans la colonne CARAC_LVL1. Cependant, l’un de ces sites est aussi distingué par la colonne Activités.artisanales et sera donc ajouté à nouveau lors de l’étape suivante, il peut donc être effacé

Enfin, les colonnes Type.de.site et BIBLIOGRAPHY peuvent être supprimées et la colonne CARAC_EXP dois être ajoutée. Pour finir, la table est réordonnée selon le modèle défini par ArkeoGIS.

# Distinguer les sites avec la mention "Sites d'exploitation" comme type de site

sites2$CARAC_NAME[sites2$Type.de.site == "Site d'exploitation"] <- "Production"
sites2$CARAC_LVL1[sites2$Type.de.site == "Site d'exploitation"] <- "Autres"

# Supprimer les rangs inutiles

sites2 <- sites2[!(sites2$CARAC_NAME == "Immobilier" & is.na(sites2$CARAC_LVL1) == T),]
sites2 <- sites2[!(sites2$SITE_SOURCE_ID == "SIT0269" & sites2$CARAC_NAME == "Production"),]

# Supprimer et ajouter les colonnes nécessaires

sites2 <- sites2[ ,-c(1, 16)]
sites2$CARAC_EXP <- "Non"

# Réordonner la table

sites2 <- sites2[,colnames(arkeoGIS)]
'data.frame':   435 obs. of  22 variables:
 $ SITE_SOURCE_ID    : chr  "SIT0001" "SIT0002" "SIT0004" "SIT0005" ...
 $ SITE_NAME         : chr  "Wederath-Belginum" "Cherain-Brisy" "Klosteräcker" "Münsterberg" ...
 $ MAIN_CITY_NAME    : chr  "Wederath" "Cherain" "Breisach-Hochstetten" "Breisach" ...
 $ GEONAME_ID        : logi  NA NA NA NA NA NA ...
 $ PROJECTION_SYSTEM : chr  "4326" "4326" "4326" "4326" ...
 $ LONGITUDE         : num  7.16 5.87 7.63 7.58 7.78 ...
 $ LATITUDE          : num  49.9 50.2 48 48 47.9 ...
 $ ALTITUDE          : logi  NA NA NA NA NA NA ...
 $ CITY_CENTROID     : Factor w/ 2 levels "Non","Oui": 2 2 2 2 2 2 2 2 1 2 ...
 $ OCCUPATION        : chr  "Non renseigné" "Non renseigné" "Non renseigné" "Unique" ...
 $ STATE_OF_KNOWLEDGE: chr  "Fouillé" "Non renseigné" "Non renseigné" "Sondé" ...
 $ STARTING_PERIOD   : chr  "-400:-301" "Indéterminé" "-150:-26" "-75:-26" ...
 $ ENDING_PERIOD     : chr  "301:400" "Indéterminé" "-150:-26" "-75:-26" ...
 $ CARAC_NAME        : chr  "Immobilier" "Immobilier" "Immobilier" "Immobilier" ...
 $ CARAC_LVL1        : chr  "Funéraire" "Habitat" "Habitat" "Habitat" ...
 $ CARAC_LVL2        : chr  NA NA NA NA ...
 $ CARAC_LVL3        : chr  NA NA NA NA ...
 $ CARAC_LVL4        : logi  NA NA NA NA NA NA ...
 $ CARAC_EXP         : chr  "Non" "Non" "Non" "Non" ...
 $ BIBLIOGRAPHY      : chr  "R. Cordie-Hachenberg, A. Haffner 1991, Haffner 1971" "" "Nick 2006\nFéliu 2008" "ArkeoGIS D. Mischka 2007\nHofmann 1999, 74\nWeber-Jenisch 1995, 136\nRöder 1995, 176-17\nBender et alii 1993\nFéliu 2008" ...
 $ COMMENTS          : logi  NA NA NA NA NA NA ...
 $ WEB_IMAGES        : logi  NA NA NA NA NA NA ...
Table 44: La table sites2 après les différentes modifications


4.4.2 Les types de production


Les types de production sont renseignés par la caractéristique Production dans ArkeoGIS.

prod <- read.csv2("data/Production.csv", sep = ";", encoding = "UTF-8")
Table 45: Extrait du thésaurus pour décrire la production dans ArkeoGIS
IDArkeoGIS CARAC_NAME CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4 IdArk IdPactols IdAat
361 Production Agricole http://ark.frantiq.fr/ark:/26678/pcrtIdEjFMFAod 13681 http://vocab.getty.edu/page/aat/300004895
362 Production Agricole Grenier http://ark.frantiq.fr/ark:/26678/pcrtGBctSVZOBy 14923 http://vocab.getty.edu/page/aat/300004929
363 Production Agricole Silo http://ark.frantiq.fr/ark:/26678/pcrtdgALrHBSlv 16944 http://vocab.getty.edu/page/aat/300005024
364 Production Céramique https://ark.frantiq.fr/ark:/26678/pcrtYPpmkDk2rS 17239 http://vocab.getty.edu/page/aat/300386308
365 Production Céramique Extraction http://ark.frantiq.fr/ark:/26678/pcrtpZqoqAbrdg 21835 http://vocab.getty.edu/page/aat/300000388
366 Production Céramique Atelier http://ark.frantiq.fr/ark:/26678/pcrtfUZSMbifle 15962 http://vocab.getty.edu/page/aat/300004531
Astuce

Le thesaurus peut aussi être téléchargé ici.


Puisque dans la table sites2 les sites ont été multipliés en fonction de leur nombre de types différents, il n’est pas possible de la réutiliser directement pour renseigner les sites de production. Il est nécessaires de créer une nouvelle table Sites_prod en reprenant le code utilisé Section 4.1.

# Récupérer les occurrences uniques de chaque site

Sites_prod <- distinct(total, SITE_SOURCE_ID, .keep_all = TRUE)

# Supprimer les colonnes qui seront remplacées

Sites_prod <- Sites_prod[,c(1:11, 21, 22)]

# Effacer le contenu de la colonne COMMENTS

Sites_prod[,12] <- NA


De la même manière que pour les types de sites, on peut y ajouter les informations sur la bibliographie et les datations déjà mises aux normes et conservées dans la table sites.

# Ajouter les colonnes de dates et bibliographie dans la table `Sites_prod`

Sites_prod <- droplevels(merge(Sites_prod, sites[,c(1,6,7:10)], by = "SITE_SOURCE_ID"))

# Renommer la colonne bibliographie pour correspondre à ArkeoGIS

colnames(Sites_prod)[14] <- colnames(arkeoGIS[20])
Table 46: Ajout des colonnes de datation et de bibliographie à la table Sites_prod
SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE COMMENTS WEB_IMAGES BIBLIOGRAPHY Activités.artisanales Type.de.site STARTING_PERIOD ENDING_PERIOD
SIT0001 Wederath-Belginum Wederath NA 4326 7.164440 49.86499 NA Oui Non renseigné Fouillé NA NA R. Cordie-Hachenberg, A. Haffner 1991, Haffner 1971 Funéraire -400:-301 301:400
SIT0002 Cherain-Brisy Cherain NA 4326 5.865210 50.17996 NA Oui Non renseigné Non renseigné NA NA Habitat indéterminé Indéterminé Indéterminé
SIT0003 Han-sur-Lesse Han-sur-Lesse NA 4326 5.186230 50.12674 NA Oui Non renseigné Non renseigné NA NA Indéterminé Indéterminé Indéterminé
SIT0004 Klosteräcker Breisach-Hochstetten NA 4326 7.625970 48.02291 NA Oui Non renseigné Non renseigné NA NA Nick 2006 Féliu 2008 Habitat de plaine -150:-26 -150:-26
SIT0005 Münsterberg Breisach NA 4326 7.579663 48.02931 NA Oui Unique Sondé NA NA ArkeoGIS D. Mischka 2007 Hofmann 1999, 74 Weber-Jenisch 1995, 136 Röder 1995, 176-17 Bender et alii 1993 Féliu 2008 Habitat indéterminé -75:-26 -75:-26
SIT0006 Kegelriß Ehrenkirchen-Ehrenstetten NA 4326 7.776640 47.89846 NA Oui Unique Prospecté pédestre NA NA Hofmann 1999, 79 Weber-Jenisch 1995, 138-139 Burkhardt 1998 Féliu 2008 Fer Dépôt; Habitat indéterminé -150:-76 -150:-76


Enfin, cette table doit encore être filtrée pour ne conserver que les sites pour lesquels une activités artisanales est mentionnée. Il est alors possible de créer la colonne CARAC_NAME en y indiquant la mention Production.

# Remplacer les cellules vides de la colonne Activités.artisanales par "NA"

Sites_prod[Sites_prod$Activités.artisanales == "", 15] <- NA

# Ne conserver que les lignes pour lesquelles l'information Activités.artisanales existe

Sites_prod <- Sites_prod[is.na(Sites_prod$Activités.artisanales) == F,]

# Créer la colonne CARAC_NAME

Sites_prod$CARAC_NAME <- "Production"
Table 47: Extraction des sites pour lesquels l’information production est présente
SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE COMMENTS WEB_IMAGES BIBLIOGRAPHY Activités.artisanales Type.de.site STARTING_PERIOD ENDING_PERIOD CARAC_NAME
6 SIT0006 Kegelriß Ehrenkirchen-Ehrenstetten NA 4326 7.776640 47.89846 NA Oui Unique Prospecté pédestre NA NA Hofmann 1999, 79 Weber-Jenisch 1995, 138-139 Burkhardt 1998 Féliu 2008 Fer Dépôt; Habitat indéterminé -150:-76 -150:-76 Production
7 SIT0007 Limberg Sasbach am Kaiserstuhl NA 4326 7.603129 48.15083 NA Oui Non renseigné Non renseigné NA NA Hofmann 1999, 101 Weber-Jenisch 1995 ArkeoGIS v3 D. Mischka 2007 Féliu 2008 Fer Habitat indéterminé; Site fortifié -150:-26 -150:-26 Production
83 SIT0083 Mont-Châtel Boviolles NA 4326 5.401720 48.63913 NA Non Unique Fouillé NA NA Bronze; Fer; Orfévrerie; Tabletterie; Textile Habitat de hauteur; Site fortifié -150:-76 -25:14 Production
85 SIT0085 La Pierre d'Appel Étival-Clairefontaine NA 4326 6.863134 48.37632 NA Non Non renseigné Fouillé NA NA Féliu 2008 n°041 Fer; Textile Habitat de hauteur; Site fortifié -260:-151 -25:476 Production
86 SIT0086 La Bure Saint-Dié-des-Vosges NA 4326 6.937480 48.32626 NA Non Continue Fouillé NA NA Scholtus 2014 Bronze; Fer; Métallurgie Habitat de hauteur; Site fortifié -200:-151 301:400 Production
168 SIT0169 Butte Sainte-Geneviève Essey-lès-Nancy NA 4326 6.226259 48.71639 NA Oui Unique Fouillé NA NA Féliu 2008 n°040 Burnand 2003, p43. Colin 1998, p. 149-151. Dechezleprêtre 2003 Fer Habitat de hauteur; Indéterminé; Site fortifié -75:-26 -75:-26 Production


Comme pour la partie précédente (Section 4.4.1), plusieurs productions peuvent être renseignées dans une même cellule. Il faut donc les séparer et dupliquer les lignes concernées.

# Séparer et multiplier les rangs avec plusieurs types

Sites_prod <- tidyr::separate_rows(Sites_prod, Activités.artisanales, sep = ";")

# Supprimer les espaces superflus en début et fin de cellules

Sites_prod$Activités.artisanales <- str_trim(Sites_prod$Activités.artisanales)

Table 48: Contenu de la colonne Activités.artisanales

(a) Avant
Var1 Freq
1019
Autre 4
Autre; Fer; Textile 1
Bronze; Fer; Métallurgie 1
Bronze; Fer; Orfévrerie; Tabletterie; Textile 1
Fer 14
Fer; Textile 2
Métallurgie 1
Textile 1
(b) Après
Var1 Freq
Autre 4
Bronze 2
Fer 16
Métallurgie 2
Orfévrerie 1
Tabletterie 1
Textile 4
Table 49: La table Sites_prod après séparation des valeurs multiples
SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE COMMENTS WEB_IMAGES BIBLIOGRAPHY Activités.artisanales Type.de.site STARTING_PERIOD ENDING_PERIOD CARAC_NAME
SIT0006 Kegelriß Ehrenkirchen-Ehrenstetten NA 4326 7.776640 47.89846 NA Oui Unique Prospecté pédestre NA NA Hofmann 1999, 79 Weber-Jenisch 1995, 138-139 Burkhardt 1998 Féliu 2008 Fer Dépôt; Habitat indéterminé -150:-76 -150:-76 Production
SIT0007 Limberg Sasbach am Kaiserstuhl NA 4326 7.603129 48.15083 NA Oui Non renseigné Non renseigné NA NA Hofmann 1999, 101 Weber-Jenisch 1995 ArkeoGIS v3 D. Mischka 2007 Féliu 2008 Fer Habitat indéterminé; Site fortifié -150:-26 -150:-26 Production
SIT0083 Mont-Châtel Boviolles NA 4326 5.401720 48.63913 NA Non Unique Fouillé NA NA Bronze Habitat de hauteur; Site fortifié -150:-76 -25:14 Production
SIT0083 Mont-Châtel Boviolles NA 4326 5.401720 48.63913 NA Non Unique Fouillé NA NA Fer Habitat de hauteur; Site fortifié -150:-76 -25:14 Production
SIT0083 Mont-Châtel Boviolles NA 4326 5.401720 48.63913 NA Non Unique Fouillé NA NA Orfévrerie Habitat de hauteur; Site fortifié -150:-76 -25:14 Production
SIT0083 Mont-Châtel Boviolles NA 4326 5.401720 48.63913 NA Non Unique Fouillé NA NA Tabletterie Habitat de hauteur; Site fortifié -150:-76 -25:14 Production


Comme pour les types de sites, le nombre de productions différentes décrites n’est pas si important qu’il nécessite une complète automatisation, de plus certaines entrées (comme la mention Fer) peuvent s’appliquer à plusieurs ligne du thésaurus. C’est pourquoi il semble plus simple de procéder manuellement à l’alignement. Pour toutes les activités, la colonne CARAC_LVL4 reste vide, elle n’est donc pas modifiée.

# Récupérer dans une table les différents types d'activités

prod2 <- as.data.frame(table(Sites_prod$Activités.artisanales))

# Ajouter les colonnes de caractérisation vides dans cette table

prod2[,col] <- NA

# Pour chaque niveau de caractérisation indiquer la valeur correspondante dans ArkeoGIS

prod2$CARAC_LVL1 <- prod2$Var1 %>%
  str_replace_all(c(
    "Autre|Tabletterie|Textile" = "Autres",
    "Bronze|Fer|Métallurgie|Orfévrerie" = "Métal"
  ))

prod2$CARAC_LVL2 <- prod2$Var1 %>%
  str_replace_all(c(
    "Autre|Tabletterie|Textile" = NA,
    "Bronze|Fer|Métallurgie|Orfévrerie" = "Forge"
  ))

prod2$CARAC_LVL3 <- prod2$Var1 %>%
  str_replace_all(c(
    "Autre|Tabletterie|Textile" = NA,
    "Bronze" = "Bronze",
    "Fer" = "Fer",
    "Métallurgie" = NA,
    "Orfévrerie" = "Or"
  ))
# supprimer la colonne Freq qui provient de la fonction table utilisée au début

prod2 <- prod2[,-2]
Table 50: Alignement des types de production sur le thésaurus d’ArkeoGIS
Var1 CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4
Autre Autres NA NA NA
Bronze Métal Forge Bronze NA
Fer Métal Forge Fer NA
Métallurgie Métal Forge NA NA
Orfévrerie Métal Forge Or NA
Tabletterie Autres NA NA NA
Textile Autres NA NA NA
# Ajouter les colonnes de caractéristiques pour chaque site correspondant

Sites_prod <- droplevels(merge(Sites_prod, prod2, 
                               by.x = "Activités.artisanales", 
                               by.y = "Var1"))


Comme précédemment, les colonnes Activités.artisanales et BIBLIOGRAPHY doivent être supprimées, tandis que la colonne CARAC_EXP est créée. Puis la table est ré-agencée selon le modèle ArkeoGIS.

# Supprimer et ajouter les colonnes nécessaires

Sites_prod <- Sites_prod[,-c(1, 16)]
Sites_prod$CARAC_EXP <- "Non"

# Réordonner la table

Sites_prod <- Sites_prod[, colnames(arkeoGIS)]
Table 51: Ajout du thésaurus ArkeoGIS dans la table Sites_prod
SITE_SOURCE_ID SITE_NAME MAIN_CITY_NAME GEONAME_ID PROJECTION_SYSTEM LONGITUDE LATITUDE ALTITUDE CITY_CENTROID OCCUPATION STATE_OF_KNOWLEDGE STARTING_PERIOD ENDING_PERIOD CARAC_NAME CARAC_LVL1 CARAC_LVL2 CARAC_LVL3 CARAC_LVL4 CARAC_EXP BIBLIOGRAPHY COMMENTS WEB_IMAGES
7 SIT0006 Kegelriß Ehrenkirchen-Ehrenstetten NA 4326 7.776640 47.89846 NA Oui Unique Prospecté pédestre -150:-76 -150:-76 Production Métal Forge Fer NA Non Hofmann 1999, 79 Weber-Jenisch 1995, 138-139 Burkhardt 1998 Féliu 2008 NA NA
8 SIT0007 Limberg Sasbach am Kaiserstuhl NA 4326 7.603129 48.15083 NA Oui Non renseigné Non renseigné -150:-26 -150:-26 Production Métal Forge Fer NA Non Hofmann 1999, 101 Weber-Jenisch 1995 ArkeoGIS v3 D. Mischka 2007 Féliu 2008 NA NA
6 SIT0083 Mont-Châtel Boviolles NA 4326 5.401720 48.63913 NA Non Unique Fouillé -150:-76 -25:14 Production Métal Forge Bronze NA Non NA NA
10 SIT0083 Mont-Châtel Boviolles NA 4326 5.401720 48.63913 NA Non Unique Fouillé -150:-76 -25:14 Production Métal Forge Fer NA Non NA NA
25 SIT0083 Mont-Châtel Boviolles NA 4326 5.401720 48.63913 NA Non Unique Fouillé -150:-76 -25:14 Production Métal Forge Or NA Non NA NA
26 SIT0083 Mont-Châtel Boviolles NA 4326 5.401720 48.63913 NA Non Unique Fouillé -150:-76 -25:14 Production Autres NA NA NA Non NA NA


5 Assembler les données et exporter le résultats


Pour finir, les tables sites2 et Sites_prod sont ajoutées à la table total et le résultat est exporté au format csv selon les normes demandées par ArkeoGIS.

# Rassembler les différents jeux de données

total <- rbind(total, sites2, Sites_prod)

# Exporter le résultats au format csv

write.csv2(total, "results/Scholtus_2021.csv", sep = ";", na = "", 
          dec = ".", row.names = F, col.names = T, fileEncoding = "UTF-8")
Avertissement

Avant de commencer l’import dans ArkeoGIS, il est nécessaire de vérifier que le csv corresponde bien au format demandé, en particulier pour le séparateur de décimale.



We used R version 4.2.2 (R Core Team 2022) and the following R packages: grateful v. 0.1.11 (Rodríguez-Sánchez, Jackson, et Hutchins 2022), kableExtra v. 1.3.4 (Zhu 2021), plyr v. 1.8.7 (Wickham 2011), rlist v. 0.4.6.2 (Ren 2021), rmarkdown v. 2.14 (Xie, Allaire, et Grolemund 2018; Xie, Dervieux, et Riederer 2020; Allaire et al. 2022), tidyverse v. 1.3.1 (Wickham et al. 2019).

Les références

Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, Winston Chang, et Richard Iannone. 2022. rmarkdown: Dynamic Documents for R. https://github.com/rstudio/rmarkdown.
Barral, Philippe, et Stephan Fichtl, éd. 2012. Regards sur la chronologie de la fin de l’âge du Fer (IIIe - Ier siècle avant J.-C.) en Gaule non méditerranéenne : actes de la table ronde tenue à Bibracte, Glux-en-Glenne, 15 - 17 octobre 2007 ; Table Ronde sur la Chronologie de la Fin de l’âge du Fer dans l’Est de la France. Collection Bibracte 22. Glux-en-Glenne: Bibracte, Centre Archéologique Européen.
Bernard, Loup, Lizzie Scholtus, et Philippe JULLIEN. 2022. « Thésaurus "Immobilier" d’ArkeoGIS-ArkeOpen ». NAKALA - https://nakala.fr (Huma-Num - CNRS). https://doi.org/10.34847/NKL.A7654QJ6.
Bernard, Loup, Lizzie Scholtus, et Philippe Jullien. 2022a. « Thésaurus "Mobilier" d’ArkeoGIS-ArkeOpen ». NAKALA - https://nakala.fr (Huma-Num - CNRS). https://doi.org/10.34847/NKL.510A974O.
———. 2022b. « Thésaurus "Production" d’ArkeoGIS-ArkeOpen ». NAKALA - https://nakala.fr (Huma-Num - CNRS). https://doi.org/10.34847/NKL.3F9BRL3C.
———. 2023. « Chronologie "Europe occidentale continentale centrale du Néolithique récent à nos jours" ». NAKALA - https://nakala.fr (Huma-Num - CNRS). https://doi.org/10.34847/NKL.1C4EMDQ6.
Marlet, Olivier, Bruno Baudoin, Loup Bernard, Laure Bézard, Romain Boissat, Pierre-Yves Buard, Agnieszka Halczuk, et al. 2022. Le Livre Blanc du consortium Mémoires des Archéologues et des Sites Archéologiques : Guide des bonnes pratiques numériques en archéologie. https://halshs.archives-ouvertes.fr/halshs-03561376.
R Core Team. 2022. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Ren, Kun. 2021. rlist: A Toolbox for Non-Tabular Data Manipulation. https://CRAN.R-project.org/package=rlist.
Rodríguez-Sánchez, Francisco, Connor P. Jackson, et Shaurita D. Hutchins. 2022. grateful: Facilitate citation of R packages. https://github.com/Pakillo/grateful.
Scholtus, Lizzie. 2021. « Les faciès culturels dans l’est de la Gaule entre le IIIe s. av. J.-C. et le IVe s. apr. J.-C. : essai de modélisation ». Theses, Strasbourg: Université de Strasbourg. https://tel.archives-ouvertes.fr/tel-03506297.
Wickham, Hadley. 2011. « The Split-Apply-Combine Strategy for Data Analysis ». Journal of Statistical Software 40 (1): 1‑29. https://www.jstatsoft.org/v40/i01/.
Wickham, Hadley, Mara Averick, Jennifer Bryan, Winston Chang, Lucy D’Agostino McGowan, Romain François, Garrett Grolemund, et al. 2019. « Welcome to the tidyverse ». Journal of Open Source Software 4 (43): 1686. https://doi.org/10.21105/joss.01686.
Xie, Yihui, J. J. Allaire, et Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown.
Xie, Yihui, Christophe Dervieux, et Emily Riederer. 2020. R Markdown Cookbook. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown-cookbook.
Zhu, Hao. 2021. kableExtra: Construct Complex Table with ’kable’ and Pipe Syntax. https://CRAN.R-project.org/package=kableExtra.

Notes de bas de page

  1. Correspondre à cette chronologie permettra d’afficher les données dans ArkeoGIS dans la couleur correspondant à leur datation.↩︎

  2. Cette partie est amenée à être modifiée puisque le thésaurus est en cours de nettoyage. En particulier les mentions “Autres” sont vouées à disparaître. Pour cette raison, nous choisissons ici de ne pas aligner sur le niveau “Autres”, mais sur le précédent.↩︎