Código de tabla de contenidos en la próxima celda invisible
Para obtener las claves de las hojas de cálculo de Google, visita la página de búsqueda de Indicadores: (Seleccione indicador, ponga *
en la caja de "select"
, pulse el botón de búsqueda y abra el link HTML).
%pylab inline
Populating the interactive namespace from numpy and matplotlib
WARNING: pylab import has clobbered these variables: ['f'] `%matplotlib` prevents importing * from pylab and numpy
import pandas as pd
def read_google_cvs(gss_url="http://spreadsheets.google.com",\
gss_format="csv",\
gss_key="0AuLa_xuSIEvxdERYSGVQWDBTX1NCN19QMXVpb0lhWXc",\
gss_sheet=0,\
gss_query="select B,D,E,F,I where (H contains 'GFIF') order by D desc",\
gss_keep_default_na=False
):
import urllib
import pandas as pd
"""
read a google spreadsheet in cvs format and return a pandas DataFrame object.
....
gss_keep_default_na: (False) Blank values are filled with NaN
"""
issn_url="%s/tq?tqx=out:%s&tq=%s&key=%s&gid=%s" %(gss_url,\
gss_format,\
gss_query,\
gss_key,\
str(gss_sheet))
gfile=urllib.urlopen(issn_url)
return pd.read_csv(gfile,keep_default_na=gss_keep_default_na)
def catutf8(fileutf8):
"""
Print UTF-8 file.
"""
fo=open(fileutf8,'r')
a=fo.read()
a=a.decode('utf8')
fo.close()
print a
#Sample of default search
df=read_google_cvs()
df
ESTUDIANTE | Fecha de ingreso | Fecha de graduación | Estado | ASESOR | |
---|---|---|---|---|---|
0 | Sergio Andrés Vallejo Peña | 20111 | Activo | Antonio Enea Romano | |
1 | Diego Alberto Barón Moreno | 20111 | Activo | Nelson Vanegas Arbeláez | |
2 | Dario de Jesús Blandón Uribe | 20101 | Activo | Diego Restrepo Q. | |
3 | Alejandro Correa López | 20062 | Activo | Oscar Zapata | |
4 | Leidy Mariana Ramírez Quinceno | 20062 | Activo | Daniel Esteban Jaramillo Arango | |
5 | Bibinana Marcela Marín Ochoa | 20062 | 2014 | Graduado | Diego Restrepo Q. |
6 | Silvio Stiven Villegas Castro | 20052 | Activo | William Antonio Ponce Gutierrez | |
7 | Allexandra Gavíria Noreña | 20052 | 2014 | Graduado | Oscar Zapata |
8 | Dilia Maria Portillo | 2008 | 20132 | Graduado | Diego Restrepo Q. |
9 | John David Gómez Aguirre | 2006 | 20111 | Graduado | William Ponce G. |
10 | Camilo Andrés Salazar Gonzalez | 20132 | Graduado | Diego Restrepo Q. | |
11 | Cristian David Ruiz Carvajal | 20132 | Graduado | William Antonio Ponce Gutierrez | |
12 | Robinson Longas | 20112 | Graduado | Diego Restrepo Q. | |
13 | Juan Camilo Macías Ramírez | 20111 | Graduado | Diego Alejandro Restrepo | |
14 | Jose David Ruíz | 20101 | Graduado | Diego Restrepo Q. | |
15 | Mauricio Bustamante | 2008 | Graduado | Jesus Maria Mira Martinez | |
16 | Alexander Gallego Cadavid | 2008 | Graduado | Daniel Esteban Jaramillo Arango | |
17 | Alejandro Javier Smith Arbelaez | 2007 | Graduado | Daniel Esteban Jaramillo Arango | |
18 | Eliana Yanet Chaverra Sánchez | 2007 | Graduado | Daniel Esteban Jaramillo Arango | |
19 | Carlos Andrés Flórez Acosta | 2007 | Graduado | Diego Alejandro Restrepo Quintero | |
20 | Germán Alberto Hernández Herrera | 2008 | Graduado | Diego Alejandro Restrepo Quintero | |
21 | Edison Alejandro Montoya Gómez | 2007 | Graduado | Nelson Vanegas Arbeláez | |
22 | Andrés Arbey Ochoa Rojas | 20072 | Graduado | Diego Alejandro Restrepo Quintero | |
23 | Sally Balbuena | 2007 | Graduado | William Antonio Ponce Gutierrez | |
24 | Mauricio Velásquez | 2006 | Graduado | Diego Alejandro Restrepo Quintero | |
25 | Rafael Antonio Uribe Guerra | 2006 | Graduado | Diego Alejandro Restrepo Quintero | |
26 | Nestor Cifuentes Taborda | 2006 | Graduado | Diego Alejandro Restrepo Quintero | |
27 | César Alejandro Soto | 2006 | Graduado | Nelson Vanegas Arbeláez | |
28 | Ana Maria Calle | 2005 | Graduado | Jesus Maria Mira Martinez | |
29 | Juan Carlos Muñoz Cuartas | 2004 | Graduado | Daniel Esteban Jaramillo Arango | |
30 | Oscar Alberto Zapata Noreña | 2003 | Graduado | Diego Alejandro Restrepo Quintero | |
31 | Carlos Mario Cartagena Marín | 2000 | Graduado | Nelson Vanegas Arbeláez | |
32 | Marcela Ramirez | Activo | Daniel Esteban Jaramillo Arango | ||
33 | Camilo Santa | Desertor | Oscar Zapata |
Make dir for output files
%%bash
if [ ! -d indicadores ];then
mkdir indicadores
fi
cd indicadores
/home/ipython/gssis/pandas/indicadores
dff=read_google_cvs(gss_key='0AuLa_xuSIEvxdERYSGVQWDBTX1NCN19QMXVpb0lhWXc',\
gss_sheet=2,\
gss_query="select+B,E,I,U+where+(H+contains+'GFIF'+and+F+contains+'Graduado')+order+by+D+desc")
dff
ESTUDIANTE | Fecha de graduación | ASESOR | Situación | |
---|---|---|---|---|
0 | Mauricio Velásquez López | 2013-1 | Diego Restrepo Q. | |
1 | Richard H. Benavides Palacios | 2011-2 | William Ponce G. | Normal |
2 | Yithsbey Giraldo Usuga | 2009-2 | William Ponce G. | |
3 | Luis A. Muñoz Hernández | 2010-2 | Enrico Nardi | Prórroga 1 (2009-2) |
4 | Oscar Zapata Noreña | 2010-2 | Diego Restrepo Q. | |
5 | Diego A. Gutierrez Isaza | 2009-1 | William Ponce G. | |
6 | José Patricio Valencia Valencia | 2006-2 | Huanchuan Wu | |
7 | Jorge Ivan Zuluaga Callejas | 2004-2 | Enrico Nardi | |
8 | Luis Alberto Sanchez Duque | 2002-2 | William Ponce G., Daniel Jaramillo | |
9 | Jesús María Mira Martínez | 2000-2 | Enrico Nardi |
query
con pandas¶df=read_google_cvs(gss_key='0AuLa_xuSIEvxdERYSGVQWDBTX1NCN19QMXVpb0lhWXc',\
gss_sheet=2,\
gss_query="select *")
df.columns
Index([u'Unnamed: 0', u'ESTUDIANTE', u'Cédula', u'Fecha de ingreso', u'Fecha de graduación', u'Estado', u'INSTITUTO', u'GRUPO', u'ASESOR', u'CORREO', u'NOMBRE TESIS', u'CODIRECTOR', u'JURADO 1', u'JURADO 2', u'JURADO 3', u'Fecha de sustentación', u'ESTANTE', u'SIGNATURA', u'Distinción', u'Becado de', u'Situación', u'Proyecto ID', u'Pasantía', u'Doble titulación', u'Estado Laboral'], dtype='object')
dff=df[pd.np.logical_and(df['GRUPO'].str.contains('GFIF'),df['Estado']=='Graduado')]
dff=dff[['ESTUDIANTE','Fecha de graduación','ASESOR','Estado Laboral']]
dff.reset_index(drop=True)
ESTUDIANTE | Fecha de graduación | ASESOR | Estado Laboral | |
---|---|---|---|---|
0 | Mauricio Velásquez López | 2013-1 | Diego Restrepo Q. | |
1 | Richard H. Benavides Palacios | 2011-2 | William Ponce G. | ITM |
2 | Yithsbey Giraldo Usuga | 2009-2 | William Ponce G. | Universidad de Nariño |
3 | Luis A. Muñoz Hernández | 2010-2 | Enrico Nardi | ITM |
4 | Oscar Zapata Noreña | 2010-2 | Diego Restrepo Q. | UdeA |
5 | Diego A. Gutierrez Isaza | 2009-1 | William Ponce G. | ITM |
6 | José Patricio Valencia Valencia | 2006-2 | Huanchuan Wu | UdeA |
7 | Jorge Ivan Zuluaga Callejas | 2004-2 | Enrico Nardi | UdeA |
8 | Luis Alberto Sanchez Duque | 2002-2 | William Ponce G., Daniel Jaramillo | UNAL sede Medellìn |
9 | Jesús María Mira Martínez | 2000-2 | Enrico Nardi | UdeA |
f=open('doctorado.tex','w')
#f.write(r'\documentclass[convert]{standalone}')
f.write(r'''\documentclass[convert={size=800x600}]{standalone}
\usepackage[utf8]{inputenc}
\begin{document}
''')
s=dff.to_latex(index=False)
f.write(s.encode("utf"))
f.write(r'\end{document}')
f.close()
%%bash
pdflatex -shell-escape doctorado.tex > /dev/null
from IPython.display import Image
Image(filename='doctorado.png')
catutf8('doctorado.tex')
\documentclass[convert={size=800x600}]{standalone} \usepackage[utf8]{inputenc} \begin{document} \begin{tabular}{llll} \toprule ESTUDIANTE & Fecha de graduación & ASESOR & Estado Laboral \\ \midrule Mauricio Velásquez López & 2013-1 & Diego Restrepo Q. & \\ Richard H. Benavides Palacios & 2011-2 & William Ponce G. & ITM \\ Yithsbey Giraldo Usuga & 2009-2 & William Ponce G. & Universidad de Nariño \\ Luis A. Muñoz Hernández & 2010-2 & Enrico Nardi & ITM \\ Oscar Zapata Noreña & 2010-2 & Diego Restrepo Q. & UdeA \\ Diego A. Gutierrez Isaza & 2009-1 & William Ponce G. & ITM \\ José Patricio Valencia Valencia & 2006-2 & Huanchuan Wu & UdeA \\ Jorge Ivan Zuluaga Callejas & 2004-2 & Enrico Nardi & UdeA \\ Luis Alberto Sanchez Duque & 2002-2 & William Ponce G., Daniel Jaramillo & UNAL sede Medellìn \\ Jesús María Mira Martínez & 2000-2 & Enrico Nardi & UdeA \\ \bottomrule \end{tabular} \end{document}
dft=df[df['Estado']=='Graduado']
dft['GRUPO'].value_counts().plot(kind='barh', rot=0)
#plt.savefig('doc.pdf')
<matplotlib.axes._subplots.AxesSubplot at 0x7f6850102a90>
A continuación obtendremos una lista en $\LaTeX$ con los proyectos vigentes del Grupo GFIF
df=read_google_cvs(gss_key='0AjqGPI5Q_Ez6dFE1S2pWQkZJdFkycWFvNXdaMDhkWFE',gss_query="select *")
df.columns
Index([u'Timestamp', u'Username', u'Proyecto ID', u'Título', u'Investigador Principal', u'Acta', u'Fecha de Inicio', u'Fecha de Finalización', u'Tipo', u'Centro', u'Grupo', u'Valor Total', u'Recursos Frescos', u'Número de contrato'], dtype='object')
Adicione una nueva columna al DataFrame de pandas filtrado con los proyectos de 'GFIF'
, con el año obtenido a partir de la 'Fecha de Finalización'
df=df[df['Grupo'].str.contains('GFIF')]
df=df.reset_index(drop=True)
year=[]
for i in range(df.shape[0]):
year.append(int(df['Fecha de Finalización'][i].split('-')[0]))
df['Año de Finalización']=year
import datetime
dff=df[df['Año de Finalización']>=datetime.datetime.now().year]
dff=dff.sort(['Fecha de Inicio'],ascending=False)
dff=dff.reset_index(drop=True)
dff[['Investigador Principal','Fecha de Inicio','Tipo']]
Investigador Principal | Fecha de Inicio | Tipo | |
---|---|---|---|
0 | Eduardo Rojas Peña | 2015-03-18 | Postdoc COLCIENCIAS |
1 | Óscar Zapata | 2015-03-01 | Colciencias |
2 | Diego Alejandro Restrepo Quintero | 2014-10-20 | Convocatoria Programática Ciencias Exactas 201... |
3 | Diego Restrepo | 2014-10-13 | Sostenibilidad |
4 | Óscar Alberto Zapata Noreña | 2014-03-14 | Convocatoria Ciencias Exactas |
5 | William Ponce | 2014-02-17 | Convocatoria Ciencias Exactas |
6 | Antonio Enea Romano | 2013-10-01 | SUI 2013 |
7 | Oscar Zapata | 2013-08-21 | ICTP |
8 | Diego Restrepo | 2013-08-21 | ICTP |
Prepare $\LaTeX$ output
f=open('proyectos.tex','w')
f.write(r'''\documentclass{article}
\usepackage[utf8]{inputenc}
\pagestyle{empty}
\begin{document}
\begin{itemize}
''')
for i in range(dff.shape[0]):
f.write(r'''\item %s
\begin{itemize}
\item Investigador principal: %s
\item Fecha de inicio y tipo: %s, %s
\end{itemize}
''' %(dff['Título'][i],\
dff['Investigador Principal'][i],\
dff['Fecha de Inicio'][i].split('-')[0],\
dff['Tipo'][i])
)
f.write(r'''\end{itemize}
\end{document}
''')
f.close()
%%bash
pdflatex -shell-escape proyectos.tex >/dev/null
pdfcrop proyectos.pdf proyectos.pdf >/dev/null
convert -resize 559x749 -density 300 proyectos.pdf proyectos.png
Open file generated without -resize
in a new tab to get default size. The resize:
1.7*pd.np.asarray([329,441])
array([ 559.3, 749.7])
from IPython.display import Image
Image(filename='proyectos.png')
catutf8('proyectos.tex')
\documentclass{article} \usepackage[utf8]{inputenc} \pagestyle{empty} \begin{document} \begin{itemize} \item Fenomengología de bosones vectorial neutros extra \begin{itemize} \item Investigador principal: Eduardo Rojas Peña \item Fecha de inicio y tipo: 2015, Postdoc COLCIENCIAS \end{itemize} \item Fenomenología de modelos escotogénicos \begin{itemize} \item Investigador principal: Óscar Zapata \item Fecha de inicio y tipo: 2015, Colciencias \end{itemize} \item Fenomenología de modelos con materia oscura escalar y masas de neutrinos \begin{itemize} \item Investigador principal: Diego Alejandro Restrepo Quintero \item Fecha de inicio y tipo: 2014, Convocatoria Programática Ciencias Exactas 2014-2015 \end{itemize} \item Estrategia para la Sostenibilidad GFIF 2015-2016 \begin{itemize} \item Investigador principal: Diego Restrepo \item Fecha de inicio y tipo: 2014, Sostenibilidad \end{itemize} \item Implicaciones de modelos tipo seesaw radiativo en las fronteras de la física de partículas y la cosmología \begin{itemize} \item Investigador principal: Óscar Alberto Zapata Noreña \item Fecha de inicio y tipo: 2014, Convocatoria Ciencias Exactas \end{itemize} \item Masas y mezclas de neutrinos en modelos 3-N-1 (N=3,4) \begin{itemize} \item Investigador principal: William Ponce \item Fecha de inicio y tipo: 2014, Convocatoria Ciencias Exactas \end{itemize} \item Cosmological effects of local inhomogeneities \begin{itemize} \item Investigador principal: Antonio Enea Romano \item Fecha de inicio y tipo: 2013, SUI 2013 \end{itemize} \item ICTP Simons Associate \begin{itemize} \item Investigador principal: Oscar Zapata \item Fecha de inicio y tipo: 2013, ICTP \end{itemize} \item ICTP Simons Associate \begin{itemize} \item Investigador principal: Diego Restrepo \item Fecha de inicio y tipo: 2013, ICTP \end{itemize} \end{itemize} \end{document}
df=read_google_cvs(gss_key='1sZnl3qRMQTfZ2iAp6JFBAtHnqR9rAcBSNcxf7cpuSjM',gss_query="select *")
df.columns
Index([u'Timestamp', u'Username', u'Año', u'Tipo', u'Autor(es)', u'Revista', u'Vol.', u'pág.', u'ISSN', u'Artículo', u'Impreso', u'PDF', u'Grupo', u'DOI', u'Tipo.1', u'Rótulo', u'Autores de la UdeA', u'Clasificación Colciencias', u'Factor de Impacto', u'Proyecto'], dtype='object')
publicadas=df[df['ISSN']!='0000-0000']
publicadas=publicadas.reset_index(drop=True)
publicadas=publicadas.replace('','Desconocido')
#Ejemplo visualización
publicadas[['Año','Autor(es)','Artículo','Vol.','pág.','ISSN','Revista','Grupo','DOI','Clasificación Colciencias','Factor de Impacto']][publicadas['DOI']!='Not DOI'][-5:]
Año | Autor(es) | Artículo | Vol. | pág. | ISSN | Revista | Grupo | DOI | Clasificación Colciencias | Factor de Impacto | |
---|---|---|---|---|---|---|---|---|---|---|---|
980 | 2014 | Romano, Antonio Enea; Chiang, Hsu-Wen; Chen, P... | A new method to determine large scale structur... | 31 | 115008 | 0264-9381 | Classical and Quantum Gravity | GFIF: Grupo de Fenomenología de Interacciones ... | 10.1088/0264-9381/31/11/115008 | A1 | 3.2 |
982 | 2013 | Romano, Antonio Enea; | Can smooth LTB models mimicking the cosmologic... | 45 | Desconocido | 0001-7701 | General Relativity and Gravitation | GFIF: Grupo de Fenomenología de Interacciones ... | 10.1007/s10714-013-1602-1 | A1 | 1.9 |
983 | 2015 | Cadavid, Alexander Gallego; Romano, Antonio En... | Effects of discontinuities of the derivatives ... | 75 | Desconocido | 1434-6044 | European Physical Journal C | GFIF: Grupo de Fenomenología de Interacciones ... | 10.1140/epjc/s10052-015-3733-x | A1 | 5.2 |
985 | 2015 | Hollyhead, Katherine; Bastian, Nate; Adamo, An... | Studying the YMC population of M83: how long c... | 449 | Desconocido | 0035-8711 | Monthly Notices of the Royal Astronomical Society | Desconocido | 10.1093/mnras/stv331 | A1 | 5.5 |
986 | 2014 | Bastian, N; Adamo, Angela; Schirmer, M; Hollyh... | The effect of spatial resolution on optical an... | 444 | Desconocido | 0035-8711 | Monthly Notices of the Royal Astronomical Society | Desconocido | 10.1093/mnras/stu1695 | A1 | 5.5 |
Ejemplos plots con pandas
: http://pandas.pydata.org/pandas-docs/dev/visualization.html
publicadas['Grupo'].value_counts()[:10].plot(kind='barh', rot=0)
<matplotlib.axes._subplots.AxesSubplot at 0x7f68480f0390>
import datetime
publicadas5=publicadas[publicadas['Año']>datetime.datetime.now().year-5]
publicadas5['Grupo'].value_counts()[:10].plot(kind='barh', rot=0)
<matplotlib.axes._subplots.AxesSubplot at 0x7f683e7a0510>
Internacionales y Nacionales
The group counts, analogous to the value_counts function above, can be computed using size. This result is then reshaped into a table with unstack:
tipo5 = np.where(publicadas5['Tipo'].str.contains('Internacional'),'Internacional', 'Nacional')
by_group_tipo5 = publicadas5.groupby(['Grupo', tipo5])
gt_counts = by_group_tipo5.size().unstack().fillna(0)
indexer = gt_counts.sum(1).argsort()
count_subset = gt_counts.take(indexer)
count_subset[4:].plot(kind='barh', stacked=True)
<matplotlib.axes._subplots.AxesSubplot at 0x7f683e692790>
total=publicadas['Clasificación Colciencias'].value_counts()
print "Total A1+A2: ",total['A1']+total['A2']
Total A1+A2: 740
publicadas['Clasificación Colciencias'].value_counts().plot(kind='barh')
<matplotlib.axes._subplots.AxesSubplot at 0x7f683e6b59d0>
total=publicadas5['Clasificación Colciencias'].value_counts()
print "Total A1+A2: ",total['A1']+total['A2']
Total A1+A2: 208
publicadas5['Clasificación Colciencias'].value_counts().plot(kind='barh')
<matplotlib.axes._subplots.AxesSubplot at 0x7f683e601890>
import datetime
publicadas1=publicadas[publicadas['Año']>datetime.datetime.now().year-1]
len(publicadas1)
3
Factor de impacto de los últimos 4 años. Para publicaciones muy antigüas se usa el FI más antigüo
publicadas['Factor de Impacto']=publicadas['Factor de Impacto'].replace('Desconocido',-1)
fi=publicadas[['Factor de Impacto']].replace('null',0)
fii=fi[fi['Factor de Impacto']>0].reset_index(drop=True)
fii.astype('float')['Factor de Impacto'].hist()
<matplotlib.axes._subplots.AxesSubplot at 0x7f683e32b950>
for group in ['GFIF','GES','GFAM','GMC','GOF','MS']:
fi=publicadas[publicadas['Grupo'].str.contains(group)][['Factor de Impacto']].replace('null',0)
fii=fi[fi['Factor de Impacto']>0].reset_index(drop=True)
fii.astype('float')['Factor de Impacto'].hist(label=group)
plt.legend(loc='best')
publicadas5['Factor de Impacto']=publicadas5['Factor de Impacto'].replace('Desconocido',-1)
fi=publicadas5[['Factor de Impacto']].replace('null',0)
fii=fi[fi['Factor de Impacto']>0].reset_index(drop=True)
fii.astype('float')['Factor de Impacto'].hist()
/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_index,col_indexer] = value instead if __name__ == '__main__':
<matplotlib.axes._subplots.AxesSubplot at 0x7f683e2ab1d0>
Por grupo
for group in ['GFIF','GES','GFAM','GMC','GOF','MS']:
fi=publicadas5[publicadas5['Grupo'].str.contains(group)][['Factor de Impacto']].replace('null',0)
fii=fi[fi['Factor de Impacto']>0].reset_index(drop=True)
fii.astype('float')['Factor de Impacto'].hist(label=group)
plt.legend(loc='best')
for group in ['GMC','GFAM']:
fi=publicadas5[publicadas5['Grupo'].str.contains(group)][['Factor de Impacto']].replace('null',0)
fii=fi[fi['Factor de Impacto']>0].reset_index(drop=True)
fii.astype('float')['Factor de Impacto'].hist(label=group)
plt.legend(loc='best')
for group in ['GMC','GES']:
fi=publicadas5[publicadas5['Grupo'].str.contains(group)][['Factor de Impacto']].replace('null',0)
fii=fi[fi['Factor de Impacto']>0].reset_index(drop=True)
fii.astype('float')['Factor de Impacto'].hist(label=group)
plt.legend(loc='best')
%%bash
pwd
cd ../..
pwd
git commit -a m "Updated Indicadores.ipynb 2014-11-05"
git push origin master
/home/ipython/gssis/pandas/indicadores /home/ipython/gssis
fatal: Paths with -a does not make sense. Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
pwd
u'/home/ipython/gssis/pandas/indicadores'