In [1]:
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
import IPython.display as display

%matplotlib inline
import seaborn
# import mpld3
from datetime import datetime

seaborn.set()
np.set_printoptions(precision=4, suppress=True)
pd.set_option('display.max_colwidth', -1)
# mpld3.enable_notebook()

This notebook will generate (and save) images and html source for the ISMIR stats page. Be careful when running the scripts. The save paths have been hard-coded as relative paths and may overwite other files.

Conference Statistics


In [2]:
data = pd.read_csv("data/Conference Statistics.csv")
data


Out[2]:
Year Location Country Number of Participants Submitted Papers Accepted Papers Acceptance Rate
0 2000 Plymouth, Massachusetts USA 88 NaN 35 NaN
1 2001 Bloomington, Indiana USA 100 NaN 18 NaN
2 2002 Paris France 175 NaN 57 NaN
3 2003 Baltimore, Maryland USA 136 NaN 50 NaN
4 2004 Barcelona Spain 189 NaN 106 NaN
5 2005 London UK 180 NaN 115 NaN
6 2006 Victoria, British Columbia Canada 180 NaN 96 NaN
7 2007 Vienna Austria 250 NaN 129 NaN
8 2008 Philadelphia, Pennsylvania USA 257 173.0 107 62%
9 2009 Kobe Japan 308 202.0 148 73%
10 2010 Utrecht Netherlands 245 176.0 110 63%
11 2011 Miami, Florida USA 238 223.0 133 60%
12 2012 Porto Portugal 226 253.0 100 40%
13 2013 Curitiba Brazil 158 252.0 96 38%
14 2014 Taipei Taiwan 213 253.0 106 42%
15 2015 Málaga Spain 280 278.0 114 41%
16 2016 New York USA 330 238.0 113 47.5%
17 2017 Suzhou China 279 190.0 97 51.1%

In [3]:
fig, ax = plt.subplots(1, 1, figsize=(8, 6))
fields = ['Number of Participants', 'Submitted Papers', 'Accepted Papers']
for n, k in enumerate(fields):
    ax.bar(data.Year + 0.2*n, data[k], width=0.2, 
           fc=seaborn.color_palette()[n], label=k)

ax.set_xlabel("Year")
ax.set_ylabel("Count")
ax.set_title("")
plt.xticks(data.Year + 0.3, [str(v) for v in np.array(data.Year)])
plt.legend()
# plt.savefig('../ismir_web/img/conference_stats.png')


Membership


In [4]:
data = pd.read_csv("data/Community Membership.csv")
data


Out[4]:
Date Members
0 9/8/2002 491
1 6/26/2003 608
2 4/11/2004 657
3 3/5/2005 691
4 5/4/2006 812
5 4/3/2007 931
6 3/27/2008 1043
7 2/27/2009 1151
8 3/7/2010 1262
9 10/2/2011 1505
10 6/17/2012 1607
11 4/30/2013 1748
12 5/20/2014 1825
13 10/14/2014 1905
14 4/10/2016 2149
15 11/10/2017 2252

In [5]:
date_format = "%m/%d/%Y"
d = [datetime.strptime(d, date_format) for d in np.array(data.Date)]
d = [dd.days for dd in np.diff(d)]
d = np.cumsum(d)
d = np.r_[0., d]
d = d  / np.max(d) * (len(d) - 1)

In [6]:
fig, ax = plt.subplots(1, 1, figsize=(8, 6))
ax.plot(d, data.Members, 'o-', c=seaborn.color_palette()[0], ms=10)
plt.xticks(d, data.Date, rotation=45)
plt.title("Number of Members")
ax.set_xlabel("Date")
ax.set_ylabel("Count")
# plt.savefig('../ismir_web/img/membership_stats.png')


Table for Paper Rankings


In [7]:
formatter = lambda x: '<strong>'+x+'</strong>' if 'Music Information Retrieval' in x else x
data = pd.read_csv("data/Google Scholar Publication Rankings - Multimedia.csv", header=1)
cols = data.keys()
rank = np.where(['Music Information Retrieval' in r for r in data.Publication])[0]
rank = int(data.Rank[rank])
if rank == 1:
    post = 'st'
elif rank == 2:
    post = 'nd'
elif rank == 3:
    post = 'rd'
else:
    post = 'th'

In [8]:
table = ''
table += '<p><b>ISMIR</b> is currently the <b>{rank}{post} '.format(rank=rank, post=post)
table += 'ranked publication in the &#8220;Multimedia&#8221; subcategory of '
table += '&#8220;Engineering and Computer Science&#8221;</b> '
table += '<a href="https://scholar.google.com/citations?view_op=top_venues&hl=en&vq=eng_multimedia" '
table += 'target="new">(Link.)</a></p>\n'
table += data.to_html(index=False, formatters={'Publication': formatter}, escape=False)

In [9]:
data = pd.read_csv("data/Google Scholar Publication Rankings - Music & Musicology.csv", header=1)
cols = data.keys()
rank = np.where(['Music Information Retrieval' in r for r in data.Publication])[0]
rank = int(data.Rank[rank])
if rank == 1:
    post = 'st'
elif rank == 2:
    post = 'nd'
elif rank == 3:
    post = 'rd'
else:
    post = 'th'

In [10]:
table += '<p>&nbsp;</p>\n'
table += '<p>and the <b>{rank}{post} '.format(rank=rank, post=post)
table += 'ranked in the &#8220;Music &amp; Musicology&#8221; subcategory of '
table += '&#8220;Humanities, Literature, and Arts&#8221;</b> '
table += '<a href="https://scholar.google.com/citations?view_op=top_venues&hl=en&vq=hum_musicmusicology" '
table += 'target="new">(Link.)</a></p>\n'
table += data.to_html(index=False, formatters={'Publication': formatter}, escape=False)

In [11]:
print(table)


<p><b>ISMIR</b> is currently the <b>8th ranked publication in the &#8220;Multimedia&#8221; subcategory of &#8220;Engineering and Computer Science&#8221;</b> <a href="https://scholar.google.com/citations?view_op=top_venues&hl=en&vq=eng_multimedia" target="new">(Link.)</a></p>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>Rank</th>
      <th>Publication</th>
      <th>h5-index</th>
      <th>h5-median</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>IEEE Transactions on Multimedia</td>
      <td>58</td>
      <td>87</td>
    </tr>
    <tr>
      <td>2</td>
      <td>IEEE Transactions on Circuits and Systems for Video Technology</td>
      <td>54</td>
      <td>83</td>
    </tr>
    <tr>
      <td>3</td>
      <td>ACM International Conference on Multimedia</td>
      <td>44</td>
      <td>67</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Multimedia Tools and Applications</td>
      <td>37</td>
      <td>49</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Journal of Visual Communication and Image Representation</td>
      <td>36</td>
      <td>51</td>
    </tr>
    <tr>
      <td>6</td>
      <td>IEEE International Conference on Image Processing (ICIP)</td>
      <td>34</td>
      <td>46</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Signal Processing: Image Communication</td>
      <td>31</td>
      <td>61</td>
    </tr>
    <tr>
      <td>8</td>
      <td><strong>International Society for Music Information Retrieval Conference</strong></td>
      <td>29</td>
      <td>42</td>
    </tr>
    <tr>
      <td>9</td>
      <td>ACM International Conference on Multimedia Retrieval</td>
      <td>29</td>
      <td>41</td>
    </tr>
    <tr>
      <td>10</td>
      <td>arXiv Multimedia (cs.MM)</td>
      <td>26</td>
      <td>38</td>
    </tr>
  </tbody>
</table><p>&nbsp;</p>
<p>and the <b>2nd ranked in the &#8220;Music &amp; Musicology&#8221; subcategory of &#8220;Humanities, Literature, and Arts&#8221;</b> <a href="https://scholar.google.com/citations?view_op=top_venues&hl=en&vq=hum_musicmusicology" target="new">(Link.)</a></p>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>Rank</th>
      <th>Publication</th>
      <th>h5-index</th>
      <th>h5-median</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Psychology of Music</td>
      <td>31</td>
      <td>48</td>
    </tr>
    <tr>
      <td>2</td>
      <td><strong>International Society for Music Information Retrieval Conference</strong></td>
      <td>29</td>
      <td>42</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Music Perception: An Interdisciplinary Journal</td>
      <td>23</td>
      <td>34</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Journal of Research in Music Education</td>
      <td>19</td>
      <td>26</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Music Educators Journal</td>
      <td>18</td>
      <td>26</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Musicae Scientiae</td>
      <td>18</td>
      <td>24</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Journal of New Music Research</td>
      <td>18</td>
      <td>23</td>
    </tr>
    <tr>
      <td>8</td>
      <td>International Journal of Music Education</td>
      <td>17</td>
      <td>24</td>
    </tr>
    <tr>
      <td>9</td>
      <td>New Interfaces for Musical Expression (NIME)</td>
      <td>17</td>
      <td>22</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Nordic Journal of Music Therapy</td>
      <td>16</td>
      <td>20</td>
    </tr>
  </tbody>
</table>

In [12]:
with open('stats_source.txt', 'r') as f:
    stats_source = f.read()

In [13]:
# with open('../ismir_web/stats.php', 'w') as f:
#     f.write(stats_source.format(impact=table))

In [ ]: