6.7. Additional Exercises#
6.7.1. Exercise 1#
Write a function called get_unique_nationalities()
that finds the unique nationalities from ‘soccer_players_statistics.csv’.
Show code cell source
def sum_list(input_list):
summed_values = 0
for value in input_list:
summed_values += value
return summed_values
def get_unique_nationalities():
header = None
unique_nationalities = []
with open('soccer_players_statistics.csv', encoding="utf-8") as file:
for line in file:
if not line.strip():
continue
if not header:
header = line.strip().split(',')
continue
line = line.strip().split(',')
nationality = line[1]
if nationality not in unique_nationalities:
unique_nationalities.append(nationality)
unique_nationalities.sort()
return unique_nationalities
print(get_unique_nationalities())
['Afghanistan', 'Albania', 'Algeria', 'Angola', 'Antigua & Barbuda', 'Argentina', 'Armenia', 'Aruba', 'Australia', 'Austria', 'Azerbaijan', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bermuda', 'Bolivia', 'Bosnia Herzegovina', 'Brazil', 'Bulgaria', 'Burkina Faso', 'Cameroon', 'Canada', 'Cape Verde', 'Central African Rep.', 'Chad', 'Chile', 'China PR', 'Chinese Taipei', 'Colombia', 'Comoros', 'Congo', 'Costa Rica', 'Croatia', 'Cuba', 'Curacao', 'Cyprus', 'Czech Republic', 'DR Congo', 'Denmark', 'Dominican Republic', 'Ecuador', 'Egypt', 'El Salvador', 'England', 'Equatorial Guinea', 'Eritrea', 'Estonia', 'FIFA16_NationName_215', 'FYR Macedonia', 'Faroe Islands', 'Fiji', 'Finland', 'France', 'Gabon', 'Gambia', 'Georgia', 'Germany', 'Ghana', 'Gibraltar', 'Greece', 'Grenada', 'Guam', 'Guatemala', 'Guinea', 'Guinea Bissau', 'Guyana', 'Haiti', 'Honduras', 'Hungary', 'Iceland', 'India', 'Iran', 'Iraq', 'Israel', 'Italy', 'Ivory Coast', 'Jamaica', 'Japan', 'Kazakhstan', 'Kenya', 'Korea DPR', 'Korea Republic', 'Kosovo', 'Kuwait', 'Latvia', 'Lebanon', 'Lesotho', 'Liberia', 'Libya', 'Liechtenstein', 'Lithuania', 'Luxembourg', 'Madagascar', 'Mali', 'Malta', 'Mauritania', 'Mauritius', 'Mexico', 'Moldova', 'Montenegro', 'Montserrat', 'Morocco', 'Mozambique', 'Namibia', 'Netherlands', 'New Zealand', 'Niger', 'Nigeria', 'Northern Ireland', 'Norway', 'Oman', 'Pakistan', 'Palestine', 'Panama', 'Papua New Guinea', 'Paraguay', 'Peru', 'Philippines', 'Poland', 'Portugal', 'Puerto Rico', 'Qatar', 'Republic of Ireland', 'Romania', 'Russia', 'San Marino', 'Saudi Arabia', 'Scotland', 'Senegal', 'Serbia', 'Sierra Leone', 'Slovakia', 'Slovenia', 'Somalia', 'South Africa', 'Spain', 'St Kitts Nevis', 'St Lucia', 'Suriname', 'Sweden', 'Switzerland', 'Syria', 'São Tomé & Príncipe', 'Tanzania', 'Timor-Leste', 'Togo', 'Trinidad & Tobago', 'Tunisia', 'Turkey', 'Uganda', 'Ukraine', 'United States', 'Uruguay', 'Uzbekistan', 'Venezuela', 'Wales', 'Zambia', 'Zimbabwe']
6.7.2. Exercise 2#
Write a function called get_unique_values_by_column_name(column_name)
that finds the unique values for any column in ‘soccer_players_statistics.csv’.
Show code cell source
def get_unique_values_by_column_name(column_name):
header = None
unique_values = []
with open('soccer_players_statistics.csv', encoding="utf-8") as file:
for line in file:
if not line.strip():
continue
if not header:
header = line.strip().split(',')
try:
column_index = header.index(column_name)
except:
print(f'Column Name {column_name} not found!')
return False
continue
line = line.strip().split(',')
value = line[column_index]
if value and value not in unique_values:
unique_values.append(value)
unique_values.sort()
return unique_values
get_unique_values_by_column_name('Rating')
['45',
'46',
'47',
'48',
'49',
'50',
'51',
'52',
'53',
'54',
'55',
'56',
'57',
'58',
'59',
'60',
'61',
'62',
'63',
'64',
'65',
'66',
'67',
'68',
'69',
'70',
'71',
'72',
'73',
'74',
'75',
'76',
'77',
'78',
'79',
'80',
'81',
'82',
'83',
'84',
'85',
'86',
'87',
'88',
'89',
'90',
'92',
'93',
'94']
6.7.3. Exercise 4#
Write a function called stats(column_name)
that finds the min, max, and mean for a given column name.
Show code cell source
def mean(number_sequence):
return round(sum(number_sequence)/len(number_sequence), 2)
def stats(column_name):
values = get_unique_values_by_column_name(column_name)
values = [float(value) for value in values]
return (min(values), max(values), mean(values))
stats('Rating')
(45.0, 94.0, 69.06)
6.7.4. Exercise 5#
Write a function called extract_columns(column_names)
that extracts columns by name.
Show code cell source
def extract_columns(column_names):
header = None
values = []
with open('soccer_players_statistics.csv', encoding="utf-8") as file:
for line in file:
if not line.strip():
continue
if not header:
header = line.strip().split(',')
try:
column_indicies = []
for column_name in column_names:
column_index = header.index(column_name)
column_indicies.append(column_index)
except:
print(f'Column Name {column_name} not found!')
return False
continue
line = line.strip().split(',')
column_data = []
for column_index in column_indicies:
column_data.append(line[column_index])
values.append(column_data)
return values
column_data = extract_columns(['Club_Joining', 'Contract_Expiry'])
6.7.5. Exercise 6#
Write code to find the minimum and maximum difference between ‘Club_Joining’ and ‘Contract_Expiry’.
Show code cell source
def extract_columns(column_names):
header = None
values = []
with open('soccer_players_statistics.csv', encoding="utf-8") as file:
for line in file:
if not line.strip():
continue
if not header:
header = line.strip().split(',')
try:
column_indicies = []
for column_name in column_names:
column_index = header.index(column_name)
column_indicies.append(column_index)
except:
print(f'Column Name {column_name} not found!')
return False
continue
line = line.strip().split(',')
column_data = []
for column_index in column_indicies:
column_data.append(line[column_index])
values.append(column_data)
return values
column_data = extract_columns(['Club_Joining', 'Contract_Expiry'])
min_val = float('inf')
max_val = float('-inf')
for join_date, expiry_year in column_data:
if not expiry_year.strip():
continue
if not join_date.strip():
continue
expiry_year = int(float(expiry_year))
month, day, year = join_date.split('/')
join_year = int(year)
difference = abs(join_year-expiry_year)
if difference < min_val:
min_val = difference
if difference > max_val:
max_val = difference
print(min_val, max_val)
0 30
6.7.6. Exercise 7#
Write code to extract the individual columns or key/value pairs and print them.
large_string = "Cristiano Ronaldo Nationality=Portugal;National_Position=LS;National_Kit=7.0;Club=Real Madrid;Club_Position=LW;Club_Kit=7.0;Club_Joining=07/01/2009;Contract_Expiry=2021.0;Rating=94;Height=185 cm;Weight=80 kg;Preferred_Foot=Right;Birth_Date=02/05/1985;Age=32;Preferred_Position=LW/ST;Work_Rate=High / Low;Weak_foot=4;Skill_Moves=5;Ball_Control=93;Dribbling=92;Marking=22;Sliding_Tackle=23;Standing_Tackle=31;Aggression=63;Reactions=96;Attacking_Position=94;Interceptions=29;Vision=85;Composure=86;Crossing=84;Short_Pass=83;Long_Pass=77;Acceleration=91;Speed=92;Stamina=92;Strength=80;Balance=63;Agility=90;Jumping=95;Heading=85;Shot_Power=92;Finishing=93;Long_Shots=90;Curve=81;Freekick_Accuracy=76;Penalties=85;Volleys=88;GK_Positioning=14;GK_Diving=7;GK_Kicking=15;GK_Handling=11;GK_Reflexes=11"
Show code cell source
large_string = "Cristiano Ronaldo Nationality=Portugal;National_Position=LS;National_Kit=7.0;Club=Real Madrid;Club_Position=LW;Club_Kit=7.0;Club_Joining=07/01/2009;Contract_Expiry=2021.0;Rating=94;Height=185 cm;Weight=80 kg;Preferred_Foot=Right;Birth_Date=02/05/1985;Age=32;Preferred_Position=LW/ST;Work_Rate=High / Low;Weak_foot=4;Skill_Moves=5;Ball_Control=93;Dribbling=92;Marking=22;Sliding_Tackle=23;Standing_Tackle=31;Aggression=63;Reactions=96;Attacking_Position=94;Interceptions=29;Vision=85;Composure=86;Crossing=84;Short_Pass=83;Long_Pass=77;Acceleration=91;Speed=92;Stamina=92;Strength=80;Balance=63;Agility=90;Jumping=95;Heading=85;Shot_Power=92;Finishing=93;Long_Shots=90;Curve=81;Freekick_Accuracy=76;Penalties=85;Volleys=88;GK_Positioning=14;GK_Diving=7;GK_Kicking=15;GK_Handling=11;GK_Reflexes=11"
name, string = large_string.split('\t')
for key_value in string.split(';'):
key, value = key_value.split('=')
print(name, key, value)
Cristiano Ronaldo Nationality Portugal
Cristiano Ronaldo National_Position LS
Cristiano Ronaldo National_Kit 7.0
Cristiano Ronaldo Club Real Madrid
Cristiano Ronaldo Club_Position LW
Cristiano Ronaldo Club_Kit 7.0
Cristiano Ronaldo Club_Joining 07/01/2009
Cristiano Ronaldo Contract_Expiry 2021.0
Cristiano Ronaldo Rating 94
Cristiano Ronaldo Height 185 cm
Cristiano Ronaldo Weight 80 kg
Cristiano Ronaldo Preferred_Foot Right
Cristiano Ronaldo Birth_Date 02/05/1985
Cristiano Ronaldo Age 32
Cristiano Ronaldo Preferred_Position LW/ST
Cristiano Ronaldo Work_Rate High / Low
Cristiano Ronaldo Weak_foot 4
Cristiano Ronaldo Skill_Moves 5
Cristiano Ronaldo Ball_Control 93
Cristiano Ronaldo Dribbling 92
Cristiano Ronaldo Marking 22
Cristiano Ronaldo Sliding_Tackle 23
Cristiano Ronaldo Standing_Tackle 31
Cristiano Ronaldo Aggression 63
Cristiano Ronaldo Reactions 96
Cristiano Ronaldo Attacking_Position 94
Cristiano Ronaldo Interceptions 29
Cristiano Ronaldo Vision 85
Cristiano Ronaldo Composure 86
Cristiano Ronaldo Crossing 84
Cristiano Ronaldo Short_Pass 83
Cristiano Ronaldo Long_Pass 77
Cristiano Ronaldo Acceleration 91
Cristiano Ronaldo Speed 92
Cristiano Ronaldo Stamina 92
Cristiano Ronaldo Strength 80
Cristiano Ronaldo Balance 63
Cristiano Ronaldo Agility 90
Cristiano Ronaldo Jumping 95
Cristiano Ronaldo Heading 85
Cristiano Ronaldo Shot_Power 92
Cristiano Ronaldo Finishing 93
Cristiano Ronaldo Long_Shots 90
Cristiano Ronaldo Curve 81
Cristiano Ronaldo Freekick_Accuracy 76
Cristiano Ronaldo Penalties 85
Cristiano Ronaldo Volleys 88
Cristiano Ronaldo GK_Positioning 14
Cristiano Ronaldo GK_Diving 7
Cristiano Ronaldo GK_Kicking 15
Cristiano Ronaldo GK_Handling 11
Cristiano Ronaldo GK_Reflexes 11