Importare dati da svariate fonti con Python e Pandas

import dei dati

L’import dei file è il primo fondamentale step nel processo più generale di analisi dei dati. In questo articolo vedremo come acquisire con il linguaggio di programmazione Python i dati provenienti da svariate fonti in una struttura nota come DataFrame. Per far ciò utilizzeremo principalmente la nota libreria Pandas.

 

I Dataframe di Pandas

I DataFrame sono delle strutture dati simili alle tabelle dei database relazionali in cui i dati sono organizzati in righe e colonne. Alle colonne è associato un tipo che svolge il ruolo cruciale di vincolare le informazioni inseribili in quella colonna e i calcoli ad essa applicabili. A differenza dei database relazionali è presente il concetto di ordine associato alle righe del DataFrame. Possiamo infatti parlare in generale di prima riga o seconda riga senza specificare una clausola Order By. Inoltre ogni riga ha un nome (non per forza univoco) noto come indice della riga. In questo articolo vedremo in particolare come creare un Dataframe a partire da dati presenti in:

  • file csv;
  • file json;
  • file excel;
  • il database relazionale Microsoft SQL Server;
  • il database documentale Mongodb.

 

Import di file csv

I file con estensione .csv sono particolari file di testo caratterizzati dalla presenza di caratteri delimitatori per separare le informazioni di una colonna da un’altra. CSV è l’acronimo di Comma Separated Value, tuttavia, a dispetto del nome che farebbe presagire l’uso della virgola, molto spesso troviamo file .CSV con separatori diversi, come il “punto e virgola” o il “tab”.

Vi consiglio di aprire sempre i file .csv con un editor di testo come il semplice “Blocco Note” e di evitare, almeno in un primo momento, l’utilizzo di Excel (che invece è proposto nella maggior parte dei sistemi operativi come software di default per l’apertura di file con questa estensione).

esempio file csv

Per creare un Dataframe a partire dai dati contenuti in un “.csv” possiamo utilizzare il metodo read_csv della libreria Pandas, come in questo esempio:

import pandas as pd
path = "C:\\Desktop\\Files\\"
clienti = pd.read_csv(filepath_or_buffer = path + "Clienti.csv",
                      sep = ";", 
                      header = 0)

Il metodo read_csv è altamente personalizzabile disponendo di un numero elevatissimo di parametri opzionali. A questo link trovate la documentazione ufficiale https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html.

Vi riporto qui quelli che utilizzo più frequentemente:

  • sep è il carattere che delimita le colonne all’interno del file csv come la virgola o il punto e virgola;
  • header indica in che posizione si trova la riga di intestazione. Se il file non ha intestazione occorre indicare il valore None;
  • names per assegnare i nome alle colonne in caso in cui l’intestazione sia assente (o anche per rinominarle nel caso in cui l’intestazione sia presente);
  • usecols per specificare quali colonne importare;
  • parse_dates per indicare quali colonne creare con il tipo date (non è detto che ciò avvenga effettivamente , dipende dal formato della data presente nel file di input);
  • decimal per indicare il separatore dei decimali;
  • nrows per indicare il numero massimo di righe da importare;
  • skiprows per saltare alcune righe all’inizio.

È veramente stupefacente come per pandas non faccia nessuna differenza se il file sia salvato sul nostro pc in locale o direttamente sul web, ad esempio in un repository Github.

 

Acquisire dati in formato JSON

L’utilizzo del formato JSON diventa di anno in anno più diffuso, arrivando ormai a soppiantare il vecchio standard XML. I file JSON permettono di rappresentare strutture dati più complesse di quelle archiviabili nei file csv.

Le “righe” di un file json sono note come documenti, sono organizzate in coppie di chiavi e valori e possono contenere informazioni strutturate come array e sottodocumenti. Inoltre all’interno di uno stesso file possono coesistere documenti con un elenco di chiavi differenti.

esempio file json

Il metodo più semplice per acquisire un file JSON è utilizzare il metodo read_json di Pandas. Se da un lato la dinamicità delle chiavi è indirizzata correttamente creando in automatico tante colonne per ogni chiave presente nel file, dall’altro i sottodocumenti e gli array sono importati come delle singole colonne di tipo stringa.

I sottodocumenti sono gestibili importando prime il file con la libreria json e in seguito creando il DataFrame con il metodo json_normalize di Pandas.

import json
f = open(path + "Clienti2.json",
         "r") 
data_json = json.load(f)
f.close() 
clienti2_j = pd.json_normalize(data_json)

Per la gestione delle chiavi di tipo array occorrerà invece valutare di volta in volta la soluzione migliore. Potete approfondire in questo articolo https://towardsdatascience.com/how-to-convert-json-into-a-pandas-dataframe-100b2ae1e0d8

 

Import di file Excel

Il metodo read_excel di Pandas ha un funzionamento molto simile al read_csv spiegato in precedenza. Non ci soffermeremo quindi troppo su questo metodo, mi limito a menzionare i parametri più importanti:

  • io per specificare il file da acquisire;
  • sheet_name per specificare il foglio del file da cui vogliamo prendere le informazioni;
  • usecols dove possiamo indicare le colonne da importare con una sintassi analoga a quella utilizzata per i range di Excel (ad esempio possiamo scrivere “A:D,F” per importare tutte le colonne dalla A alla D e la F);
  • skiprows per saltare delle righe all’inizio del foglio e quindi selezionare solo particolari celle.

 

Libreria Pymongo per connettere Python a MongoDb

Vediamo infine un esempio di utilizzo della libreria Pymongo per interrogare e interagire direttamente su Python con il database documentale MongoDb.

schermata mongo db compass

Anche in questo caso dobbiamo creare una connessione come primo step.

from pymongo import MongoClient
client = MongoClient(
"mongodb://localhost:27017/?readPreference=primary&appname=MongoDB%20Compass&ssl=false")

A questo punto possiamo scegliere il particolare database con cui vogliamo interfacciarci

db = client.CorsoMongoDb

e interrogare le collection tramite la specifica sintassi di MongoDb. Ad esempio, per estrarre tutti i documenti della collection Clienti dove la chiave RegioneResidenza è valorizzata con Piemonte, scriveremo

db.Clienti.find({"RegioneResidenza ":"Nicola"});

Un modo per creare un Dataframe a partire da questi dati è:

  • trasformare l’output del comando db.Clienti.find({“RegioneResidenza “:”Nicola”})  in lista tramite la funzione nativa di Python list;
  • trasformare la lista in dataframe tramite il metodo DataFrame di Pandas.

Ad esempio potremmo scrivere

dataframe_from_mongo = \
pd.DataFrame(list(db.Clienti.\
find({"RegioneResidenza":"Nicola"})))

Vi lascio il link per approfondire la libreria pymongo https://pymongo.readthedocs.io/en/stable/tutorial.html e  il mio corso per analizzare i dati con MongoDb https://www.yimp.it/corso-mongodb-database-non-relazionale/.

 

Import di un file fasta strutturato con Python

In questa video lezione studiamo come importare su Python un file di testo con una determinata struttura.  Si tratta di un particolare file fasta, un formato molto comune nella bioinformatica. Non essendoci un metodo specifico di pandas, scriveremo interamente l’algoritmo utilizzando le strutture di basi di Python come liste e cicli for.

Continua a imparare

Torna su