All questions are weighted the same in this assignment. This assignment requires more individual learning then the last one did - you are encouraged to check out the pandas documentation to find functions or methods you might not have used yet, or ask questions on Stack Overflow and tag them as pandas and python related. All questions are worth the same number of points except question 1 which is worth 17% of the assignment grade.
Note: Questions 3-13 rely on your question 1 answer.
import pandas as pd
import numpy as np
# Filter all warnings. If you would like to see the warnings, please comment the two lines below.
import warnings
warnings.filterwarnings('ignore')
Load the energy data from the file
assets/Energy Indicators.xls, which is a list of indicators
of energy supply and renewable
electricity production from the United
Nations for the year 2013, and should be put into a DataFrame with
the variable name of Energy.
Keep in mind that this is an Excel file, and not a comma separated values file. Also, make sure to exclude the footer and header information from the datafile. The first two columns are unneccessary, so you should get rid of them, and you should change the column labels so that the columns are:
['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable]
Convert Energy Supply to gigajoules (Note: there
are 1,000,000 gigajoules in a petajoule). For all countries
which have missing data (e.g. data with “…”) make sure this is reflected
as np.NaN values.
Rename the following list of countries (for use in later questions):
"Republic of Korea": "South Korea", "United States of America": "United States", "United Kingdom of Great Britain and Northern Ireland": "United Kingdom", "China, Hong Kong Special Administrative Region": "Hong Kong"
There are also several countries with numbers and/or parenthesis in
their name. Be sure to remove these,
e.g. 'Bolivia (Plurinational State of)' should be
'Bolivia'. 'Switzerland17' should be
'Switzerland'.
Next, load the GDP data from the file
assets/world_bank.csv, which is a csv containing countries’
GDP from 1960 to 2015 from World
Bank. Call this DataFrame GDP.
Make sure to skip the header, and rename the following list of countries:
"Korea, Rep.": "South Korea", "Iran, Islamic Rep.": "Iran", "Hong Kong SAR, China": "Hong Kong"
Finally, load the Sciamgo
Journal and Country Rank data for Energy Engineering and Power
Technology from the file assets/scimagojr-3.xlsx, which
ranks countries based on their journal contributions in the
aforementioned area. Call this DataFrame ScimEn.
Join the three datasets: GDP, Energy, and ScimEn into a new dataset (using the intersection of country names). Use only the last 10 years (2006-2015) of GDP data and only the top 15 countries by Scimagojr ‘Rank’ (Rank 1 through 15).
The index of this DataFrame should be the name of the country, and the columns should be [‘Rank’, ‘Documents’, ‘Citable documents’, ‘Citations’, ‘Self-citations’, ‘Citations per document’, ‘H index’, ‘Energy Supply’, ‘Energy Supply per Capita’, ‘% Renewable’, ‘2006’, ‘2007’, ‘2008’, ‘2009’, ‘2010’, ‘2011’, ‘2012’, ‘2013’, ‘2014’, ‘2015’].
This function should return a DataFrame with 20 columns and 15 entries, and the rows of the DataFrame should be sorted by “Rank”.
def convert_float(n):
try:
return np.float64(n)
except Exception as e:
return np.NAN
def convert_int(n):
try:
return np.int32(n) * 1000000
except Exception as e:
return np.NAN
def answer_one():
# YOUR CODE HERE
energy_indicators_cols=['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']
Energy =pd.read_excel('assets/Energy Indicators.xls',
sheet_name='Energy',
names=energy_indicators_cols,
header=None,
skiprows=list(range(18)),
skipfooter=38,
usecols=[2,3,4,5],
#index_col=0,
skip_blank_lines=True,
#na_values=['...'],
#dtype={'Energy Supply per Capita':np.int32}
converters={'Energy Supply':convert_int,
'Energy Supply per Capita':convert_float,
'% Renewable':convert_float
}
)
Energy['Country']= Energy['Country'].str.replace(r"\s\(.*\)","") # r"^(Bolivia).*":"Bolivia"
Energy['Country']= Energy['Country'].str.replace(r"\d*","")
Energy= Energy.replace({"Country":{r"^(Republic of Korea).*": "South Korea",
r'^(United States of America).*':'United States',
r"^(United Kingdom of Great Britain and Northern Ireland).*": "United Kingdom",
r"^(China, Hong Kong Special Administrative Region).*": "Hong Kong"
}},regex=True)
GDP = pd.read_csv('assets/world_bank.csv',skiprows=4)
GDP['Country Name'] = GDP['Country Name'].replace({"Korea, Rep.": "South Korea",
"Iran, Islamic Rep.": "Iran",
"Hong Kong SAR, China": "Hong Kong"})
GDP.rename(columns={"Country Name":"Country"},inplace=True)
GDP =GDP.loc[:,['2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015','Country']]
ScimEn = pd.read_excel('assets/scimagojr-3.xlsx')
merge_ScimEn_Energy = pd.merge(ScimEn,Energy,how="inner",left_on="Country",right_on="Country")
merge_ScimEn_Energy= merge_ScimEn_Energy[merge_ScimEn_Energy['Rank']<=15]
merge_ScimEn_Energy_GDP =pd.merge(merge_ScimEn_Energy,GDP,how="inner",left_on="Country",right_on="Country").set_index("Country")
#print(merge_ScimEn_Energy_GDP)
# print(ScimEn)
#print(Energy[Energy['Country']=='Iran'])
#df=df.replace(to_replace='United States of America20', value='United States', regex=True)
#df = pd.to_numeric(df['Energy Supply'], errors='coerce').dropna()
#print(df.head(9000))
#print(type(Energy))
#print(df[df['Country']=='Bolivia'])
#raise NotImplementedError()
return merge_ScimEn_Energy_GDP
answer_one()
#answer_one().shape
| Rank | Documents | Citable documents | Citations | Self-citations | Citations per document | H index | Energy Supply | Energy Supply per Capita | % Renewable | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Country | ||||||||||||||||||||
| China | 1 | 127050 | 126767 | 597237 | 411683 | 4.70 | 138 | 1.271910e+11 | 93.0 | 19.754910 | 3.992331e+12 | 4.559041e+12 | 4.997775e+12 | 5.459247e+12 | 6.039659e+12 | 6.612490e+12 | 7.124978e+12 | 7.672448e+12 | 8.230121e+12 | 8.797999e+12 |
| United States | 2 | 96661 | 94747 | 792274 | 265436 | 8.20 | 230 | 9.083800e+10 | 286.0 | 11.570980 | 1.479230e+13 | 1.505540e+13 | 1.501149e+13 | 1.459484e+13 | 1.496437e+13 | 1.520402e+13 | 1.554216e+13 | 1.577367e+13 | 1.615662e+13 | 1.654857e+13 |
| Japan | 3 | 30504 | 30287 | 223024 | 61554 | 7.31 | 134 | 1.898400e+10 | 149.0 | 10.232820 | 5.496542e+12 | 5.617036e+12 | 5.558527e+12 | 5.251308e+12 | 5.498718e+12 | 5.473738e+12 | 5.569102e+12 | 5.644659e+12 | 5.642884e+12 | 5.669563e+12 |
| United Kingdom | 4 | 20944 | 20357 | 206091 | 37874 | 9.84 | 139 | 7.920000e+09 | 124.0 | 10.600470 | 2.419631e+12 | 2.482203e+12 | 2.470614e+12 | 2.367048e+12 | 2.403504e+12 | 2.450911e+12 | 2.479809e+12 | 2.533370e+12 | 2.605643e+12 | 2.666333e+12 |
| Russian Federation | 5 | 18534 | 18301 | 34266 | 12422 | 1.85 | 57 | 3.070900e+10 | 214.0 | 17.288680 | 1.385793e+12 | 1.504071e+12 | 1.583004e+12 | 1.459199e+12 | 1.524917e+12 | 1.589943e+12 | 1.645876e+12 | 1.666934e+12 | 1.678709e+12 | 1.616149e+12 |
| Canada | 6 | 17899 | 17620 | 215003 | 40930 | 12.01 | 149 | 1.043100e+10 | 296.0 | 61.945430 | 1.564469e+12 | 1.596740e+12 | 1.612713e+12 | 1.565145e+12 | 1.613406e+12 | 1.664087e+12 | 1.693133e+12 | 1.730688e+12 | 1.773486e+12 | 1.792609e+12 |
| Germany | 7 | 17027 | 16831 | 140566 | 27426 | 8.26 | 126 | 1.326100e+10 | 165.0 | 17.901530 | 3.332891e+12 | 3.441561e+12 | 3.478809e+12 | 3.283340e+12 | 3.417298e+12 | 3.542371e+12 | 3.556724e+12 | 3.567317e+12 | 3.624386e+12 | 3.685556e+12 |
| India | 8 | 15005 | 14841 | 128763 | 37209 | 8.58 | 115 | 3.319500e+10 | 26.0 | 14.969080 | 1.265894e+12 | 1.374865e+12 | 1.428361e+12 | 1.549483e+12 | 1.708459e+12 | 1.821872e+12 | 1.924235e+12 | 2.051982e+12 | 2.200617e+12 | 2.367206e+12 |
| France | 9 | 13153 | 12973 | 130632 | 28601 | 9.93 | 114 | 1.059700e+10 | 166.0 | 17.020280 | 2.607840e+12 | 2.669424e+12 | 2.674637e+12 | 2.595967e+12 | 2.646995e+12 | 2.702032e+12 | 2.706968e+12 | 2.722567e+12 | 2.729632e+12 | 2.761185e+12 |
| South Korea | 10 | 11983 | 11923 | 114675 | 22595 | 9.57 | 104 | 1.100700e+10 | 221.0 | 2.279353 | 9.410199e+11 | 9.924316e+11 | 1.020510e+12 | 1.027730e+12 | 1.094499e+12 | 1.134796e+12 | 1.160809e+12 | 1.194429e+12 | 1.234340e+12 | 1.266580e+12 |
| Italy | 11 | 10964 | 10794 | 111850 | 26661 | 10.20 | 106 | 6.530000e+09 | 109.0 | 33.667230 | 2.202170e+12 | 2.234627e+12 | 2.211154e+12 | 2.089938e+12 | 2.125185e+12 | 2.137439e+12 | 2.077184e+12 | 2.040871e+12 | 2.033868e+12 | 2.049316e+12 |
| Spain | 12 | 9428 | 9330 | 123336 | 23964 | 13.08 | 115 | 4.923000e+09 | 106.0 | 37.968590 | 1.414823e+12 | 1.468146e+12 | 1.484530e+12 | 1.431475e+12 | 1.431673e+12 | 1.417355e+12 | 1.380216e+12 | 1.357139e+12 | 1.375605e+12 | 1.419821e+12 |
| Iran | 13 | 8896 | 8819 | 57470 | 19125 | 6.46 | 72 | 9.172000e+09 | 119.0 | 5.707721 | 3.895523e+11 | 4.250646e+11 | 4.289909e+11 | 4.389208e+11 | 4.677902e+11 | 4.853309e+11 | 4.532569e+11 | 4.445926e+11 | 4.639027e+11 | NaN |
| Australia | 14 | 8831 | 8725 | 90765 | 15606 | 10.28 | 107 | 5.386000e+09 | 231.0 | 11.810810 | 1.021939e+12 | 1.060340e+12 | 1.099644e+12 | 1.119654e+12 | 1.142251e+12 | 1.169431e+12 | 1.211913e+12 | 1.241484e+12 | 1.272520e+12 | 1.301251e+12 |
| Brazil | 15 | 8668 | 8596 | 60702 | 14396 | 7.00 | 86 | 1.214900e+10 | 59.0 | 69.648030 | 1.845080e+12 | 1.957118e+12 | 2.056809e+12 | 2.054215e+12 | 2.208872e+12 | 2.295245e+12 | 2.339209e+12 | 2.409740e+12 | 2.412231e+12 | 2.319423e+12 |
assert type(answer_one()) == pd.DataFrame, "Q1: You should return a DataFrame!"
assert answer_one().shape == (15,20), "Q1: Your DataFrame should have 20 columns and 15 entries!"
# Cell for autograder.
The previous question joined three datasets then reduced this to just the top 15 entries. When you joined the datasets, but before you reduced this to the top 15 items, how many entries did you lose?
This function should return a single number.
%%HTML
<svg width="800" height="300">
<circle cx="150" cy="180" r="80" fill-opacity="0.2" stroke="black" stroke-width="2" fill="blue" />
<circle cx="200" cy="100" r="80" fill-opacity="0.2" stroke="black" stroke-width="2" fill="red" />
<circle cx="100" cy="100" r="80" fill-opacity="0.2" stroke="black" stroke-width="2" fill="green" />
<line x1="150" y1="125" x2="300" y2="150" stroke="black" stroke-width="2" fill="black" stroke-dasharray="5,3"/>
<text x="300" y="165" font-family="Verdana" font-size="35">Everything but this!</text>
</svg>
def answer_two():
energy_indicators_cols=['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']
Energy =pd.read_excel('assets/Energy Indicators.xls',
sheet_name='Energy',
names=energy_indicators_cols,
header=None,
skiprows=list(range(18)),
skipfooter=38,
usecols=[2,3,4,5],
#index_col=0,
skip_blank_lines=True,
#na_values=['...'],
#dtype={'Energy Supply per Capita':np.int32}
converters={'Energy Supply':convert_int,
'Energy Supply per Capita':convert_float,
'% Renewable':convert_float
}
).dropna(how='all')
Energy['Country']= Energy['Country'].str.replace(r"\s\(.*\)","") # r"^(Bolivia).*":"Bolivia"
Energy['Country']= Energy['Country'].str.replace(r"\d*","")
Energy= Energy.replace({"Country":{r"^(Republic of Korea).*": "South Korea",
r'^(United States of America).*':'United States',
r"^(United Kingdom of Great Britain and Northern Ireland).*": "United Kingdom",
r"^(China, Hong Kong Special Administrative Region).*": "Hong Kong"
}},regex=True)
GDP = pd.read_csv('assets/world_bank.csv',skiprows=4)
print(GDP.shape)
GDP['Country Name'] = GDP['Country Name'].replace({"Korea, Rep.": "South Korea",
"Iran, Islamic Rep.": "Iran",
"Hong Kong SAR, China": "Hong Kong"})
GDP.rename(columns={"Country Name":"Country"},inplace=True)
GDP =GDP.loc[:,['2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015','Country']]
print(GDP.shape)
ScimEn = pd.read_excel('assets/scimagojr-3.xlsx')
print(ScimEn)
merge_ScimEn_Energy_inner = pd.merge(ScimEn,Energy,how="inner",left_on="Country",right_on="Country")
merge_ScimEn_Energy_GDP_inner =pd.merge(merge_ScimEn_Energy_inner,GDP,how="inner",left_on="Country",right_on="Country").set_index("Country")
merge_ScimEn_Energy_outer = pd.merge(ScimEn,Energy,how="outer",left_on="Country",right_on="Country")
merge_ScimEn_Energy_GDP_outer =pd.merge(merge_ScimEn_Energy_outer,GDP,how="outer",left_on="Country",right_on="Country").set_index("Country")
print(len(merge_ScimEn_Energy_GDP_outer) , len(merge_ScimEn_Energy_GDP_inner))
return len(merge_ScimEn_Energy_GDP_outer) - len(merge_ScimEn_Energy_GDP_inner)
#raise NotImplementedError()
answer_two()
(264, 60)
(264, 11)
Rank Country Documents Citable documents Citations \
0 1 China 127050 126767 597237
1 2 United States 96661 94747 792274
2 3 Japan 30504 30287 223024
3 4 United Kingdom 20944 20357 206091
4 5 Russian Federation 18534 18301 34266
.. ... ... ... ... ...
186 187 Guyana 1 1 0
187 188 Christmas Island 1 1 0
188 189 Reunion 1 1 2
189 190 Saint Lucia 1 1 0
190 191 Mauritania 1 1 1
Self-citations Citations per document H index
0 411683 4.70 138
1 265436 8.20 230
2 61554 7.31 134
3 37874 9.84 139
4 12422 1.85 57
.. ... ... ...
186 0 0.00 0
187 0 0.00 0
188 1 2.00 1
189 0 0.00 0
190 0 1.00 1
[191 rows x 8 columns]
318 162
156
assert type(answer_two()) == int, "Q2: You should return an int number!"
What are the top 15 countries for average GDP over the last 10 years?
This function should return a Series named avgGDP
with 15 countries and their average GDP sorted in descending
order.
def answer_three():
# YOUR CODE HERE
merge_ScimEn_Energy_GDP=answer_one()
return merge_ScimEn_Energy_GDP[['2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015']].apply(np.mean,axis=1).sort_values(ascending = False)
#raise NotImplementedError()
answer_three()
Country
United States 1.536434e+13
China 6.348609e+12
Japan 5.542208e+12
Germany 3.493025e+12
France 2.681725e+12
United Kingdom 2.487907e+12
Brazil 2.189794e+12
Italy 2.120175e+12
India 1.769297e+12
Canada 1.660647e+12
Russian Federation 1.565459e+12
Spain 1.418078e+12
Australia 1.164043e+12
South Korea 1.106715e+12
Iran 4.441558e+11
dtype: float64
assert type(answer_three()) == pd.Series, "Q3: You should return a Series!"
By how much had the GDP changed over the 10 year span for the country with the 6th largest average GDP?
This function should return a single number.
def answer_four():
# YOUR CODE HERE
merge_ScimEn_Energy_GDP = answer_one()
#print(merge_ScimEn_Energy_GDP.loc['United Kingdom']['2006'],merge_ScimEn_Energy_GDP.loc['United Kingdom']['2015'])
merge_ScimEn_Energy_GD=merge_ScimEn_Energy_GDP[['2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015']].apply(np.mean,axis=1)
merge_ScimEn_Energy_GD.sort_values(ascending=False,inplace=True)
#print(merge_ScimEn_Energy_GD.index[5])
changes =answer_one().loc[merge_ScimEn_Energy_GD.index[5]]['2015'] - answer_one().loc[merge_ScimEn_Energy_GD.index[5]]['2006']
#print(merge_ScimEn_Energy_GD.iloc[5])
return changes
#answer_four()
#raise NotImplementedError()
# Cell for autograder.
What is the mean energy supply per capita?
This function should return a single number.
def answer_five():
# YOUR CODE HERE
return answer_one()['Energy Supply per Capita'].mean()
#answer_five()
157.6
# Cell for autograder.
What country has the maximum % Renewable and what is the percentage?
This function should return a tuple with the name of the country and the percentage.
def answer_six():
# YOUR CODE HERE
merge_ScimEn_Energy_GDP = answer_one().sort_values(by='% Renewable',ascending=False).iloc[0]
return (merge_ScimEn_Energy_GDP.name,merge_ScimEn_Energy_GDP['% Renewable'])
#raise NotImplementedError()
answer_six()
('Brazil', 69.64803)
assert type(answer_six()) == tuple, "Q6: You should return a tuple!"
assert type(answer_six()[0]) == str, "Q6: The first element in your result should be the name of the country!"
Create a new column that is the ratio of Self-Citations to Total Citations. What is the maximum value for this new column, and what country has the highest ratio?
This function should return a tuple with the name of the country and the ratio.
def answer_seven():
info = answer_one()
info['Citations ratio'] = info['Self-citations']/info['Citations']
result = info.sort_values(by='Citations ratio',ascending=False).iloc[0]
return (result.name,result['Citations ratio'])
#aise NotImplementedError()
#answer_seven()
('China', 0.6893126179389422)
assert type(answer_seven()) == tuple, "Q7: You should return a tuple!"
assert type(answer_seven()[0]) == str, "Q7: The first element in your result should be the name of the country!"
Create a column that estimates the population using Energy Supply and Energy Supply per capita. What is the third most populous country according to this estimate?
This function should return the name of the country
def answer_eight():
# YOUR CODE HERE
inf = answer_one()
return (inf['Energy Supply']/inf['Energy Supply per Capita']).sort_values(ascending=False).index[2]
#raise NotImplementedError()
answer_eight()
'United States'
assert type(answer_eight()) == str, "Q8: You should return the name of the country!"
Create a column that estimates the number of citable documents per
person. What is the correlation between the number of citable documents
per capita and the energy supply per capita? Use the
.corr() method, (Pearson’s correlation).
This function should return a single number.
(Optional: Use the built-in function plot9() to
visualize the relationship between Energy Supply per Capita vs. Citable
docs per Capita)
def answer_nine():
# YOUR CODE HERE
Top15 = answer_one()
Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']
Top15['Citable docs per Capita'] = Top15['Citable documents'] / Top15['PopEst']
return Top15['Citable docs per Capita'].corr(Top15['Energy Supply per Capita'])
raise NotImplementedError()
def plot9():
import matplotlib as plt
%matplotlib inline
Top15 = answer_one()
Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']
Top15['Citable docs per Capita'] = Top15['Citable documents'] / Top15['PopEst']
Top15.plot(x='Citable docs per Capita', y='Energy Supply per Capita', kind='scatter', xlim=[0, 0.0006])
assert answer_nine() >= -1. and answer_nine() <= 1., "Q9: A valid correlation should between -1 to 1!"
Create a new column with a 1 if the country’s % Renewable value is at or above the median for all countries in the top 15, and a 0 if the country’s % Renewable value is below the median.
This function should return a series named HighRenew
whose index is the country name sorted in ascending order of
rank.
def answer_ten():
# YOUR CODE HERE
Top15 = answer_one()
Renewable_median = Top15['% Renewable'].median()
Top15['HighRenew']=Top15['% Renewable'].apply(lambda y:0 if y< Renewable_median else 1)
return Top15['HighRenew']
#raise NotImplementedError()
#answer_ten()
assert type(answer_ten()) == pd.Series, "Q10: You should return a Series!"
Use the following dictionary to group the Countries by Continent, then create a DataFrame that displays the sample size (the number of countries in each continent bin), and the sum, mean, and std deviation for the estimated population of each country.
ContinentDict = {'China':'Asia',
'United States':'North America',
'Japan':'Asia',
'United Kingdom':'Europe',
'Russian Federation':'Europe',
'Canada':'North America',
'Germany':'Europe',
'India':'Asia',
'France':'Europe',
'South Korea':'Asia',
'Italy':'Europe',
'Spain':'Europe',
'Iran':'Asia',
'Australia':'Australia',
'Brazil':'South America'}
This function should return a DataFrame with index named
Continent
['Asia', 'Australia', 'Europe', 'North America', 'South America']
and columns ['size', 'sum', 'mean', 'std']
def answer_eleven():
# YOUR CODE HERE
ContinentDict = {'China':'Asia',
'United States':'North America',
'Japan':'Asia',
'United Kingdom':'Europe',
'Russian Federation':'Europe',
'Canada':'North America',
'Germany':'Europe',
'India':'Asia',
'France':'Europe',
'South Korea':'Asia',
'Italy':'Europe',
'Spain':'Europe',
'Iran':'Asia',
'Australia':'Australia',
'Brazil':'South America'}
Top15 = answer_one()
Top15['PopEst']= Top15['Energy Supply'] / Top15['Energy Supply per Capita']
Top15['Continent']=pd.Series(ContinentDict)
#print(Top15)
return Top15.groupby('Continent')['PopEst'].agg([np.size,np.sum,np.mean,np.std])
#raise NotImplementedError()
#answer_eleven()
assert type(answer_eleven()) == pd.DataFrame, "Q11: You should return a DataFrame!"
assert answer_eleven().shape[0] == 5, "Q11: Wrong row numbers!"
assert answer_eleven().shape[1] == 4, "Q11: Wrong column numbers!"
Cut % Renewable into 5 bins. Group Top15 by the Continent, as well as these new % Renewable bins. How many countries are in each of these groups?
This function should return a Series with a MultiIndex of
Continent, then the bins for % Renewable. Do
not include groups with no countries.
def answer_twelve():
# YOUR CODE HERE
ContinentDict = {'China':'Asia',
'United States':'North America',
'Japan':'Asia',
'United Kingdom':'Europe',
'Russian Federation':'Europe',
'Canada':'North America',
'Germany':'Europe',
'India':'Asia',
'France':'Europe',
'South Korea':'Asia',
'Italy':'Europe',
'Spain':'Europe',
'Iran':'Asia',
'Australia':'Australia',
'Brazil':'South America'}
Top15 = answer_one()
Top15['Continent']=pd.Series(ContinentDict)
Top15['% Renewable']=pd.cut(Top15['% Renewable'],5)
#print(Top15['% Renewable'])
return Top15.groupby(['Continent','% Renewable'])['Continent'].agg(np.size).dropna()
#raise NotImplementedError()
#answer_twelve()
assert type(answer_twelve()) == pd.Series, "Q12: You should return a Series!"
assert len(answer_twelve()) == 9, "Q12: Wrong result numbers!"
Convert the Population Estimate series to a string with thousands separator (using commas). Use all significant digits (do not round the results).
e.g. 12345678.90 -> 12,345,678.90
This function should return a series PopEst whose
index is the country name and whose values are the population estimate
string
def answer_thirteen():
# YOUR CODE HERE
Top15 = answer_one()
Top15['PopEst']= Top15['Energy Supply'] / Top15['Energy Supply per Capita']
return Top15['PopEst'].apply('{:,}'.format)
#raise NotImplementedError()
answer_thirteen()
Country
China 1,367,645,161.2903225
United States 317,615,384.61538464
Japan 127,409,395.97315437
United Kingdom 63,870,967.741935484
Russian Federation 143,500,000.0
Canada 35,239,864.86486486
Germany 80,369,696.96969697
India 1,276,730,769.2307692
France 63,837,349.39759036
South Korea 49,805,429.864253394
Italy 59,908,256.880733944
Spain 46,443,396.2264151
Iran 77,075,630.25210084
Australia 23,316,017.316017315
Brazil 205,915,254.23728815
Name: PopEst, dtype: object
assert type(answer_thirteen()) == pd.Series, "Q13: You should return a Series!"
assert len(answer_thirteen()) == 15, "Q13: Wrong result numbers!"
Use the built in function plot_optional() to see an
example visualization.
def plot_optional():
import matplotlib as plt
%matplotlib inline
Top15 = answer_one()
ax = Top15.plot(x='Rank', y='% Renewable', kind='scatter',
c=['#e41a1c','#377eb8','#e41a1c','#4daf4a','#4daf4a','#377eb8','#4daf4a','#e41a1c',
'#4daf4a','#e41a1c','#4daf4a','#4daf4a','#e41a1c','#dede00','#ff7f00'],
xticks=range(1,16), s=6*Top15['2014']/10**10, alpha=.75, figsize=[16,6]);
for i, txt in enumerate(Top15.index):
ax.annotate(txt, [Top15['Rank'][i], Top15['% Renewable'][i]], ha='center')
print("This is an example of a visualization that can be created to help understand the data. \
This is a bubble chart showing % Renewable vs. Rank. The size of the bubble corresponds to the countries' \
2014 GDP, and the color corresponds to the continent.")
plot_optional()
This is an example of a visualization that can be created to help understand the data. This is a bubble chart showing % Renewable vs. Rank. The size of the bubble corresponds to the countries' 2014 GDP, and the color corresponds to the continent.
png