# Whale distribution (OBIS SEAMAP)

Here we download and plot “humpback whale sightings” from the OBIS SEAMAP database. First, download the data as a .csv file. Then use following code:

```
import csv
import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

# Open file
f = open('species_180530_points.csv', 'r')

# Read file
r = csv.DictReader(f)

# Initialize empty variables
lat, lon, num = [],[],[]

# Loop to parse data into our variables
errors = 0
for row in r:
try: # The "Try/except" routine, prevents the loop to break if there is an empty field
lat.append(float(row['latitude']))
lon.append(float(row['longitude']))
if not row['count'] == '':
num.append(float(row['count']))
else:
num.append(1) # If "count" is empty, replace it with a 1
except ValueError:
errors = errors + 1 # Simple error counter

# Set up projection and limits
m1 = Basemap(projection='mill',llcrnrlat=-90,urcrnrlat=90,\
llcrnrlon=-180,urcrnrlon=180,resolution='c')

# Given the projection, estimate plot coordinates from lats and lons
x,y = m1(lon, lat)

# Project data points into a grid
nbins = 200
H, xedges, yedges = np.histogram2d(x,y,bins=nbins,weights=num)

# Rotate and flip H...
H = np.rot90(H)
H = np.flipud(H)

# Mask zeros
Hmasked = np.ma.masked_where(H==0,H)

# Log H for better display
Hmasked = np.log10(Hmasked)

# Make map
fig1 = plt.figure()
cs = m1.pcolor(xedges,yedges,Hmasked,shading='flat')
m1.drawcoastlines()
m1.fillcontinents()
m1.drawmapboundary()
plt.title('Distribution of humpback whales')
cbar = plt.colorbar(orientation='horizontal', extend='both')
cbar.ax.set_xlabel('Number of whales')
```