#!/usr/bin/env python
# coding: utf-8
# # Indicadores Instituto de Física
# Código de tabla de contenidos en la próxima celda invisible
#
#
#
# ### Función de búsqueda
# Para obtener las claves de las hojas de cálculo de Google, visita la [página de búsqueda de Indicadores](http://gfif.udea.edu.co/gssis/sql_query/search.html): (Seleccione indicador, ponga `*` en la caja de `"select"`, pulse el botón de búsqueda y abra el link HTML).
# In[12]:
get_ipython().run_line_magic('pylab', 'inline')
# In[1]:
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
# Make dir for output files
# In[2]:
get_ipython().run_cell_magic('bash', '', 'if [ ! -d indicadores ];then \n mkdir indicadores\nfi\n')
# In[3]:
cd indicadores
# Estudiantes
# ### Ejemplo salida $\LaTeX$
# #### Estudiantes graduados de doctorado de GFIF:
# ##### Obtener cvs filtrado con el query de google scholar:
# In[4]:
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
# ##### Or: Obtener cvs completo, mirar sus columnas y hacer el `query` con pandas
# In[5]:
df=read_google_cvs(gss_key='0AuLa_xuSIEvxdERYSGVQWDBTX1NCN19QMXVpb0lhWXc',\
gss_sheet=2,\
gss_query="select *")
df.columns
# In[6]:
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)
# See [Compile a LaTeX document into a png image](http://tex.stackexchange.com/questions/11866/compile-a-latex-document-into-a-png-image-thats-as-short-as-possible):
# In[7]:
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()
# In[8]:
get_ipython().run_cell_magic('bash', '', 'pdflatex -shell-escape doctorado.tex > /dev/null\n')
# In[9]:
from IPython.display import Image
Image(filename='doctorado.png')
# In[10]:
catutf8('doctorado.tex')
# ### Estudiantes Graduados Doctorado en Física por Grupos
# In[13]:
dft=df[df['Estado']=='Graduado']
dft['GRUPO'].value_counts().plot(kind='barh', rot=0)
#plt.savefig('doc.pdf')
# Proyectos vigentes
# A continuación obtendremos una lista en $\LaTeX$ con los proyectos vigentes del Grupo GFIF
# In[14]:
df=read_google_cvs(gss_key='0AjqGPI5Q_Ez6dFE1S2pWQkZJdFkycWFvNXdaMDhkWFE',gss_query="select *")
df.columns
# 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'`
# In[15]:
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
# In[16]:
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']]
# Prepare $\LaTeX$ output
# In[17]:
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()
# In[18]:
get_ipython().run_cell_magic('bash', '', 'pdflatex -shell-escape proyectos.tex >/dev/null\npdfcrop proyectos.pdf proyectos.pdf >/dev/null\nconvert -resize 559x749 -density 300 proyectos.pdf proyectos.png\n')
# Open file generated without `-resize` in a new tab to get default size. The resize:
# In[17]:
1.7*pd.np.asarray([329,441])
# In[19]:
from IPython.display import Image
Image(filename='proyectos.png')
# In[20]:
catutf8('proyectos.tex')
# Artículos
# ### Por Grupo
# In[36]:
df=read_google_cvs(gss_key='1sZnl3qRMQTfZ2iAp6JFBAtHnqR9rAcBSNcxf7cpuSjM',gss_query="select *")
df.columns
# In[38]:
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:]
# #### Todos los años
# Ejemplos plots con `pandas`: http://pandas.pydata.org/pandas-docs/dev/visualization.html
# In[39]:
publicadas['Grupo'].value_counts()[:10].plot(kind='barh', rot=0)
# #### Últimos cinco años
# In[40]:
import datetime
publicadas5=publicadas[publicadas['Año']>datetime.datetime.now().year-5]
publicadas5['Grupo'].value_counts()[:10].plot(kind='barh', rot=0)
# 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:
# In[41]:
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)
# ### Clasificación Colciencias
# In[42]:
total=publicadas['Clasificación Colciencias'].value_counts()
print "Total A1+A2: ",total['A1']+total['A2']
# In[43]:
publicadas['Clasificación Colciencias'].value_counts().plot(kind='barh')
# #### Últimos cinco años
# In[44]:
total=publicadas5['Clasificación Colciencias'].value_counts()
print "Total A1+A2: ",total['A1']+total['A2']
# In[45]:
publicadas5['Clasificación Colciencias'].value_counts().plot(kind='barh')
# #### Publicadas último año
# In[46]:
import datetime
publicadas1=publicadas[publicadas['Año']>datetime.datetime.now().year-1]
len(publicadas1)
# Factor de impacto
# ### Factor de impacto (FI) en revistas con FI>0
# Factor de impacto de los últimos 4 años. Para publicaciones muy antigüas se usa el FI más antigüo
# In[53]:
publicadas['Factor de Impacto']=publicadas['Factor de Impacto'].replace('Desconocido',-1)
# In[55]:
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()
# In[56]:
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')
# ### Últimos cinco años
# In[58]:
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()
# Por grupo
# In[59]:
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')
# In[60]:
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')
# In[61]:
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')
# In[70]:
get_ipython().run_cell_magic('bash', '', 'pwd\ncd ../..\npwd\ngit commit -a m "Updated Indicadores.ipynb 2014-11-05"\ngit push origin master\n')
# In[64]:
pwd
# In[ ]: