STOP WARNINGS: http://stackoverflow.com/q/26724378/2268280
Try: pd.options.mode.chained_assignment = None # default='warn'
print '''Copy the next code into a first Raw NBconvert Cell to avoid display the commands
<style type="text/css">
.input, .output_prompt {
display:none !important;
}
</style>
'''
Copy the next code into a first Raw NBconvert Cell to avoid display the commands <style type="text/css"> .input, .output_prompt { display:none !important; } </style>
'b' to hide presentation
Links:
The commands in the final Cell gives the separation of slides and arrows:
%%bash
#ipython nbconvert Indicadores-articulos.ipynb --to slides --reveal-prefix "http://cdn.jsdelivr.net/reveal.js/2.6.2"
#cp Indicadores-articulos.slides.html Indicadores-articulos-simple.slides.html
#cp Indicadores-articulos.slides.html /var/www/downloads
#cp Indicadores-articulos-simple.slides.html /var/www/downloads
#git commit -am "Slides update"
#git push origin master
This notebook can be run directly from http://mybinder.org/restrepo/indicadores
%pylab inline
pylab.rcParams['figure.figsize'] = (10, 6)
matplotlib.rcParams.update({'font.size': 15})
#identificadores de Grupo:
s={'GFIF':'g-','GES':'r:','GMC':'c--','GOF':'m-.','MS':'y-','GFAM':'k:','FACOM':'b-'}
Populating the interactive namespace from numpy and matplotlib
import pandas as pd
import numpy as np
import datetime
import re
import time
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_colwidth',500)
#stop warnings: use with caution!
pd.options.mode.chained_assignment = None # default='warn'
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
"""
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 plainstr(stra):
return stra.replace('á','a').replace('é','e').replace('í','i').\
replace('ó','o').replace('ú','u').replace('ñ','n')
csvreader_udea.py
del repositorio http://github.com/restrepo/gssis -> utilities
'ESTUDIANTE','ASESOR','Estado','Fecha de ingreso','Fecha de graduación','GRUPO','PROGRAMA'
(Desde la hoja de cálculo en Google Drive)
Para actualizar use
Offline=False
Offline=False
if not Offline:
df=pd.read_csv('https://raw.githubusercontent.com/restrepo/gssis/master/utilities/newcitations.csv')
df.to_csv('newcitations.csv',index=False)
pc=read_google_cvs(gss_key='1yQXdQdzsX9zBeui52bMcnN-JMt87ofHDjA58kwGJsdI',gss_query="select *")
pc.to_csv('pd.csv',index=False)
dfd=read_google_cvs(gss_key="0AuLa_xuSIEvxdERYSGVQWDBTX1NCN19QMXVpb0lhWXc",gss_query="select *",gss_sheet=2)
dfd['PROGRAMA']='Doctorado'
dfm=read_google_cvs(gss_key="0AuLa_xuSIEvxdERYSGVQWDBTX1NCN19QMXVpb0lhWXc",gss_query="select *",gss_sheet=1)
dfm['PROGRAMA']='Maestría'
dfe=dfd.append(dfm)
dfe[['ESTUDIANTE','ASESOR','Estado','Fecha de ingreso','Fecha de graduación','GRUPO','PROGRAMA']].to_csv('dfe.csv',index=False)
else:
df=pd.read_csv('newcitations.csv')
pc=pd.read_csv('pd.csv')
pc=pc.fillna('')
dfe=pd.read_csv('dfe.csv')
dfe=dfe.fillna('')
Con el programa csvreader_udea.py
en la carpeta utilities
del repositorio de GitHub: gssis se añade la siguiente información:
En este Notebook de Ipython además se añade la siguiente información
csv
desde pandas
. El título del artículo, en la base de datos enriquecida de artículos, puede ser contrastado con la columna de información de la hoja de cáculo de citaciones para asignarle el número de citas correspondiente. De ser necesario se puede recurrir a otra información de artículo como por ejemplo: el volumen de la revista en que fue publicadoEl resultado final esta en el repositorio de GitHub: restrepo/indicadores, en el archivo newcitations_extended.csv
.
Desde el repositorio de GitHub
df.columns
#Already deleted in Google Profile
for i in df[np.logical_and(df['Institution Authors'].str.contains('Romano'),df.Year<2011)].index:
df.DOI.ix[i]='Not DOI';df.ISSN.ix[i]='0000-0000'
for i in df[df.Title.str.contains('Collider aspects of flavor physics at high Q')].index:
df.Group.ix[i]='GFIF: Grupo de Fenomenología de Interacciones Fundamentales'
df['Institution Authors'].ix[i]='Restrepo Quintero Diego Alejandro'
for i in df[df.Title.str.contains('The hunt for new physics at the Large Hadron Collider')].index:
df.Group.ix[i]='GFIF: Grupo de Fenomenología de Interacciones Fundamentales'
df['Institution Authors'].ix[i]='Restrepo Quintero Diego Alejandro'
df.Group=df.Group.fillna('Unknown')
jdr=pd.DataFrame()
for issn in ['1126-6708','1550-7998','0370-2693']:
jdr=jdr.append( df[np.logical_and(df.Group=='Unknown',df.ISSN==issn)] )
for i in jdr.index:
df.Group[i]='GFIF: Grupo de Fenomenología de Interacciones Fundamentales'
df['Institution Authors'][i]='José David Ruíz Álvarez'
jdr
i=df[df.Publication.str.lower().str.contains('nature')].index[0]
df.Group.ix[i]='GFAM: Grupo de Física Atómica y Molecular'
df['Institution Authors'].ix[i]='Sanz Vicario José Luis'
df['Impact Factor'].ix[i]='41,456'
df['ISSN'].ix[i]='0028-0836'
df['Colciencias Clasification'].ix[i]='A1'
df['Institution Authors']=df['Institution Authors'].fillna('NN')\
.str.replace('Mora Ramos Miguel; ','')
for i in df[np.logical_and( df['Institution Authors'].str.contains('Morales Aramburo Álvaro'),\
df.Authors.str.contains('Duque, C') )].index:
df.Group.ix[i]='GMC: Grupo de Materia Condensada'
for i in df[np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('Osorio-Guillén') ) ].index:
df.Group.ix[i]='GES: Estado Sólido'
df['Institution Authors'].ix[i]='Osorio Guillén Jorge Mario'
for i in df[np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('Mira-Agudelo, A') ) ].index:
df.Group.ix[i]='GOF: Grupo Óptica y Fotónica'
df['Institution Authors'].ix[i]='Mira Agudelo Alejandro'
for i in df[np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('CMS collaboration') ) ].index:
df.Group.ix[i]='GFIF: Grupo de Fenomenología de Interacciones Fundamentales'
df['Institution Authors'].ix[i]='José David Ruíz Álvarez'
for i in df[np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('Saavedra, JA') ) ].index:
df.Group.ix[i]='GFIF: Grupo de Fenomenología de Interacciones Fundamentales'
df['Institution Authors'].ix[i]='José David Ruíz Álvarez'
for i in df[df['Institution Authors']=='José David Ruíz Alvárez'].index:
df['Institution Authors'].ix[i]='José David Ruíz Álvarez'
for i in df[np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('Longas, R') ) ].index:
df.Group.ix[i]='GFIF: Grupo de Fenomenología de Interacciones Fundamentales'
df['Institution Authors'].ix[i]='Longa Robinson'
for i in df[np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('Quintero, Diego Alejandro Restrepo') ) ].index:
df.Group.ix[i]='GFIF: Grupo de Fenomenología de Interacciones Fundamentales'
df['Institution Authors'].ix[i]='Restrepo Quintero Diego Alejandro'
for i in df[np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('Mazo‐Zuluaga, J') ) ].index:
df.Group.ix[i]=='GES: Estado Sólido'
df['Institution Authors'].ix[i]= 'Mazo Zuluaga Johan'
for i in df[np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('Vera, Carlos A') ) ].index:
df.Group.ix[i]='GFAM: Grupo de Física Atómica y Molecular'
df['Institution Authors'].ix[i]='Vera Carlos'
for i in df.fillna('')[np.logical_and(np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('Plésiat, E') ), df.Pages>0 )].index:
df.Group.ix[i]='GFAM: Grupo de Física Atómica y Molecular'
df['Institution Authors'].ix[i]='Sanz Vicario José Luis'
for i in df[np.logical_and(df['Institution Authors']=='NN',df.Authors.str.contains('Heller, René') ) ].index:
df.Group.ix[i]='FACOM: Física y Astrofísica Computacional'
df['Institution Authors'].ix[i]='Zuluaga Callejas Jorge Iván'
df['First_UdeA_Author']=df['Institution Authors'].str.replace(';.*','')
df['Año']=df.Year
df['Tipo']=df.Type
df['Autor(es)']=df.Authors
df['Artículo']=df.Title
df['Vol.']=df.Volume
df['pág.']=df.Pages
df['Revista']=df.Publication
df['Grupo']=df.Group
df['Clasificación Colciencias']=df['Colciencias Clasification']
df['Factor de Impacto']=df['Impact Factor']
df['Area']='Desconocida'
for G in ['GMC','FACOM','GFAM','MS','GFIF','FN']:
for i in df[df.Grupo.str.contains(G)].index:
df.Area.ix[i]='Teórica'
for G in ['GICM','GES','GOF','Biofísica','FIR']:
for i in df[df.Grupo.str.contains(G)].index:
df.Area.ix[i]='Experimental'
#manual fix
for TGES in ['Morales Aramburo Álvaro','Osorio Guillén Jorge Mario','Reyes Gómez Ernesto Amador']:
for i in df[df.First_UdeA_Author.str.contains(TGES)].index:
df.Area.ix[i]='Teórica'
To include in official code cvsreader_udea.py
df['Cites']=0
df['Simple']=df.Title.str.replace(r"[^a-zA-Z0-9 ]", " ").str.lower().str.replace('\s+','')
pc['Simple']=pc.Article.str.replace(r"[^a-zA-Z0-9 ]", " ").str.lower().str.replace('\s+','')
for i in range(df.shape[0]):
mt=pc[pc.Simple.str.match(df.Simple[i])]
if len(mt)>0:
if len(mt)>1: #multiple matches. Refine search with, e.g, volume
mtv=mt[mt.Simple.str.contains(str(df.Volume[i]))]
if len(mtv)>0:
mt=mtv
df['Cites'][i]=mt.Cites.replace('*','').replace('','0').astype(int).max()
Citaciones esperadas: 12994 (Feb. 2016). Obtenidas:
df.Cites.sum()
#Todo: 'Año Graduación' :USAR PARA FILTRAR Profesores cuando eran estudiantes
config_inf={'DEBUG':False} #Development mode
config_inf['Years']=range(1995,2016)
#Convertir YYYY-S a YYYY, e.g 2015-1 a 2015
dfe['Año de ingreso']=dfe['Fecha de ingreso'].replace('','0').replace('null','0').str.replace('-1','').str.replace('-2','').astype('int')
dfe['Año de graduación']=dfe['Fecha de graduación'].replace('','0').replace('null','0').str.replace('-1','').str.replace('-2','').astype('int')#.values
#dfe['Año de graduación'].values
#dfei=dfe[dfe['Año de ingreso']>=config_inf['Years'][0]].reset_index(drop=True)
#dfei=dfe[dfe['Año de graduación']>=config_inf['Years'][0]].reset_index(drop=True)
dfei=dfe[dfe.Estado!='Desertor'].reset_index(drop=True)
#Estudiantes
student_coauthor=1 #until 2 years after graduation date
dfd=pd.Series()
art_est=pd.Series()
dfd['D']=dfei[dfei.PROGRAMA=='Doctorado'].reset_index(drop=True)
dfd['M']=dfei[dfei.PROGRAMA=='Maestría'].reset_index(drop=True)
dfd['P']=dfei
for k in dfd.keys():
art_est[k]=pd.DataFrame()
if k=='P': est_p=pd.DataFrame()
#phdest=pd.DataFrame()
dfd[k]['Author']=''
for i in range(dfd[k].shape[0]):
est=re.sub('\s+$','',re.sub('^\s+','',dfd[k]['ESTUDIANTE'][i])).replace(' ',' ').split(' ')
if len(est)==4:
dfd[k]['Author'][i]='%s, %s' %(plainstr(est[2]),est[0][0])
elif len(est)==3:
dfd[k]['Author'][i]='%s, %s' %(plainstr(est[1]),est[0][0])
elif len(est)==2:
dfd[k]['Author'][i]='%s, %s' %(plainstr(est[1]),est[0][0])
else:
dfd[k]['Author'][i]='%s, %s' %(plainstr(est[-1]),est[0][0])
#special cases
if dfd[k]['Author'][i]=='Duque, C':
dfd[k]['Author'][i]='Duque, CM'
if dfd[k]['Author'][i]=='Restrepo, J':
dfd[k]['Author'][i]='Restrepo Cuartas, J'
ma=df[df['Autor(es)'].str.contains(dfd[k]['Author'][i])]
if ma.shape[0]>0: #Check also Group
ma['Estudiante']=dfd[k]['Author'][i]
ma['Estudiante_full']=dfd[k]['ESTUDIANTE'][i]
ma['Año Graduación']=dfd[k]['Año de graduación'][i]
ma=ma[ma['Año']>=dfd[k]['Año de ingreso'][i]]
if dfd[k]['Fecha de graduación'][i]!='':
ya=dfd[k]['Año de graduación'][i]+student_coauthor
#ya=eval(re.sub('-[12]$','',dfd[k]['Fecha de graduación'][i]))+student_coauthor
ma=ma[ma['Año']<=ya]
art_est[k]=art_est[k].append(ma)
if k=='P':
est_p=art_est[k].drop_duplicates()
art_est[k]=art_est[k].drop_duplicates().reset_index(True).sort_values('Año',ascending=False).reset_index(drop=True)
art_est[k]=art_est[k][['Tipo','Artículo','Autor(es)','Año Graduación','Año','Revista','ISSN','Estudiante']]
df['Estudiantes']='Desconocido'
for i in est_p.index:
lst=sorted(np.unique(est_p['Estudiante_full'][i]))
sep=''
if len(lst)>1: sep='; '
lst=sep.join(lst)
lst=lst.replace('John Jairo Zuluaga Quintero; Jorge Ivan Zuluaga Callejas','Jorge Ivan Zuluaga Callejas')
lst=lst.replace('Johan Mazo-Zuluaga; Jorge Ivan Zuluaga Callejas','Jorge Ivan Zuluaga Callejas')
lst=lst.replace('Johan Mazo-Zuluaga; Juan Pablo Restrepo Cuartas','Johan Mazo-Zuluaga')
df['Estudiantes'][i]=lst
#publicadas['Año Graduación'][i]=est_p.sort_values('Año Graduación',ascending=False\
# )['Año Graduación'][i].reset_index(drop=True)[:-1][0]
df.to_csv('newcitations_extended.csv',index=False)
Don't forget the Initialization cells
start=time.time()
df=pd.read_csv('newcitations_extended.csv')
publicadas=df[~np.logical_and(df['ISSN']=='0000-0000',df['DOI']=='Not DOI')]
publicadas=publicadas.reset_index(drop=True)
publicadas=publicadas.replace('','Desconocido')
publicadas[['Año','Autor(es)','Artículo','Vol.','pág.','ISSN','Revista','Grupo','DOI','Clasificación Colciencias','Factor de Impacto','First_UdeA_Author']][publicadas['DOI']!='Not DOI'][-5:]
Año | Autor(es) | Artículo | Vol. | pág. | ISSN | Revista | Grupo | DOI | Clasificación Colciencias | Factor de Impacto | First_UdeA_Author | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
947 | 2015 | Adamo, Angela; Kruijssen, JMD; Bastian, Nate; Silva-Villa, Esteban; Ryon, Jenna; | Probing the role of the galactic environment in the formation of stellar clusters, using M83 as a test bench | 452 | 246 | 0035-8711 | Monthly Notices of the Royal Astronomical Society | FACOM: Física y Astrofísica Computacional | 10.1093/mnras/stv1203 | A1 | 5,521 | Silva Villa Esteban |
948 | 2014 | Bastian, N; Adamo, Angela; Schirmer, M; Hollyhead, K; Beletsky, Y; Carraro, G; Davies, B; Gieles, M; Silva-Villa, E; | The effect of spatial resolution on optical and near-IR studies of stellar clusters: implications for the origin of the red excess | 444 | 3829 | 0035-8711 | Monthly Notices of the Royal Astronomical Society | FACOM: Física y Astrofísica Computacional | 10.1093/mnras/stu1695 | A1 | 5,521 | Silva Villa Esteban |
949 | 2015 | Niederhofer, Florian; Hilker, Michael; Bastian, Nate; Silva-Villa, Esteban; | No evidence for significant age spreads in young massive LMC clusters | 575 | 62 | 0004-6361 | Astronomy & Astrophysics | FACOM: Física y Astrofísica Computacional | 10.1051/0004-6361/201424455 | A1 | 4,378 | Silva Villa Esteban |
950 | 2014 | Ceballos, Jorge A; Giraldo, Marco A; Cossio, Pilar; | Effects of a disulfide bridge prior to amyloid formation of the ABRI peptide | 4 | 36923 | 0000-0000 | RSC Advances | Biofísica | 10.1039/C4RA06034B | 00 | -1,0 | Giraldo Cadavid Marco A. |
951 | 2013 | Restrepo, Diego; Zapata, Oscar; Yaguna, Carlos; | Models with radiative neutrino masses and viable dark matter candidates | 2013 | 1 | 1126-6708 | Journal of High Energy Physics | GFIF: Grupo de Fenomenología de Interacciones Fundamentales | 10.1007/JHEP11(2013)011 | A1 | 5,618 | Restrepo Quintero Diego Alejandro |
publicadas['Factor de Impacto']=publicadas['Factor de Impacto'].replace('Desconocido',-1)
publicadas['Factor de Impacto']=publicadas['Factor de Impacto'].str.replace(',','.').astype(float)
publicadas['Grupo']=publicadas['Grupo'].fillna('Unknown')
Desde 2011
datetime.datetime.now().year
2016
datetime.datetime.now().year-5
2011
publicadas5=publicadas[publicadas['Año']<datetime.datetime.now().year]
publicadas5=publicadas5[publicadas5['Año']>datetime.datetime.now().year-6]
publicadas5.Year.unique()
array([2011, 2012, 2013, 2014, 2015])
dfp=pd.DataFrame()
dfp.append({'TOTAL':df.shape[0],'Publicadas':publicadas.shape[0],\
'Publicadas últimos 5 años':publicadas5.shape[0]},ignore_index=True)
Publicadas | Publicadas últimos 5 años | TOTAL | |
---|---|---|---|
0 | 952 | 342 | 1037 |
Similar a la compartida por correo que fue obtenida con conteo manual de artículos.
Número de artículos con estudiantes
autor=pd.Series()
autor['Posgrado']=publicadas[publicadas.Estudiantes!='Desconocido'].groupby('Año').count().Tipo[::-1]
for y in range(df.Year.min(),df.Year.max()):
if y not in autor.Posgrado.keys():
autor['Posgrado'][y]=0.
y clasisificarlos
G=pd.Series()
grupos=['GFIF','GES','GFAM','GMC','GOF','MS','FACOM']
t=publicadas['Año'].value_counts()
i=publicadas[publicadas.Tipo=='Internacional']['Año'].value_counts()
n=publicadas[publicadas.Tipo=='Nacional']['Año'].value_counts()
facom=publicadas[publicadas.Grupo.str.contains('FACOM')]['Año'].value_counts()
for g in grupos:
G[g]=publicadas[publicadas.Grupo.str.contains(g)]['Año'].value_counts()
Prepare pandas DataFrame
rdf=pd.DataFrame()
ng=pd.Series()
for y in range(1995,2016)[::-1]:
year=False
if y in t.keys():
na=t[y]
else: na=0
if y in i.keys():
ni=i[y]
else: ni=0
if y in n.keys():
nn=n[y]
else: nn=0
if y in facom.keys():
nfacom=facom[y]
else: nfacom=0
for g in grupos:
if y in G[g].keys():
ng[g]=G[g][y]
else: nges=0
#FAudea=publicadas[publicadas['Año']==y]['Institution Authors'].fillna('NN')\
#.str.replace('Mora Ramos Miguel; ','').str.replace(';.*','').unique().shape[0]
FAudea=publicadas[publicadas['Año']==y]['First_UdeA_Author'].unique().shape[0]
Audea=np.unique(publicadas[publicadas['Año']==y]['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
pes=publicadas[publicadas['Año']==y]
Eudea=np.unique(pes[pes['Estudiantes']!='Desconocido']['Estudiantes'].str.split('; ').sum())
if Eudea==np.array([0]): #simplify code
Eudea=0
else:
Eudea=Eudea.shape[0]
#'GES','GOF','GFIF'
rdf=rdf.append({'year':y,'articles':na,'isi_o_scopus':ni,'nacional':nn,'facom':nfacom,\
'GFIF':ng['GFIF'],'GES':ng['GES'],'GFAM':ng['GFAM'],'GMC':ng['GMC'],\
'GOF':ng['GOF'],'MS':ng['MS'],'FACOM':ng['FACOM'],\
'art_posgrado':autor.Posgrado[y],
'first_UdeA_author':FAudea,'UdeA_author':Audea,\
'UdeA_estudiante':Eudea},ignore_index=True)
rdf
/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:28: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
FACOM | GES | GFAM | GFIF | GMC | GOF | MS | UdeA_author | UdeA_estudiante | art_posgrado | articles | facom | first_UdeA_author | isi_o_scopus | nacional | year | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 6 | 10 | 7 | 9 | 28 | 7 | 2 | 23 | 10 | 20 | 72 | 6 | 21 | 68 | 4 | 2015 |
1 | 7 | 7 | 12 | 8 | 25 | 4 | 5 | 22 | 10 | 11 | 71 | 7 | 21 | 66 | 5 | 2014 |
2 | 4 | 19 | 7 | 13 | 14 | 6 | 4 | 27 | 8 | 12 | 70 | 4 | 24 | 62 | 8 | 2013 |
3 | 1 | 9 | 7 | 8 | 27 | 6 | 6 | 18 | 6 | 8 | 64 | 1 | 17 | 61 | 3 | 2012 |
4 | 1 | 18 | 7 | 6 | 20 | 6 | 5 | 22 | 6 | 8 | 65 | 1 | 21 | 58 | 7 | 2011 |
5 | 1 | 15 | 8 | 3 | 12 | 5 | 6 | 20 | 12 | 15 | 51 | 1 | 18 | 45 | 6 | 2010 |
6 | 2 | 14 | 24 | 12 | 18 | 12 | 7 | 24 | 13 | 22 | 88 | 2 | 21 | 63 | 25 | 2009 |
7 | 2 | 27 | 10 | 6 | 14 | 2 | 2 | 21 | 14 | 19 | 62 | 2 | 18 | 54 | 8 | 2008 |
8 | 2 | 12 | 2 | 4 | 21 | 3 | 8 | 15 | 9 | 14 | 49 | 0 | 14 | 39 | 10 | 2007 |
9 | 1 | 24 | 5 | 8 | 11 | 9 | 10 | 25 | 16 | 26 | 67 | 1 | 22 | 45 | 22 | 2006 |
10 | 1 | 18 | 4 | 7 | 9 | 7 | 7 | 19 | 5 | 18 | 50 | 1 | 17 | 36 | 14 | 2005 |
11 | 1 | 11 | 3 | 5 | 6 | 4 | 5 | 19 | 9 | 14 | 36 | 1 | 17 | 27 | 9 | 2004 |
12 | 1 | 17 | 4 | 5 | 8 | 6 | 4 | 18 | 8 | 11 | 42 | 0 | 17 | 37 | 5 | 2003 |
13 | 1 | 7 | 3 | 3 | 6 | 3 | 3 | 15 | 4 | 7 | 24 | 0 | 14 | 18 | 6 | 2002 |
14 | 2 | 14 | 1 | 6 | 5 | 4 | 6 | 15 | 7 | 11 | 32 | 2 | 12 | 24 | 8 | 2001 |
15 | 2 | 4 | 2 | 4 | 5 | 2 | 7 | 13 | 2 | 3 | 27 | 0 | 11 | 27 | 0 | 2000 |
16 | 2 | 3 | 2 | 7 | 3 | 3 | 1 | 7 | 1 | 2 | 17 | 0 | 7 | 17 | 0 | 1999 |
17 | 2 | 3 | 2 | 3 | 4 | 2 | 1 | 7 | 0 | 0 | 14 | 0 | 7 | 14 | 0 | 1998 |
18 | 2 | 2 | 2 | 5 | 4 | 2 | 2 | 8 | 0 | 0 | 13 | 0 | 7 | 13 | 0 | 1997 |
19 | 2 | 1 | 1 | 1 | 4 | 1 | 2 | 5 | 1 | 1 | 4 | 0 | 4 | 4 | 0 | 1996 |
20 | 2 | 1 | 1 | 1 | 4 | 1 | 2 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1995 |
En el plano: número de artículos en función del año. Se añade la información de cuantos primeros autores de la UdeA participan en los artículos
plt.plot(rdf.year,rdf.articles,label='TOTAL')
plt.plot(rdf.year,rdf.articles,'bo',label='First author')
plt.plot(rdf.year,rdf.isi_o_scopus,label='ISI o Scopus')
plt.plot(rdf.year,rdf.nacional,label='Nacional')
plt.plot(rdf.year,rdf.facom,label=u'FACOM')
plt.hlines(rdf[rdf.year>2007].isi_o_scopus.mean(),2007,rdf.year.values[0],linestyles='dashed',label='mean(2007)')
plt.legend(loc='best')
for i in range(len(rdf.year)):
plt.annotate(str(int(rdf.first_UdeA_author[i])),xy=(rdf.year[i],rdf.articles[i]),\
horizontalalignment='center',size=15)
plt.xlabel('Year',size=20)
plt.ylabel('Publication number',size=20)
plt.grid()
En el plano: número de artículos en función del año. Se añade la información del número de autores total de la UdeA que participan en los artículos
plt.plot(rdf.year,rdf.articles,label='TOTAL')
plt.plot(rdf.year,rdf.articles,'bo',label='Author')
plt.plot(rdf.year,rdf.isi_o_scopus,label='ISI o Scopus')
plt.plot(rdf.year,rdf.nacional,label='Nacional')
plt.plot(rdf.year,rdf.facom,label=u'FACOM')
plt.hlines(rdf[rdf.year>2007].isi_o_scopus.mean(),2007,rdf.year.values[0],linestyles='dashed',label='mean(2007)')
plt.legend(loc='best')
for i in range(len(rdf.year)):
plt.annotate(str(int(rdf.UdeA_author[i])),xy=(rdf.year[i],rdf.articles[i]),\
horizontalalignment='center',size=15)
plt.xlabel('Year',size=20)
plt.ylabel('Publication number',size=20)
plt.grid()
El programa no está muy optimizado para encontar TODOS los autores UdeA
En los picos hay una mezcla de profesores y estudiantes...
We can see an oscillating behaviour between 2000 until 2010 with peaks at 2001, 2003, 2006, and 2009. The peaks show some correlation both the international and national publications, and as I will see later, several research groups. We already know that there was a decline of interest in theCongreso Nacional de Fisica after 2009.
al 30 de junio de 1995.
del 23-27 de junio de 1997.
28 de junio al 2 de julio de 1999.
del 24 al 2 de septiembre de 2001.
1 al 5 de septiembre de 2003.
Ibague, Tolima, Octubre 22 al 26 de 2007
Santa Marta, Octubre 5 al 9 de 2009
Hotel Tequendama, 3 al 7 de Octubre de 2011, BOGOTÁ D.C.
Armenia - Quindío, 25 al 29 de agosto de 2013, Armenia
Manizales del 29 de septiembre al 2 de octubre. http://www.xxvi-cnf.co
Tunja - Boyacá - Colombia, Octubre 23-27, 2006
Pereira, septiembre 22 al 26 de 2008
Ibagué, los días 6, 7 y 8 de octubre de 2010.
Universidad Nacional de Colombia Sede Manizales del 10 al 12 de Octubre de 2012,
Latin American Conference on the Applications of the Mössbauer Effect, (LACAME 2012) held in Medellin, Colombia, November 11 - 16, 2012
The hypthothesis is that the dealine implied by the Congreso, trigger the production of first
2009 Team
y=2009
values=np.unique(publicadas[publicadas['Año']==y]['Institution Authors'].fillna('NN').str.split('; ').sum())
pd.Series(dict(zip(range(values.shape[0]), values)))
0 Arnache Olmos Óscar L. 1 Barrera Ramírez John Fredy 2 Barrero Meneses César A. 3 Carlos Duque Echeverri 4 Girata Doris 5 Henao Henao Rodrigo 6 Jaramillo Arango Daniel E. 7 Mahecha Gómez Jorge E. 8 Mazo Zuluaga Johan 9 Mira Agudelo Alejandro 10 Morales Aramburo Álvaro 11 Nardi Enrico 12 Osorio Guillén Jorge Mario 13 Osorio Vélez Jaime 14 Ponce Gutiérrez William Alberto 15 Páez Manuel 16 Restrepo Cárdenas Johans 17 Restrepo Quintero Diego Alejandro 18 Reyes Gómez Ernesto Amador 19 Rodríguez Rey Boris Anghelo 20 Rueda Muñoz Edgar Alberto 21 Sanz Vicario José Luis 22 Zapata Noreña Oscar 23 Zuluaga Callejas Jorge Iván dtype: object
2013 Team
y=2013
values=np.unique(publicadas[publicadas['Año']==y]['Institution Authors'].fillna('NN').str.split('; ').sum())
pd.Series(dict(zip(range(values.shape[0]), values)))
0 Arnache Olmos Óscar L. 1 Barrera Ramírez John Fredy 2 Barrero Meneses César A. 3 Carlos Duque Echeverri 4 Cuartas Restrepo Pablo 5 Ferrín Vázquez Ignacio R. 6 Henao Henao Rodrigo 7 José David Ruíz Álvarez 8 Mazo Zuluaga Johan 9 Mira Agudelo Alejandro 10 Morales Aramburo Álvaro 11 NN 12 Nardi Enrico 13 Osorio Guillén Jorge Mario 14 Osorio Vélez Jaime 15 Pachón Contreras Leonardo 16 Ponce Gutiérrez William Alberto 17 Páez Manuel 18 Restrepo Cárdenas Johans 19 Restrepo Quintero Diego Alejandro 20 Reyes Gómez Ernesto Amador 21 Rodríguez Rey Boris Anghelo 22 Romano Antonio Enea 23 Rueda Muñoz Edgar Alberto 24 Sanz Vicario José Luis 25 Zapata Noreña Oscar 26 Zuluaga Callejas Jorge Iván dtype: object
O en términos del número de estudiantes de posgrado en la lista de autores
plt.plot(rdf.year,rdf.articles,label='TOTAL')
plt.plot(rdf.year,rdf.isi_o_scopus,label='ISI o Scopus')
plt.plot(rdf.year,rdf.nacional,label='Nacional')
plt.plot(rdf.year,rdf.art_posgrado,'y-',lw=2,label=u'Artículos Posgrado')
plt.plot(rdf.year,rdf.art_posgrado,'co',lw=2,label='Estudiantes')
plt.hlines(rdf[rdf.year>2007].isi_o_scopus.mean(),2007,rdf.year.values[0],linestyles='dashed',label='mean(2007)')
plt.legend(loc='best')
for i in range(len(rdf.year)):
plt.annotate(str(int(rdf.UdeA_estudiante[i])),xy=(rdf.year[i],rdf.art_posgrado[i]),\
horizontalalignment='center',size=15)
plt.xlabel('Year',size=20)
plt.ylabel('Publication number',size=20)
plt.grid()
2009 Student's Team
y=2009
values=np.unique(publicadas[np.logical_and(publicadas.Year==y,publicadas.Estudiantes!='')].Estudiantes.str.split('; ').sum())
pd.Series(dict(zip(range(values.shape[0]), values)))
0 Ana Maria Calle Arcila 1 Carlos A. Vargas Castrillón 2 Carlos Andrés Vera Ciro 3 Desconocido 4 Edgar Alberto Rueda Muñoz 5 Francisco Eugenio López Giraldo 6 Guillermo Miranda Pedraza 7 Jeaneth Patricia Urquijo Morales 8 Johan Mazo-Zuluaga 9 Johana Alexandra Herrera Ruales 10 Oscar Alberto Zapata Noreña 11 Ricardo León Restrepo Arango 12 Richard H. Benavides Palacios 13 Yithsbey Giraldo Usuga dtype: object
En los picos se nota un incremento en la participación de estudiantes, sobre todo en revistas nacionales (¿Congresos?)
Miremos entonces los Grupos
#http://stackoverflow.com/a/15191183/2268280
plt.step(rdf.year,rdf.articles,'ko',lw=2,label='mean(>2006)=%.1F: TOTAL' %rdf[rdf.year>2006].articles.mean(), where='mid')
GT=np.zeros(21)
plt.xscale('linear')
plt.yscale('log')
for g in grupos:
GT=GT+rdf[g]
#drawstyle='steps-mid',
plt.plot(rdf.year,rdf[g],s[g],lw=3,label=u'mean(>2006)=%.1F: %s' %( rdf[rdf.year>2006][g].mean(),g ) )
#plt.semilogy(rdf.year,rdf[g],'k.',lw=2)
#plt.semilogy(rdf.year,GT ,label='Suma') #crosscheck
plt.hlines(10,1995,2015,linestyles=':')
plt.hlines(20,1995,2015,linestyles=':')
plt.hlines(30,1995,2015,linestyles=':')
plt.ylim(1,105)
plt.legend(bbox_to_anchor=(1.42, 1),loc='upper right',fontsize='small')
plt.xlabel('Year',size=20)
plt.ylabel('Publication number',size=20)
plt.grid()
publicadas['Grupo'].value_counts()[:10].plot(kind='barh', rot=0, grid=True)
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54deab5c10>
publicadas5['Grupo'].value_counts()[:10].plot(kind='barh', rot=0,grid=True)
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54de906810>
Se ha alcanzado un valor asintótico, no solo en el número total, sino también en general en los grupos
H0 lo separó en H 0 y no lo encontró: solución: admita alguna palabras faltantes en títulos largos:
Tot=publicadas.shape[0]/np.unique(publicadas['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
p=publicadas['Area'].value_counts()
at=np.unique(publicadas[publicadas.Area=='Teórica']['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
ae=np.unique(publicadas[publicadas.Area=='Experimental']['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
gmc=publicadas[publicadas.Grupo.str.contains('GMC')].shape[0]
publicadas['Area'].value_counts().plot(kind='barh', rot=0, grid=True)
Exp=p.Experimental/float(ae)
Teo=p['Teórica']/float(at)
Teo_not_GMC=(p['Teórica']-gmc)/float(at-1)
plt.title(u'Artículos/Autores_UdeA: Tot:%0.1f; Exp:%0.1f; Teo:%0.1f; Teo(sin GMC):%0.1f' %(Tot,Exp,Teo,Teo_not_GMC ) )
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54de906d50>
Tot=publicadas5.shape[0]/np.unique(publicadas5['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
p=publicadas5['Area'].value_counts()
at=np.unique(publicadas5[publicadas5.Area=='Teórica']['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
ae=np.unique(publicadas5[publicadas5.Area=='Experimental']['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
gmc=publicadas5[publicadas5.Grupo.str.contains('GMC')].shape[0]
publicadas5['Area'].value_counts().plot(kind='barh', rot=0, grid=True)
Exp=p.Experimental/float(ae)
Teo=p['Teórica']/float(at)
Teo_not_GMC=(p['Teórica']-gmc)/float(at-2)
plt.title(u'Artículos/Autores_UdeA: Tot:%0.1f; Exp:%0.1f; Teo:%0.1f; Teo(sin GMC):%0.1f' %(Tot,Exp,Teo,Teo_not_GMC ) )
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54dea4cd90>
Cross check:
aavg=pd.DataFrame()
for y in ['All']:
publicadasy=publicadas5
Tot=publicadasy.shape[0]
Tot_aut=np.unique(publicadasy['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
Exp=publicadasy[publicadasy.Area=='Experimental'].shape[0]
Exp_aut=np.unique(publicadasy[publicadasy.Area=='Experimental']['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
Teo=publicadasy[publicadasy.Area=='Teórica'].shape[0]
Teo_aut=np.unique(publicadasy[publicadasy.Area=='Teórica']['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
GMC=publicadasy[publicadasy.Group.str.contains('GMC')].shape[0]
GMC_aut=np.unique(publicadasy[publicadasy.Group.str.contains('GMC')]['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
aavg=aavg.append({'Year':y,'Tot':Tot,'Tot_aut':Tot_aut,\
'Exp':Exp,'Exp_aut':Exp_aut,\
'Theo':Teo,'Theo_aut':Teo_aut,\
'GMC':GMC,'GMC_aut':GMC_aut},ignore_index=True)
aavg['~GMC']=aavg.Theo-aavg.GMC
aavg['~GMC_aut']=aavg.Theo_aut-aavg.GMC_aut
aavg['Tot/aut']=np.round(aavg.Tot/aavg.Tot_aut,1)
aavg['Exp/aut']=np.round(aavg.Exp/aavg.Exp_aut,1)
aavg['Theo/aut']=np.round(aavg.Theo/aavg.Theo_aut,1)
aavg['~GMC/aut']=np.round(aavg['~GMC']/aavg['~GMC_aut'],1)
aavg
Exp | Exp_aut | GMC | GMC_aut | Theo | Theo_aut | Tot | Tot_aut | Year | ~GMC | ~GMC_aut | Tot/aut | Exp/aut | Theo/aut | ~GMC/aut | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 51 | 9 | 114 | 2 | 283 | 23 | 342 | 32 | All | 169 | 21 | 10.7 | 5.7 | 12.3 | 8 |
aavg=pd.DataFrame()
for y in range(datetime.datetime.now().year-5,datetime.datetime.now().year):
publicadasy=publicadas[publicadas.Year==y]
Tot=publicadasy.shape[0]
Tot_aut=np.unique(publicadasy['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
Exp=publicadasy[publicadasy.Area=='Experimental'].shape[0]
Exp_aut=np.unique(publicadasy[publicadasy.Area=='Experimental']['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
Teo=publicadasy[publicadasy.Area=='Teórica'].shape[0]
Teo_aut=np.unique(publicadasy[publicadasy.Area=='Teórica']['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
GMC=publicadasy[publicadasy.Group.str.contains('GMC')].shape[0]
GMC_aut=np.unique(publicadasy[publicadasy.Group.str.contains('GMC')]['Institution Authors'].fillna('NN').str.split('; ').sum()).shape[0]
aavg=aavg.append({'Artículos/Autores_UdeA':y,'Tot':Tot,'Tot_aut':Tot_aut,\
'Exp':Exp,'Exp_aut':Exp_aut,\
'Theo':Teo,'Theo_aut':Teo_aut,\
'GMC':GMC,'GMC_aut':GMC_aut},ignore_index=True)
aavg['~GMC']=aavg.Theo-aavg.GMC
aavg['~GMC_aut']=aavg.Theo_aut-aavg.GMC_aut
aavg['Total']=np.round(aavg.Tot/aavg.Tot_aut,1)
aavg['Experimental']=np.round(aavg.Exp/aavg.Exp_aut,1)
aavg['Teórica']=np.round(aavg.Theo/aavg.Theo_aut,1)
aavg['Teórica sin GMC']=np.round(aavg['~GMC']/aavg['~GMC_aut'],1)
aavg[['Artículos/Autores_UdeA','Total','Experimental','Teórica','Teórica sin GMC']]
Artículos/Autores_UdeA | Total | Experimental | Teórica | Teórica sin GMC | |
---|---|---|---|---|---|
0 | 2011 | 3.0 | 1.2 | 3.9 | 2.6 |
1 | 2012 | 3.6 | 1.8 | 4.1 | 2.3 |
2 | 2013 | 2.6 | 2.1 | 2.8 | 2.3 |
3 | 2014 | 3.2 | 1.6 | 3.8 | 2.6 |
4 | 2015 | 3.1 | 1.8 | 3.6 | 2.1 |
aavg.describe()[['Total','Experimental','Teórica','Teórica sin GMC']]
Total | Experimental | Teórica | Teórica sin GMC | |
---|---|---|---|---|
count | 5.000000 | 5.000000 | 5.000000 | 5.000000 |
mean | 3.100000 | 1.700000 | 3.640000 | 2.380000 |
std | 0.360555 | 0.331662 | 0.502991 | 0.216795 |
min | 2.600000 | 1.200000 | 2.800000 | 2.100000 |
25% | 3.000000 | 1.600000 | 3.600000 | 2.300000 |
50% | 3.100000 | 1.800000 | 3.800000 | 2.300000 |
75% | 3.200000 | 1.800000 | 3.900000 | 2.600000 |
max | 3.600000 | 2.100000 | 4.100000 | 2.600000 |
En teoría se produce más
Primeros 15 y sólo durante su afiliación a la UdeA
publifull=pd.DataFrame()
publifull=publifull.append(publicadas)
publifull['UdeA_Author']=publicadas.First_UdeA_Author
for i in publicadas.index:
alist=publicadas.ix[i]['Institution Authors'].split('; ')
if len(alist)>1:
for a in alist[1:]:
publifull=publifull.append(publicadas.ix[i],ignore_index=True)
publifull['UdeA_Author'].ix[publifull[-1:].index[0]]=a
publifull5=publifull[publifull['Año']>datetime.datetime.now().year-6]
publicadas['First_UdeA_Author'].value_counts()[:15].plot(kind='barh', rot=0, grid=True)
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54de989290>
publifull['UdeA_Author'].value_counts()[:15].plot(kind='barh', rot=0, grid=True)
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54de7f25d0>
publicadas5['First_UdeA_Author'].value_counts()[:15].plot(kind='barh', rot=0, grid=True)#
plt.xlabel(u'Número de artículos',size=20)
plt.xscale('log')
plt.xlim(1,publicadas5['First_UdeA_Author'].value_counts().max()+5)
(1, 108)
publifull5['UdeA_Author'].value_counts()[:15].plot(kind='barh', rot=0, grid=True)
plt.xlabel(u'Número de artículos',size=20)
plt.xscale('log')
plt.xlim(1,publifull5['UdeA_Author'].value_counts().max()+5)
(1, 121)
Se alcanza a notar algo del relevo generacional
Ejemplos plots con pandas
: http://pandas.pydata.org/pandas-docs/dev/visualization.html
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:
tipo = np.where(publicadas['Tipo'].str.contains('Internacional'),'Internacional', 'Nacional')
by_group_tipo = publicadas.groupby(['Grupo', tipo])
gt_counts = by_group_tipo.size().unstack().fillna(0)
indexer = gt_counts.sum(1).argsort()
count_subset = gt_counts.take(indexer)
count_subset[15:].plot(kind='barh', stacked=True,grid=True)
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54de72aa10>
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,grid=True)
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54de1a9f10>
publicadas[['Cites']].hist(bins=100)
#plt.ylabel(u'Número de artículos',size=20)
plt.xlabel(u'Citas',size=20)
plt.ylabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54de875c50>
publicadas[['Cites']].hist(bins=400)
#plt.ylabel(u'Número de artículos',size=20)
plt.xlabel(u'Citas',size=20)
plt.ylabel(u'Número de artículos',size=20)
plt.yscale('log')
plt.yscale('log')
plt.xlim(0,100)
plt.ylim(0,100)
(1.0, 100)
Incluye el índice h [https://en.wikipedia.org/wiki/H-index]: h publicaciones tienen al menos h Citas
def h_index(x,y):
'''h-index as in https://en.wikipedia.org/wiki/H-index
{1:10,2:8,3:5,4:4,5:3} -> 4
{1:25,2:8,3:5,4:3,5:3} -> 3
'''
ax=np.asarray(x)
ay=np.asarray(y)
if np.abs(ax-ay).min()<=2:
h=ay[np.abs(ax-ay)==np.abs(ax-ay).min()]
else: #od the difference is large, depart from wikipedia and take conservative value
h=ax[np.abs(ax-ay)==np.abs(ax-ay).min()]
if h.shape[0]!=0:
return h[0]
else:
return -1
y=publicadas.sort_values(by='Cites',ascending=False).reset_index(drop=True).Cites
x=np.asarray(y.index+1)
h=h_index(x,y)
plt.hlines(h,1,1000,linestyles='dashed',label='h-index=%d' %h)
plt.vlines(h,1,1000,linestyles='dashed')
plt.step(x,y,'bo',lw=1,label='Todo')
y=publicadas5.sort_values(by='Cites',ascending=False).reset_index(drop=True).Cites
x=np.asarray(y.index+1)
h=h_index(x,y)
plt.hlines(h,1,1000,linestyles='dotted',lw=2,colors='r',label='h-index=%d (38)' %h)
plt.vlines(h,1,1000,linestyles='dotted',lw=2,colors='r')
plt.step(x,y,'go',lw=1,label='Desde %d' %publicadas5.Year.min())
plt.xscale('log')
plt.yscale('log')
plt.legend(loc='best')
plt.xlim(1-0.1)
plt.legend(loc='best')
plt.xlabel(u'Artículos en orden descendente en número de citas',size=20)
plt.ylabel(u'Citaciones de cada artículo (>0)',size=20)
<matplotlib.text.Text at 0x7f54ac8508d0>
En perfil en Google Scholar: de TODAS las publicaciones, 38 publicaciones han alcanzado 38 citas en los últimos cinco años
publicadas.sort_values(by='Cites',ascending=False).reset_index(drop=True)[:10][\
['Year','Publication','First_UdeA_Author','Cites']]
Year | Publication | First_UdeA_Author | Cites | |
---|---|---|---|---|
0 | 2014 | Journal of High Energy Physics | José David Ruíz Álvarez | 487 |
1 | 2008 | Physics Reports | Nardi Enrico | 480 |
2 | 2014 | Journal of High Energy Physics | José David Ruíz Álvarez | 379 |
3 | 2010 | Nature | Sanz Vicario José Luis | 350 |
4 | 2006 | Journal of High Energy Physics | Nardi Enrico | 345 |
5 | 2014 | Physical Review D | José David Ruíz Álvarez | 341 |
6 | 1980 | Physical Review D | Ponce Gutiérrez William Alberto | 215 |
7 | 2009 | Journal of Cosmology and Astroparticle Physics | Nardi Enrico | 190 |
8 | 2014 | Physics Letters B | José David Ruíz Álvarez | 136 |
9 | 2004 | Physical Review B | Morales Aramburo Álvaro | 134 |
La diferencia con los últimos cinco años puede ser atribuible a los artículos con muchos autores
y=publicadas.sort_values(by='Cites',ascending=False).reset_index(drop=True).Cites
x=np.asarray(y.index+1)
plt.step(x,y,'bo',lw=1,label='Todo (h=%d)' %h_index(x,y))
plt.xscale('log')
plt.yscale('log')
for G in ['GFIF','GES','GMC','GOF','MS','GFAM','FACOM']:
y=publicadas[publicadas.Grupo.str.contains(G)].sort_values(by='Cites',\
ascending=False).reset_index(drop=True).Cites
x=np.asarray(y.index+1)
plt.loglog(x,y,s[G],lw=3,drawstyle='steps',label='%s (h=%d)' %(G,h_index(x,y)))
plt.legend(loc='upper right',bbox_to_anchor=(1.4, 1))
plt.xlim(1-0.1)
plt.xlabel(u'Artículos en orden descendente en número de citas',size=20)
plt.ylabel(u'Citaciones de cada artículo (>0)',size=20)
plt.grid()
y=publicadas5.sort_values(by='Cites',ascending=False).reset_index(drop=True).Cites
x=np.asarray(y.index+1)
plt.step(x,y,'bo',lw=1,label='Todo (h=%d)' %h_index(x,y))
plt.xscale('log')
plt.yscale('log')
for G in ['GMC','GFIF','GOF','GFAM','FACOM','GES','MS']:
y=publicadas5[publicadas5.Grupo.str.contains(G)].sort_values(by='Cites',\
ascending=False).reset_index(drop=True).Cites
x=np.asarray(y.index+1)
plt.loglog(x,y,s[G],lw=3,drawstyle='steps',label='%s (h=%d)' %(G,h_index(x,y)))
plt.legend(loc='upper right',bbox_to_anchor=(1.4, 1))
plt.xlim(1-0.1)
plt.xlabel(u'Artículos en orden descendente en número de citas',size=20)
plt.ylabel(u'Citaciones de cada artículo (>0)',size=20)
plt.grid()
GFIF: 5 artículos en CMS que en realidad son 10 (h-> 21)
publicadas5[publicadas5.First_UdeA_Author.str.contains('José David Ruíz')][['Title','Cites','First_UdeA_Author']].shape
(5, 3)
Sólo publicaciones UdeA
ah=pd.DataFrame()
for a in publifull.UdeA_Author.unique():
y=publifull[publifull.UdeA_Author==a].sort_values(by='Cites',ascending=False).reset_index(drop=True).Cites
x=np.asarray(y.index+1)
h=h_index(x,y)
ah=ah.append({'Author':a,'Cites':y.sum(),'h-index':h},ignore_index=True)
ah[ah['h-index']>0].sort_values(by=['h-index','Cites'],ascending=False).reset_index(drop=True)
Author | Cites | h-index | |
---|---|---|---|
0 | Carlos Duque Echeverri | 2513 | 25 |
1 | Ponce Gutiérrez William Alberto | 1242 | 17 |
2 | Barrero Meneses César A. | 927 | 17 |
3 | Morales Aramburo Álvaro | 1023 | 16 |
4 | Restrepo Quintero Diego Alejandro | 672 | 16 |
5 | Restrepo Cárdenas Johans | 600 | 16 |
6 | Barrera Ramírez John Fredy | 677 | 15 |
7 | Nardi Enrico | 1723 | 14 |
8 | Reyes Gómez Ernesto Amador | 432 | 14 |
9 | Henao Henao Rodrigo | 513 | 11 |
10 | Mazo Zuluaga Johan | 243 | 11 |
11 | Sanz Vicario José Luis | 709 | 10 |
12 | Zapata Noreña Oscar | 258 | 10 |
13 | Pachón Contreras Leonardo | 187 | 9 |
14 | Zuluaga Callejas Jorge Iván | 155 | 9 |
15 | Romano Antonio Enea | 163 | 7 |
16 | Mira Agudelo Alejandro | 161 | 7 |
17 | Rueda Muñoz Edgar Alberto | 159 | 7 |
18 | Girata Doris | 151 | 7 |
19 | Osorio Vélez Jaime | 150 | 7 |
20 | Rodríguez Rey Boris Anghelo | 105 | 7 |
21 | Osorio Guillén Jorge Mario | 200 | 6 |
22 | Arnache Olmos Óscar L. | 87 | 6 |
23 | Mahecha Gómez Jorge E. | 75 | 6 |
24 | José David Ruíz Álvarez | 1368 | 5 |
25 | Páez Manuel | 68 | 5 |
26 | Ferrín Vázquez Ignacio R. | 17 | 5 |
27 | Silva Villa Esteban | 41 | 4 |
28 | Giraldo Cadavid Marco A. | 50 | 3 |
29 | Muñoz Cuartas Juan Carlos | 31 | 3 |
30 | Wu Huachuan | 20 | 3 |
31 | Jaramillo Arango Daniel E. | 18 | 2 |
32 | Mira Martínez Jesús María | 30 | 1 |
33 | Valencia Valencia José Patricio | 7 | 1 |
34 | Cuartas Restrepo Pablo | 5 | 1 |
35 | Tobón Gómez Jorge Enrique | 4 | 1 |
Sólo publicaciones UdeA
ah=pd.DataFrame()
for a in publifull5.UdeA_Author.unique():
y=publifull5[publifull5.UdeA_Author==a].sort_values(by='Cites',ascending=False).reset_index(drop=True).Cites
x=np.asarray(y.index+1)
h=h_index(x,y)
ah=ah.append({'Author':a,'Cites':y.sum(),'h-index':h},ignore_index=True)
ah[ah['h-index']>0].sort_values(by=['h-index','Cites'],ascending=False).reset_index(drop=True)
Author | Cites | h-index | |
---|---|---|---|
0 | Carlos Duque Echeverri | 896 | 16 |
1 | Barrera Ramírez John Fredy | 211 | 10 |
2 | Pachón Contreras Leonardo | 187 | 9 |
3 | Restrepo Quintero Diego Alejandro | 174 | 9 |
4 | Romano Antonio Enea | 163 | 7 |
5 | Rueda Muñoz Edgar Alberto | 80 | 7 |
6 | Zapata Noreña Oscar | 118 | 6 |
7 | Zuluaga Callejas Jorge Iván | 79 | 6 |
8 | José David Ruíz Álvarez | 1368 | 5 |
9 | Sanz Vicario José Luis | 120 | 5 |
10 | Reyes Gómez Ernesto Amador | 67 | 5 |
11 | Morales Aramburo Álvaro | 67 | 5 |
12 | Osorio Guillén Jorge Mario | 43 | 5 |
13 | Ferrín Vázquez Ignacio R. | 17 | 5 |
14 | Nardi Enrico | 69 | 4 |
15 | Mira Agudelo Alejandro | 69 | 4 |
16 | Silva Villa Esteban | 39 | 4 |
17 | Mahecha Gómez Jorge E. | 28 | 4 |
18 | Ponce Gutiérrez William Alberto | 24 | 4 |
19 | Arnache Olmos Óscar L. | 21 | 4 |
20 | Rodríguez Rey Boris Anghelo | 13 | 4 |
21 | Osorio Vélez Jaime | 10 | 4 |
22 | Restrepo Cárdenas Johans | 56 | 3 |
23 | Barrero Meneses César A. | 41 | 3 |
24 | Muñoz Cuartas Juan Carlos | 31 | 3 |
25 | Mazo Zuluaga Johan | 15 | 3 |
26 | Cuartas Restrepo Pablo | 5 | 1 |
27 | Páez Manuel | 4 | 1 |
total=publicadas['Clasificación Colciencias'].value_counts()
print "Total A1+A2: ",total['A1']+total['A2']
Total A1+A2: 717
publicadas['Clasificación Colciencias'].value_counts().plot(kind='barh',grid=True)
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54ddce3d90>
total=publicadas5['Clasificación Colciencias'].value_counts()
print "Total A1+A2: ",total['A1']+total['A2']
Total A1+A2: 293
publicadas5['Clasificación Colciencias'].value_counts().plot(kind='barh',grid=True)
plt.xlabel(u'Número de artículos',size=20)
<matplotlib.text.Text at 0x7f54de2bee90>
import datetime
publicadas1=publicadas[publicadas['Año']>datetime.datetime.now().year-1]
len(publicadas1)
6
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(bins=40)
plt.ylabel(u'Número de artículos',size=20)
plt.xlabel(u'Factor de impacto',size=20)
<matplotlib.text.Text at 0x7f54dde6afd0>
Impondremos un corte para facilitar la visualización: FI<15
publicadaslt15=publicadas[publicadas['Factor de Impacto']<15]
for group in ['GFIF','GES','GFAM','GMC','GOF','MS','FACOM']:
fi=publicadaslt15[publicadaslt15['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(bins=20,label=group)
plt.legend(loc='best')
plt.ylabel(u'Número de artículos',size=20)
plt.xlabel(u'Factor de impacto',size=20)
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(bins=20)
plt.ylabel(u'Número de artículos',size=20)
plt.xlabel(u'Factor de impacto',size=20)
<matplotlib.text.Text at 0x7f54dde81c10>
for group in ['GFIF','GES','GFAM','GMC','GOF','MS','FACOM']:
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(bins=20,label=group)
plt.legend(loc='best')
plt.ylabel(u'Número de artículos',size=20)
plt.xlabel(u'Factor de impacto',size=20)
Detalles
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(bins=40,label=group)
plt.legend(loc='best')
plt.ylabel(u'Número de artículos',size=20)
plt.xlabel(u'Factor de impacto',size=20)
for group in ['GFIF','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(bins=40,label=group)
plt.legend(loc='best')
plt.ylabel(u'Número de artículos',size=20)
plt.xlabel(u'Factor de impacto',size=20)
for group in ['FACOM','GOF']:
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(bins=40,label=group)
plt.legend(loc='best')
plt.ylabel(u'Número de artículos',size=20)
plt.xlabel(u'Factor de impacto',size=20)
2
Los aproximadamente 5 artículos de CMS se notan en los gráficos de citaciones. CMS y ATLAS están produciendo ~100 artículos por año con ~10,000 citaciones. Ver pr ejemplo:
http://inspirehep.net/search?p=cn+atlas+and+date+2012&of=hcs
Las grandes colaboraciones impactan fuertemente en cantidad y calidad de artículos.
stop=time.time()
stop-start
25.420820951461792