Una geografia percettiva del Levante

29 ottobre 2022·
Clément Godbarge
Clément Godbarge
· 5 min di lettura
post Note

Introduzione

Il Levante è un luogo che sfugge. Lo si definisce quasi sempre in rapporto – o in contrapposizione – a un altro territorio, e il suo significato è stato di rado stabile: evoca geografie diverse a seconda del luogo e del momento in cui la parola viene usata. Se però una definizione oggettiva e precisa è difficile da formulare, si può almeno tentare una mappa soggettiva di quella regione, fondata sulle correlazioni interne a un dato corpus di testi. In altre parole: quale spazio evocava il Levante per un determinato gruppo di lettori?
In questo post mostro come usare i dati della banca dati MIA del Medici Archive Project per visualizzare i luoghi a cui il toponimo era associato.

La banca dati MIA

MIA è una piattaforma collaborativa per gli studiosi che vogliono caricare e condividere le proprie fotografie di documenti dell’Archivio di Stato di Firenze. Nell’ultimo anno, col patrocinio del National Endowment for the Humanities, il nostro gruppo ha fotografato, trascritto, riassunto e classificato migliaia di documenti della sezione degli avvisi del fondo Mediceo del Principato. La banca dati non nasce per l’analisi statistica; ma i metadati che abbiamo reso disponibili si possono scaricare e usare come veri e propri insiemi di dati.

L’insieme di dati

Nel nostro caso, l’insieme di dati che ho costruito raccoglie tutte le notizie «dal Levante» fra il 1543 e il 1566, cioè dal primo avviso registrato nell’archivio fino all’anno della morte del sultano Solimano I. Ecco un campione di quanto ho estratto dal server: tre colonne, con il numero univoco del documento, un nome di luogo e una data.

57386 Malta / Europe / World / Top of the TGN hierarchy 1565-1-3
57386 Modon / Messinias, Nomos / Peloponnisos / Ellas 1565-1-3
57386 Al-Iskandariyah / Muhafazat al Iskandariyah / Egypt / Africa  1565-1-3
57386 Evvoia / Evvoias, Nomos / Sterea Ellas-Evvoia / Ellas 1565-1-3
57386 Venetian Republic / Italia / Europe / World 1565-1-3
57386 Arsenale / Istanbul / Istanbul / Marmara  1565-1-3
57386 Black Sea / Asia / World / Top of the TGN hierarchy 1565-1-3
57389 Otranto / Lecce / Puglia / Italia 1565-1-3
57389 Nisoi Aiyaiou / Ellas / Europe / World  1565-1-3
57389 Malta / Europe / World / Top of the TGN hierarchy 1565-1-3
57389 Buda / Budapest / Budapest / Magyarorszag 1565-1-3
57389 Al-Iskandariyah / Muhafazat al Iskandariyah / Egypt / Africa  1565-1-3
57389 Kipros / Asia / World / Top of the TGN hierarchy  1565-1-3
57389 Rodhos / Rodos, Nisos / Sporadhes / Nisoi Aiyaiou 1565-1-3
57389 Arsenale / Istanbul / Istanbul / Marmara  1565-1-3
57389 Çorlu / Thraki / Ellas / Europe 1565-1-3

Ripulire i dati

Per visualizzarli, i dati vanno resi leggibili come csv (valori separati da virgola), e l’informazione geografica va convertita in un formato più digeribile per la macchina: le coordinate GPS. Trattandosi di centinaia di voci, conviene automatizzare. Lo si fa abbastanza in fretta, e con buona precisione, con modelli linguistici pre-addestrati come GPT-3, Bloom o AI-21, per citarne solo alcuni; ma l’operazione va sorvegliata da vicino, perché questi modelli hanno una certa propensione ad allucinare.

documentId,latitude,longitude,documentDate
57386,35.899167,14.514167,1565-1-3
57386,37.05,22.116667,1565-1-3
57386,31.200028,29.918719,1565-1-3
57386,38.366667,23.666667,1565-1-3
57386,45.438333,12.331333,1565-1-3
57386,41.018611,28.984444,1565-1-3
57386,42.7,18.8,1565-1-3
57389,40.216667,18.166667,1565-1-3
57389,37.966667,23.716667,1565-1-3
57389,35.899167,14.514167,1565-1-3
57389,47.4925,19.051389,1565-1-3
57389,31.200028,29.918719,1565-1-3
57389,34.916667,33.616667,1565-1-3
57389,36.405419,28.227778,1565-1-3
57389,41.018611,28.984444,1565-1-3
57389,41.133333,27.416667,1565-1-3

La mappa di densità

Una mappa di densità è una visualizzazione che mette in risalto la frequenza con cui un luogo viene citato in un insieme di dati. Serve a capire non soltanto l’estensione geografica dei propri dati, ma anche i loro punti focali. Quali luoghi ricorrono di più, e quali sono solo episodici? Dove sono i centri, e quanto è lontana la periferia? Su quale punto della mappa si concentrerebbe, con ogni probabilità, l’attenzione di un lettore?

Per questo esperimento – e perché avevo fretta – ho usato una delle API di Mapbox. Ma molte librerie di visualizzazione e molti sistemi informativi geografici producono lo stesso tipo di mappa.

Qualche osservazione

Il risultato è più un quadro impressionista che la rappresentazione esatta di un concetto ben definibile; ed è proprio questo che mi piace dell’esperimento. Perché la scienza dei dati può essere una potente alleata delle discipline umanistiche, ma non siamo obbligati a giocare secondo le sue regole.

Un altro aspetto interessante: la mappa restituisce un Levante perfettamente integrato con il resto dell’Europa e del Mediterraneo. Mette in luce la centralità di Edirne nella geografia politica dell’Impero ottomano; e rivela che la città più rilevante della Spagna, sulla mappa, non è Madrid né l’Escorial, ma Napoli. Da ultimo, le isole e le piccole città-stato come Ragusa sembrano avere un ruolo importante di mediazione fra le potenze della regione.

Come richiedere i dati a MIA

MIA è uno strumento collaborativo eccellente, ma i dati che custodisce sui suoi server non sono facili da raggiungere: il back-end, per dire, non è pubblicato su alcun repository pubblico. Si possono comunque ottenere registrandosi a MIA e interrogando il server con Python.

Richiesta

url = "https://mia.medici.org/Mia/json/de/advancedsearch/advancedSearchResults/0/90/docYear/asc/?isNewsFeedSearch=False" 
payload = [{"searchSection":"archivalLocationSearch","type":"archivalLocationAdvancedSearch","isActiveFilter":True,"repository":None,"collection":"Mediceo del Principato","series":None,"volume":"2863","insert":None},{"searchSection":"categoryAndTypologySearch","type":"categoryAndTypologyAdvancedSearch","isActiveFilter":True,"category":"News","typology":None},{"searchSection":"transcriptionSearch","type":"transcriptionAdvancedSearch","isActiveFilter":False,"transcription":""},{"isActiveFilter":False,"searchSection":"synopsisSearch","type":"synopsisAdvancedSearch","synopsis":""},{"searchSection":"placesSearch","type":"placesAdvancedSearch","isActiveFilter":False,"places":[]},{"searchSection":"peopleSearch","type":"peopleAdvancedSearch","isActiveFilter":False,"people":[]},{"searchSection":"topicsSearch","type":"topicsAdvancedSearch","isActiveFilter":True,"topics":[{"topicTitle":"Place Index","topicId":"51","placeAllId":""}]},{"searchSection":"dateSearch","type":"dateAdvancedSearch","isActiveFilter":False,"dateFilterType":"","dateYear":"","dateMonth":"","dateDay":"","dateBYear":"","dateBMonth":"","dateBDay":""},{"searchSection":"documentOwnerSearch","type":"documentOwnerAdvancedSearch","isActiveFilter":False,"editType":"owner","account":""},{"searchSection":"languagesSearch","type":"languagesAdvancedSearch","isActiveFilter":False,"languages":[]}]
headers = {'Content-type': 'application/json', 'Accept': '*/*'}
r = requests.post(url, data=json.dumps(payload), headers=headers, auth=('LOGIN','PASSWORD'))

Ricordate di sostituire LOGIN e PASSWORD con le vostre credenziali.

Scrittura della risposta su file

with open('response.json', 'wb') as fd:
    for chunk in r.iter_content(chunk_size=128):
        fd.write(chunk)

Apertura del JSON

f = open('response.json', encoding="utf8")

Conversione dell’oggetto JSON in dizionario

json_complete = json.load(f)

Selezione dei dati dal JSON e scrittura in formato CSV

with open('results.csv', 'w', newline='') as csvfile:
    fieldnames = ['documentId', 'placeCited', 'documentDate']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for i in json_complete['data']:
        if i['topics'] != None:
            for x in i['topics']:
                documentId=x['documentId']
                placeCited=x['topicPlaceName']
                year=i['date']['docYear']
                month=i['date']['docMonth']
                day=i['date']['docDay']
                documentDate=str(year)+ "-" + str(month)+"-" + str(day)
                writer.writerow({'documentId': documentId, 'placeCited': placeCited, 'documentDate': documentDate})

Scaricato il file results.csv, potete passare alla pulizia dei dati come spiegato sopra.

Clément Godbarge
Authors
Docente di Umanistica digitale
Clément Godbarge insegna Umanistica digitale all’Università di St Andrews. Le sue ricerche riguardano i rapporti tra scienza e arte di governo nell’Europa della prima età moderna. Nel suo libro di prossima pubblicazione esamina come i medici inseriti nelle corti di Francia e Italia del Cinquecento si siano proposti come esperti politici di un genere nuovo. Le sue ricerche sono state sostenute dalla Andrew W. Mellon Foundation, dalla Commissione Fulbright, dalla Renaissance Society of America e dall’Università di Harvard.