Rain in Bergen#

../../_images/bergen.png

Bergen is famous for having a lot of rain. So much so that the Bergen bunad features umbrella-themed silver:

../../_images/bergen-solv.png

To practise get requests, json and plotting, we are going to make a bar plot of the rain in Bergen by month. To do so, we will access historical data from MET.

Frost API#

The Frost API from MET provides historical weather and climate data of e.g. temperature, precipitation and wind.

Step 1

Check the conditions for using this API.

What rules do they have for using the API?

Step 2

Complete the following code snippet so that it gets the precipitation per day in Bergen

You can use the following parameters for the get request

Key

Value

‘sources’

‘SN50540’

‘elements’

‘sum(precipitation_amount P1D)’

‘referencetime’

‘2020-01-01/2020-12-31’

Blindern has the code SN18700

import requests
import json

# Insert your own client ID here
client_id = ...

# Define url for the get request
url = 'https://frost.met.no/observations/v0.jsonld'

# Define parameters for the get request (as a dictionary)
parameters = { ... }

# Issue an HTTP GET request
r = requests.get(url, parameters, auth=(client_id,''))

# Check if the request worked, print out any errors
if r.status_code ...:
    ...

Step 3:

Parse through the data. Make a dictionary of the total rain by month.

prec_per_month = {}

data = r.json()  ...

for i in range(len(data)):

    month = ...
    prec = ...
    
    if month in prec_per_month: 
        prec_per_month[month] += prec
    else:
        prec_per_month[month] = prec

tot_prec = prec_per_month.values()
months = prec_per_month.keys()

Next we want to plot this data in a bar plot.

To do this we use pyplot:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = plt.axes()

In pyplot, the figure (an instance of the class plt.Figure) can be thought of as a single container that contains all the objects representing axes, graphics, text and labels. The axes (an instance of the class plt.axes) is more or less what is shown above: a bounding box with ticks and labels, which we will fill with plot elements.

We want to add a bar plot to ax

ax.bar?

Step 4

Make a bar plot showing the total precipitation each month.

ax.bar(...)

Step 5

Format the bar plot so that the xticks show the abbreviated month name.

Tip: Use the calendar package.

import calendar
import time

xticks = ...  # this should be a list of xtick values
xtick_vals = ...  # this should be a list of the corresponding xtick labels

ax.set_xticks(xticks)
ax.set_xticklabels(xtick_vals)
fig