# 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 objects`line1`

,`line2`

, and`line3`

, anda

`GeoDataFrame`

object named`layer`

,

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])`