In [1]:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Librerías

import matplotlib
from scipy import misc
from scipy import stats
from scipy import special
import pylab as plt
import numpy as np
import math

%matplotlib inline

font = {'weight' : 'bold',
        'size'   : 16}

matplotlib.rc('font', **font)

In [2]:
from PIL import Image
import PIL.ImageOps    

image = Image.open('stars.jpg')

inverted_image = PIL.ImageOps.invert(image)

inverted_image.save('stars_inv.png')


Ima = misc.imread('stars_inv.png') # Se lee la imagen como matriz en escala de 8 bit
plt.rcParams['figure.figsize'] = 20, 6 # para modificar el tamaño de la figura
Imab = Ima[100:500,100:700,1] # La imagen original tenía tres canales (RGB); se elige un canal y se recorta

plt.figure(2)
plt.imshow(Imab, cmap='gray')


Out[2]:
<matplotlib.image.AxesImage at 0x7f110e68f7b8>

In [3]:
plt.rcParams['figure.figsize'] = 18, 15 # para modificar el tamaño de la figura
fil, col = Imab.shape # número de filas y columnas de la imagen
numlado = 10# Número de imágenes por lado
contar = 1
plt.figure(5)
for enfil in range(1,numlado+1):
    for encol in range(1,numlado+1):
        plt.subplot(numlado,numlado,contar)
        plt.imshow(Imab[(enfil-1)*np.int(fil/numlado):enfil*np.int(fil/numlado), \
                        (encol-1)*np.int(col/numlado):encol*np.int(col/numlado)],cmap='gray')
        frame1 = plt.gca()
        frame1.axes.get_yaxis().set_visible(False)
        frame1.axes.get_xaxis().set_visible(False)
        contar = contar + 1



In [11]:
########ENSAYO 1###########################
# Para el caso de 10x10 imágenes en gal se presentan el número de estrellas contadas

est1 = np.array([17., 15., 10., 15., 13., 17., 14., 13., 13., 9., \
                8., 14., 11., 15., 14., 10., 14., 14., 12., 13., \
                13., 15., 14., 13., 14., 14., 14., 12., 9., 14., \
                13., 16., 18., 12., 16., 14., 12., 14., 12., 12., \
                20., 11., 19., 18., 16., 15., 18., 12., 11., 17., \
                13., 13., 13., 16., 12., 11., 17., 16., 13., 19., \
                20., 12., 12., 11., 13., 14., 15., 13., 11., 10., \
                17., 10., 19., 10., 9., 19., 13., 14., 17., 15., \
                16., 14., 10., 12., 7., 11., 12., 16., 15., 15., \
                12., 16., 12., 13., 13., 16., 16., 8., 15., 14.])

la1 = np.mean(est1) # Valor promedio del conjunto de datos

# Distribución del conjunto de datos. La primera fila es el número de estrellas, la segunda es el número de veces que
# se repite dicho número de estrellas
distriEst1 = np.array([[0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 30.],
                      [0., 0., 0., 0., 0., 0., 0., 1., 1., 3., 6., 7., 14., 16., 16., 10., 10., 6., 4., 4., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

print('Valor promedio del conjunto de datos = %.2f' % la)
plt.figure(figsize=(16,9))
plt.plot(distriEst1[0,:],distriEst1[1,:]/est1.size,'r*',ms=10,label='Distribucion datos con promedio %.1f' % la)
plt.legend()
plt.xlabel('Numero de estrellas en el intervalo')
plt.ylabel('Rata de ocurrencia')
plt.grid()


Valor promedio del conjunto de datos = 12.11

In [12]:
########ENSAYO 2###########################
# Para el caso de 10x10 imágenes en gal se presentan el número de estrellas contadas
est2 = np.array([14., 13., 9., 12., 13., 15., 17., 14., 14., 10., \
                7., 13., 15., 16., 10., 11., 15., 13., 13., 12., \
               16., 15., 13., 13., 14., 13., 12., 10., 9., 12., \
               11., 14., 14., 12., 12., 13., 10., 13., 12., 12., \
               17., 9., 15., 13., 15., 12., 14., 10., 9., 16., \
               8., 9., 12., 11., 8., 11., 11., 13., 13., 12., \
               18., 11., 11., 7., 12., 14., 17., 10., 12., 9., \
               15., 7., 18., 9., 7., 13., 9., 10., 17., 13., \
               16., 13., 10., 12., 7., 7., 11., 15., 14., 12., \
               11., 13., 11., 11., 10., 11., 11., 8., 11., 14.])

la2 = np.mean(est) # Valor promedio del conjunto de datos

# Distribución del conjunto de datos. La primera fila es el número de estrellas, la segunda es el número de veces que
# se repite dicho número de estrellas
distriEst2 = np.array([[0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 30.],
                      [0., 0., 0., 0., 0., 0., 0., 6., 3., 9., 9., 14., 15., 17., 10., 8., 4., 4., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

print('Valor promedio del conjunto de datos = %.2f' % la)
plt.figure(figsize=(16,9))
plt.plot(distriEst2[0,:],distriEst2[1,:]/est2.size,'r*',ms=10,label='Distribucion datos con promedio %.1f' % la)
plt.legend()
plt.xlabel('Numero de estrellas en el intervalo')
plt.ylabel('Rata de ocurrencia')
plt.grid()


Valor promedio del conjunto de datos = 12.11

In [17]:
num = 12. # Número de estrellas que se espera encontrar
prob1 = (la**num*np.exp(-la1)/math.factorial(num))*100 # Probabilidad de encontrar dicho número de estrellas

x = np.arange(0,30) # rango de datos: número de estrellas
histP1 = stats.poisson.pmf(x, la1) # función de probabilidad de Poisson
ProbP1 = (np.sum(histP1[0:int(num)+1]))*100 # Probabilidad acumulada

print('Promedio de estrellas en el área estudiada = %.2f , caso 1' % la1)
print('La probabilidad de que se observe en la imagen del espacio profundo %d estrellas es = %.1f%% caso1' % (num,prob1))
print('Probabilidad de observar hasta %d estrellas = %.1f%%, caso1' %(num,ProbP1))


Promedio de estrellas en el área estudiada = 13.69 , caso 1
La probabilidad de que se observe en la imagen del espacio profundo 12 estrellas es = 2.4% caso1
Probabilidad de observar hasta 12 estrellas = 39.0%, caso1

In [18]:
num = 12. # Número de estrellas que se espera encontrar
prob2 = (la**num*np.exp(-la2)/math.factorial(num))*100 # Probabilidad de encontrar dicho número de estrellas

x = np.arange(0,30) # rango de datos: número de estrellas
histP2 = stats.poisson.pmf(x, la2) # función de probabilidad de Poisson
ProbP2 = (np.sum(histP2[0:int(num)+1]))*100 # Probabilidad acumulada

print('Promedio de estrellas en el área estudiada = %.2f , caso 2' % la2)
print('La probabilidad de que se observe en la imagen del espacio profundo %d estrellas es = %.1f%% caso2' % (num,prob2))
print('Probabilidad de observar hasta %d estrellas = %.1f%%, caso 2' %(num,ProbP2))


Promedio de estrellas en el área estudiada = 12.11 , caso 2
La probabilidad de que se observe en la imagen del espacio profundo 12 estrellas es = 11.4% caso2
Probabilidad de observar hasta 12 estrellas = 56.3%, caso 2

In [20]:
plt.figure(figsize=(16,9))
plt.plot(x, histP1, 'bo--', ms=8, label='Distribucion de Poisson con $\lambda=$ %.1f c1' % la1)
plt.plot(x, histP2, 'go--', ms=8, label='Distribucion de Poisson con $\lambda=$ %.1f c2' % la2)
plt.plot(distriEst1[0,:],distriEst1[1,:]/est1.size,'r*',ms=10,label='Conjunto de datos con promedio %.1f c1' % la1)
plt.plot(distriEst2[0,:],distriEst2[1,:]/est2.size,'k*',ms=10,label='Conjunto de datos con promedio %.1f c2' % la2)
plt.xlabel('Numero de estrellas (sucesos)')
plt.ylabel('Rata de ocurrencia')
plt.legend()
plt.grid()



In [7]:
from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di # Example: di.display_html('<h3>%s:</h3>' % str, raw=True)

# This line will hide code by default when the notebook is exported as HTML
di.display_html('<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle();}});</script>', raw=True)

# This line will add a button to toggle visibility of code blocks, for use with the HTML export version
di.display_html('''<button onclick="jQuery('.input_area').toggle(); jQuery('.prompt').toggle();">Pulse para codigo</button>''', raw=True)