Référentiel archéologique de Paris

Données - Ville de Paris

Code
source(here::here("_rinit.R"))
source(here::here("data", "paris", "_paris.R"))   # wkb2sfc(), paris_basemap(), arrondissements_sf()
invisible(Sys.setlocale("LC_TIME", "fr_FR.UTF-8"))
# cd ~/iCloud/website/data/paris; /usr/local/bin/R -e 'quarto::quarto_render("referentiel-archeologique-de-paris.qmd")'

knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE,
                      fig.width = 8, fig.height = 5, dpi = 150)

archeo_path <- here::here("data", "paris", "referentiel-archeologique-de-paris.parquet")
archeo <- arrow::read_parquet(archeo_path) |>
  dplyr::mutate(ar = suppressWarnings(as.integer(substr(code_postal, 4, 5))))

n_tot  <- nrow(archeo)
arr_sf <- arrondissements_sf()
pts_sf <- archeo |>
  dplyr::mutate(geometry = wkb2sfc(geo_point_2d)) |>
  sf::st_as_sf(crs = 4326)

eras <- c(protohistoire = "Protohistoire", antiquite = "Antiquité", moyen_age = "Moyen Âge",
         temps_modernes = "Temps modernes", epoque_contemporaine = "Époque contemporaine")

theme_carte <- theme_void(base_size = 12) +
  theme(plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(colour = "grey35"),
        plot.margin = margin(5, 12, 5, 5))
theme_barres <- theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(colour = "grey35"),
        panel.grid.major.y = element_blank())

Le référentiel archéologique parisien recense les opérations et découvertes archéologiques connues sur le territoire — fouilles, diagnostics, découvertes anciennes ou fortuites — avec, pour chacune, les grandes périodes historiques attestées sur le site. 1811 opérations répertoriées, dont 778 avec des vestiges antiques et 639 avec des vestiges médiévaux.

Code
archeo |>
  dplyr::filter(!is.na(synthese), nchar(synthese) > 30) |>
  dplyr::transmute(Adresse = adresse, Nature = nature_operation, Synthèse = stringr::str_trunc(synthese, 140)) |>
  head(6) |>
  gt::gt() |>
  gt::tab_header(title = "6 opérations avec synthèse détaillée") |>
  gt::tab_options(table.width = "100%")
6 opérations avec synthèse détaillée
Adresse Nature Synthèse
36 rue Geoffroy-Saint-Hilaire NA Nouvelles galeries de botanique. Fouilles au droit de la porte de 11 heures n'ont rien donné sur le cours du ru de la Bièvre.
11 avenue des Gobelins Découverte ancienne En août-septembre 1962, à l'occasion de l'agrandissement du Prisunic, une surveillance a permis la découverte de trois cuves de pierre re...
218 rue Saint-Jacques Découverte ancienne Découverte de vestiges du cardo maximus par Théodore Vacquer à une date indéterminée.
2w rue de Médicis Découverte ancienne En 1807, l'achitecte du Sénat Chalgrin mentionne des murs non datés, des tuiles romaines et des fragments de mosaïques. A la même époque,...
31 rue de Tournon Sauvetage urgent En octobre 1966, à l'occasion de la construction d'un transformateur d'E.D.F., une surveillance et des relevés ont été effectués. Cette s...
1 rue Coquillière NA Un pan de mur a été signalé par l'architecte voyer en 1907, avant la démolition des immeubles pour l'élargissement de la rue. D'après les...

Où sont les sites

Code
pal <- leaflet::colorFactor("Set1", domain = names(eras)[eras != ""],
                            levels = c("antiquite", "moyen_age", "temps_modernes",
                                      "epoque_contemporaine", "protohistoire"))
periode_principale <- function(df) {
  dplyr::case_when(
    df$antiquite == "Oui" ~ "antiquite",
    df$moyen_age == "Oui" ~ "moyen_age",
    df$temps_modernes == "Oui" ~ "temps_modernes",
    df$epoque_contemporaine == "Oui" ~ "epoque_contemporaine",
    df$protohistoire == "Oui" ~ "protohistoire",
    TRUE ~ NA_character_
  )
}
pts_sf$periode <- periode_principale(pts_sf)

leaflet::leaflet(dplyr::filter(pts_sf, !is.na(periode)), options = leaflet::leafletOptions(minZoom = 11)) |>
  paris_basemap() |>
  leaflet::addPolygons(data = arr_sf, fill = FALSE, color = "#999", weight = 1) |>
  leaflet::addCircleMarkers(
    radius = 4, stroke = FALSE, fillOpacity = 0.75, fillColor = ~pal(periode),
    label = ~adresse,
    popup = ~sprintf("<b>%s</b><br>%s<br>%s", adresse, nature_operation,
                     stringr::str_trunc(dplyr::coalesce(synthese, ""), 200))
  ) |>
  leaflet::addLegend("bottomright", pal = pal, values = ~periode, title = "Période la plus ancienne attestée",
                     labels = eras[c("antiquite", "moyen_age", "temps_modernes", "epoque_contemporaine", "protohistoire")],
                     opacity = 0.9)

Antiquité concentrée sur l’Île de la Cité et la rive gauche (tracé de Lutèce) ; « période » = la plus ancienne des époques attestées sur le site.

Par arrondissement

Code
cnt <- archeo |> dplyr::filter(!is.na(ar)) |> dplyr::count(ar, name = "n")

arr_sf |>
  dplyr::left_join(cnt, by = c("c_ar" = "ar")) |>
  ggplot() +
  geom_sf(aes(fill = n), colour = "white", linewidth = 0.2) +
  scale_fill_viridis_c(option = "cividis", direction = -1, na.value = "grey92", name = "Opérations") +
  labs(title = "Opérations archéologiques par arrondissement",
       subtitle = "Les 4ᵉ et 5ᵉ arrondissements (cœur historique) dominent") +
  theme_carte

Les périodes attestées

Code
purrr::imap_dfr(eras, ~ tibble::tibble(periode = .y, n = sum(archeo[[.x]] == "Oui", na.rm = TRUE))) |>
  dplyr::mutate(periode = forcats::fct_reorder(factor(periode, levels = eras), n)) |>
  ggplot(aes(n, periode)) +
  geom_col(fill = "#7a5a2b", width = 0.6) +
  geom_text(aes(label = n), hjust = -0.2, size = 3.2) +
  scale_x_continuous(expand = expansion(mult = c(0, 0.12))) +
  labs(title = "Nombre d'opérations avec vestiges attestés, par période",
       subtitle = "Aucun vestige préhistorique recensé dans ce référentiel", x = NULL, y = NULL) +
  theme_barres

Nature des opérations

Code
archeo |>
  dplyr::filter(!is.na(nature_operation)) |>
  dplyr::count(nature_operation, sort = TRUE) |>
  dplyr::mutate(nature_operation = forcats::fct_reorder(nature_operation, n)) |>
  ggplot(aes(n, nature_operation)) +
  geom_col(fill = "#3b6f8a", width = 0.6) +
  geom_text(aes(label = n), hjust = -0.2, size = 3) +
  scale_x_continuous(expand = expansion(mult = c(0, 0.12))) +
  labs(title = "Type d'opération archéologique",
       subtitle = "Les « découvertes anciennes » (avant l'archéologie préventive) dominent le référentiel",
       x = NULL, y = NULL) +
  theme_barres

Toutes les opérations

Code
archeo |>
  dplyr::transmute(Adresse = adresse, Arrondissement = ar, Nature = nature_operation,
                   Antiquité = antiquite, `Moyen Âge` = moyen_age, Date = date_operation) |>
  reactable::reactable(
    searchable = TRUE,
    filterable = TRUE,
    pagination = TRUE,
    defaultPageSize = 20,
    compact = TRUE,
    resizable = TRUE,
    highlight = TRUE,
    wrap = TRUE,
    defaultColDef = reactable::colDef(
      align = "left",
      headerStyle = list(fontWeight = "bold"),
      style = list(whiteSpace = "normal", wordBreak = "break-word")
    ),
    columns = list(
      Adresse = reactable::colDef(minWidth = 200),
      Arrondissement = reactable::colDef(minWidth = 70, maxWidth = 110),
      Nature = reactable::colDef(minWidth = 140),
      Antiquité = reactable::colDef(minWidth = 80, maxWidth = 110),
      `Moyen Âge` = reactable::colDef(minWidth = 80, maxWidth = 110),
      Date = reactable::colDef(minWidth = 90, maxWidth = 130)
    )
  )

Source & données

Code
tibble::tibble(
  ` ` = c("Jeu de données", "Producteur", "Licence", "Fichier", "Mise à jour", "Observations"),
  `  ` = c(
    "[Référentiel archéologique de Paris](https://opendata.paris.fr/explore/dataset/referentiel-archeologique-de-paris/information/)",
    "Direction des Affaires Culturelles — Ville de Paris",
    "Open Database License (ODbL)",
    sprintf("`data/paris/referentiel-archeologique-de-paris.parquet` (%s ko) + `arrondissements.parquet`",
            round(file.size(archeo_path) / 1024)),
    format(as.Date(file.mtime(archeo_path)), "%d %B %Y"),
    sprintf("%d opérations", n_tot)
  )
) |>
  gt::gt() |> gt::fmt_markdown(columns = `  `) |>
  gt::tab_options(table.width = "100%", column_labels.hidden = TRUE)
Jeu de données Référentiel archéologique de Paris
Producteur Direction des Affaires Culturelles — Ville de Paris
Licence Open Database License (ODbL)
Fichier data/paris/referentiel-archeologique-de-paris.parquet (832 ko) + arrondissements.parquet
Mise à jour 05 septembre 2026
Observations 1811 opérations