Σημειωματάριο Δευτέρας 27 Νοε. 2017

Επεξεργασία ενός μεγάλου αρχείου δεδομένων

Τα δεδομένα στο αρχείο αυτό είναι πραγματικά (το αρχείο το κατέβασα από τη σελίδα http://www.tableau.com/public/community/sample-data-sets όπου μπορείτε να βρείτε και άλλα ενδιαφέροντα δεδομένα). Τα δεδομένα αφορούν τους Ολυμπιακούς αγώνες (από το 2000 έως το 2012) και τους αθλητές που έχουν πάρει μετάλλια σε αυτούς. Μπορείτε να δείτε τα περιεχόμενα του αρχείου κατάλληλα διαμορφωμένα

εδώ.
Περιέχει πάνω από 8000 γραμμές και σε κάθε γραμμή υπάρχει το όνομα ενός αθλητή και το πόσα (και τι) μετάλλια πήρε σε κάποια Ολυμπιάδα. Ο ίδιος αθλητής εμφανίζεται ενδεχομένως σε περισσότερες από μία γραμμές. Υπάρχουν συνολικά 10 πεδία σε κάθε γραμμή, τα οποία τα αριθμούμε από 0 έως 9.

Το αρχείο αυτό είναι ένα αρχείο κειμένου που περιέχει μια γραμμή κειμένου για κάθε γραμμή στη μορφή του πίνακα που φαίνεται πιο πάνω. Τα διάφορα πεδία στην κάθε γραμμή διαχωρίζονται με το σύμβολο του κόμμα (εξ ου και η κατάληξη csv, comma separated values). Ιδού μερικές πρώτες γραμμές του αρχείου:

Athlete,Age,Country,Year,Closing Ceremony Date,Sport,Gold Medals,Silver Medals,Bronze Medals,Total Medals
Michael Phelps,23,United States,2008,8/24/2008,Swimming,8,0,0,8
Michael Phelps,19,United States,2004,8/29/2004,Swimming,6,0,2,8
Michael Phelps,27,United States,2012,8/12/2012,Swimming,4,2,0,6
Natalie Coughlin,25,United States,2008,8/24/2008,Swimming,1,2,3,6
Aleksey Nemov,24,Russia,2000,10/1/2000,Gymnastics,2,1,3,6
Alicia Coutts,24,Australia,2012,8/12/2012,Swimming,1,3,1,5
Missy Franklin,17,United States,2012,8/12/2012,Swimming,4,0,1,5
Ryan Lochte,27,United States,2012,8/12/2012,Swimming,2,2,1,5
Allison Schmitt,22,United States,2012,8/12/2012,Swimming,3,1,1,5

Το πρώτο πράγμα που κάνουμε είναι να μετρήσουμε το πόσες γραμμές περιέχει το αρχείο (χωρίς την πρώτη γραμμή με τις επικεφαλίδες).

In [1]:
f = open("olympics.csv", "r")
L = f.readlines()
f.close()

N = len(L)-1

print("Το αρχείο έχει {} γραμμές".format(N))
Το αρχείο έχει 8618 γραμμές

Έπειτα στη θέση κάθε γραμμής παίρνουμε μια λίστα από λέξεις, τα περιεχόμενα της κάθε στήλης του αρχείου.

In [17]:
f = open("olympics.csv", "r")
L = f.readlines()
f.close()

del L[0] # πετάμε το πρώτο στοιχείο της λίστας που αντιστοιχεί στις επικεφαλίδες των στηλών

N = len(L)

for i in range(len(L)): # πετάμε από κάθε string που επέστρεψε η readlines τους λευκούς χαρακτήρες από το τέλος
    L[i] = L[i].rstrip() # και, μεταξύ άλλων, το χαρακτήρα newline (\n)

W = [] # στη λίστα W θα έχουμε σε κάθε θέση μια λίστα από λέξεις, τις λέξεις της γραμμής
for i in range(len(L)): # που τις βρίσκουμε καλώντας την split με διαχωριστικό χαρακτήρα το κόμμα.
    W.append( L[i].split(",") )
    
for i in range(5): # τυπώνουμε τις λίστες από λέξεις που αντιστοιχούν στις 5 πρώτες γραμμές
    print(W[i])
['Aaron Gate', '21', 'New Zealand', '2012', '8/12/2012', 'Cycling', '0', '0', '1', '1']
['Abbos Atayev', '26', 'Uzbekistan', '2012', '8/12/2012', 'Boxing', '0', '0', '1', '1']
['Abby Bishop', '23', 'Australia', '2012', '8/12/2012', 'Basketball', '0', '0', '1', '1']
['Abby Johnston', '22', 'United States', '2012', '8/12/2012', 'Diving', '0', '1', '0', '1']
['Abby Wambach', '32', 'United States', '2012', '8/12/2012', 'Football', '1', '0', '0', '1']

Στο επόμενο απαντάμε στο ερώτημα, για πόσα διαφορετικά έτη εμφανίζεται πληροφορία στο αρχείο αυτό.

Παρατηρείστε ότι αντί να αναφερόμαστε στη στήλη του έτους με τον αριθμό 3 αναφερόμαστε σε αυτή με το σύμβολο YEAR το οποίο προηγουμένως έχουμε ορίσει ως 3. Είναι μεν μεταβλητή το YEAR αλλά το μεταχειριζόμαστε σα σταθερά, δεν του αλλάζουμε δηλ. την τιμή (γι' αυτό και το γράφουμε με κεφαλαία, ώστε να ξεχωρίζει από τις άλλες μας μεταβλητές).

In [1]:
# Για πόσα διαφορετικά έτη υπάρχει πληροφορία
YEAR=3

f = open("olympics.csv", "r")
L = f.readlines()
f.close()

del L[0]

N = len(L)

for i in range(len(L)):
    L[i] = L[i].rstrip()

W = []
for i in range(len(L)):
    W.append( L[i].split(",") ) # Το κομμάτι μέχρι εδώ δεν έχει αλλάξει από πριν
    
years = [] # ποια έτη εμφανίζονται (σε μια λίστα)
for x in W:
    if x[YEAR] not in years:
        years.append(x[YEAR])
print("Αριθμός ετών: {}".format(len(years)))
Αριθμός ετών: 7

Μπορούμε φυσικά να δούμε και τα έτη αυτά. Προσέξτε ότι είναι σε μορφή string, όχι ακεραίου. Αυτό ισχύει για όλα τα περιεχόμενα της λίστας W. Είναι κατ' αρχήν strings και να θέλουμε να τα δούμε ως αριθμούς θα πρέπει να τα μετατρέψουμε.

In [22]:
sorted(years)
Out[22]:
['2000', '2002', '2004', '2006', '2008', '2010', '2012']

Για πόσους διαφορετικούς αθλητές υπάρχει πληροφορία. Παρατηρείστε ότι τώρα εισάγουμε μια νέα σταθερά την ATHLETE για να αναφερόμαστε στην πρώτη στήλη του αρχείου.

In [2]:
# Για πόσους διαφορετικούς αθλητές υπάρχει πληροφορία
YEAR=3
ATHLETE=0
f = open("olympics.csv", "r")
L = f.readlines()
f.close()

del L[0]

N = len(L)

for i in range(len(L)):
    L[i] = L[i].rstrip()

W = []
for i in range(len(L)):
    W.append( L[i].split(",") ) # Καμία αλλαγή ως εδώ
    
athletes = []
for x in W:
    if x[ATHLETE] not in athletes:
        athletes.append(x[ATHLETE])
print("Αριθμός αθλητών: {}".format(len(athletes)))
Αριθμός αθλητών: 6955

Ποιοι είναι οι αθλητές με τα περισσότερα συνολικά μετάλλια;

In [36]:
# Ποιοι είναι οι αθλητές με τα περισσότερα συνολικά μετάλλια;
YEAR=3
ATHLETE=0
TOTAL=9

f = open("olympics.csv", "r")
L = f.readlines()
f.close()

del L[0]

N = len(L)

for i in range(len(L)):
    L[i] = L[i].rstrip()

W = []
for i in range(len(L)):
    W.append( L[i].split(",") ) # Καμιά αλλαγή ως εδώ
    
medals = {} # Σε ένα λεξικό με κλειδί το όνομα του αθλητή κρατάμε ως τιμή το συνολικό αριθμό των μεταλλίων του

def rank(name): # Συνάρτηση με την οποία ταξινομούμε κατά τον αριθμό μεταλλίων τους αθλητές
    return medals[name]

for x in W:
    name = x[ATHLETE]
    total = int(x[TOTAL])
    if name in medals.keys():
        medals[name] += total
    else:
        medals[name] = total
        
count = 0 # τυπώνουμε 20 γραμμές με τους αθλητές με τα περισσότερα μετάλλια
for n in sorted(list(medals.keys()), key=rank, reverse=True): # διατρέχει τα ονόματα των αθλητών
    count += 1  # κατά φθίνουσα σειρά μεταλλίων
    if count == 21:
        break
    print("{}: {}".format(n, medals[n]))
    
Michael Phelps: 22
Natalie Coughlin: 12
Ryan Lochte: 11
Leisel Jones: 9
Ian Thorpe: 9
Ole Einar Bjørndalen: 9
Inge de Bruijn: 8
Katalin Kovács: 8
Dara Torres: 8
Jason Lezak: 8
Apolo Anton Ohno: 8
Kosuke Kitajima: 7
Bradley Wiggins: 7
Veronica Campbell-Brown: 7
Kati Wilhelm: 7
Pieter van den Hoogenband: 7
Libby Lenton-Trickett: 7
Aaron Peirsol: 7
Kirsty Coventry: 7
Grant Hackett: 7

Ποιοι αθλητές έχουν πάρει μετάλλιο με διαφορετικές χώρες; Υπολογίζουμε για κάθε αθλητή τις χώρες με τις οποίες έχει αγωνιστεί και τυπώνουμε όλους όσους έχουν αγωνιστεί με τουλάχιστον δύο χώρες.

In [3]:
# Ποιοι αθλητές έχουν πάρει μετάλλιο με διαφορετικές χώρες;
YEAR=3
ATHLETE=0
TOTAL=9
COUNTRY=2

f = open("olympics.csv", "r")
L = f.readlines()
f.close()

del L[0]

N = len(L)

for i in range(len(L)):
    L[i] = L[i].rstrip()

W = []
for i in range(len(L)):
    W.append( L[i].split(",") ) # καμία αλλαγή ως εδώ
    
countries={}
# countries θα είναι ένα λεξικό με κλειδιά τα ονόματα των
# αθλητών και τιμή τη λίστα των χωρών του αθλητή

for x in W:
    name = x[ATHLETE]
    country = x[COUNTRY]
    if name in countries.keys():
        if country not in countries[name]:
            countries[name].append(country)
    else:
        countries[name] = [ country ]

for n in countries.keys():
    if len(countries[n]) >= 2:
        print("{} {}".format(n, countries[n]))
    
Gyuzel Manyurova ['Russia', 'Kazakhstan']
Chen Jing ['Chinese Taipei', 'China']
Slobodan Nikic ['Serbia and Montenegro', 'Serbia']
Dejan Savic ['Serbia and Montenegro', 'Serbia']
Denis Šefik ['Serbia and Montenegro', 'Serbia']
Aleksandar Šapic ['Serbia and Montenegro', 'Serbia']
Vlada Vujasinovic ['Serbia and Montenegro', 'Serbia']
Vanja Udovicic ['Serbia and Montenegro', 'Serbia']
David Musulbes ['Russia', 'Slovakia']
Aleksandar Ciric ['Serbia and Montenegro', 'Serbia']
Iván García ['Cuba', 'Mexico']
Richard Thompson ['Australia', 'Trinidad and Tobago']
Matt Wells ['Australia', 'Great Britain']

Ποιες χώρες έχουν πάρει τα πιο πολλά χρυσά μετάλλια;

In [4]:
# Ποιες χώρες έχουν πάρει τα πιο πολλά χρυσά μετάλλια;
YEAR=3
ATHLETE=0
TOTAL=9
COUNTRY=2
GOLD=6

f = open("olympics.csv", "r")
L = f.readlines()
f.close()

del L[0]

N = len(L)

for i in range(len(L)):
    L[i] = L[i].rstrip()

W = []
for i in range(len(L)):
    W.append( L[i].split(",") ) # καμιά αλλαγή ως εδώ
    
gold={} # στο λεξικό αυτό οι χώρες είναι τα κλειδιά και οι τιμές το πόσα χρυσά έχουν πάρει

def rank(c):
    return gold[c]

for x in W:
    gcount = int(x[GOLD])
    country = x[COUNTRY]
    if country in gold.keys():
        gold[country] += gcount
    else:
        gold[country] = gcount

for c in sorted(list(gold.keys()), key=rank, reverse=True):
    print("{}: {}".format(c, gold[c]))
    
United States: 552
Russia: 234
China: 234
Germany: 223
Canada: 168
Australia: 163
Great Britain: 124
South Korea: 110
France: 108
Netherlands: 101
Norway: 97
Italy: 86
Hungary: 77
Cuba: 57
Japan: 57
Sweden: 57
Romania: 57
Argentina: 49
Brazil: 46
Denmark: 46
Austria: 36
Croatia: 35
Ukraine: 31
Jamaica: 24
Switzerland: 21
Poland: 20
Cameroon: 20
Mexico: 19
Spain: 19
New Zealand: 18
Belarus: 17
Czech Republic: 14
Ethiopia: 13
Kazakhstan: 13
Greece: 12
Bahamas: 11
Kenya: 11
Finland: 11
Serbia and Montenegro: 11
South Africa: 10
Iran: 10
Slovakia: 10
Turkey: 9
Bulgaria: 8
Azerbaijan: 6
Nigeria: 6
Thailand: 6
Georgia: 6
Estonia: 6
North Korea: 6
Lithuania: 5
Indonesia: 5
Slovenia: 5
Uzbekistan: 5
Latvia: 3
Chile: 3
Dominican Republic: 3
Algeria: 2
Colombia: 2
Chinese Taipei: 2
Mongolia: 2
Morocco: 2
Belgium: 2
Zimbabwe: 2
Tunisia: 2
Trinidad and Tobago: 1
Ireland: 1
Venezuela: 1
Panama: 1
Mozambique: 1
Serbia: 1
Egypt: 1
Grenada: 1
Portugal: 1
Israel: 1
Uganda: 1
United Arab Emirates: 1
India: 1
Barbados: 0
Costa Rica: 0
Paraguay: 0
Qatar: 0
Macedonia: 0
Guatemala: 0
Malaysia: 0
Afghanistan: 0
Hong Kong: 0
Eritrea: 0
Togo: 0
Montenegro: 0
Uruguay: 0
Kuwait: 0
Saudi Arabia: 0
Armenia: 0
Kyrgyzstan: 0
Puerto Rico: 0
Syria: 0
Tajikistan: 0
Ecuador: 0
Vietnam: 0
Gabon: 0
Botswana: 0
Bahrain: 0
Mauritius: 0
Singapore: 0
Sri Lanka: 0
Moldova: 0
Sudan: 0
Iceland: 0
Cyprus: 0

Για κάθε χώρα βρίσκουμε όλα της τα μετάλλια ανά άθλημα.

In [5]:
# Για κάθε χώρα βρίσκουμε όλα της τα μετάλλια *ανά άθλημα*.
YEAR=3
ATHLETE=0
TOTAL=9
COUNTRY=2
GOLD=6
SPORT=5

f = open("olympics.csv", "r")
L = f.readlines()
f.close()

del L[0]

N = len(L)

for i in range(len(L)):
    L[i] = L[i].rstrip()

W = []
for i in range(len(L)):
    W.append( L[i].split(",") ) # καμιά αλλαγή ως εδώ
    
wins={} # κλειδιά οι χώρες με τιμές ένα λεξικό όπου κλειδιά είναι τα αθλήματα και τιμές τα συνολικά μετάλλια σε αυτά

for x in W:
    medals = int(x[TOTAL])
    country = x[COUNTRY]
    sport = x[SPORT]
    if country in wins.keys():
        if sport in wins[country]:
            wins[country][sport] += medals
        else:
            wins[country][sport] = medals
    else:
        wins[country] = {sport: medals}

for c in wins:
    print("{}: {}".format(c, wins[c]))
    
Trinidad and Tobago: {'Swimming': 1, 'Athletics': 18}
Barbados: {'Athletics': 1}
Costa Rica: {'Swimming': 2}
Ireland: {'Equestrian': 1, 'Boxing': 7, 'Athletics': 1}
Paraguay: {'Football': 17}
Cuba: {'Shooting': 3, 'Fencing': 3, 'Weightlifting': 1, 'Cycling': 1, 'Canoeing': 5, 'Boxing': 26, 'Baseball': 72, 'Wrestling': 11, 'Taekwondo': 5, 'Judo': 20, 'Athletics': 21, 'Volleyball': 20}
Ethiopia: {'Athletics': 29}
Italy: {'Shooting': 13, 'Fencing': 57, 'Football': 17, 'Swimming': 16, 'Waterpolo': 26, 'Snowboarding': 1, 'Figure Skating': 2, 'Nordic Combined': 1, 'Boxing': 8, 'Cycling': 7, 'Wrestling': 1, 'Taekwondo': 3, 'Gymnastics': 3, 'Sailing': 5, 'Speed Skating': 6, 'Athletics': 8, 'Short-Track Speed Skating': 10, 'Cross Country Skiing': 20, 'Basketball': 12, 'Alpine Skiing': 4, 'Luge': 5, 'Archery': 10, 'Rhythmic Gymnastics': 12, 'Canoeing': 11, 'Volleyball': 36, 'Bobsleigh': 2, 'Rowing': 28, 'Judo': 7}
Bahamas: {'Athletics': 24}
Qatar: {'Shooting': 1, 'Weightlifting': 1, 'Athletics': 1}
Macedonia: {'Wrestling': 1}
New Zealand: {'Canoeing': 2, 'Cycling': 14, 'Triathlon': 3, 'Equestrian': 6, 'Sailing': 7, 'Rowing': 17, 'Athletics': 3}
Kenya: {'Athletics': 39}
Guatemala: {'Athletics': 1}
Ukraine: {'Shooting': 7, 'Fencing': 7, 'Modern Pentathlon': 1, 'Weightlifting': 6, 'Sailing': 7, 'Trampoline': 2, 'Biathlon': 1, 'Swimming': 7, 'Diving': 4, 'Archery': 7, 'Rhythmic Gymnastics': 2, 'Canoeing': 9, 'Boxing': 12, 'Cycling': 6, 'Wrestling': 10, 'Figure Skating': 2, 'Gymnastics': 10, 'Rowing': 8, 'Judo': 3, 'Handball': 15, 'Athletics': 17}
Venezuela: {'Taekwondo': 2, 'Fencing': 1, 'Weightlifting': 1}
United States: {'Shooting': 16, 'Fencing': 19, 'Football': 64, 'Equestrian': 30, 'Cycling': 18, 'Triathlon': 1, 'Synchronized Swimming': 11, 'Swimming': 267, 'Diving': 8, 'Ice Hockey': 106, 'Waterpolo': 63, 'Snowboarding': 17, 'Taekwondo': 8, 'Nordic Combined': 7, 'Boxing': 9, 'Baseball': 48, 'Wrestling': 20, 'Figure Skating': 9, 'Gymnastics': 55, 'Sailing': 14, 'Canoeing': 1, 'Luge': 4, 'Speed Skating': 22, 'Athletics': 147, 'Freestyle Skiing': 8, 'Tennis': 16, 'Weightlifting': 2, 'Short-Track Speed Skating': 23, 'Basketball': 95, 'Alpine Skiing': 12, 'Archery': 7, 'Beach Volleyball': 14, 'Curling': 4, 'Bobsleigh': 18, 'Volleyball': 36, 'Skeleton': 3, 'Modern Pentathlon': 1, 'Rowing': 60, 'Softball': 45, 'Judo': 4}
Netherlands: {'Equestrian': 21, 'Rowing': 55, 'Swimming': 46, 'Tennis': 2, 'Archery': 1, 'Waterpolo': 12, 'Snowboarding': 1, 'Cycling': 12, 'Gymnastics': 1, 'Sailing': 10, 'Hockey': 113, 'Judo': 12, 'Speed Skating': 31, 'Badminton': 1}
Latvia: {'Beach Volleyball': 2, 'Skeleton': 1, 'Modern Pentathlon': 1, 'Athletics': 3, 'Cycling': 2, 'Gymnastics': 2, 'Judo': 1, 'Weightlifting': 2, 'Luge': 3}
Panama: {'Athletics': 1}
Algeria: {'Judo': 2, 'Boxing': 1, 'Athletics': 5}
Lithuania: {'Shooting': 1, 'Canoeing': 1, 'Modern Pentathlon': 4, 'Boxing': 1, 'Cycling': 1, 'Wrestling': 2, 'Basketball': 12, 'Rowing': 2, 'Sailing': 1, 'Athletics': 4, 'Swimming': 1}
Malaysia: {'Diving': 1, 'Badminton': 2}
Brazil: {'Football': 70, 'Equestrian': 5, 'Basketball': 12, 'Swimming': 8, 'Beach Volleyball': 18, 'Modern Pentathlon': 1, 'Volleyball': 69, 'Taekwondo': 1, 'Gymnastics': 1, 'Sailing': 12, 'Judo': 11, 'Athletics': 7, 'Boxing': 3}
South Africa: {'Swimming': 11, 'Canoeing': 1, 'Rowing': 6, 'Athletics': 7}
Afghanistan: {'Taekwondo': 2}
Hong Kong: {'Table Tennis': 2, 'Cycling': 1}
Germany: {'Shooting': 7, 'Fencing': 22, 'Football': 50, 'Equestrian': 40, 'Biathlon': 40, 'Swimming': 32, 'Diving': 9, 'Modern Pentathlon': 1, 'Snowboarding': 1, 'Taekwondo': 2, 'Nordic Combined': 15, 'Archery': 3, 'Cycling': 36, 'Table Tennis': 7, 'Figure Skating': 2, 'Gymnastics': 5, 'Sailing': 8, 'Tennis': 3, 'Speed Skating': 22, 'Skeleton': 2, 'Trampoline': 2, 'Weightlifting': 3, 'Cross Country Skiing': 31, 'Wrestling': 1, 'Judo': 10, 'Alpine Skiing': 4, 'Luge': 17, 'Handball': 15, 'Beach Volleyball': 4, 'Triathlon': 2, 'Bobsleigh': 26, 'Athletics': 16, 'Canoeing': 68, 'Rowing': 46, 'Hockey': 65, 'Ski Jumping': 9, 'Boxing': 3}
Belarus: {'Shooting': 6, 'Tennis': 3, 'Weightlifting': 10, 'Biathlon': 2, 'Swimming': 2, 'Freestyle Skiing': 3, 'Rhythmic Gymnastics': 21, 'Canoeing': 18, 'Boxing': 2, 'Cycling': 1, 'Wrestling': 4, 'Modern Pentathlon': 1, 'Rowing': 7, 'Judo': 2, 'Athletics': 15}
Colombia: {'Weightlifting': 4, 'Cycling': 4, 'Wrestling': 2, 'Taekwondo': 1, 'Judo': 1, 'Athletics': 1}
Eritrea: {'Athletics': 1}
Togo: {'Canoeing': 1}
Japan: {'Fencing': 5, 'Football': 18, 'Baseball': 24, 'Synchronized Swimming': 24, 'Swimming': 43, 'Freestyle Skiing': 1, 'Taekwondo': 1, 'Boxing': 2, 'Cycling': 4, 'Wrestling': 19, 'Figure Skating': 3, 'Gymnastics': 23, 'Sailing': 2, 'Speed Skating': 6, 'Athletics': 8, 'Weightlifting': 1, 'Badminton': 2, 'Archery': 5, 'Volleyball': 12, 'Table Tennis': 3, 'Softball': 44, 'Judo': 32}
Chile: {'Tennis': 5, 'Football': 17}
Mozambique: {'Athletics': 1}
Finland: {'Shooting': 4, 'Alpine Skiing': 1, 'Cross Country Skiing': 7, 'Freestyle Skiing': 2, 'Ice Hockey': 64, 'Snowboarding': 2, 'Curling': 4, 'Nordic Combined': 11, 'Wrestling': 2, 'Sailing': 6, 'Ski Jumping': 10, 'Rowing': 2, 'Athletics': 3}
Croatia: {'Shooting': 2, 'Tennis': 2, 'Weightlifting': 2, 'Biathlon': 1, 'Swimming': 1, 'Alpine Skiing': 9, 'Waterpolo': 13, 'Taekwondo': 3, 'Gymnastics': 1, 'Rowing': 15, 'Handball': 30, 'Athletics': 2}
Azerbaijan: {'Shooting': 3, 'Judo': 2, 'Boxing': 6, 'Weightlifting': 1, 'Wrestling': 13}
Montenegro: {'Handball': 14}
Turkey: {'Weightlifting': 6, 'Boxing': 2, 'Wrestling': 8, 'Taekwondo': 6, 'Judo': 1, 'Athletics': 5}
Uruguay: {'Cycling': 1}
Switzerland: {'Shooting': 1, 'Fencing': 5, 'Alpine Skiing': 7, 'Equestrian': 9, 'Cross Country Skiing': 5, 'Triathlon': 4, 'Ski Jumping': 4, 'Freestyle Skiing': 2, 'Beach Volleyball': 2, 'Snowboarding': 7, 'Curling': 18, 'Bobsleigh': 10, 'Cycling': 10, 'Figure Skating': 1, 'Tennis': 3, 'Judo': 1, 'Rowing': 1, 'Skeleton': 3}
Nigeria: {'Taekwondo': 1, 'Football': 16, 'Weightlifting': 1, 'Athletics': 21}
Kuwait: {'Shooting': 2}
Hungary: {'Shooting': 2, 'Fencing': 9, 'Weightlifting': 2, 'Swimming': 9, 'Gymnastics': 2, 'Waterpolo': 39, 'Canoeing': 54, 'Boxing': 1, 'Wrestling': 5, 'Modern Pentathlon': 3, 'Judo': 2, 'Handball': 15, 'Athletics': 2}
Bulgaria: {'Shooting': 4, 'Weightlifting': 5, 'Short-Track Speed Skating': 3, 'Biathlon': 1, 'Rhythmic Gymnastics': 6, 'Canoeing': 2, 'Boxing': 2, 'Wrestling': 8, 'Gymnastics': 4, 'Rowing': 4, 'Judo': 1, 'Athletics': 1}
Poland: {'Shooting': 2, 'Fencing': 9, 'Weightlifting': 6, 'Cross Country Skiing': 4, 'Biathlon': 1, 'Sailing': 3, 'Swimming': 3, 'Canoeing': 16, 'Cycling': 1, 'Wrestling': 2, 'Gymnastics': 2, 'Rowing': 14, 'Ski Jumping': 4, 'Speed Skating': 3, 'Athletics': 10}
Chinese Taipei: {'Taekwondo': 8, 'Table Tennis': 1, 'Weightlifting': 5, 'Archery': 6}
Serbia: {'Taekwondo': 1, 'Shooting': 2, 'Swimming': 1, 'Tennis': 1, 'Waterpolo': 26}
Indonesia: {'Weightlifting': 8, 'Badminton': 14}
Mongolia: {'Shooting': 1, 'Judo': 4, 'Boxing': 4, 'Wrestling': 1}
Saudi Arabia: {'Equestrian': 5, 'Athletics': 1}
Kazakhstan: {'Biathlon': 1, 'Weightlifting': 9, 'Boxing': 13, 'Cycling': 2, 'Wrestling': 12, 'Taekwondo': 1, 'Judo': 1, 'Athletics': 3}
Iran: {'Taekwondo': 5, 'Weightlifting': 7, 'Athletics': 1, 'Wrestling': 11}
Slovenia: {'Shooting': 3, 'Sailing': 2, 'Cross Country Skiing': 1, 'Ski Jumping': 4, 'Rowing': 6, 'Alpine Skiing': 2, 'Judo': 3, 'Swimming': 1, 'Athletics': 3}
Thailand: {'Taekwondo': 3, 'Weightlifting': 7, 'Boxing': 8}
Morocco: {'Boxing': 1, 'Athletics': 10}
Slovakia: {'Snowboarding': 1, 'Shooting': 4, 'Canoeing': 23, 'Wrestling': 1, 'Biathlon': 3, 'Swimming': 2, 'Judo': 1}
Denmark: {'Shooting': 2, 'Rowing': 21, 'Equestrian': 3, 'Badminton': 7, 'Cycling': 6, 'Table Tennis': 2, 'Canoeing': 2, 'Sailing': 12, 'Handball': 30, 'Athletics': 3, 'Swimming': 1}
South Korea: {'Shooting': 11, 'Fencing': 18, 'Football': 18, 'Weightlifting': 5, 'Badminton': 19, 'Short-Track Speed Skating': 37, 'Swimming': 4, 'Archery': 34, 'Speed Skating': 6, 'Figure Skating': 1, 'Boxing': 4, 'Baseball': 48, 'Wrestling': 8, 'Taekwondo': 14, 'Gymnastics': 6, 'Table Tennis': 15, 'Hockey': 16, 'Judo': 15, 'Handball': 29}
Argentina: {'Tennis': 3, 'Football': 34, 'Cycling': 2, 'Taekwondo': 1, 'Basketball': 24, 'Sailing': 10, 'Hockey': 63, 'Judo': 1, 'Swimming': 1}
Armenia: {'Weightlifting': 5, 'Boxing': 1, 'Wrestling': 4}
France: {'Shooting': 5, 'Fencing': 36, 'Alpine Skiing': 6, 'Equestrian': 5, 'Biathlon': 24, 'Synchronized Swimming': 2, 'Swimming': 39, 'Freestyle Skiing': 3, 'Snowboarding': 7, 'Figure Skating': 2, 'Nordic Combined': 1, 'Boxing': 6, 'Cycling': 30, 'Wrestling': 5, 'Taekwondo': 6, 'Gymnastics': 6, 'Sailing': 8, 'Handball': 30, 'Athletics': 9, 'Weightlifting': 1, 'Cross Country Skiing': 1, 'Basketball': 24, 'Tennis': 6, 'Archery': 3, 'Canoeing': 11, 'Table Tennis': 2, 'Rowing': 22, 'Judo': 18}
Kyrgyzstan: {'Judo': 1, 'Wrestling': 2}
Jamaica: {'Athletics': 80}
Egypt: {'Taekwondo': 1, 'Fencing': 1, 'Judo': 1, 'Boxing': 3, 'Wrestling': 2}
Puerto Rico: {'Athletics': 1, 'Wrestling': 1}
Grenada: {'Athletics': 1}
Portugal: {'Triathlon': 1, 'Judo': 1, 'Canoeing': 2, 'Cycling': 1, 'Athletics': 4}
Austria: {'Shooting': 1, 'Alpine Skiing': 27, 'Cross Country Skiing': 3, 'Biathlon': 6, 'Ski Jumping': 12, 'Swimming': 3, 'Freestyle Skiing': 1, 'Luge': 6, 'Snowboarding': 3, 'Triathlon': 1, 'Nordic Combined': 17, 'Athletics': 1, 'Canoeing': 1, 'Sailing': 6, 'Judo': 2, 'Skeleton': 1}
Israel: {'Canoeing': 1, 'Sailing': 2, 'Judo': 1}
Greece: {'Rhythmic Gymnastics': 6, 'Weightlifting': 6, 'Wrestling': 2, 'Taekwondo': 4, 'Gymnastics': 2, 'Sailing': 6, 'Diving': 2, 'Judo': 2, 'Rowing': 6, 'Athletics': 10, 'Waterpolo': 13}
Syria: {'Boxing': 1}
Australia: {'Shooting': 6, 'Diving': 17, 'Equestrian': 10, 'Baseball': 24, 'Triathlon': 5, 'Swimming': 163, 'Freestyle Skiing': 5, 'Waterpolo': 39, 'Snowboarding': 1, 'Cycling': 36, 'Taekwondo': 2, 'Sailing': 21, 'Athletics': 16, 'Trampoline': 1, 'Softball': 45, 'Short-Track Speed Skating': 1, 'Basketball': 48, 'Tennis': 3, 'Archery': 2, 'Beach Volleyball': 2, 'Canoeing': 19, 'Rowing': 61, 'Hockey': 81, 'Judo': 1}
Serbia and Montenegro: {'Shooting': 2, 'Volleyball': 11, 'Waterpolo': 25}
Tajikistan: {'Judo': 1, 'Boxing': 1, 'Wrestling': 1}
Ecuador: {'Athletics': 1}
Uganda: {'Athletics': 1}
Cameroon: {'Football': 18, 'Athletics': 2}
Georgia: {'Weightlifting': 2, 'Judo': 5, 'Boxing': 1, 'Shooting': 1, 'Wrestling': 14}
Sweden: {'Shooting': 3, 'Tennis': 2, 'Equestrian': 6, 'Cross Country Skiing': 22, 'Biathlon': 5, 'Swimming': 9, 'Alpine Skiing': 8, 'Ice Hockey': 64, 'Snowboarding': 1, 'Triathlon': 1, 'Curling': 8, 'Canoeing': 4, 'Cycling': 2, 'Wrestling': 4, 'Table Tennis': 1, 'Sailing': 8, 'Handball': 29, 'Athletics': 4}
Russia: {'Shooting': 21, 'Fencing': 32, 'Modern Pentathlon': 3, 'Skeleton': 1, 'Biathlon': 27, 'Synchronized Swimming': 43, 'Swimming': 20, 'Diving': 25, 'Ice Hockey': 21, 'Waterpolo': 38, 'Snowboarding': 1, 'Figure Skating': 16, 'Boxing': 22, 'Cycling': 15, 'Wrestling': 41, 'Taekwondo': 3, 'Gymnastics': 47, 'Speed Skating': 9, 'Handball': 43, 'Athletics': 98, 'Trampoline': 4, 'Weightlifting': 24, 'Badminton': 2, 'Freestyle Skiing': 1, 'Cross Country Skiing': 21, 'Basketball': 36, 'Tennis': 8, 'Luge': 1, 'Archery': 1, 'Rhythmic Gymnastics': 31, 'Canoeing': 16, 'Volleyball': 70, 'Bobsleigh': 6, 'Rowing': 8, 'Judo': 13}
Vietnam: {'Taekwondo': 1, 'Weightlifting': 1}
Gabon: {'Taekwondo': 1}
Estonia: {'Rowing': 3, 'Wrestling': 1, 'Judo': 3, 'Athletics': 4, 'Cross Country Skiing': 7}
Norway: {'Shooting': 2, 'Fencing': 1, 'Football': 17, 'Rowing': 4, 'Cross Country Skiing': 38, 'Biathlon': 26, 'Swimming': 2, 'Freestyle Skiing': 4, 'Handball': 43, 'Snowboarding': 1, 'Alpine Skiing': 9, 'Curling': 9, 'Canoeing': 7, 'Cycling': 2, 'Taekwondo': 2, 'Nordic Combined': 2, 'Sailing': 4, 'Ski Jumping': 11, 'Speed Skating': 3, 'Athletics': 5}
Uzbekistan: {'Gymnastics': 1, 'Trampoline': 1, 'Judo': 3, 'Boxing': 6, 'Wrestling': 8}
Botswana: {'Athletics': 1}
Bahrain: {'Athletics': 1}
Dominican Republic: {'Taekwondo': 1, 'Boxing': 1, 'Athletics': 3}
Belgium: {'Shooting': 1, 'Cycling': 4, 'Sailing': 1, 'Tennis': 3, 'Judo': 4, 'Athletics': 5}
United Arab Emirates: {'Shooting': 1}
Mexico: {'Football': 16, 'Weightlifting': 1, 'Archery': 2, 'Cycling': 1, 'Taekwondo': 6, 'Diving': 8, 'Athletics': 3, 'Boxing': 1}
Romania: {'Shooting': 2, 'Fencing': 7, 'Canoeing': 8, 'Boxing': 3, 'Weightlifting': 2, 'Gymnastics': 45, 'Rowing': 37, 'Judo': 4, 'Swimming': 6, 'Athletics': 9}
Canada: {'Diving': 12, 'Equestrian': 5, 'Triathlon': 2, 'Synchronized Swimming': 8, 'Swimming': 5, 'Freestyle Skiing': 6, 'Ice Hockey': 105, 'Snowboarding': 4, 'Figure Skating': 6, 'Football': 18, 'Cycling': 5, 'Wrestling': 6, 'Taekwondo': 2, 'Gymnastics': 1, 'Sailing': 2, 'Speed Skating': 26, 'Athletics': 2, 'Trampoline': 6, 'Weightlifting': 1, 'Short-Track Speed Skating': 38, 'Cross Country Skiing': 4, 'Tennis': 2, 'Curling': 30, 'Canoeing': 10, 'Skeleton': 4, 'Bobsleigh': 10, 'Rowing': 48, 'Judo': 2}
Spain: {'Shooting': 1, 'Fencing': 1, 'Football': 17, 'Equestrian': 5, 'Triathlon': 1, 'Synchronized Swimming': 21, 'Swimming': 3, 'Waterpolo': 12, 'Boxing': 1, 'Cycling': 15, 'Wrestling': 1, 'Taekwondo': 4, 'Gymnastics': 4, 'Sailing': 13, 'Handball': 44, 'Athletics': 3, 'Basketball': 24, 'Tennis': 7, 'Beach Volleyball': 2, 'Canoeing': 9, 'Hockey': 16, 'Judo': 1}
Zimbabwe: {'Swimming': 7}
Mauritius: {'Boxing': 1}
Singapore: {'Table Tennis': 7}
Sri Lanka: {'Athletics': 1}
Great Britain: {'Shooting': 3, 'Modern Pentathlon': 5, 'Equestrian': 31, 'Badminton': 4, 'Triathlon': 2, 'Swimming': 11, 'Tennis': 3, 'Archery': 1, 'Diving': 3, 'Athletics': 23, 'Curling': 5, 'Canoeing': 15, 'Boxing': 10, 'Cycling': 58, 'Taekwondo': 3, 'Gymnastics': 9, 'Rowing': 80, 'Hockey': 16, 'Judo': 3, 'Sailing': 34, 'Skeleton': 3}
Moldova: {'Shooting': 1, 'Weightlifting': 2, 'Boxing': 2}
China: {'Shooting': 32, 'Fencing': 23, 'Freestyle Skiing': 5, 'Synchronized Swimming': 20, 'Swimming': 35, 'Diving': 55, 'Figure Skating': 10, 'Boxing': 8, 'Cycling': 7, 'Wrestling': 6, 'Taekwondo': 8, 'Gymnastics': 51, 'Sailing': 4, 'Rowing': 8, 'Athletics': 11, 'Trampoline': 8, 'Weightlifting': 31, 'Badminton': 44, 'Short-Track Speed Skating': 26, 'Tennis': 4, 'Archery': 14, 'Speed Skating': 3, 'Beach Volleyball': 4, 'Rhythmic Gymnastics': 6, 'Curling': 4, 'Modern Pentathlon': 1, 'Volleyball': 24, 'Canoeing': 4, 'Table Tennis': 43, 'Hockey': 16, 'Judo': 15}
Sudan: {'Athletics': 1}
Tunisia: {'Swimming': 3, 'Athletics': 1}
Czech Republic: {'Shooting': 8, 'Tennis': 2, 'Cross Country Skiing': 10, 'Triathlon': 1, 'Freestyle Skiing': 1, 'Ice Hockey': 24, 'Speed Skating': 3, 'Alpine Skiing': 1, 'Canoeing': 12, 'Boxing': 1, 'Cycling': 1, 'Modern Pentathlon': 2, 'Rowing': 7, 'Sailing': 1, 'Athletics': 7}
Iceland: {'Handball': 14, 'Athletics': 1}
Cyprus: {'Sailing': 1}
North Korea: {'Shooting': 1, 'Weightlifting': 8, 'Boxing': 2, 'Wrestling': 2, 'Gymnastics': 1, 'Table Tennis': 1, 'Judo': 6}
India: {'Shooting': 4, 'Wrestling': 3, 'Weightlifting': 1, 'Boxing': 2, 'Badminton': 1}