Autor: Nicolás Fernández Cinquepalmi
Breve descripción: En el presente trabajo se pide analizar un conjunto de datos brindados por los profesores del curso, con el fin obtener las posibles relaciones entre ellos, y luego mostrar gráficos relacionados mediante la utilización de Python o ROOT.
Los datos a utilizar en este trabajo fueron extraídos de la siguiente fuente:
Paso 1: Comenzamos con importar los módulos necesarios para analizar los datos.
import pandas as pd
import math
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from collections import OrderedDict
from scipy.optimize import curve_fit
import math
import matplotlib.mlab as mlab
import scipy
from scipy.stats import norm
Paso 2: Importamos el archivo .csv y lo almacenamos como Data Frame en la variable "datos".
file = '/home/student/ejercicios-clase-08-datos/data-used/data_analisis.csv'
datos = pd.read_csv(file,header=0)
datos
Paso 3: Separamos los valores correspondientes a las columnas 'peso' y 'tamano' por origen, y obtenemos el total.
pesoalem = 0
pesoingla = 0
pesoita = 0
pesofra = 0
pesolistalem = []
pesolistingla = []
pesolistita = []
pesolistfra = []
for i in range(len(datos.individuo)):
if datos.origen[i]=='Alemania':
pesoalem += datos.peso[i]
pesolistalem.append(datos.peso[i])
elif datos.origen[i]=='Inglaterra':
pesoingla += datos.peso[i]
pesolistingla.append(datos.peso[i])
elif datos.origen[i]=='Italia':
pesoita += datos.peso[i]
pesolistita.append(datos.peso[i])
elif datos.origen[i]=='Francia':
pesofra += datos.peso[i]
pesolistfra.append(datos.peso[i])
print('El peso total por país de origen es: ')
print('')
print('Ale, Ingla, Ita, Fra')
pesoalem, pesoingla, pesoita, pesofra
print('')
print('Alemania: ', pesolistalem)
print('Inglaterra: ', pesolistingla)
print('Italia: ', pesolistita)
print('Francia: ', pesolistfra)
tamalem = 0
tamingla = 0
tamita = 0
tamfra = 0
tamlistalem = []
tamlistingla = []
tamlistita = []
tamlistfra = []
for i in range(len(datos.individuo)):
if datos.origen[i]=='Alemania':
tamalem += datos.tamano[i]
tamlistalem.append(datos.tamano[i])
elif datos.origen[i]=='Inglaterra':
tamingla += datos.tamano[i]
tamlistingla.append(datos.tamano[i])
elif datos.origen[i]=='Italia':
tamita += datos.tamano[i]
tamlistita.append(datos.tamano[i])
elif datos.origen[i]=='Francia':
tamfra += datos.tamano[i]
tamlistfra.append(datos.tamano[i])
print('El tamano total por país de origen es: ')
print('')
print(' Ale, Ingla, Ita, Fra')
tamalem, tamingla, tamita, tamfra
print('')
print('Alemania: ', tamlistalem)
print('Inglaterra: ', tamlistingla)
print('Italia: ', tamlistita)
print('Francia: ', tamlistfra)
Paso 4: Obtenemos las cantidades totales de individuos por país de origen.
cantalem = 0
cantingla = 0
cantita = 0
cantfra = 0
for i in range(len(datos.individuo)):
if datos.origen[i]=='Alemania':
cantalem += 1
elif datos.origen[i]=='Inglaterra':
cantingla += 1
elif datos.origen[i]=='Italia':
cantita += 1
elif datos.origen[i]=='Francia':
cantfra += 1
print('El peso total por país de origen es: ')
print('')
print('Ale, Ingla, Ita, Fra')
cantalem, cantingla, cantita, cantfra
Paso 5: Calculamos los valores promedios de peso y tamano por país.
print('El peso promedio en Alemania es: ', "{:.2f}".format(pesoalem/cantalem))
print('El peso promedio en Inglaterra es: ', "{:.2f}".format(pesoingla/cantingla))
print('El peso promedio en Italia es: ', "{:.2f}".format(pesoita/cantita))
print('El peso promedio en Francia es: ', "{:.2f}".format(pesofra/cantfra))
print('')
print('El tamaño promedio en Alemania es: ', "{:.2f}".format(tamalem/cantalem))
print('El tamaño promedio en Inglaterra es: ', "{:.2f}".format(tamingla/cantingla))
print('El tamaño promedio en Italia es: ', "{:.2f}".format(tamita/cantita))
print('El tamaño promedio en Francia es: ', "{:.2f}".format(tamfra/cantfra))
Paso 6: Con el fin de tener una mejor visualización de la distribución de individuos por país de origen, realizamos un gráfico de torta.
data = [cantalem, cantingla, cantita, cantfra]
pais = ['Alemania','Inglaterra','Italia','Francia']
fig, ax = plt.subplots()
g = ax.pie(data, labels = pais, colors = ['SteelBlue','Gold','LightCoral','LimeGreen'],
shadow=True, explode = (0.1,0.1,0.1,0.1), autopct = '%1.2f%%')
plt.show
Paso 7: Realizamos histogramas con los pesos y tamanos por país de origen con el objetivo de visualizar la disperción de los valores en cada uno.
fig, axs = plt.subplots(1, 4, sharey=True, tight_layout=True)
bins = 8
axs[0].hist(pesolistalem, bins)
axs[0].set_title('Peso Alemania')
axs[0].set_xlabel("{:.2f}".format(np.mean(pesolistalem)))
axs[1].hist(pesolistingla, bins)
axs[1].set_title('Peso Inglaterra')
axs[1].set_xlabel("{:.2f}".format(np.mean(pesolistingla)))
axs[2].hist(pesolistita, bins)
axs[2].set_title('Peso Italia')
axs[2].set_xlabel("{:.2f}".format(np.mean(pesolistita)))
axs[3].hist(pesolistfra, bins)
axs[3].set_title('Peso Francia')
axs[3].set_xlabel("{:.2f}".format(np.mean(pesolistfra)))
fig, axs = plt.subplots(1, 4, sharey=True, tight_layout=True)
bins = 8
axs[0].hist(tamlistalem, bins)
axs[0].set_title('Tam. Alemania')
axs[0].set_xlabel("{:.2f}".format(np.mean(tamlistalem)))
axs[1].hist(tamlistingla, bins)
axs[1].set_title('Tam. Inglaterra')
axs[1].set_xlabel("{:.2f}".format(np.mean(tamlistingla)))
axs[2].hist(tamlistita, bins)
axs[2].set_title('Tam. Italia')
axs[2].set_xlabel("{:.2f}".format(np.mean(tamlistita)))
axs[3].hist(tamlistfra, bins)
axs[3].set_title('Tam. Francia')
axs[3].set_xlabel("{:.2f}".format(np.mean(tamlistfra)))
Paso 8: Además de utizar python, utilizaremos ROOT con fines de aprendizaje. Comenzamos importando los módulos necesarios.
import ROOT
import sys
from ROOT import TCanvas, TPad, TFile, TPaveLabel, TPaveText
from ROOT import gROOT
%jsroot on
!pip3 install root-pandas
import root_pandas
Paso 9: Realizamos un análisis sobre los datos en general, es decir, sin considerar el país de origen. Primero cargamos el archivo .csv como Data Frame y luego lo visualizamos.
file = '/home/student/ejercicios-clase-08-datos/data-used/data_analisis.csv'
df1 = pd.read_csv(file,header=0)
df1
Paso 10: Realizamos la conversión 'Data Frame - .root'
df1.to_root('/home/student/ejercicios-clase-08-datos/data-used/data_analisis.root', key='mytree')
f = ROOT.TFile.Open('/home/student/ejercicios-clase-08-datos/data-used/data_analisis.root')
Paso 11: Creamos una canvas para luego poder graficar nuestros histogramas.
canvas = ROOT.TCanvas("Canvas","a first way to plot a variable",800,600)
tree = f.Get("mytree")
tree.GetEntries()
Paso 12: Creamos un histograma con la Distribución de Pesos y le ajustamos una curva gaussiana.
hist = ROOT.TH1F("Variable: Peso","Distribucion de Pesos; Valor de Peso ; Events ",8,0,45)
for event in tree:
hist.Fill(tree.peso)
print("Done!")
hist.SetFillColor(ROOT.kBlue-10)
canvas.Draw()
hist.Fit("gaus");
Paso 13: Creamos un histograma con la Distribución de Tamanos y le ajustamos una curva gaussiana.
hist = ROOT.TH1F("Variable: Tamano","Distribucion de Tamanos; Valor de Tamano ; Events ",8,10,66)
for event in tree:
hist.Fill(tree.tamano)
print("Done!")
hist.SetFillColor(ROOT.kBlue-10)
canvas.Draw()
hist.Fit("gaus");
Paso 14: Realizamos un análisis particular sobre los datos refentes a los individuos de origen Alemán.
file1 = '/home/student/ejercicios-clase-08-datos/data-used/data_analisis1.csv'
df2 = pd.read_csv(file1,header=0)
df2
df2.to_root('/home/student/ejercicios-clase-08-datos/data-used/data_analisis1.root', key='mytree1')
f = ROOT.TFile.Open('/home/student/ejercicios-clase-08-datos/data-used/data_analisis1.root')
canvas1 = ROOT.TCanvas("Canvas1","a first way to plot a variable",800,600)
tree1 = f.Get("mytree1")
tree1.GetEntries()
Paso 15: Creamos un histograma con la Distribución de Pesos y le ajustamos una curva gaussiana.
hist1 = ROOT.TH1F("Variable: Peso","Distribucion de Pesos Alemania; Valor de Peso ; Events ",8,0,45)
for event in tree1:
hist1.Fill(tree1.peso)
print("Done!")
hist1.SetFillColor(ROOT.kBlue-10)
canvas1.Draw()
hist1.Fit("gaus");
Paso 16: Creamos un histograma con la Distribución de Tamanos y le ajustamos una curva gaussiana.
hist1 = ROOT.TH1F("Variable: Tamano","Distribucion de Tamanos Alemania; Valor de Tamano ; Events ",8,10,66)
for event in tree1:
hist1.Fill(tree1.tamano)
print("Done!")
hist1.SetFillColor(ROOT.kBlue-10)
canvas1.Draw()
hist1.Fit("gaus");