Assignment 04#

Due date: 19.04.2023

This week’s assignment has to be returned in the form of one python script OR one jupyter notebook. Don’t forget the instructions!

Exercise 1: write a list filtering function#

Write a function corresponding to the following signature. After writing the function, running the tests with doctest.testmod() should work!

def filter_list(values, min_value=None, max_value=None):
    """Filters a list of numbers to keep only the ones between one or two thresholds.

    You need to set at least one of min_value or max_value!

    values : list
        a list of numbers (floats or ints)
    min_value : float or int, optional
        the minimum threshold to filter the data (inclusive)
    max_value : float or int, optional
        the maximum threshold to filter the data (inclusive)

    >>> a = [1, 3, 4, 2.2]
    >>> filter_list(a, min_value=2)
    [3, 4, 2.2]
    >>> a  # a is unchanged
    [1, 3, 4, 2.2]
    >>> filter_list(a, max_value=3)
    [1, 3, 2.2]
    >>> filter_list(a, min_value=2, max_value=3)
    [3, 2.2]
    >>> filter_list([1, 2, 3, 4])
    Traceback (most recent call last):
    ValueError: Need to set at least one of min_value or max_value!

    if min_value is None and max_value is None:
        raise ValueError('Need to set at least one of min_value or max_value!')

    output = []
    <your own code here>
    return output

Exercise 2: read Austrian weather station locations#

Download a text file containing a list of all Austrian weather stations here (Stationsliste_20230101.csv). Put the file in the same folder as your script. If you want, you can see a map of all stations on this website from the ZAMG.

Here is a bit of code showing the first lines of the file:

with open('Stationsliste_20230101.csv', encoding='latin-1') as fhand:
    count = 0
    for line in fhand:
        count += 1
        line = line.rstrip()
        if count > 5:
11395;ANDAU ;BGL;170208;474612;117;20210616;TAWES/VAMES;17,0355554;47,77
11193;BAD TATZMANNSDORF ;BGL;161330;472017;347;20040917;Ö3;16,22499847;47,33805466

Your task is to extend this code to ignore the first line, and then populate five lists with data: names, years, longitudes, latitudes, elevations. The lists contain the data converted to int and floats where appropriate. Here is the expected output for the first 5 lines:

>>> years
[2021, 2004, 2007, 2007, 1989]
>>> latitudes
[47.77, 47.33805466, 47.40833282, 48.01277924, 47.85416794]
>>> names

You should have lists of length 278.


I used the string methods .split() and .replace() in my code, as well as string slicing like in the book.

Exercise 3: Austrian weather station location statistics#

Now, use these lists and the function filter_list you created above as well as the python functions max() and list.index() to answer the following questions:

  • how many stations are located above 2000m?

  • Tirol is located (very) roughly between 10.2°E and 12.6°E. How many stations are there in Tirol? (this is a rough estimate of course)

  • what it the longitude, latitude and elevation of the station 'INNSBRUCK-UNIV.'?

  • what it the highest station elevation, and what is the station’s name?