In [1]:
import csv
from collections import defaultdict
In [2]:
def readCsv(path):
    f = open(path, 'r')
    c = csv.reader(f)
    header = next(c)
    data = []
    for l in c:
        d = dict(zip(header,l))
        data.append(d)
    return data
In [3]:
submissions = readCsv("submission.csv")
In [4]:
registrants = readCsv("registration.csv")
In [5]:
authors = readCsv("author.csv")
In [6]:
submissions[0].keys()
Out[6]:
dict_keys(['last updated', 'authors', 'reviews sent', 'form fields', 'decision', '#', 'title', 'abstract', 'track #', 'track name', 'submitted', 'notified', 'keywords'])
In [7]:
registrants[0].keys()
Out[7]:
dict_keys(['Registered', 'Please enter your submission number(s) below:', 'Sub-category', 'First name', 'Email address', 'Last name'])
In [8]:
authors[0].keys()
Out[8]:
dict_keys(['first name', 'country', 'Web page', 'person #', 'email', 'organization', 'last name', 'corresponding?', 'submission #'])
In [9]:
# 1. Get set of accepted paper IDs (short/full/demo/phd)

acceptedPapers = set()

nShort = 0
nLong = 0
nDemo = 0
nPhD = 0

for d in submissions:

    if 'Recommended accept as SHORT PAPER' in d['decision']:
        acceptedPapers.add(d['#'])
        nShort += 1
    elif 'Recommended accept as FULL PAPER' in d['decision']:
        acceptedPapers.add(d['#'])
        nLong += 1
    elif 'Accept as demonstration' in d['decision']:
        acceptedPapers.add(d['#'])
        nDemo += 1
    elif 'Accept for PhD symposium' in d['decision']:
        acceptedPapers.add(d['#'])
        nPhD += 1
    else:
        pass
        #print(d['track name'] + ' ' + d['decision'])

print("N short = " + str(nShort))
print("N long  = " + str(nLong))
print("N demo  = " + str(nDemo))
print("N PhD   = " + str(nPhD))
N short = 135
N long  = 225
N demo  = 27
N PhD   = 13
In [10]:
# 2. Get e-mail lists for all accepted papers

emailsPerAccepted = defaultdict(set)

for d in authors:
    if d['submission #'] in acceptedPapers:
        emailsPerAccepted[d['submission #']].add(d['email'])
In [11]:
# 3. Get set of registered authors

registeredEmails = set()

for d in registrants:
    registeredEmails.add(d['Email address'])
In [12]:
# 4. Get set of registered submission numbers

registeredSubmissions = set()

for d in registrants:
    subNos = set([x.strip() for x in d['Please enter your submission number(s) below:'].split(',')])
    registeredSubmissions = registeredSubmissions.union(subNos)
In [14]:
# 5. Find papers with no registrants (based on e-mails)

for p in emailsPerAccepted:
    for e in emailsPerAccepted[p]:
        if e in registeredEmails:
            break
    else:
        if p in registeredSubmissions:
            continue
        if '#' + p in registeredSubmissions:
            continue
        if 'R-' + p in registeredSubmissions:
            continue
        if 'R' + p in registeredSubmissions:
            continue
        if 'P-' + p in registeredSubmissions:
            continue
        if 'D-' + p in registeredSubmissions:
            continue
        if p + '-P' in registeredSubmissions:
            continue
        if p == '2097':
            continue
            # 2097 was entered wrong in the registrant list but seems to have been registered.
        print(p + " has no registrant")
        print(emailsPerAccepted[p])
        print()
237 has no registrant
{'pramodv@illinois.edu', 'spbhat2@illinois.edu', 'hgong6@illinois.edu', 'li215@illinois.edu'}

191 has no registrant
{'zhao97@illinois.edu', 'zaher@illinois.edu', 'dongxin3@illinois.edu', 'alpiao@uw.edu', 'sl29@illinois.edu', 'tianshi3@illinois.edu', 'hanj@illinois.edu', 'syao9@illinois.edu', 'lusu@buffalo.edu', 'wenjunji@buffalo.edu', 'shaohan.hu@ibm.com', 'hshao5@illinois.edu', 'jinyang7@illinois.edu'}

2472 has no registrant
{'qiong.zhang@alibaba.com', 'luo.si@alibaba.com', 'quanzhi.li@gmail.com'}

519 has no registrant
{'florian.lemmerich@gesis.org', 'musen@stanford.edu', 'leespinn@gmail.com', 'markus.strohmaier@humtec.rwth-aachen.de', 'web@simonwalk.info'}

2115 has no registrant
{'sharm163@umn.edu', 'karypis@umn.edu'}

2458 has no registrant
{'zmarinho@cmu.edu', 'becky.garrett@bbc.co.uk', 'jeff.mitchell@bristol.ac.uk', 'amm@priberam.pt', 'andreas.vlachos@cst.cam.ac.uk', 'david.nogueira@priberam.pt', 'sebastiao.miranda@priberam.pt', 'andrew.secker@bbc.co.uk'}

857 has no registrant
{'kirar@cs.technion.ac.il', 'idoguy@acm.org', 'snovgorodov@ebay.com', 'sguyelad@cs.technion.ac.il'}

1951 has no registrant
{'aecio.santos@nyu.edu', 'kien.pham@nyu.edu', 'juliana.freire@nyu.edu'}

1981 has no registrant
{'kawamae@gmail.com'}

1843 has no registrant
{'youjin.shin.1@stonybrook.edu', 'simonwoo@usc.edu'}

2432 has no registrant
{'vincent.lully@sorbonne-universite.fr', 'dennis.diefenbach@univ-st-etienne.fr', 'omar.alqawasmeh@univ-st-etienne.fr', 'kamal.singh@univ-st-etienne.fr', 'pedro.migliatti@gmail.com', 'pierre.maret@univ-st-etienne.fr'}

572 has no registrant
{'104761501@nccu.edu.tw', 'yang@citi.sinica.edu.tw', 'cjwang@citi.sinica.edu.tw', 'mftsai@nccu.edu.tw'}

750 has no registrant
{'yaotangren@qiniu.com', 'liushuchun@qiniu.com', 'xieyufei@qiniu.com', 'pengyao@qiniu.com', 'yufeixie@ica.stc.sh.cn'}

1956 has no registrant
{'hsteck@gmail.com'}

837 has no registrant
{'georg.gottlob@cs.ox.ac.uk', 'crescenz@dia.uniroma3.it', 'giovanni.grasso@unical.it', 'jinsong.guo@cs.ox.ac.uk', 'tim.furche@cs.ox.ac.uk'}

1739 has no registrant
{'justincr@microsoft.com', 'counts@microsoft.com', 'allen.lin@eecs.northwestern.edu'}

94 has no registrant
{'', 'huanglongtao@iie.ac.cn', 'linjunyu@iie.ac.cn'}

1581 has no registrant
{'brian.brost@gmail.com', 'erishabh@gmail.com', 'tjehan@spotify.com'}

In [15]:
contactPerAccepted = defaultdict(set)
for d in authors:
    contactPerAccepted[d['submission #']].add((d['email'], d['last name'], d['first name']))
In [16]:
for x in ['94', '191', '2115', '857', '1843', '2432', '572', '837']:
    print(x)
    print(contactPerAccepted[x])
    print()
94
{('huanglongtao@iie.ac.cn', 'Huang', 'Longtao'), ('linjunyu@iie.ac.cn', 'Lin', 'Junyu'), ('', 'Ma', 'Ting'), ('', 'Hu', 'Songlin'), ('', 'Han', 'Jizhong')}

191
{('dongxin3@illinois.edu', 'Liu', 'Dongxin'), ('jinyang7@illinois.edu', 'Li', 'Jinyang'), ('shaohan.hu@ibm.com', 'Hu', 'Shaohan'), ('lusu@buffalo.edu', 'Su', 'Lu'), ('sl29@illinois.edu', 'Liu', 'Shengzhong'), ('tianshi3@illinois.edu', 'Wang', 'Tianshi'), ('zaher@illinois.edu', 'Abdelzaher', 'Tarek'), ('hanj@illinois.edu', 'Han', 'Jiawei'), ('wenjunji@buffalo.edu', 'Jiang', 'Wenjun'), ('alpiao@uw.edu', 'Piao', 'Ailing'), ('hshao5@illinois.edu', 'Shao', 'Huajie'), ('syao9@illinois.edu', 'Yao', 'Shuochao'), ('zhao97@illinois.edu', 'Zhao', 'Yiran')}

2115
{('sharm163@umn.edu', 'Sharma', 'Mohit'), ('karypis@umn.edu', 'Karypis', 'George')}

857
{('snovgorodov@ebay.com', 'Novgorodov', 'Slava'), ('sguyelad@cs.technion.ac.il', 'Elad', 'Guy'), ('idoguy@acm.org', 'Guy', 'Ido'), ('kirar@cs.technion.ac.il', 'Radinsky', 'Kira')}

1843
{('simonwoo@usc.edu', 'Woo', 'Simon'), ('youjin.shin.1@stonybrook.edu', 'Shin', 'Youjin')}

2432
{('vincent.lully@sorbonne-universite.fr', 'Lully', 'Vincent'), ('pedro.migliatti@gmail.com', 'Migliatti', 'Pedro'), ('omar.alqawasmeh@univ-st-etienne.fr', 'Qawasmeh', 'Omar'), ('kamal.singh@univ-st-etienne.fr', 'Singh', 'Kamal'), ('dennis.diefenbach@univ-st-etienne.fr', 'Diefenbach', 'Dennis'), ('pierre.maret@univ-st-etienne.fr', 'Maret', 'Pierre')}

572
{('mftsai@nccu.edu.tw', 'Tsai', 'Ming-Feng'), ('104761501@nccu.edu.tw', 'Chen', 'Chih-Ming'), ('cjwang@citi.sinica.edu.tw', 'Wang', 'Chuan-Ju'), ('yang@citi.sinica.edu.tw', 'Yang', 'Yi-Hsuan')}

837
{('tim.furche@cs.ox.ac.uk', 'Furche', 'Tim'), ('jinsong.guo@cs.ox.ac.uk', 'Guo', 'Jinsong'), ('georg.gottlob@cs.ox.ac.uk', 'Gottlob', 'Georg'), ('crescenz@dia.uniroma3.it', 'Crescenzi', 'Valter'), ('giovanni.grasso@unical.it', 'Grasso', 'Giovanni')}