Impact Factors for Dynamical Systems Journals
A subjective list

We extract the impact factors of the following journals:

  • Celestial Mechanics and Dynamical Astronomy
  • Chaos
  • Chaos, Solitons, and Fractals
  • Communications In Nonlinear Science And Numerical Simulation
  • Discrete and Continuous Dynamical Systems, Series A
  • Discrete and Continuous Dynamical Systems, Series B
  • International Journal of Bifurcation and Chaos (IJBC)
  • Journal of Physics A: Mathematical and Theoretical
  • Nonlinearity
  • Physica D: Nonlinear Phenomena
  • Regular & Chaotic Dynamics
  • SIAM Journal on Applied Dynamical Systems

The table of impact factors for each journal, starting from 2008 up to the last release, 2013/2014, can be found through the Journal Impact Factor Search Engine, at the URL http://www.bioxbio.com/if/html/

For example, at http://www.bioxbio.com/if/html/CHAOS.html we get the table for Chaos:

Year Impact Factor Total Articles Total Cites
2013/2014 1.761 189 4602
2012 2.188 247 4517
2011 2.076 196 3985
2010 2.081 198 3773
2009 1.795 198 3787
2008 2.152 199 3403

We read the table as a pandas.DataFrame:

In [1]:
import pandas as pd
In [2]:
url=r'http://www.bioxbio.com/if/html/CHAOS.html'
dfr = pd.read_html(url, header=0)#returns a list of tables
dfr0=dfr[0]
dfr0
Out[2]:
Year Impact Factor (IF) Total Articles Total Cites
0 NaT 1.761 189 4602
1 2012-01-01 2.188 247 4517
2 2011-01-01 2.076 196 3985
3 2010-01-01 2.081 198 3773
4 2009-01-01 1.795 198 3787
5 2008-01-01 2.152 199 3403

2013/2014 cannot be parsed as a date, and it is displayed as NaT. However the Impact Factor for 2013/2014 can be read.

Hence we have to extract from the data frame the column 'Impact Factor (IF)'.

In order to read succesively the tables corresponding to the chosen journals, we define a list of strings that are appended to the above URL:

In [4]:
ur=['CELEST-MECH-DYN-ASTR', 'CHAOS', 'CHAOS-SOLITON-FRACT','COMMUN-NONLINEAR-SCI', \
    'DISCRETE-CONT-DYN-A', 'DISCRETE-CONT-DYN-B','INT-J-BIFURCAT-CHAOS',\
    'J-PHYS-A-MATH-THEOR', 'NONLINEARITY','PHYSICA-D','REGUL-CHAOTIC-DYN',\
    'SIAM-J-APPL-DYN-SYST']
In [5]:
stitle=['Celest Mech Dyn Astr', 'Chaos', 'Chaos, Solitons, Fractals',\
        'Commun Nonl Science', 'Discrete Cont Dyn A', 'Discrete Cont Dyn B',\
        'Int J Bifurcat Chaos', 'J Phys A Math Theor', '   Nonlinearity', \
        'Physica D', ' Regular Chaotic Dyn', ' SIAM J Appl Dyn Syst']
In [7]:
dfs=[]
for  u in ur:
    url=r'http://www.bioxbio.com/if/html/'+u+'.html'
    
    df = pd.read_html(url, header=0)
    df0=df[0]
    dfn=list(df0['Impact Factor (IF)'])
    dfs.append(dfn)
In [8]:
impacts=[]
dfs[3]=[u'2.569',u'2.773', u'2.806', u'2.697', u'0', u'0']#Commun in Nonlinear Sci 
for d in dfs:
    d=map(float, d)
    impacts.append(d[::-1])#revert the impacts such that to get their list starting with 2008
In [10]:
#print impacts

The impact factors of each journal are now displayed in a plotly scatter plot:

In [5]:
import plotly.plotly as py    
import plotly.tools as tls 
from plotly.graph_objs import *
In [40]:
def make_Scatter(sbplt, y ):
        return Scatter(
        x=[2008, 2009, 2010, 2011, 2012, 2013],       
        y=y,  
        mode='markers+lines',
        marker=Marker(
        color='rgb(0, 143, 213)',
        size=8
        ),
        name=' ',
        xaxis= 'x{}'.format(sbplt),   # bind coordinate to given x-axis
        yaxis= 'y{}'.format(sbplt),   # bind coordinate to given y-axis
       )
    
In [41]:
axis_style = dict(
    zeroline=False,       # remove  zero line, i.e. x=0 or  y=0
    showgrid=True, 
    gridwidth=1,
    gridcolor='#FFFFFF')  # white grid lines
    
def make_XAxis():
    xaxis = XAxis(range=[2008, 2013],
                   nticks=6,
                   dtick=1,
                   showticklabels=False
                   )  
    xaxis.update(axis_style)  
    return xaxis


def make_YAxis():
    yaxis = YAxis(range=[0,3.4])  
    yaxis.update(axis_style)                     
    return yaxis

def make_sbplt_anno(s,  name): #annotations for subplots
    return Annotation(
        x= 2008,  
        y= 3.4,       
        text= name,        
        align='left',       
        font= Font(size=14),  
        showarrow=False,      
        xanchor='left',     
        xref= 'x{}'.format(s),  
        yref= 'y{}'.format(s)
        ) 

         
In [42]:
nr_rows=3
nr_cols=4

figure = tls.get_subplots(
    rows=nr_rows,
    columns=nr_cols,
    horizontal_spacing=0.05,
    vertical_spacing=0.055,
    print_grid=True)
This is the format of your plot grid!
[9]	[10]	[11]	[12]	
[5]	[6]	[7]	[8]	
[1]	[2]	[3]	[4]	


In [43]:
sbp=[(nr_rows-(i+1))*nr_cols+j+1 for i in range(nr_rows) for j in range(nr_cols)]
print sbp
[9, 10, 11, 12, 5, 6, 7, 8, 1, 2, 3, 4]

In [44]:
pl_width=900 
pl_height=675

figure['layout'].update(plot_bgcolor='#EFECEA',
                        showlegend=False,     
                        hovermode='closest',  
                        autosize=False,       
                        width=pl_width,       
                        height=pl_height)    

title = 'Impact Factors for a few Dynamical Systems Journals'
figure['layout'].update(title=title,                                 
                        font= Font(family="Open Sans, sans-serif"))  
In [45]:
anno_text="Data source:\
<a href='http://www.bioxbio.com/if/'> [1]</a>"

figure['layout']['annotations'] = Annotations([
    Annotation(
            showarrow=False, 
            text=anno_text,  
            xref='paper',     
            yref='paper',     
            x=0,  
            y=-0.15,  
            xanchor='left',   
            yanchor='bottom',  
            font=Font(
            size=14 )
            )
]) 
In [46]:
for s in sbp:
    k=sbp.index(s)
    y=impacts[k]
    figure['data'] += [make_Scatter(s,impacts[k])]
    figure['layout'].update({'xaxis{}'.format(s): make_XAxis()})
    figure['layout'].update({'yaxis{}'.format(s): make_YAxis()})
    figure['layout']['annotations'] += [make_sbplt_anno(s, stitle[k])] 
  
In [47]:
for s in range(1,5):
    xaxis_splt = figure['layout']['xaxis{}'.format(s)] 
    xaxis_splt.update(showticklabels=True,
                      dtick=1,
                      tickangle=-45,
                      ticks='outside',
                      nticks=6)
                      
for s in range(1,10,4):
    yaxis_splt = figure['layout']['yaxis{}'.format(s)] 
    yaxis_splt.update(showticklabels=True,
                      dtick=0.5,
                      ticks='outside')  
In [6]:
py.sign_in("empet", "my_api_key")
In [53]:
py.iplot(figure, filename='Impact-Factors-DS', width=900, height=700) 

E Petrisor

In [50]:
from IPython.core.display import HTML
def  css_styling():
    styles = open("./styles/custom.css", "r").read()
    return HTML(styles)
css_styling()
Out[50]: