Guida completa: matplotlib.pyplot.plot Full docs (numpy è parte della suite scipy) numpy Per chi viene da matlab: numpy for matlab users
Articolo su DataCamp: Pandas Tutorial: DataFrames in Python
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
Un modo utile è importare i dati usando numpy (perché fa le conversioni numeriche perfettamente) e poi creare il dataframe. Immaginiamo un tipico ascii, ad esempio testbeam SELDOM 2018. In axial_example ci sono 164 file del run 300097. Nome file: run300097_multi_000062.dat
Il file contiene 50 colonne:
folder = 'axial_example/'
filename = 'run300097_multi_000062.dat'
data = np.loadtxt(folder+filename)
In pratica abbiamo importato i dati in una grande "matrice"
print(data)
print(data[0])
Diamo nomi alle colonne creando una lista di nomi
nomi=[]
for i in range(4):
nomi.append('tele%d'%i)
for i in range(2):
nomi.append('bc%d'%i)
print(nomi)
for i in range(12):
nomi.append('clu%d'%i)
print(nomi)
for v in ['baseline', 'ph', 'time']:
for i in range(8):
nomi.append('%s%d'%(v,i))
print(nomi)
for i in range(5):
nomi.append('gonio%d'%i)
print(nomi)
nomi += ['step', 'event_n', 'event_time']
print('La lista nomi ha lunghezza %d'%len(nomi))
df = pd.DataFrame(data, columns=nomi)
df.head(10)
Descrizione
df.describe()
# histograms
for i in range(4):
plt.subplot(221+i)
plt.hist(df[nomi[i]],100)
clean up wrong telescope entries
df=df[(df.tele0>-5) & (df.tele1>-5) & (df.tele2>-5) & (df.tele3>-5)]
df.head()
Adding aliases (new dataframe columns)
df['teleDx'] = df['tele2'] - df['tele0']
df['teleDy'] = df['tele3'] - df['tele1']
df['divx'] = df['teleDx']/18.44
df['divy'] = df['teleDy']/18.44
df.tail()
# histograms
for i in range(4):
plt.subplot(221+i)
plt.hist(df['tele%i'%i],100)
plt.figure(figsize=(12,5))
for i in range(2):
plt.subplot(121+i)
plt.hist2d(df['tele%d'%i],df['tele%d'%(i+1)],100)
Pausa. Abbiamo aperto un solo file. Creare il dataframe è un task ripetuto su tanti file, tante volte.
Vediamo come impacchettare tutto in un'unica funzione.