Importare dati da svariate fonti con Python e Pandas

import dati con pandas

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 a 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 sotto-documenti. 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 sotto-documenti e gli array sono importati come delle singole colonne di tipo stringa.

I sotto-documenti 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

corso di analisi dei dati
Visita la mia piattaforma didattica realizzata con l’obiettivo di creare un percorso unico e completo nella formazione per Data Analyst.

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

In questo articolo vediamo il caso didattico più semplice in cui ci colleghiamo a un Database di MongoDB installato sulla nostra macchina in locale senza nessuna impostazione di sicurezza. Nei casi reali la connessione al DB deve essere fatta nel rispetto di quelle che sono le policy di sicurezza aziendali. In generale vi sconsiglio sempre di scrivere in chiaro utenze e password nello script di Python, ma ad esempio potremmo importare questi dati da un file di configurazione correttamente protetto sul file system.

from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017/")

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

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

Ecco il link con la documentazione di pymongo https://pymongo.readthedocs.io/en/stable/tutorial.html

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 in alto
Torna su