Exam
Contents
Exam#
Last updated: 2023-02-25 13:36:22
General instructions#
The exam takes place in a regular class, with pen and paper. The exam is not in front of a computer.
You need to bring a calculator to the exam!
Exam duration is 3 hours.
The exam is comprised of 20 multiple-choice questions. Each question gives a short code section. The code section is not identical to the ones that appeared in the course materials, but they combine functions and methods which were learned. You need to choose the right code output out of 4 options.
Material for the exam#
The material for the exam is in chapters Python basics through Geometric operations, namely:
Topics from these chapters that will not appear in the exam are:
Graphical functions—covered in Plotting (numpy), Plotting (pandas), and Plotting (geopandas)
Writing files—covered in Writing CSV files, and Writing vector layers
Note
Information appearing in notes (such as this one) will not be on the exam.
Sample exam questions#
Question 1#
What is the result of the following code section?
x = [3, 0, 2, 9]
x[x[1]:x[0]]
(A) [3]
(B) [3, 0]
(C) [3, 0, 2]
(D) [3, 0, 2, 9]
Question 2#
What is the result of the following code section?
x = [3, 0, -1, 9]
result = 0
for i in x:
result = result + 1
result
(A) 1
(B) 12
(C) 11
(D) 4
Question 3#
What is the result of the following code section?
x = [3, 0, -1, 9]
x.append(4)
x
(A) [3, 0, -1, 9, 4]
(B) []
(C) [3, 0, -1, 9]
(D) [[3, 0, -1, 9], 4]
Question 4#
What is the result of the following code section?
counter = 0
for i in range(10):
if i in [5, 10, 15]:
counter = counter + 1
counter
(A) 0
(B) 1
(C) 2
(D) 3
Question 5#
Suppose that the working directory contains a plain text file named tmp.csv
, with the following contents:
group,count
a,2
a,3
a,2
b,7
b,5
b,9
What is the result of the following code section?
import csv
file = open('tmp.csv', 'r', encoding='utf-8')
reader = csv.DictReader(file)
x = 0
for row in reader:
if row['group'] == 'a':
x += int(row['count'])
file.close()
x
(A) 'aaa'
(B) '232'
(C) 2
(D) 7
For questions 6-10, we define a numpy
array named a
, as follows:
import numpy as np
a = np.array([
[[5, 1, 9], [3, 6, 3], [0, 1, np.nan], [4, 9, np.nan]],
[[4, 8, 1], [2, 0, 0], [1, 2, np.nan], [2, 1, 7]]
])
a
array([[[ 5., 1., 9.],
[ 3., 6., 3.],
[ 0., 1., nan],
[ 4., 9., nan]],
[[ 4., 8., 1.],
[ 2., 0., 0.],
[ 1., 2., nan],
[ 2., 1., 7.]]])
Question 6#
What is the result of the following code section?
np.max(a, axis=0)[3, :]
(A) array([nan, nan])
(B) array([ 4., 9., nan])
(C) array([4., 9., 7.])
(D) array([ 1., 2., nan])
Question 7#
What is the result of the following code section?
a[1, :, :].flatten().shape
(A) (12,)
(B) (1, 4, 3)
(C) (24,)
(D) (1,)
Question 8#
What is the result of the following code section?
(~np.isnan(a[1, :, :])).sum()
(A) 0
(B) 1
(C) 10
(D) 11
Question 9#
What is the result of the following code section?
np.isnan(a.astype(np.int64).astype(np.float64)).any()
(A) 3
(B) True
(C) False
(D) 0
Question 10#
What is the result of the following code section?
(a[0, 1, :] > 4) & (a[0, 1, :] < 8)
(A) array([0, 0, 1])
(B) array([False, True, False])
(C) array([False, False, False])
(D) array([False, False, True])
For questions 11-15, we define four Series
objects named name
, district
, population
, and established
, and a DataFrame
named dat
, as follows. The DataFrame
contains the names, districts, population estimates (in 2019), and establishment years, for the five biggest cities in Israel:
import numpy as np
import pandas as pd
name = pd.Series(['Jerusalem', 'Tel Aviv-Yafo', 'Haifa', 'Rishon LeZion', 'Petah Tikva'])
district = pd.Series(['Jerusalem', 'Tel Aviv', 'Haifa', 'Center', 'Center'])
population = pd.Series([936425, 460613, 285316, 254384, 247956])
established = pd.Series([np.nan, np.nan, np.nan, 1882, 1878])
dat = pd.DataFrame({
'name': name,
'district': district,
'population': population,
'established': established
})
dat
name | district | population | established | |
---|---|---|---|---|
0 | Jerusalem | Jerusalem | 936425 | NaN |
1 | Tel Aviv-Yafo | Tel Aviv | 460613 | NaN |
2 | Haifa | Haifa | 285316 | NaN |
3 | Rishon LeZion | Center | 254384 | 1882.0 |
4 | Petah Tikva | Center | 247956 | 1878.0 |
Question 11#
What is the result of the following code section?
(dat['population'] > 400000).sum()
(A) 1397038
(B) 2
(C) 5
(D) 0.4
Question 12#
What is the result of the following code section?
dat.groupby('district').nunique().reset_index()['name'].to_numpy()
(A) array([2, 1, 1, 1])
(B) array([1, 1, 1, 1, 1])
(C) array(['Jerusalem', 'Tel Aviv', 'Haifa', 'Center'], dtype=object)
(D) array([5])
Question 13#
What is the result of the following code section?
dat2 = pd.DataFrame({'district': ['Haifa', 'Jerusalem'], 'ports': [1, 0]})
dat3 = pd.merge(dat, dat2, on='district', how='left')
dat3['ports'].to_numpy()
(A) array([nan, nan, nan, nan, nan])
(B) array([1, 0])
(C) array([0., 0., 1., 0., 0.])
(D) array([ 0., nan, 1., nan, nan])
Question 14#
What is the result of the following code section?
dat['established'].min()
(A) nan
(B) 1882.0
(C) 1878.0
(D) 0
Question 15#
What is the result of the following code section?
dat[['name', 'population']].iloc[0:3, :].shape
(A) (3, 2)
(B) (4, 2)
(C) (2, 3)
(D) (2, 2)
For questions 16-20, we define:
three
shapely
geometry objectsline1
,line2
, andline3
, anda
GeoDataFrame
object namedlayer
,
as follows:
import shapely.geometry
import geopandas as gpd
line1 = shapely.geometry.LineString([(0, 0), [0, 1]])
line2 = shapely.geometry.LineString([(0, 1), [1, 1]])
line3 = shapely.geometry.LineString([(1, 1), [1, 0]])
layer = gpd.GeoDataFrame({
'id': [1, 2, 3],
'count': [5, 2, 2],
'geometry': [line1, line2, line3]}
)
layer
id | count | geometry | |
---|---|---|---|
0 | 1 | 5 | LINESTRING (0.00000 0.00000, 0.00000 1.00000) |
1 | 2 | 2 | LINESTRING (0.00000 1.00000, 1.00000 1.00000) |
2 | 3 | 2 | LINESTRING (1.00000 1.00000, 1.00000 0.00000) |
Question 16#
What is the result of the following code section?
x = layer['geometry'].iloc[0].buffer(1.1)
y = layer['geometry'].iloc[2]
x.intersects(y)
(A) 0
(B) True
(C) False
(D) 1
Question 17#
What is the result of the following code section?
layer.dissolve(by='id')['count'].to_numpy()[0:]
(A) array([5])
(B) [5]
(C) array([5, 2, 2])
(D) [5, 2, 2]
Question 18#
What is the result of the following code section?
shapely.geometry.box(*layer.total_bounds).area
(A) 1.0
(B) 2.0
(C) 3.0
(D) 4.0
Question 19#
What is the result of the following code section?
layer.distance(shapely.geometry.Point([0.5, 1])).to_numpy()
(A) array([0.5, 0.5, 0.5])
(B) array([0, 0, 1])
(C) array([0.5, 0. , 0.5])
(D) array([1, 0, 0])
Question 20#
What is the result of the following code section?
pnt = shapely.geometry.Point((0, 1))
layer2 = gpd.GeoDataFrame({'group': 'A', 'geometry': [pnt]})
gpd.sjoin(layer2, layer, how='left')['id'].to_numpy()
(A) array([1, 2])
(B) array([1, 2, 3])
(C) array([1])
(D) array([2])