Un accenno per stimolare un approfondimento
2022-11-03
onData è un’associazione promuove l’apertura dei dati pubblici per renderli un bene comune.
Ma non siamo maghi … abbiamo 30 minuti
Niente vi può dare più super poteri nell’acquisire i dati. Nel linguaggio che preferite, ma ci sono dei linguaggi più vicini ai dati (R, Python, Julia, …).
Alcuni “fondamentali”:
Perché (quasi) tutto è testo.
<div class="span3 breaking-news">
<h2 class="pp-lbl lbl-sx lbl-red">Ultima ora</h2>
<ol>
<li>
<em class="meta">21:19</em>
<h3>
<a href="/sito/notizie/topnews/2022/11/01/israele-exit-poll-almeno-61-seggi-su-120-per-netanyahu_1c0c7ba0-c0e3-4334-97a7-9d52071fb930.html">
Israele: exit poll, almeno 61 seggi su 120 per Netanyahu
</a>
</h3>
</li>
</ol>
</div>
# scaria la homepage di ANSA
curl -kL 'https://www.ansa.it/' | \
# e poi estrai il resto di tutti i tag <a> dentro <h3>, dentro <div class="ultima-ora">
htmlq -t '.breaking-news h3 a'
Output:
Israele: exit poll, almeno 61 seggi su 120 per Netanyahu
Bolsonaro autorizza la transizione con Lula
Danimarca: exit poll, nessuna coalizione ha la maggioranza
Ucraina: Onu, domani nessuna nave in partenza
Wsj, 'imminente attacco dell'Iran contro l'Arabia Saudita'
Amb.russa, 'Razov parlava di cannoni italiani, non uomini'
Taylor Swift fa storia, conquista primi 10 posti classifica Usa
Il browser come strumento
Guardiamo un esempio di file CSV
Distribuzione della patologia X nel territorio Y
id,Comune,temperatura_corporea,area,email,data
1,Cefalu',36.26,,info@email.it,12/27/2022
,,,,,
1,Santa Flavia ,-28,,posta@emailit,28/3/2022
totale,,8.26,,,
+--------+----------------+----------------------+------+---------------+------------+
| 1 | 2 | 3 | 4 | 5 | 6 |
+--------+----------------+----------------------+------+---------------+------------+
| id | Comune | temperatura_corporea | area | email | data |
| 1 | Cefalu' | 36.26 | - | info@email.it | 12/27/2022 |
| - | - | - | - | - | - |
| 1 | Santa Flavia | -28 | - | posta@emailit | 28/3/2022 |
| totale | - | 8.26 | - | - | - |
+--------+----------------+----------------------+------+---------------+------------+
| id | Comune | temperatura_corporea | area | email | data |
| 1 | Cefalu' | 36.26 | - | info@email.it | 12/27/2022 |
| - | - | - | - | - | - |
| 1 | Santa Flavia | -28 | - | posta@emailit | 28/3/2022 |
| totale | - | 8.26 | - | - | - |
Finché sono 5 righe lo possiamo fare a mano, ma se sono 5000?
Può essere uno strumento adatto per dati non grandi e per esplorare i dati (esempio).
È un po’ come entrare in una casa pulita.
path: input_01_fd.csv
encoding: utf-8
name: input
profile: tabular-data-resource
format: csv
hashing: md5
dialect:
delimiter: ","
schema:
missingValues: ["NaN","-",""]
fields:
- name: id
title: "Identificativo"
description: "Codice univoco identificativo"
type: integer
constraints:
required: true
unique: true
example: 1
- name: Comune
title: "Comune"
description: "Nome del Comune in cui si è svolta la misurazione"
type: string
example: "Trieste"
- name: temperatura_corporea
title: "Temperatura corporea"
description: "Valore in grado Celsius della temperatura corporea"
type: number
constraints:
minimum: 34
example: 36.12
- name: area
title: "Area"
description: "Area geografica in una delle seguenti categorie: Nord, Centro, Sud"
type: any
constraints:
enum:
- Nord
- Centro
- Sud
example: "Nord"
- name: email
title: "Indirizzo email"
description: "Indirizzo email del soggetto"
type: string
format: email
example: "esempio@tin.it"
- name: data
title: "Data misurazione"
description: "Data in cui è stata effettuata la misurazione, nel formato YYYY-MM-DD"
type: date
format: default
example: "2022-12-31"
+-------+---------+------------+----------------------------------------------------+
| row | field | code | message |
+=======+=========+============+====================================================+
| 2 | 6 | type-error | Type error in the cell "12/27/2022" in row "2" and |
| | | | field "data" at position "6": type is |
| | | | "date/%Y-%m-%d" |
+-------+---------+------------+----------------------------------------------------+
| 3 | 3 | constraint | The cell "-28" in row at position "3" and field |
| | | -error | "temperatura_corporea" at position "3" does not |
| | | | conform to a constraint: constraint "minimum" is |
| | | | "34" |
+-------+---------+------------+----------------------------------------------------+
| 3 | 5 | type-error | Type error in the cell "posta@emailit" in row "3" |
| | | | and field "email" at position "5": type is |
| | | | "string/email" |
+-------+---------+------------+----------------------------------------------------+
| 3 | 6 | type-error | Type error in the cell "12/2/2022" in row "3" and |
| | | | field "data" at position "6": type is |
| | | | "date/%Y-%m-%d" |
+-------+---------+------------+----------------------------------------------------+
L’eccellente OpenRefine
Andrea Borruso
mailto:andrea.borruso@ondata.it
Andrea Borruso, @aborruso | Associazione onData