PROG0284 - Ocean Health Index

no tags 

Oceans play a crucial role in human welfare. From providing food, livelihood and recreational activities to the regulation of the climate. Sustainable management of the oceans therefore requires an integrated and quantitative method for measuring and monitoring the quality. The ocean health index (OHI) is calculated on the basis of ten different goals for a healthy connection between man and the ocean. With this an overall score for each coastal state can be determined. According to this index the oceans worldwide score 59 out of 100 (range 41 to 87). In addition, the industrialized countries generally perform better than the developing countries, but with some notable exceptions. Only 5% of countries scored higher than 70, while 32% of countries have a score lower than 50, the OHI is a powerful tool to improve public awareness, ocean management and policy decisions, and to establish priorities within the research.

Assignment

The file ohi.txt contains the individual scores of all coastal states for the objectives used in the calculation of the OHI. Each line starts with an integer that is used as code for the coastal state, followed by the name of the coastal state and then thirteen integers between 0 and 100 indicating the score for thirteen different (sub)goals. The various fields on each line are separated by a single tab. Following table shows the scores for some coastal states from the file.

ocean health index
Quality scores for several coastal states on thirteen goals that measure the health of the oceans. Empty cells are goals that are not relevant to the coastal state because they require a resident human population or for which the coastal state does not have the local resources to produce the goal. The goals are Food Provision (FP), Artisanal Fishing Opportunities (AO), Natural Products (NP), Carbon Storage (CS), Coastal Protection (CP), Coastal Livelihoods & Economies (LE), Tourism & Recreation (TR), Sense of Place (SP), Clean Waters (CW) en Biodiversity (BD). The goal LE is divided into two sub-goals: Livelihoods (LIV) , and Economies (ECO). SP contains two sub-goals: Iconic Species (ICO) and Lasting Special Places (LSP).The goal BD contains two sub-goals: Habitats (HAB) and Species (SPP).

Asked:

  • Write a function mean to which a list should be passed as an argument. The elements of the given list may only be integers or have the value None. The function must return the average (a floating point number) of all integers from the given list as a result. That means that if, for example, a list of twenty elements is passed, five of which have a value None, the average should be calculated over only fifteen integers. If all the elements of the given list have the value None, then the function should return a value of None.
  • Write a function database that takes the location of a text file as its arguments. The function must read the information from the given text file, and converts it into a dictionary that must be returned by the function. The text file must be formatted according to the format of the sample file ohi.txt, so with fifteen fields that are separated by a tab. The dictionary that is returned by the function should use the names of the coastal states from the file (second field) as keys, and as corresponding value a list of thirteen integers with individual scores on the goals for that coastal state. Goals for which no value was given in the file (empty cells) should be displayed in the list with the value None.
  • Write an oceanHealthIndex function with which the OHI for a given coastal state can be calculated. Two arguments must be passed to this function: a string with the name of a coastal state and a dictionary as returned by the database function. The OHI is to be calculated as the mean of the quality scores on ten goals for the coastal state. The score for the goals LE, SP and BD must always be calculated as the mean of the two scores of their sub-goals (which are included in the list of individual scores). On the basis of the thirteen scores in the file ohi.txt, the mean score for Belgium can be calculated as \[ \frac{11 + 95 + 75 + 100 + 100 + \frac{61 + 56}{2} + 4 + \frac{58 + 5}{2} + 71 + \frac{99 + 82}{2}}{10} = 63,65 \] This mean must be returned by the function as an integer, by rounding off to the nearest integer. Whenever we speak of the mean of a list of scores (integer / None values) above, the calculation is in accordance with the mean function, so by ignoring the None values. If the calculation of the mean for the OHI itself yields a value of None, the ocean health index function should return the value None as a result.

Example

>>> mean([3, 7, 6, 11])
6.75
>>> mean([3, None, None, 7, None, 6, 11])
6.75
>>> mean([None, None, None, None, None])

>>> data = database('ohi.txt')
>>> data['Belgium']
[11, 95, 75, 100, 100, 61, 56, 4, 58, 5, 71, 99, 82]
>>> data['Netherlands']
[35, 96, 71, 100, 100, 79, 53, 4, 65, 85, 67, 89, 81]
>>> data['France']
[72, 96, 75, 79, 49, 94, 67, 27, 63, 29, 60, 72, 77]
>>> data['Monaco']
[1, 95, None, None, None, 95, 71, 99, 43, 0, 69, None, 85]
>>> data['Jarvis Island']
[None, None, None, None, 98, None, None, None, 65, 100, 78, 95, 76]
>>> data['Antarctica']
[None, None, None, None, None, None, None, None, None, None, None, None, None]

>>> oceanHealthIndex('Belgium', data)
64
>>> oceanHealthIndex('Netherlands', data)
70
>>> oceanHealthIndex('France', data)
66
>>> oceanHealthIndex('Monaco', data)
65
>>> oceanHealthIndex('Jarvis Island', data)
86
>>> oceanHealthIndex('Antarctica', data)

Source

  • B.S. Halpern et al. (2012). An index to assess the health and benefits of the global ocean. Nature 488, 615-620.

Oceanen spelen een cruciale rol bij het menselijk welzijn. Van het verstrekken van voedsel, levensonderhoud en recreatieve activiteiten tot de regulering van het klimaat. Een duurzaam beheer van de oceanen vraagt daarom een integrale en kwantitatieve methode voor het meten en bewaken van hun kwaliteit. De ocean health index (OHI) wordt berekend op basis van tien verschillende doelstellingen voor een gezonde koppeling tussen mens en oceaan. Hiermee kan een globale score voor elke kuststaat bepaald worden. Wereldwijd scoren de oceanen volgens deze index 59 op 100 (bereik 41 tot 87). Daarbij presteren de geïndustrialiseerde landen over het algemeen beter dan de ontwikkelingslanden, maar met enkele opvallende uitzonderingen. Slechts 5% van de landen scoort hoger dan 70, terwijl 32% van de landen een score heeft die lager is dan 50. De OHI is een krachtig instrument ter verbetering van publiek bewustzijn, oceaanbeheer en beleidsmatige beslissingen, en om prioriteiten te leggen binnen het wetenschappelijk onderzoek.

Opgave

Het bestand ohi.txt bevat voor alle kuststaten hun individuele scores voor de doelstellingen die bij de berekening van de OHI gebruikt worden. Elke regel start met een natuurlijk getal dat als code voor de kuststaat gebruikt wordt, gevolgd door de naam van de kuststaat en daarna dertien natuurlijke getallen tussen 0 en 100 die de score aangeven voor dertien verschillende (sub)doelstellingen. De verschillende velden op een regel worden telkens van elkaar gescheiden door één enkele tab. Onderstaande tabel bevat de scores voor enkele kuststaten uit het bestand.

ocean health index
Kwaliteitsscores voor enkele kuststaten op dertien doelstellingen die de gezondheid van de oceanen meten. Lege cellen zijn doelen die niet relevant zijn voor de kuststaat omdat ze een inwonende menselijke populatie vereisen of waarvoor de kuststaat niet over de lokale middelen beschikt om het doel te produceren. De doelen zijn voedselvoorziening (FP), artisanale mogelijkheden (AO), natuurlijke producten (NP), koolstofopslag (CS), kustbescherming (CP), levensonderhoud en economie (LE), toerisme en receatie (TR), uniciteit van de plaats (SP), zuiver water (CW) en biodiversiteit (BD). De doelstelling LE valt uiteen in de twee subdoelen levensonderhoud (LIV) en economie (ECO), de doelstelling SP in de twee subdoelen bijzondere plaatsen (LSP) en speciale soorten (ICO), en de doelstelling BD in de twee subdoelen habitat (HAB) en soorten (SPP).

Gevraagd wordt:

  • Schrijf een functie gemiddelde waaraan een lijst als argument moet doorgegeven worden. De elementen van de gegeven lijst mogen enkel integers zijn of de waarde None hebben. De functie moet als resultaat het gemiddelde (een floating point getal) teruggeven van alle integers uit de gegeven lijst. Dat betekent dat als bijvoorbeeld een lijst van twintig elementen wordt doorgegeven, waarvan er vijf de waarde None hebben, het gemiddelde slechts over de vijftien integers moet berekend worden. Indien alle elementen van de gegeven lijst de waarde None hebben, dan moet de functie de waarde None teruggeven.
  • Schrijf een functie gegevensbank waaraan de locatie van een tekstbestand moet doorgegeven worden. De functie moet de informatie uit het gegeven tekstbestand inlezen en omzetten naar een dictionary die door de functie moet teruggegeven worden. Het tekstbestand moet opgemaakt zijn volgens het formaat van het voorbeeldbestand ohi.txt, dus met vijftien velden die van elkaar gescheiden worden door een tab. De dictionary die door de functie wordt teruggegeven moet als sleutels de namen van de kuststaten uit het bestand (tweede veld) gebruiken, en als corresponderende waarde een lijst van dertien integers met de individuele scores op de doelstellingen voor die kuststaat. Doelstellingen waarvoor geen waarde werd gegeven in het bestand (lege cellen) moeten in de lijst weergegeven worden met de waarde None.
  • Schrijf een functie oceanHealthIndex waarmee de OHI voor een gegeven kuststaat kan berekend worden. Aan deze functie moeten twee argumenten doorgegeven worden: een string met de naam van een kuststaat en een dictionary zoals die door de functie gegevensbank wordt teruggegeven. De OHI moet berekend worden als het gemiddelde van de kwaliteitsscores op tien doelstellingen voor die kuststaat. De score voor de doelstellingen LE, SP en BD moet telkens berekend worden als het gemiddelde van de twee scores van hun subdoelen (die in de lijst van individuele scores opgenomen zijn). Op basis van de dertien scores in het bestand ohi.txt, kan de gemiddelde score voor België dus berekend worden als \[ \frac{11 + 95 + 75 + 100 + 100 + \frac{61 + 56}{2} + 4 + \frac{58 + 5}{2} + 71 + \frac{99 + 82}{2}}{10} = 63,65 \] Dit gemiddelde moet door de functie als een integer teruggegeven worden, door af te ronden naar het dichtstbijzijnde natuurlijk getal. Telkens wanneer we hierboven spreken van het gemiddelde van een lijst van scores (integer/None waarden) gebeurt de berekening conform de functie gemiddelde, dus door de None waarden te negeren. Indien de berekening van het gemiddelde voor de OHI zelf de waarde None oplevert, dan moet de functie oceanHealthIndex de waarde None als resultaat teruggeven.

Voorbeeld

>>> gemiddelde([3, 7, 6, 11])
6.75
>>> gemiddelde([3, None, None, 7, None, 6, 11])
6.75
>>> gemiddelde([None, None, None, None, None])

>>> data = gegevensbank('ohi.txt')
>>> data['Belgium']
[11, 95, 75, 100, 100, 61, 56, 4, 58, 5, 71, 99, 82]
>>> data['Netherlands']
[35, 96, 71, 100, 100, 79, 53, 4, 65, 85, 67, 89, 81]
>>> data['France']
[72, 96, 75, 79, 49, 94, 67, 27, 63, 29, 60, 72, 77]
>>> data['Monaco']
[1, 95, None, None, None, 95, 71, 99, 43, 0, 69, None, 85]
>>> data['Jarvis Island']
[None, None, None, None, 98, None, None, None, 65, 100, 78, 95, 76]
>>> data['Antarctica']
[None, None, None, None, None, None, None, None, None, None, None, None, None]

>>> oceanHealthIndex('Belgium', data)
64
>>> oceanHealthIndex('Netherlands', data)
70
>>> oceanHealthIndex('France', data)
66
>>> oceanHealthIndex('Monaco', data)
65
>>> oceanHealthIndex('Jarvis Island', data)
86
>>> oceanHealthIndex('Antarctica', data)

Bronnen

  • B.S. Halpern et al. (2012). An index to assess the health and benefits of the global ocean. Nature 488, 615-620.


Added by:Peter Dawyndt
Date:2012-09-08
Time limit:5s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None