A explorar los datos del LHC

Hoy vamos a combinar dos conceptos que vimos ayer:

  • Abrir bases de datos con pandas
  • Visualizar datos mediante histogramas

Ademas veremos como:

  • Utilizar scatter plots 2D
  • Box plots

Nuestra meta:
Pensar como classificar un datos como boson (s) o ruido (b)

Primero las librerias

Instalaremos una libreria (seaborn) para visualizacion avanzada usando el comando en su terminal (anaconda prompt o terminal):

conda install seaborn

In [ ]:
import pandas as pd
import numpy as np # modulo de computo numerico
import matplotlib.pyplot as plt # modulo de graficas
# esta linea hace que las graficas salgan en el notebook
import seaborn as sns
%matplotlib inline

Datos LHC

Hemos preparado una version mini de los datos, que funcionara bastante bien. Los datos estan en formato CSV (Que siginifica CSV?)


In [ ]:
df = pd.read_csv('files/mini-LHC.csv')
df.head()

Utilidades:

Podemos accesar informacion de la base de datos (DataFrame) mediante las siugientes formas:

Tamaño

Para eso podemos usar len() (longitud) y .shape (forma).


In [ ]:
print(df.shape)

In [ ]:
print(len(df))

Columnas


In [ ]:
print(df.columns)

Y si quiero imprimir columnas, una por una?

Usamos un for!


In [ ]:
for col in df.columns:
    print(col)

Recuerda:
Para accesar una columna usamos su nombre


In [ ]:
df['PRI_met']

Dividir datos

Finalmente vamos dividir los datos entre los que son bosones (s) y los que no. Cada uno sera una base de datos seprada


In [ ]:
boson_df = df[df['Label']=='s']
ruido_df = df[df['Label']=='b']

Preguntas:

  • Cuantos Bosones tenemos?
  • Y cuantos de ruido?

In [ ]:

Visualizar!

Ahora que sabemos accesar a los datos, vamos a visualizar los datos.

Como ejemplo usaremos la propiedad fisica DER_mass_MMC que de acuerdo al documento de datos dice:

DER_mass_MMC: The estimated mass mH of the Higgs boson candidate, obtained through a prob- abilistic phase space integration

Es decir la masa estimada de la particula.

BoxPlot

Con los boxplots, vemos el minimo, maximo, promedio y una caja donde esta concentrado la mayoria de los datos (75%).

Con boxplots usamos todos los datos no divididos (df)..le decimos quien es esta en el eje x (Label) y quien en el eje y que puede ser cualquier propiedad fisica.


In [ ]:
sns.boxplot(x="Label", y="DER_mass_MMC",data=df)
plt.show()

Histogramas

Usando la funcion sns.distplot, esta combina la funcionalidad de un histograma y ademas trata de ajustar una curva a los datos.


In [ ]:
sns.distplot(boson_df["DER_mass_MMC"],label='boson')
sns.distplot(ruido_df["DER_mass_MMC"],label='ruido')
plt.ylabel('Frecuencia')
plt.legend()
plt.title("Distribucion de DER_mass_MMC")
plt.show()

Scatter plots

Con scatter plots podemos ver la relacion de dos variables, graficando puntos en una dimension (X) y luego en otra (Y).

En este caso escojemos una variable extra PRI_tau_pt que segun la documentacion representa

PRI_tau_pt The transverse momentum $\sqrt{p^2_x + p^2_y}$ of the hadronic tau.

Es decir el momento transversal del tau hadronico..algo loco

Probemoslo:


In [ ]:
ejeX = "DER_mass_MMC"
ejeY = "PRI_tau_pt"
plt.scatter(df[ejeX],df[ejeY],alpha=0.5)
plt.xlabel(ejeX)
plt.ylabel(ejeY)
plt.show()

Ven algun problema ?

En este caso tiene sentido visualizar los datos separados...asi tenemos una mejor idea


In [ ]:
ejeX = "DER_mass_MMC"
ejeY = "PRI_tau_pt"
plt.scatter(boson_df[ejeX],boson_df[ejeY],c='r',alpha=0.1,s=20,label='boson',lw=0)
plt.scatter(ruido_df[ejeX],ruido_df[ejeY],c='g',alpha=0.1,s=10,label='ruido',lw=0)
plt.xlabel(ejeX)
plt.ylabel(ejeY)
plt.legend()
plt.show()

Actividad: Como classificar el higgs?

Juntarse en grupos de 6, y juntos exploraran todas las variables que hay.

Que hacer:

  • Usar las herramientas que ya vimos para visualizar las variables, en una dimension y en dos.

Discutir:

  • Que variables son las mas imporates visualmente?
  • Como separariamos al boson visualmente?
  • Que retos ven? Es decir que dificultades hay con este enfoque?
  • Como las podrian resolver?
  • Por que es necesario classificar el boson?

In [ ]: