Numele străzilor | R-bloggeri

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe r.iresmi.netși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)


Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

Lyon, vue depuis la basilique Notre-Dame de Fourvière

Lyon – CC-BY-NC-ND de Emmanuel Fromm

Ziua 2 din 30DayMapChallenge: «Linii» (anterior).

Vom face o hartă cu genul numelui străzii din Lyon. Avem nevoie de o bază de date cu prenume franceze unde vom găsi genul. Vom extrage străzile Lyon din OpenStreetMap.

library(arrow)
library(dplyr)
library(tidyr)
library(readr)
library(purrr)
library(ggplot2)
library(stringr)
library(sf)
library(osmdata)
library(ggspatial)
library(glue)
library(knitr)

set.seed(42)

Prenume

if (!file.exists("freq_prenoms.rds")) {
  freq_prenoms <- read_parquet("https://www.insee.fr/fr/statistiques/fichier/8205621/prenoms-2023-nat.parquet") |> 
    filter(preusuel != "_PRENOMS_RARES") |> 
    mutate(preusuel = iconv(preusuel, to = "ASCII//TRANSLIT")) |> 
    group_by(preusuel, sexe) |> 
    summarise(n = sum(nombre, na.rm = TRUE),
              .groups = "drop_last") |>
    mutate(total = sum(n)) |> 
    ungroup() |> 
    mutate(sexe = case_when(sexe == 1 ~ "M",
                            sexe == 2 ~ "F",
                            .default = NA_character_)) |> 
    pivot_wider(names_from = sexe, 
                values_from = n,
                values_fill = 0) |> 
    mutate(across(c(M, F), (x) x / total)) |> 
    write_rds("freq_prenoms.rds")
} else {
  freq_prenoms <- read_rds("freq_prenoms.rds")
}

Avem 34234 de prenume și frecvențele de gen din 1900.

Exemplu de prenume
ZENABOU 48 0 1
EMILIENE 25 0 1
KINGSLEY 878 1 0
DOLOVAN 73 1 0
ERCOLE 67 1 0
YVA 178 0 1
ISSEY 79 1 0
SAWSSEN 121 0 1
MISBAH 24 0 1
GOHANN 20 1 0

Date de hartă

lyon_bbox <- getbb("Lyon, France", featuretype = "city")

if (!file.exists("osm.rds")) {
  lyon <- opq(lyon_bbox) |>
    add_osm_features(features = c(
      '"highway"="motorway"',
      '"highway"="trunk"',
      '"highway"="primary"',
      '"highway"="secondary"',
      '"highway"="tertiary"',
      '"highway"="motorway_link"',
      '"highway"="trunk_link"',
      '"highway"="primary_link"',
      '"highway"="secondary_link"',
      '"highway"="tertiary_link"',
      '"highway"="motorway_junction"',
      '"highway"="unclassified"',
      '"highway"="service"',
      '"highway"="pedestrian"',
      '"highway"="living_street"',
      '"highway"="residential"')) |> 
    osmdata_sf() |> 
    pluck("osm_lines") |> 
    select(osm_id, name) |> 
    drop_na(name) |> 
    group_by(name) |> 
    summarise() |> 
    write_rds("osm.rds")
} else {
  lyon <- read_rds("osm.rds")
}

Găsirea prenumelor în numele străzilor

Folosim o metodă de forță brută: pentru fiecare stradă verificăm dacă o parte a etichetei sale este prezentă în lista noastră de prenume feminine sau masculine. Păstrăm doar prenume cu o frecvență mare în oricare dintre genuri.

female <- freq_prenoms |> 
  filter(F > .8,
         str_length(preusuel) > 1,
         preusuel != "LA") |> 
  pull(preusuel)

male <- freq_prenoms |> 
  filter(M > .8, 
         str_length(preusuel) > 1) |> 
  pull(preusuel)

street_gender <- lyon |> 
  mutate(name = str_to_upper(iconv(name, to = "ASCII//TRANSLIT")),
         m = str_extract_all(name, glue_collapse(male, sep = "\b|\b", last = "\b")),
         f = str_extract_all(name, glue_collapse(female, sep = "\b|\b", last = "\b")),
         gender = unlist(map2(f, m, ~ case_when(length(.y) > length(.x) ~ "male",
                                             length(.x) > length(.y) ~ "female",
                                             identical(.x, character(0)) & 
                                               identical(.y, character(0)) ~ "not concerned",
                                             length(.x) == length(.y) ~ "undecidable",
                                             .default = NA_character_))))
Exemplu de clasificare
COURS DE VERDUN RECAMIER LINIE (4,830426 45,748… nu este preocupat
IMASSE DES ANGLAIS LINIE (4,795807 45,753… nu este preocupat
RUE DES PROVENCE LINIE (4,79335 45,7369… nu este preocupat
CHEMIN DES PEUPLIERS LINIE (4,866587 45,801… nu este preocupat
ALLEE DU LEVANT LINIE (4,878859 45,759… nu este preocupat
RUE ROPOSTE LINIE (4,866353 45,760… nu este preocupat
ALLEE NELLIE BLY LINIE (4,84882 45,7429… NELIE femeie
QUAI JEAN MOULIN MULTILINESTRING ((4,837853 … JEAN bărbat
RUTA LA VIEILLE LINIE (4,769782 45,720… nu este preocupat
AVENUE DE CHAMPAGNE MULTILINESTRING ((4,796801 … nu este preocupat

Hartă

street_gender |> 
  mutate(gender = factor(gender, levels = c("female", "male", "undecidable", "not concerned"))) |> 
  st_set_crs("EPSG:4326") |> 
  ggplot() +
  geom_sf(aes(color = gender), 
          linewidth = .5,
          key_glyph = "timeseries") +
  scale_color_manual(values = c("female" = "lightpink1",
                                "male" = "lightskyblue",
                                "undecidable" = "lightyellow4",
                                "not concerned" = "seashell2")) +
  annotation_scale(bar_cols =  c("darkgrey", "white"),
                   line_col = "darkgrey",
                   text_col = "darkgrey",
                   height = unit(0.1, "cm")) +
  coord_sf(xlim = lyon_bbox(c(1, 3)),
           ylim = lyon_bbox(c(2, 4))) +
  labs(title = "Gender in Lyon street names",
       color = "",
       caption = glue("Map data © OpenStreetMap contributors
                      using INSEE Fichier des prénoms 2023
                      r.iresmi.net - {Sys.Date()}")) +
  theme_void() +
  theme(plot.background = element_rect(color = NA, 
                                       fill = "white"),
        plot.caption = element_text(size = 5,
                                    color = "darkgrey"))

O hartă a genului în numele străzilor din LyonO hartă a genului în numele străzilor din Lyon

Lyon

Posibile clasificări greșite

O mulțime de părtiniri fac această hartă nesigură și ar avea nevoie de editare manuală…

prenume epicene

  • unele prenume pot fi masculine sau feminine (GWEN, CAMILLE, DOMINIQUE)

nu este preocupat

  • nume de străzi ale persoanelor, dar fără prenumele (RUE VILLON),
  • titlu în loc de prenume (RUE DE L’AMIRAL COURBET),

are un gen, dar nu ar trebui

  • nume comune folosite ca prenume (CHEMIN DE LA POMME), în principal pentru fete…
  • prenume ciudate (AUTOROUTE DU SOLEIL, Soleil pare a fi un nume de fată…)

accidental bine clasificat

  • numele de familie este, de asemenea, un prenume (COURS BAYARD)

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.