Taller II Coreis Python 13112009

2,518 views

Published on

Taller de Python I dictado en el COREIS LIMA 2009.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,518
On SlideShare
0
From Embeds
0
Number of Embeds
445
Actions
Shares
0
Downloads
72
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Por ejemplo, dos autos del mismo modelo, color, motor, salidos de la misma línea de producción el mismo día no dejan de ser dos autos diferentes, por más que su conjunto de atributos y sus valores sean iguales. La única posibilidad de que dos objetos sean iguales es que sean el mismo objeto.
  • http://www.flickr.com/photos/ryanricketts/2295726918/sizes/o/
  • http://www.flickr.com/photos/twatson/2854156629/sizes/l/
  • Taller II Coreis Python 13112009

    1. 1. Taller II Python Carlos Mauro Cárdenas Fernández http://unimauro.blogspot.com http://www.twitter.com/unimauro [email_address]
    2. 2. Temario <ul><li>Python Ciencias
    3. 3. Python Mysql, PostgreSql
    4. 4. Python Web, Django,
    5. 5. Lenguaje Go </li></ul>
    6. 6. Python Ciencias
    7. 7. http://www.scipy.org/SciPy
    8. 8. Thumbnails con PIL import os, sys, Image size = 128, 128 for infile in sys.argv[1:]: outfile = os.path.splitext(infile)[0] + &quot;-thumbnail.jpg&quot; try: im = Image.open(infile) im.thumbnail(size) im.save(outfile, &quot;JPEG&quot;) except IOError: print &quot;no se puede con&quot;, infile
    9. 9. https://cirl.berkeley.edu/view/Py4Science
    10. 10. Características deseables de un lenguaje para uso en ciencia. <ul><li>Libre y gratuito.
    11. 11. Fácil de leer.
    12. 12. Fácil de aprender.
    13. 13. Tipo de datos versátiles (alto nivel).
    14. 14. Biblioteca completa (incorporada y disponible externamente).
    15. 15. Suficientemente rápido </li></ul>
    16. 16. Matemática <ul><li>NumPy: </li></ul><ul><ul><li>Manejo de matrices N-dimensionales.
    17. 17. Funciones algebra lineal
    18. 18. Transformaciones de Fourier
    19. 19. Números aleatorios sofisticados
    20. 20. Herramientas para integrar código C++ y Fortran </li></ul></ul><ul><li>Matplotlib: “framework para crear gráficos científicos similares a las herramientas provistas por Matlab”.
    21. 21. Chaco: 2-Dimensional Plotting
    22. 22. Interfase: GNUPLOT, R, MATLAB. </li></ul>
    23. 23. t200.py import numpy as np import matplotlib.pyplot as plt import matplotlib.mlab as mlab mu, sigma = 100, 15 x = mu + sigma * np.random.randn(10000) fig = plt.figure() ax = fig.add_subplot(111) n, bins, patches = ax.hist(x, 50, normed=1, facecolor='green', alpha=0.75) bincenters = 0.5*(bins[1:]+bins[:-1]) y = mlab.normpdf( bincenters, mu, sigma) l = ax.plot(bincenters, y, 'r--', linewidth=1) ax.set_xlabel('Smarts') ax.set_ylabel('Probability') ax.set_xlim(40, 160) ax.set_ylim(0, 0.03) ax.grid(True) plt.show()
    24. 24. t200.py
    25. 25. from matplotlib import rcParams rcParams['text.usetex']=True rcParams['text.latex.unicode']=True from numpy import arange, cos, pi from matplotlib.pyplot import figure, axes, plot, xlabel, ylabel, title, grid, savefig, show figure(1, figsize=(6,4)) ax = axes([0.1, 0.1, 0.8, 0.7]) t = arange(0.0, 1.0+0.01, 0.01) s = cos(2*2*pi*t)+2 plot(t, s) xlabel(r' extbf{time (s)}') ylabel(ur' extit{Velocity (u00B0/sec)}', fontsize=16) title(r&quot;TeX is Number $displaystylesum_{n=1}^inftyfrac{-e^{ipi}}{2^n}$!&quot;, fontsize=16, color='r') grid(True) show() t201.py
    26. 26. t201.py
    27. 27. t202.py #!/usr/bin/env python import numpy as np import matplotlib.pyplot as plt t = np.arange(0.0, 1.01, 0.01) s = np.sin(2*2*np.pi*t) plt.fill(t, s*np.exp(-5*t), 'r') plt.grid(True) plt.show()
    28. 28. t202.py
    29. 29. t203.py import matplotlib.pyplot as plt import numpy as np from numpy.random import randn fig = plt.figure() ax = fig.add_subplot(111) data = np.clip(randn(250, 250), -1, 1) cax = ax.imshow(data, interpolation='nearest') ax.set_title('Gaussian noise with vertical colorbar') cbar = fig.colorbar(cax, ticks=[-1, 0, 1]) cbar.ax.set_yticklabels(['< -1', '0', '> 1']) fig = plt.figure() ax = fig.add_subplot(111) data = np.clip(randn(250, 250), -1, 1) cax = ax.imshow(data, interpolation='nearest') ax.set_title('Gaussian noise with horizontal colorbar') cbar = fig.colorbar(cax, ticks=[-1, 0, 1], orientation='horizontal') cbar.ax.set_xticklabels(['Low', 'Medium', 'High']) plt.show()
    30. 30. t203.py
    31. 31. t204.py import numpy as np import matplotlib.pyplot as plt import matplotlib.path as path import matplotlib.patches as patches fig = plt.figure() ax = fig.add_subplot(111, frameon=False, xticks=[], yticks=[]) im = ax.imshow(np.random.rand(10,10)) patch = patches.Circle((300,300), radius=100) im.set_clip_path(patch) plt.show()
    32. 32. t204.py
    33. 34. Matemática <ul><li>Interfases: GNUPLOT, R, MATLAB: FNUPlot-py, Rpy, PyMAT </li></ul>
    34. 35. http://neopythonic.blogspot.com
    35. 36. Python in the Scientific World * Rapid classification of astronomical time-series data, by Josh Bloom, UCB Astronomy Dept. One of the many tools using Python is GroupThink, which lets random people on the web help classify galaxies (more fun than watching porn :-). * The Hubble Space Telescope team in Baltimore has used Python for 10 years. They showed a tool for removing noise generated by cosmic rays from photos of galaxies. The future James Webb Space Telescope will also be using Python. (Perry Greenfield and Michael Droettboom, of STSCI.) * A $1B commitment by the Indian government to improve education in India includes a project by Prabhu Ramachandran of the Department of Aerospace Engineering at IIT Bombay for Python in Science and Engineering Education in India (see http://fossee.in/).
    36. 37. fperez.org/py4science/2009_guido_ucb/index.html
    37. 38. Python DB
    38. 39. http://sourceforge.net/projects/mysql-python/
    39. 40. 01mysql.py #!/usr/local/bin/python #from sets import ImmutableSet import MySQLdb import os, sys db = MySQLdb.connect( host =&quot;localhost&quot;, user = &quot;root&quot;, passwd = &quot;123456&quot;, db = &quot;extdbcat&quot; ) cursor = db.cursor () f = open(&quot;archivo.csv&quot;,&quot;r&quot;) for i in range(1,1050): x = f.readline() f.close() db.close()
    40. 41. http://pymssql.sourceforge.net/
    41. 42. 01pymysql.py import pymssql import time import string import unicodedata import codecs conn = pymssql.connect(host='xxx', user='xxx', password='xxx', database='xxxx') c=conn.cursor() for i in range(1): try: c.execute(&quot;Sentencia&quot;) result1=c.fetchall() r1 = c.fetchone() while r1: a=r1[0]+&quot; , &quot;+r1[1]+&quot; ,student&quot;+&quot; &quot; print a r1=c.fetchone()
    42. 43. 01pymysqlmejorando.py for i in range(1): try: c.execute(&quot;sql&quot;) result1=c.fetchall() r1 = c.fetchone() while r1: a=r1[0]+&quot; , &quot;+r1[1]+&quot; ,student&quot;+&quot; &quot; print a r1=c.fetchone() except pymssql.DatabaseError, err: print str(err) print &quot;Un error en la sesion de la DB &quot; conn.close() break except pymssql.DatabaseError, err: print str(err) print &quot;Fail&quot; time.sleep(0.2) except: print &quot;Fail&quot; time.sleep(0.2)
    43. 44. http://python.projects.postgresql.org/
    44. 45. Postgresql Conn import datetime connection = psycopg.connect('dbname=COREIS', 'user=roort') mark = connection.cursor() st = 'INSERT INTO ' + table + ' (' + columns + ') VALUES (' + values + ')' mark.execute(st) connection.commit()
    45. 46. Python Web, Django
    46. 47. http://wiki.python.org/moin/WebProgramming
    47. 48. ServidorWeb.py #!/usr/bin/python from BaseHTTPServer import HTTPServer from SimpleHTTPServer import SimpleHTTPRequestHandler HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler).serve_forever()
    48. 49. Otro Ejemplo def handle_request(environment, start_response): start_response('200 OK', [('content-type', 'text/html')]) return ['Hello, World!'] if __name__ == '__main__': from wsgiref import simple_server simple_server.make_server('', 8080, handle_request).serve_forever()
    49. 50. 00web.py-01 from wsgiref import util from string import Template # Templates wrapper = Template(&quot;&quot;&quot; <html><head><title>$title</title></head><body> $body </body></html> &quot;&quot;&quot;)
    50. 51. 00web.py-02 four_oh_four = Template(&quot;&quot;&quot; <html><body> <h1>404-ed!</h1> La URL <i>$url</i> No fue Encontrada. </body></html>&quot;&quot;&quot;)
    51. 52. 00web.py-03 pages = { 'index': { 'title': &quot;Hola COREIS&quot;, 'body': &quot;&quot;&quot;NUESTRA WEB EN PYTHON <a href=&quot;this_page&quot;>COREIS</a>?&quot;&quot;&quot; }, 'this_page': { 'title': &quot;COREIS&quot;, 'body': &quot;&quot;&quot;Vamos al coreis. <a href=&quot;http://www.coreislima.org/&quot;>COREIS</a>?&quot;&quot;&quot; } }
    52. 53. 00web.py-04 def handle_request(environment, start_response): try: fn = util.shift_path_info(environment) if not fn: fn = 'index' response = wrapper.substitute(**pages[fn]) start_response('200 OK', [('content-type', 'text/html')]) except: start_response('404 Not Found', [('content-type', 'text/html')]) response = four_oh_four.substitute(url=util.request_url(environ)) return [response]
    53. 54. 00web.py-05 if __name__ == '__main__': from wsgiref import simple_server print(&quot;Starting server on port 8080...&quot;) try: simple_server.make_server('', 8080, handle_request).serve_forever() except KeyboardInterrupt: print(&quot;Ctrl-C Para Salir...&quot;)
    54. 55. email.py-01 import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.Utils import COMMASPACE, formatdate from email import Encoders import os
    55. 56. email.py-02 def sendMail(to, subject, text, files=[],server=&quot;localhost&quot;): assert type(to)==list assert type(files)==list fro = &quot;unimauro@gmail.com&quot; msg = MIMEMultipart() msg['From'] = fro msg['To'] = COMMASPACE.join(to) msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject msg.attach( MIMEText(text) ) for file in files: part = MIMEBase('application', &quot;octet-stream&quot;) part.set_payload( open(file,&quot;rb&quot;).read() ) Encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename=&quot;%s&quot;' % os.path.basename(file)) msg.attach(part) smtp = smtplib.SMTP(server) smtp.sendmail(fro, to, msg.as_string() ) smtp.close() sendMail( [&quot;carlos.cardenas.f@upch.pe&quot;], &quot;hello&quot;,&quot;cheers&quot;, [&quot;usuarios.sql&quot;,&quot;ThekeRS.doc&quot;] )
    56. 57. email02.py-01 import smtplib import mimetypes from email.MIMEText import MIMEText from email.Encoders import encode_base64
    57. 58. email02.py-02 mensaje = MIMEText(&quot;&quot;&quot;Prueba 2 Desde Python&quot;&quot;&quot;) mensaje['From']=&quot;unimauro@gmail.com&quot; mensaje['To']=&quot;carlos.cardenas.f@upch.pe&quot; mensaje['Subject']=&quot;Prueba 2&quot; # Establecemos conexion con el servidor smtp de gmail mailServer = smtplib.SMTP('smtp.gmail.com',587) mailServer.ehlo() mailServer.starttls() mailServer.ehlo() #mailServer.login(&quot;uio@gmail.com&quot;,&quot;password&quot;) mailServer.login(&quot;unimauro@gmail.com&quot;,&quot;esperanza1504&quot;) # Envio del mensaje mailServer.sendmail(&quot;usuario@gmail.com&quot;, &quot;carlos.cardenas.f@upch.pe&quot;, mensaje.as_string())
    58. 60. www.djangoproject.com
    59. 62. Models Templates Admin Forms Auth i18n GIS Comments DataBrowse Syndication Sitemaps django-evolution django-registration django-jython django-authopenid django-tagging django-command-extensions google-app-engine-django django-search django-contact-form django-contact-form django-bookmarks django-photologue django-timezones django-profile django-mptt Caching Pinax Satchmo
    60. 63. 1. Modelos
    61. 64. # eldemo/elinux/models.py: from django.db import models from datetime import date class Noticia(models.Model): fecha = models.DateField( default=date.today) titulo = models.CharField(max_length=80) contenido = models.TextField()
    62. 65. class Expositor(models.Model): nombre = models.CharField(max_length=80, unique=True) foto = models.ImageField( upload_to=&quot;fotos&quot;) resena = models.TextField(null=True, blank=True) invitado = models.BooleanField()
    63. 66. class Charla(models.Model): titulo = models.CharField(max_length=120, unique=True) expositor = models.ForeignKey(Expositor)
    64. 67. ¿SQL?
    65. 68. ¿SQL? R: Lo genera Django
    66. 69. BEGIN; CREATE TABLE &quot;elinux_noticia&quot; ( &quot;id&quot; serial NOT NULL PRIMARY KEY, &quot;titulo&quot; varchar(80) NOT NULL, &quot;contenido&quot; text NOT NULL ) ; CREATE TABLE &quot;elinux_expositor&quot; ( &quot;id&quot; serial NOT NULL PRIMARY KEY, &quot;nombre&quot; varchar(80) NOT NULL UNIQUE, &quot;foto&quot; varchar(100) NOT NULL, &quot;resena&quot; text NULL ) ; CREATE TABLE &quot;elinux_charla&quot; ( &quot;id&quot; serial NOT NULL PRIMARY KEY, &quot;titulo&quot; varchar(120) NOT NULL UNIQUE, &quot;expositor_id&quot; integer NOT NULL REFERENCES &quot;elinux_expositor&quot; (&quot;id&quot;) DEFERRABLE INITIALLY DEFERRED ) ; CREATE INDEX &quot;elinux_charla_expositor_id&quot; ON &quot;elinux_charla&quot; (&quot;expositor_id&quot;); COMMIT;
    67. 70. # Python: class Charla(models.Model): titulo = models.CharField(max_length=120, unique=True) expositor = models.ForeignKey(Expositor) -- SQL: CREATE TABLE &quot;elinux_charla&quot; ( &quot;id&quot; serial NOT NULL PRIMARY KEY, &quot;titulo&quot; varchar(120) NOT NULL UNIQUE, &quot;expositor_id&quot; integer NOT NULL REFERENCES &quot;elinux_expositor&quot; (&quot;id&quot;) DEFERRABLE INITIALLY DEFERRED ); CREATE INDEX &quot;elinux_charla_expositor_id&quot; ON &quot;elinux_charla&quot; (&quot;expositor_id&quot;);
    68. 71. Bonus
    69. 72. from django.contrib import admin from elinux.models import Noticia, Expositor, Charla admin.site.register(Expositor) admin.site.register(Charla) admin.site.register(Noticia)
    70. 80. ¿Qué es Plone? Sistema de gestión de contenido web Escrito sobre Zope Programado en Python
    71. 81. Características de Plone como CMS <ul><ul><li>Distintos tipos de contenido
    72. 82. Distintas formas de presentar el mismo contenido
    73. 83. Editor HTML WYSIWYG
    74. 84. Flujos de trabajo aplicables al contenido
    75. 85. Herramientas de colaboración
    76. 86. Indexado de texto completo de archivos PDF/OO </li></ul></ul>
    77. 87. Instalación de Plone Descargar Plone desde: http://launchpad.net/plone/3.3/3.3/+download/Plone-3.3-UnifiedInstaller.tgz Ejecutar la instalación: $ tar zxfv Plone-3.3-UnifiedInstaller.tgz $ cd Plone-3.3-UnifiedInstaller/ $ ./install.sh standalone Iniciar el servidor: $ cd $HOME/Plone/zinstance $ ./bin/instance fg Acceder a Plone desde el navegador en: http://localhost:8080/Plone
    78. 88. Instalación de Plone (para desarrollo) Virtualenv PasteScript ZopeSkel zc.buildout
    79. 89. Requerimientos Editar contenido fácilmente Múltiples usuarios Niveles de acceso Galería de fotos Issue tracker Identidad gráfica Puesta en producción Poi Labs Linux+Apache+Zope
    80. 90. http://www.turbogears.org/
    81. 91. http://code.google.com/appengine
    82. 92. introducción a Google App Engine
    83. 93. Entorno de desarrollo que proporciona: <ul><li>Servidor web
    84. 94. Base de datos (no relacional)
    85. 95. Escalabilidad y balanceo de carga automático
    86. 96. API para autenticar usuarios
    87. 97. Servidor de correo electrónico
    88. 98. Simulador Local
    89. 99. Programación en Python y Java
    90. 100. Es gratis: 500MB en disco y 5 millones de páginas vistas </li></ul>
    91. 101. 1. Registrar una cuenta http://appengine.google.com/
    92. 102. 2. Descargar el SDK http://code.google.com/intl/es/appengine/downloads.html
    93. 103. Creamos el archivo helloworld.py en dicho directorio con el contenido: print 'Content-Type: text/plain' print '' print 'Hola Mundo!' Editamos el archivo de configuración app.yaml: application: helloworld version: 1 runtime: python api_version: 1 handlers: - url: /.* script: helloworld.py
    94. 104. Para comprobar que funciona, arrancamos el servidor, bien con la interfaz gráfica o en la terminal con: dev_appserver.py helloworld Y accedemos a http://localhost:8080 donde nos debería aparecer “Hola Mundo!” en el navegador.
    95. 105. Permite crear aplicaciones basadas en CGI de forma fácil y rápida. Editamos el archivo helloworld.py: from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app class MainPage(webapp.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('Hola Mundo con webapp!') application = webapp.WSGIApplication( [('/', MainPage)], debug=True) def main(): run_wsgi_app(application) if __name__ == &quot;__main__&quot;: main()
    96. 106. Entramos en http://appengine.google.com y creamos una aplicación (OJO! Luego no se puede borrar). Editamos el archivo app.yaml y cambiamos el nombre de application por el que hemos usado anteriormente. Subimos la aplicación: (nos pedirá usuario y contraseña de nuestra cuenta de Google) appcfg.py update helloworld Podemos comprobar si ha funcionado entrando en http://<tu_aplicacion>.appspot.com
    97. 107. 11. Más Ejemplos Ejemplos didácticos http://code.google.com/p/google-app-engine-samples/ Ejemplos funcionando http://flickrsearchr.appspot.com/ http://www.cafesurvey.com/ http://www.congregar.com/ http://www.urlmetrix.com/ http://zchat.appspot.com http://www.jumbra.com/
    98. 108. Lenguaje Go
    99. 109. http://golang.org/
    100. 110. Lenguaje para Linux y MacOSX. PARTE I Configuración e Instalación 1. Instalar: sudo apt-get install mercurial sudo apt-get install bison gcc libc6-dev ed make 2. Configurar Variables de Entorno: export GOARCH=386 export GOROOT=/home/administrador/hg/ export GOBIN=/home/administrador/hg/bin 3. Verificar Variables de Entorno env | grep ^GO
    101. 111. 4. Crear Carpeta Bin si es se quiere instalar en otra carpeta mkdir bin 5. Agregar la Variable $GOBIN al PATH de Linux export PATH+=:$GOBIN 6. Verificar: echo $PATH 7. Ingresando a la Carpeta de los Fuentes: cd $GOROOT/src 8. Iniciar la Compilación: ./all.bash Verificar Que todo es OK
    102. 112. PARTE II 1. vim Hola_Coreis_GO.go package main import &quot;fmt&quot; func main() { fmt.Printf(&quot;Hola Somos Coreis, La Singularidad de las Ciencias &quot;) }
    103. 113. 2. Compilación /home/administrador/bin/8g Hola_Coreis_GO.go /home/administrador/bin/8l Hola_Coreis_GO.8 3. Ejecución: ./8.out
    104. 114. package main import &quot;os&quot; import &quot;flag&quot; var nFlag = flag.Bool(&quot;n&quot;, false, `no `) func main() { ! flag.Parse(); ! s := &quot;&quot;; ! for i := 0; i < flag.NArg(); i++ { ! ! if i > 0 { s += &quot; &quot; } ! ! s += flag.Arg(i) ! } ! if !*nFlag { s += &quot; &quot; } ! os.Stdout.WriteString(s); }
    105. 115. Open CV
    106. 116. Aplicativos
    107. 119. BIBLIOGRAFÍA
    108. 120. Bibliografía
    109. 121. Bibliografía
    110. 122. Recursos adicionales
    111. 123. Carlos Mauro Cárdenas Fernández http://unimauro.blogspot.com http://www.twitter.com/unimauro [email_address]

    ×