<center> Impact Factors for a few Nonlinear Science Journals </center>

Using pandas and plotly Python libraries, we extract and plot 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, can be found through the Journal Impact Factor Search Engine http://www.bioxbio.com/if/html/

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

We read the table as a pandas.DataFrame:

In [10]:
import pandas as pd
In [11]:
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[11]:
Year Impact Factor (IF) Total Articles Total Cites
0 2014/2015 1.954 180 5026
1 2013 1.761 189 4602
2 2012 2.188 247 4517
3 2011 2.076 196 3985
4 2010 2.081 198 3773
5 2009 1.795 198 3787
6 2008 2.152 199 3403

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 [5]:
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']

stitle is the list of titles for the plotly plots that will be generated from recorded data:

In [6]:
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)

The Journal Communications in Nonlinear Science and Numerical Simulation is monitored only since 2010. We insert 0 as its impact for 2008 and 2009:

In [8]:
impacts=[]
dfs[3]=[u'2.866', 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

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

In [9]:
import plotly.plotly as py    
import plotly.tools as tls 
from plotly.graph_objs import *
In [82]:
def make_Scatter(sbplt, y ):
        return Scatter(
        x=[2008, 2009, 2010, 2011, 2012, 2013, 2014],       
        y=y,  
        mode='markers+lines',
        marker=Marker(
        color='rgb(0, 143, 213)',
        size=8
        ),
        name=' ',
        xaxis= 'x{}'.format(sbplt),  
        yaxis= 'y{}'.format(sbplt),   
       )
    
In [12]:
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, 2014],
                   nticks=7,
                   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=12),  
        showarrow=False,      
        xanchor='left',     
        xref= 'x{}'.format(s),  
        yref= 'y{}'.format(s)
        ) 
In [14]:
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=False)
    
In [15]:
sbp=[(nr_rows-(i+1))*nr_cols+j+1 for i in range(nr_rows) for j in range(nr_cols)]
In [16]:
pl_width=1000 
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  Journals in Nonlinear Science <br> updated July 1, 2015'
figure['layout'].update(title=title,                                 
                        font= Font(family="Open Sans, sans-serif"))  
In [73]:
anno_text="Data source:\
<a href='http://www.bioxbio.com/if/'> [1]</a>,  Code:\
<a href='http://nbviewer.ipython.org/gist/empet/eeb8bbe354e709bf590b'> [2]</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 [74]:
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 [75]:
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 [76]:
py.sign_in("username", "my_api_key")
In [77]:
py.iplot(figure, filename='Impact-Factors-NSJ', width=1000, height=700) 
Out[77]:
In [78]:
from IPython.core.display import HTML
def  css_styling():
    styles = open("./styles/custom.css", "r").read()
    return HTML(styles)
css_styling()
Out[78]:
Back to top