Tres slides de charlas

Mi señora novia dio una charla bastante interesante sobre un proceso de asignación de costos:

Di una charla de presentación del proyecto de investigación con el titulo “Análisis de Datos a través de grafos”

Por último esto es de una charla que di para los astrónomos del Proyecto ABRAS en el Observatorio Astronómico Córdoba

La totalidad de mis charlas las tengo disponibles en PDF en este repo: https://bitbucket.org/leliel12/talks/src

Anuncios

Yatel – Exploración de perfiles para Minería de datos – PyConAr2012

Presentamos con Alejandro Garcia el proyecto Yatel en PyConAr2012

Yatel permite crear redes basadas en distancias entre perfiles de individuos y analizarlas multidimensionalmente mediante un proceso de exploración.

Yatel se desarrolló para el análisis de variabilidad genética del Mal de Río Cuarto virus (MRCV), una de las enfermedades más importantes del maíz. El análisis de la red de haplotipos (genotipos haploides) o perfiles del MRCV resultó muy exitosa y permitió detectar que la variabilidad del virus disminuyó con el tiempo. La hipótesis de se planteó después de la exploración de la red, inspirada en la visualización de la existencia de haplotipos por ambiente.

Snippet para usar un unittest bottle.py con un proceso separado

Necsitaba probar un api rest y se me ocurrio levantar bottle en un proceso separado dentro de un testcase; y necesite hacer todos este chicle.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# "THE WISKEY-WARE LICENSE":
# <jbc.develop@gmail.com> wrote this file. As long as you retain this notice you
# can do whatever you want with this stuff. If we meet some day, and you think
# this stuff is worth it, you can buy me a WISKEY in return Juan BC

import multiprocessing
import urllib2
import unittest

import bottle

class BottleTest(unittest.TestCase):

    def setUp(self):
        self.process = multiprocessing.Process(
            target=bottle.run,
            kwargs={"port": "8081"}
        )
        self.process.start()

        # wait until bottle process full started
        # si no ponen esto el testcase se va a ejecutar antes
        # que bottle este listo para recibir peticiones
        started = False
        while not started:
            try:
                urllib2.urlopen("http://127.0.0.1:8081/")
            except urllib2.HTTPError:
                started = True
            except urllib2.URLError as err:
                if err.reason.args[0] == 111:
                    pass
                else:
                    raise err
            else:
                started = True

    def tearDown(self):
        self.process.terminate()

    def test_something(self):
        pass

PyAr – Argentina Python User Group video

este video lo hice para presentarlo como charla relámpago en pycon us 2012. además anuncia la fecha de pycon ar 2012

csvcool 0.1.2

Actualicé denuevo csvcool mi libreria para manejar archivos csv in a cool way!

Por un pedido le puse soporte para “key” en el metodo de ordenamiento:

Suponiendo que tenemos un csv como el siguiente:

nombre apellido mail
tito puente tito@puente.com
cosme fulanito cosme@fulanito.com

para ordenarlo por  la ultima letra del “nombre” deberiamos hacer

import csvcool
csvf = csvcool.read(open("/archivo.csv"))
csvf.sort(lambda r: r["nombre"][-1])
csvcool.write(csvf, open("/archivo.csv", "w"))

y el resultado seria:

nombre apellido mail
cosme fulanito cosme@fulanito.com
tito puente tito@puente.com

Ademas de eso tambien tiene los sigientes features viejos:

  • extraer una sola columna como una tupla.
  • recortar un csv dejando “algunas” columnas o “algunas filas”.
  • agregar filas y columnas.
  • remover filas y columnas.
  • guardar en un archivo.
  • y unas cosas mas.
Instalar:
PD: ahora si agregue los test al setup.py (para felicidad de nessita)

csvcool 0.1.1

Actualicé csvcool mi libreria para manejar archivos csv in a cool way!

Si bien @chipaca, me comento de una funcionalidad similar que viene en la std lib de python, me sigue pareciendo mucho mas comodo de manejar mi libreria (que esta exelentemente documentada (hagan un help(csvcool))

El changelog es simple… le agregue un metodo sort que recive como parametro el nombre de la columna por la cual ordenar.

Suponiendo que tenemos un csv como el siguiente:

nombre apellido mail
tito puente tito@puente.com
cosme fulanito cosme@fulanito.com

para ordenarlo por “nombre” deberiamos hacer

import csvcool
csvf = csvcool.read(open("/archivo.csv"))
csvf.sort("nombre")
csvcool.write(csvf, open("/archivo.csv", "w"))

y el resultado seria:

nombre apellido mail
cosme fulanito cosme@fulanito.com
tito puente tito@puente.com

Ademas de eso tambien tiene los sigientes features viejos:

  • extraer una sola columna como una tupla.
  • recortar un csv dejando “algunas” columnas o “algunas filas”.
  • agregar filas y columnas.
  • remover filas y columnas.
  • guardar en un archivo.
  • y unas cosas mas.
Instalar:
PD: ahora si agregue los test al setup.py (para felicidad de nessita)

csvcool 0.1

Laburando en el pyday, tuve que lidiar con varios archivos csv. Los bichitos estos tenian en su primer fila el nombre del campo al cual hacia referencia la columna dada

porjemplo 2 personas con nombre apellido y email aparecia algo asi:

nombre apellido mail
tito puente tito@puente.com
cosme fulanito cosme@fulanito.com

Realmente usar el modulo csv de python me rompia un poco la paciencia, ya que se accedia siempre por indices  y habia que omitir la fila 0

ejemplito:

import csv
csvf = csv.reader(open("/archivo.csv"))
print csvf[1][0] # imprimiria "tito"

Mi solucion: csvcool

Que hace esta librería? bueno… omite la fila 0 y transforma  cada fila en un diccionario (entre otras cosas)

Ejemplito 3:

import csvcool
csvf = csvcool.read(open("/archivo.csv"))
print csvf[0]["nombre"] # imprimiria "tito"

Ademas de eso tambien tiene los sigientes features:

  • extraer una sola columna como una tupla.
  • recortar un csv dejando “algunas” columnas o “algunas filas”.
  • agregar filas y columnas.
  • remover filas y columnas.
  • guardar en un archivo.
  • y unas cosas mas.
Como ultimo ejemplo supongamos que solo queremos guardar un csv con los mails y el apellido de las personas:
import csvcool
csvf = csvcool.read(open("/archivo.csv"))
cortado = csvf.cut("apellido", "mail")
csvcool.write(cortado, open("/archivo_cortado.csv", "w"))
Instalar:
PD: hay test… y me olvide de incluirlos en el setup.py (moco)