Archivo de la categoría: Investigación

Resumen de la charla: Como escribir una publicación científica increíble por Simon Peyton Jones

Prof. Simon Peyton Jones expone siete puntos que – en base su opinión – una publicación científica debería seguir. El vídeo en si dura 30 minutos en los que repasa los puntos más importantes a seguir al publicar un manuscrito. Prof Jones recomienda que se empiece a escribir el manuscrito antes de empezar a investigar. Durante la escritura intenta ser simple – pero no simplista – y entendible. Sigue una estructura lógica y “reparte amor”. Os dejo el vídeo al final del post. El vídeo está en ingles pero es muy recomendable.

La primera idea que expone es que normalmente cuando tenemos una idea, empezamos a investigar y cuando tenemos suficiente material condensamos los resultados en un paper. Basado en la experiencia de Simon lo que tendríamos que hacer es tener la idea, pero luego empezar a escribir y después a investigar y pulir el texto con los resultados.

Porque tenemos que empezar a escribir después de la concepción de la idea y no investigar? Si empezamos a investigar nos desviamos del objetivo. Al empezar a escribir y exponer el proceso dejamos constancia de los pasos a seguir para llegar al objetivo, plasmamos las ideas que tenemos para el proyecto, nos fuerza a focalizarnos evitando que divagamos con sub-proyectos que nos lleven a ningún sitio. La escritura nos ayuda a desarrollar la literatura y evitar que la idea ya este publicada. También nos ayuda a pensar profundamente en el proyecto, ya no es sólo una idea que puede funcionar. Ahora ya es una idea en la que le estamos poniendo foco y pensamientos, para concretar y delinear el ámbito

Al empezar a escribir tenemos que tener algo muy claro en mente. Tenemos que pensar que al escribir un paper no lo hacemos para nosotros mismos, escribimos papers para los demás. Con los papers pretendemos comunicar conocimientos a otras personas. Queremos transmitir la idea que tenemos en nuestra mente a otras mentes. Para transferir conocimiento satisfactoriamente, el articulo científico tiene que ser entendible para terceros. El “yo ya me entiendo” no vale. La idea básica tiene que ser fácimente asimilable. Declara el concepto del paper abiertamente y de forma directa, no esperes que tus lectores tengan que hacer trabajo de detective para averiguar que conocimientos quieres transmitir. Si tienes más de una idea no intentes ponerlas juntas en el mismo paper. Sepáralas en distintos papers. Obviamente tampoco pretendas dividir una idea en mini-ideas para que puedas publicar miles de papers a la vez. Intenta que la idea de un paper tenga suficiente consistencia pero sin intentar comprimir demasiada información a la vez.

Cuando expongas una idea en un paper hazlo de una forma fácilmente entendible. Hazlo del mismo modo que lo harías en frente de una audiencia. Empieza describiendo tu problema, porque es interesante, porque no esta solventado, expón tu idea, explica porque funciona (con explicaciones y información), y termina comparando tu solución con otras soluciones. Estos pasos se traducen a un esqueleto muy claro que el manuscrito va a seguir.

  1. Título
  2. Abstracto (4 frases)
  3. Introducción (1pag): Aquí vas a describir el problema y exponer las contribuciones que haces a la humanidad. Cuando expongas el problema que no te de pereza a personalizarlo con un ejemplo ficticio. Escribe las contribuciones temprano y re-escríbelas después. Ponlo en formato de bullet points para facilitar el escaneo y dejarlas claras. Cuando escribas las contribuciones de este modo puedes añadir referencias a las secciones en las que solventas el problema. De este modo podrías enlazar tus contribuciones con las soluciones facilitando el lector la ubicación de lo que busque sin desperdiciar su tiempo ni hacer un párrafo aburrido como la lista de la compra.
  4. El problema (1pag)
  5. Mi idea (2pag)
  6. Los detalles (5pag)
  7. Trabajo relacionado (1-2pag) Referencia otros trabajos y compáralos con tus aportaciones. Simon recomienda ponerlo en una ubicación tan avanzada dentro del manuscrito porque de este modo ya habrás tenido tiempo para exponer teorías y conceptos para entender las diferencias. Esto también impedirá que el lector gaste energía y concentración leyendo algo que “no aporta” ya que no hace referencia a tu trabajo ni tus contribuciones de manera directa. Cuando el lector llegue a este punto, el apartado va a ser un tramite mas ya que tendrá construido los conocimientos para seguir el apartado sin mayor complicación.
  8. Conclusiones & trabajo futuro (0.5 pag) Este apartado es cortito. A nadie le interesa leer que quieres hacer mas adelante. Y la idea ya ha sido descrita. Así que este apartado es conciso.

Cuando compares tu trabajo con el de otras personas no uses la máxima: “para que tu trabajo se vea bien tienes que hacer que el trabajo de los demás parezca malo”. Aquí es dónde tienes que “repartir amor”. Repartir amor no va a hacer que tu trabajo se vea peor. Usa frases como “este paper me ha inspirado”, “este paper han tenido una idea muy buena”, “la implementación de este es impecable”, etc. Los autores de los otros papers lo agradecerán y a la larga crearás menos hostilidades. Al comparar describe también tus debilidades. Nada es perfecto. La implementación puede ser mucho mas rápida pero un poco menos precisa, quizás esta sea un sacrificio que muchos estén dispuestos a hacer. Además te elevara a los ojos de los revisores ya que no les parecerá que estas ocultando cosas.

Cuando expongas la idea empieza con la intuición, un problema especifico y luego expande hacia la generalización. Si empiezas con la generalización para empezar el lector va a tener más problemas para entender la idea.

Al exponer la solución no vayas diciendo probé esto pero no funciono, probé lo otro y no funciono. Esto no sirve de nada. La gente quiere saber que hiciste para solucionar el problema. En algunos casos se pueden incorporar al paper ideas que probaste y no funcionaron, pero con una finalidad. A veces algo que parece muy obvio de entrada puede no funcionar. Si este es el caso, para evitar que otros caigan en el mismo error o los revisores sugieran otra implementación puedes exponer algunas ideas fallidas. Pero nunca lo hagas de modo sistemático y mucho menos con todas las ideas frustradas.

Si el proceso te ha llevado hasta aquí ya tienes todo el paper escrito. Ahora va a tocar pulirlo. Para pulir el manuscrito tienes que pedir ayuda externa. Otro par de ojos a menudo ven cosas que no hemos visto. Pregunta a amigos que lean el paper y te den consejos. Ten en cuenta que por definición cualquier persona va a poder leer el paper por primera vez  solo una vez. No pidas a todos que lean tu paper a la vez. Pídeselo a uno escucha el feedback, corrige y así sucesivamente. Una vez han leído el paper ya van a tener la idea en mente y les va a ser más fácil entender el manuscrito que si lo leen por primera vez.

Cuando pidas a alguien que lea tu articulo especifica en que quieres que se concentren/focalicen. Si lo has terminado de escribir lo importante es que sea entendible, ameno y no se pierdan. Una vez tengas estos problemas solventados sera importante que no tengas errores ortográficos, que uses una buena gramática y seas más detallista.

Cuando alguin no entiende el paper no es su culpa! Importante cuando alguien te de feedback úsalo como oro. No son ellos que son tontos eres tu que no te has explicado adecuadamente. Es mejor que sean tus amigos quienes te digan que no lo han entendido y no que el journal te rechace el articulo. Y aun así, cuando el journal te rechaza el articulo, te va a dar feedback, úsalo! Cualquier pieza de feedback es valiosa para intentar mejorar y avanzar. No lo hacen para joder o porque son malos.

Para finalizar también puedes pedir feedback a personas que has referenciado en tu paper. No abuses de esta técnica. Pero puedes mandar un email a algún autor que no conoces y decirle que lo has referenciado y que si le importaría comentarte que les parece el articulo. Lo dicho no abuses y trata cualquier pieza de feedback como oro. Ya que te están dando algo que nadie puede comprar, tiempo.

Espero que te haya gustado. Si conoces otra charla igual de interesante sobre como escribir artículos o tienes algún otro consejo no te olvides de dejar un comentario!

 

 

SCORE: Usando metodologías ágiles para gestionar equipos de investigación

Con la introducción al agile creé el primer post de la serie, seguido de los post explicando las distintas facetas del Scrum (con los roles y el flujo de trabajo) hoy vengo con una aplicación directa para los equipos de investigación. Los grupos de investigación son grupos de gente que trabajan en el plano de las ideas. Al igual que los desarrolladores de software al final del día no crean ningún producto tangible solo ideas, información, conocimiento, pero nada que puedas tocar.

Hace ya bastantes años algunos de los grupos de investigadores de la universidad de Maryland (USA) decidieron implementar una nueva metodología para la supervisión de sus estudiantes, ya sean de grado, máster, doctorado o post-doc. Una metodología que se adaptara a las necesidades de cada individuo y no a las del título que ostentasen.

Esta implementación vino dada debido a la falta de tiempo que empezaban a sufrir los profesores. Con el incremento de estudiantes y responsabilidades cada vez tenían menos tiempo para dedicar a los estudiantes. Así que decidieron crear e implementar la metodología SCORE. Score proviene de SCrum fOr REsearch.

La idea principal consiste en reducir la carga de meetings a los que los miembros del grupo están sujetos sin comprometer la calidad del trabajo. Para conseguir optimizar el tiempo que pasan los profesores con sus alumnos crearon dos tipos de meetings. 15min meeting y los 1 on 1 meeting on demand.

  • Los 15min meetings tienen sitio tres veces por semana y como indica su nombre duran 15 minutos. Estos meetings, al igual que scrum, se hacen de pie para asegurar la brevedad de este. Durante este tiempo es requerido que todos los miembros del grupo acudan presencialmente y a modo excepcional lo hagan por videoconferencia. En el meeting todos los asistentes tienen que responder a tres preguntas:
    1. Que has hecho des de tu último meeting?
    2. Que problemas te has encontrado?
    3. Que quieres hacer para el próximo meeting?

    Al ser meetings tan frecuentes no pasa nada si algunas veces se responde que no ha habido resultados significativos.

  • El segundo tipo de meetings son los 1 on 1 meetings on demand. Que traducido sería meetings a título individual pero que se tiene que pedir cita. Con este tipo de meetings la idea es intentar reducir los meetings periódicos que solo roban tiempo. No siempre se requiere la misma duración para un meeting. Algunas veces los meetings precisan 15min y otras 2h porque la tarea es más compleja. Al pedir el meeting ya sabes de lo que se va a hablar y no va a ser una pérdida de tiempo.

Los estudiantes parecen bastante satisfechos con la nueva organización del laboratorio. Los profesores también parecen satisfechos con el resultado. Y a mi personalmente me parece interesante que hayan suprimido el meeting semanal que muchos grupos tienen en los que se presenta a lo grande.

 

Referencias:

Resumen del paper: Análisis de datos topológicos

Recientemente me encontré un par de papers relevantes para la minería de datos (data mining). Incluso hay una empresa que basa su business model en este concepto (Ayasdi). El concepto como habéis podido leer en el titulo es análisis de datos topológicos. ¿Que significa esto? La ida principal, tal y como se expone en la Figura 1 (sacada del paper [1]), se basa en que los datos tienen forma y la forma es consistente. Por ejemplo, la letra “A” seguirá siendo la misma letra a pesar de que le apliquemos distintas transformaciones ya que la información obtenida es calculada en base a las distancias relativas. Podemos rotar los datos, hacia un lado u otro. Podemos cambiar la tipografía o la forma (aplastarla o extenderla) que seguirá siendo la misma letra. Al final la letra “A” esta formada por millones de puntos que no vemos. Quizás perdemos algo de detalle especifico pero se gana en visión global.

descripción gráfica de la letra A
Figura 1: Transformaciones aplicadas a la letra A siguen formando la misma letra. Extraído de [1]
El primer paso consiste en agrupar en sub-poblaciones en bins (contenedores). En el segundo paso estas divisiones son analizadas. Cada uno de los contenedores contiene puntos que son similares el uno al otro. Como los bins han sido divididos de tal forma que solapan entre ellos por lo que cada punto de nuestros datos pueden estar en más de un grupo. Finalmente para construir la red (network) dibujamos un link entre los distintos clusters de la network final.

Para empezar a construir la red tenemos que escoger la métrica y la lente. La métrica la usaremos para medir la similitud (o distancia) entre dos puntos mientras que la lente es una función matemática para observar los datos. Cualquier métrica que sirva para producir un numero de un punto puede ser una lente. Una lente puede ser la media, max, min, el centro, PCA-score, distancia SVM, entre otros. Se pueden agrupar los resultados de distintas lentes multiplicando el resultado de los outputs.

El vector unitario producido por a lente es dividido en subgrupos que se solapan. Todos los puntos que tienen valores de lentes en el mismo subgrupo se agrupan juntos en un contenedor. De esta forma distintas particiones son obtenidas para todos los puntos gracias al resultado de la lente. Como las lentes producen sets que solapan es posible que un punto este en múltiples contenedores. Todos los puntos en un contenedor son agrupados ya que todos los puntos son altamente similares entre si y este grupo representa un simple nodo de nuestra red. El color que le asignaremos es la media del color de la lente de este grupo. El nodo en su representación gráfica tiene un tamaño proporcional al numero de puntos que tenga el cluster.

Habiendo hecho lo pasos anteriores tendremos distintos nodos en nuestra red, con diferentes tamaños y colores. Los nodos se conectaran entre si cuando tengan puntos en común. Estos links generaran la red topológica final.

Tenemos que tener en cuenta que esta implementación tiene dos parámetros. Uno es la resolución que indica el numero de contenedores en los cuales vamos a partir los datos. Una baja resolución genera unos pocos nodos gruesos sintetizando la información generada por el algoritmo. Contrariamente si la incrementamos genera muchísimos nodos pero de un tamaño mas pequeño perdiendo similitud entre nodos incluso generando clusters aislados. El segundo parámetro se llama ganancia y controla las regiones que se solapan entre contenedores. Como mas grande sea la ganancia mas aristas (conexiones entre nodos) vas a obtener el tu red. Este parámetro resalta las relaciones entre los elementos de tus datos.

No hay unos valores óptimos para la resolución y la ganancia. Cada red es singular y sus parámetros tienen que ser escogidos acordemente. También depende de lo que se quiera observar en la red. Por lo que cada análisis requerire una afinación (tuning). Tened en cuenta que una resolución alta no siempre es lo mejor, ya que al final lo que puede producir un resultado muy similar al observar los datos directamente

Ya hemos explicado todas las ventajas ahora toca exponer algunas de sus desventajas. No es ninguna “magic bullet” puede funcionar para muchos casos pero hay otros en los que este algoritmo no sea el mejor para nuestros datos. No hay una sola solución que sea buena para todos los casos. Parte del problema es que es una ciencia con un alto componente matemático. Como los principios del deep learning, hasta que no haya implementaciones eficientes y fáciles de usar, la “gente normal” se va a abstener de usarlo. Finalmente, el coste computacional. Calcular todos los pasos es extremadamente costoso ya que se tienen que hacer distintos barridos sobre los datos e incluso calcular las distancias entre pares.

Para los que os vaya la marcha os dejo un vídeo de youtube. Se trata de un seminario en Standford donde se explica extremadamente bien el concepto (en ingles). Luego os dejo una presentación en slideshare donde se explica el concepto detalladamente. Y para terminar os dejo tres referencias que he usado para escribir este post y que si entendéis inglés las recomiendo encarecidamente que les echéis un vistazo.

 

 

Archivos multimedia para profundizar en el TDA

 

Referencias:

 

  1. Offroy, M., & Duponchel, L. (2016). Topological data analysis: A promising big data exploration tool in biology, analytical chemistry and physical chemistry. Analytica chimica acta910, 1-11.
  2. Nielson, J. L., Paquette, J., Liu, A. W., Guandique, C. F., Tovar, C. A., Inoue, T., … & Lum, P. Y. (2015). Topological data analysis for discovery in preclinical spinal cord injury and traumatic brain injury. Nature communications6, 8581.
  3. Chazal, F., & Michel, B. (2017). An introduction to Topological Data Analysis: fundamental and practical aspects for data scientists. arXiv preprint arXiv:1710.04019.

He intentado hacer como Moneyball para predecir el resultado de los partidos de fútbol y he fracasado

Hace ya algún tiempo leí un post interesante sobre como un data scientist usó el concepto presentado en el libro Moneyball para escoger mejor los jugadores del FIFA 2016 cuando jugaba con “Career Mode”. El concepto de Moneyball es básicamente hacer data mining para conseguir el mejor equipo de béisbol con el menor precio. El argumento principal del libro es que al fichar los jugadores de béisbol las personas usan sus propios inclinaciones que normalmente no coinciden con la realidad o que están ancladas al pasado. Como ejemplo en el libro pone que a menudo el resultado de una táctica ofensiva de un jugador se puede medir mejor usando la frecuencia con que el bateador llega a la base en vez de la velocidad con la que batea. La velocidad de bateo ha sido la métrica que se ha usado des del principio pero después de un análisis detallado los analistas descubrieron que otras métricas son más relevantes.

A partir de este concepto creé mi propio experimento. La idea era que normalmente los analistas usan datos reales de los partidos para definir la habilidad del jugador. El problema que tiene esto es que lo que se luce el jugador depende del nivel del contrincante. Por eso mi idea era usar una valoración más o menos neutra y absoluta para predecir la calidad de cada jugador. Estas métricas las usaría para predecir la calidad del once inicial y así poder determinar el resultado final del partido.

Lo primero que hice fue recopilar tanta información como pude de todos los jugadores que pude. Para determinar la calidad del jugador usé la que usan en el videojuego FIFA 2015. El valor de las apuestas que se habían hecho en distintos sitios web de apuestas lo saqué de football-data. La alineación inicial y el resultado final del partido lo saqué de 11v11.

Todo el scrapping que hice puede sonar muy divertido y rápido pero no fue así. Durante el proceso pasé por alto varias cosas importantes. Lo primero es que en la liga española tenemos muchos jugadores españoles y con nombres españoles. El problema de los nombres españoles es que usan caracteres especiales como acentos o la ñ causando problemas con el encoding. El segundo problema es que el scrapping es divertido si la página web es consistente y está bien ordenada. Resultó no ser el caso. Por algún motivo que desconozco algunas de las páginas de la web no tenían un formato consistente con el resto de la web y tuve que programar excepciones. El tercer y último punto es que las webs de dónde extraje la información tenían herramientas para evitar el scrapping. Por suerte no eran muy estrictos con el número de peticiones que un mismo ordenador podía hacer y conseguí toda la información que buscaba en relativamente poco tiempo.

El resultado final fue que no funcionó. Me pareció una idea innovadora pero quizás no muy realista. El fútbol se ha caracterizado por las sorpresas. Usando sólo la información de las apuestas puedo predecir en un 50% cual será el resultado final del partido. Curiosamente con regresión lineal y toda la información de los jugadores se puede predecir también con un 50% quién será el ganador del partido. Si quitamos el empate de la ecuación todos los algoritmos que probé siguen funcionando igual de “bien”. Básicamente podría tirar una moneda en el aire y decir que cara gana el equipo local y cruz el visitante y acertaría el mismo número de veces que todos los algoritmos probados. Una pena que no funcionara pero me alegra haberlo probado.

Consigue todos las publicaciones científicas que quieras

Cuando nos pica la curiosidad y buscamos algunos papers por internet algunas (y en según que campos muchas) veces las publicaciones científicas solo se pueden conseguir si tienes una institución grande respaldándote. Supongo que algunas empresas permiten a sus empleados comprar papers interesantes pero no todo el mundo tiene esta suerte. Por mi parte puedo decir que la TUM (mi uni) me ofrece un extenso abanico de opciones de dónde poder descargar los papers.

El siguiente sitio ruso nos permite descargar la mayoría de ellos usando como proxy algunas universidades.

http://sci-hub.cc/

Lo que se tiene que hacer es buscar el paper como si estuvieras en google scholar (si ya sabes lo que quieres puedes poner el título). Luego pinchamos sobre el resultado de la búsqueda adecuado y automáticamente el website nos muestra el pdf (eso si, spameado con publicidad a tope).

Pero esto no se termina aquí. Si le pones “.sci-hub.iodespués del “.com” del dominio te redirige automáticamente al artículo. Ejemplo: Vemos que http://www.sciencedirect.com/science/article/pii/S0045782501002717 se tiene que pagar pero si ponemos http://www.sciencedirect.com.sci-hub.io/science/article/pii/S0045782501002717 nos pedirá un captcha y luego ya nos mostrará el pdf.

Me cansé de editar documentos Latex a mano

Hace ya un tiempo escribía mis ficheros Latex a mano. Para los que no lo sepan, es un tipo de documento dónde escribes lo que quieres ver. A diferencia de Word no lo puedes hacer de forma visual sino que para que nos entendamos lo “programas”. Una vez terminado el documento lo compilas (como los programas) y tienes un pdf muy bonito. Latex lo hace bastante fácil para los dominios técnicos con las fórmulas y todo eso.

Escribirlos a mano queda de hacker badass, pero es algo duro. Para esto busqué una solución sencilla. Y esta solución la voy a compartir con vosotros (que majo que soy :D)
Lo mejor que he encontrado ha sido Kile. Lo mejor de todo es que funciona en Linux (party!!!). Lo recomiendo porqué:

  • Tiene interfaz gráfica
  • Completa los comandos
  • Tiene corrector ortográfico
  • Compila y muestra el documento con un click
  • Te señala los errores
  • Puedes tener la lista de tus ficheros latex

Nada más que añadir!

Que formato es el mejor para guardar números con decimales (float)?

Hace ya algunos días que le estoy dando vueltas al crear un script que me cogiera determinados datos y los fuera guardando en un archivo. Como quiero guardar muchos datos durante un largo periodo de tiempo he pensado que quizás debería empezar por lo básico. Que formato de archivo es mejor para almacenar este tipo de datos.

Para averiguar que formato es el ideal para tal propósito he ideado un script en python que lo que hace es generar cuatro números aleatorios entre -10 y 10 por cada una de las 100.000 hileras disponibles (en total 400.000 valores). Luego, usando el mismo data set, he almacenado esta información usando distintos formatos. Los formatos que he usado son texto plano, CSV, TSV, JSON, SQLite y HDF5. Estos formatos son los que me han parecido adecuados para este tipo de tarea. He dejado fuera XML porque me pareció que tiene gran similitud con JSON y realmente no necesito la jerarquía ni flexibilidad que este formato me ofrece.

Véase que el mismo script indica el tamaño de cada fichero. El tiempo de ejecución es de unos 65 segundos en mi laptop.

El script:

[code language=”python”]

import numpy as np
import os
from os import listdir
from os.path import isfile, join

import json
import csv
import sqlite3
import h5py #pip install h5py

#generated 4 rows with number_of_floats data
def data_generation(number_of_floats):
ret = np.ndarray((number_of_floats, 4))
for i in range(number_of_floats):
ret[i] = np.random.uniform( -10, 10, 4 )
return ret

#standard text saving
def save_text_file(data):
f = open(‘text.txt’, ‘w’)
for el in data:
f.write(str(el).strip(‘[]’))
f.write(‘\n’)
f.close()
return True

#saving with json files
def save_json(data):
f = open(‘json.json’, ‘w’)
j=json.dumps(data.tolist())
json.dump(j, f)
f.close()
return True

#saving numbers on csv
def save_csv(data):
with open(‘csv.csv’, ‘w’) as csvfile:
fieldnames = [‘Col_A’, ‘Col_B’, ‘Col_C’, ‘Col_D’]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
for el in data:
writer.writerow({‘Col_A’: str(el[0]), ‘Col_B’: str(el[1]),’Col_C’: str(el[2]),’Col_D’: str(el[3])})
return True

#Tab Separated Values (TSV)
def save_tsv(data):
with open(‘tsv.tsv’, ‘w’) as tsvfile:
writer = csv.writer(tsvfile, delimiter=’\t’)
for el in data:
writer.writerow(el)
return True

#save data in sqlite
def save_sqlite(data):
conn = sqlite3.connect(‘data.sqlite3’)
cur = conn.cursor()
cur.execute(‘DROP TABLE IF EXISTS Data ‘)
cur.execute(‘CREATE TABLE Data (Col_A REAL, Col_B REAL, Col_C REAL, Col_D REAL)’)
for el in data:
cur.execute(‘INSERT INTO Data VALUES (‘+str(el[0])+’, ‘+str(el[1])+’, ‘+str(el[2])+’, ‘+str(el[3])+’)’)
conn.commit()
conn.close()

#save the data in a hdf file
def save_hdf(data):
h = h5py.File(‘data.hdf5’, ‘w’)
dset = h.create_dataset(‘data’, data=data)

#check the file size
def show_file_size():
mypath = ‘.’
onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
for fil in onlyfiles:
statinfo = os.stat(fil)
print ‘name: ‘+str(fil)
print ‘size: ‘+str(statinfo.st_size)
print ‘ ‘
print onlyfiles

##############################
#
# Main
#
##############################

data = data_generation(100000)
save_text_file(data)
save_csv(data)
save_json(data)
save_csv(data)
save_tsv(data)
save_sqlite(data)
save_hdf(data)
show_file_size()
print ‘Done’

[/code]

Finalmente los resultados:

data-format-comparsion-plot

Formato Tamaño (Bytes)
Texto plano 4806060
CSV 5900742
TSV 7901330
JSON 8109034
SQLite 4468736
HDF5 3202144

Como se puede observar HDF5 es el ganador claramente siendo casi un 30% menor en tamaño que Sqlite que está ocupando el segundo lugar. No es de extrañar puesto que HDF es un formato de fichero diseñado especialmente para organizar y almacenar grandes cantidades de datos (ideado para supercomputadores). Para nuestra suerte las librerías tienen licencia BSD permitiendo mejoras y creación aplicaciones por parte de terceros. Lo que no me esperaba es que TSV obtuviera un tamaño similar a JSON y no a CSV. Sinceramente pensaba que CSV y TSV eran básicamente lo mismo.

Bonus: Para los interesados el script está en github.

Inclusión de publicaciones científicas en Google Scholar

Google Scholar es el motor de búsqueda que tiene como fin de devolver todos los artículos relacionados con unas determinadas palabras clave. Prestigiosas organizaciones como IEEE o ACM ya son incluidas por defecto en el índice de Google Scholar pero si eres un autor individual la cosa se complica un poco más.

Principalmente tienes dos grandes requisitos. El primero es que subas el fichero con la publicación en formato pdf a tu sitio web. El segundo requisito es que tengas una página que actualices indicando todas las publicaciones que has escrito y colaborado a escribir con el link directo hacia el fichero pdf. El fichero pdf además debe cumplir una serie de requisitos:

  1. La publicación que está en formato PDF debe terminar con la extensión .pdf

  2. El título de la publicación aparece en la primera página con un tamaño de fuente mayor al resto del texto.

  3. Justo debajo del título, en una linea nueva, aparecen los autores.

  4. La publicación contiene un apartado con uno de los siguientes nombres “References” o “Bibliography”.

Con esto debería bastar, sino recomiendo echarle una ojeada a las directrices de Google Scholar.

Fuente: http://scholar.google.de/intl/en/scholar/inclusion.html