# -*- coding: utf-8 -*-
"""Aula_python_7.ipynb

Automatically generated by Colaboratory.

Original file is located at
    https://colab.research.google.com/drive/1yEW5lTKSQg02vDReC_phFVqU1UYIGWUc

# Histogramas
Histogramas são ferramentas fundamentais de análise em várias áreas do conhecimento. Na Física, são usados para investigar variáveis ditas aleatórias.
Estas variáveis são associadas a problemas onde a abordagem mais adequada é a estatística. Os histogramas representam as distribuições destas variáveis.

A Mecânica Quântica, que estuda a natureza em nível microscópico, lida com distribuições de variáveis aleatórias em sua formulação de base.

Na Física Clássica, várias problemas são mais facilmente tratados usando-se ferramentas estatísticas.
Por exemplo, para um número suficientemente grande de jogadas de um dado ideal, o número de vezes que se esperam os números 1,2,3,4,5 e 6 deve ser semelhante. O gráfico do número de vezes que cada um desses números ocorreu é o histograma da distribuição de números desse dado.

Qual o resultado esperado? Como fazer esse gráfico?
"""

#Iniciamos "jogando" nosso dado
# Para isso vamos usar o pacote random que contém o gerador randint
import random as rand
N = 1800
z = list([rand.randint(1,6) for i in range(N)]) #a função randint(1,6) gera os números no intervalo de interesse.
#print(z) # a lista z contém os valores obtidos após N "jogadas"

#Para contar a ocorrência de cada número da lista z, vamos criar um array de numpy com 6 posições
import numpy as np
hist = np.zeros(6)
print(hist)

#Um algoritmo simples para contar o número de ocorrências de cada valor consiste
# em usar os próprios números da lista z como índices do array hist. A cada ocorrência de
# um número em z, o valor de hist correspondente àquele índice-1 (lembre que os índices começam em zero) é incrementado de 1.
hist = np.zeros(6)

for i in z:
    hist[i-1]+=1

print(z)
print(hist)
print(np.sum(hist))

#fazendo o histograma com barras verticais
import matplotlib.pyplot as plt

x = np.arange(1,7) #colocando os valores que irão no eixo x no gráfico do histograma

plt.bar(x,hist)
plt.show()

#usando diretamente a função do python
plt.hist(z,bins=6,range=(1,7), align='left')

plt.show()

"""Indo além: como poderíamos adaptar o algoritmo 'manual' acima para determinar o histograma com uma divisão de bins diferente (por exemplo, 3 bins em vez de 6 no caso dos dados)?

Indo mais além: como seria o histograma da soma dos números produzidos por dois dados? Esse é o objetivo da TAREFA no Moodle (para entregar até dia 23/09)
"""