Read in data


In [3]:
myfile = open('cyclone.dat', 'r')
content = myfile.readlines()
season = []
count = []
for line in content:
    aux = line.strip()
    values = aux.split()
    season.append(values[1])
    count.append(int(values[2]))

myfile.close()

In [4]:
print season


['1', '2', '3', '4', '1', '2', '3', '4', '1', '2', '3', '4']

In [5]:
print count


[370, 452, 273, 422, 526, 624, 513, 1059, 980, 1200, 995, 1751]

Convert numeric seasons into named seasons


In [6]:
def naming_seasons(season):
    """Creates a latex table stored in a python list
    
    Parameteres
    -----------
        season: list with numeric seasons
    
    Returns
    -------
        season_str: list with named seasons
    """
    season_str = []
    for s in season:
        if s == '1':
            season_str.append('Fall')
        elif s == '2':
            season_str.append('Winter')
        elif s == '3':
            season_str.append('Spring')
        else:
            season_str.append('Summer')
    return season_str

In [7]:
season_name = naming_seasons(season)
print season_name


['Fall', 'Winter', 'Spring', 'Summer', 'Fall', 'Winter', 'Spring', 'Summer', 'Fall', 'Winter', 'Spring', 'Summer']

In [8]:
# test for function naming_seasons()
def test_naming_seasons():
    # We make a fake dictionary
    input_val = ['2', '3', '1', '4', '3', '2']
    expected_result = ['Winter', 'Spring', 'Fall', 'Summer', 'Spring', 'Winter']
    # run function
    res = naming_seasons(input_val)
    assert res == expected_result

In [9]:
test_naming_seasons()

Count total cyclones per season


In [10]:
def counting_cyclones_per_season(season_lst, count_lst):
    """Creates a latex table stored in a python list
    
    Parameteres
    -----------
        season_lst: list with named seasons
        count_lst: list with cyclone counts
    
    Returns
    -------
        total_cyclones: dictionary with seasons as keys, and totals as values
    """
    totals = [0, 0, 0, 0]
    for i in range(0, len(season_lst)):
        if season_lst[i] == 'Fall':
            totals[0] = totals[0] + count_lst[i]
        elif season_lst[i] == 'Winter':
            totals[1] = totals[1] + count_lst[i]
        elif season_lst[i] == 'Spring':
            totals[2] = totals[2] + count_lst[i]
        else:
            totals[3] = totals[3] + count_lst[i]
    total_cyclones = dict(zip(['Fall', 'Winter', 'Spring', 'Summer'], totals))
    return total_cyclones

In [11]:
total_cyclones = counting_cyclones_per_season(season_name, count)
print total_cyclones


{'Spring': 1781, 'Summer': 3232, 'Winter': 2276, 'Fall': 1876}

In [12]:
# test for function cyclones_per_season()
def test_counting_cyclones_per_season():
    # We make a fake dictionary
    input_season = ['Winter', 'Spring', 'Fall', 'Summer', 'Spring', 'Winter']
    input_count = [10, 7, 10, 5, 13, 5]
    expected_result = {'Spring': 20, 'Summer': 5, 'Winter': 15, 'Fall': 10}
    # run function
    res = counting_cyclones_per_season(input_season, input_count)
    assert res == expected_result

In [13]:
test_counting_cyclones_per_season()

LaTeX table


In [14]:
def make_cyclones_table(x):
    """Creates a latex table stored in a python list
    
    Parameteres
    -----------
        x: dictionary
    
    Returns
    -------
        latex_tbl: latex table in a list
    """
    latex_tbl = []
    latex_tbl.append("\\begin{center}\n")
    latex_tbl.append("  \\begin{tabular}{ c c }\n")
    latex_tbl.append("    \\hline\n")
    latex_tbl.append("    Season & Count \\\\\n")
    
    # add data
    for key, value in x.items():
        latex_tbl.append("    %s & %s \\\\\n" % (key, str(value)))
    # close table
    latex_tbl.append("    \\hline\n")
    latex_tbl.append("  \\end{tabular}\n")
    latex_tbl.append("\\end{center}\n")
    return latex_tbl

In [15]:
make_cyclones_table(total_cyclones)


Out[15]:
['\\begin{center}\n',
 '  \\begin{tabular}{ c c }\n',
 '    \\hline\n',
 '    Season & Count \\\\\n',
 '    Spring & 1781 \\\\\n',
 '    Summer & 3232 \\\\\n',
 '    Winter & 2276 \\\\\n',
 '    Fall & 1876 \\\\\n',
 '    \\hline\n',
 '  \\end{tabular}\n',
 '\\end{center}\n']

In [14]:
# create latex table
latex_table = make_cyclones_table(total_cyclones)

# write table to a .tex file
tex_file = open('cyclones_table.tex', 'w')
for elem in latex_table:
    tex_file.write(elem)
tex_file.close()

Numpy Arrays


In [3]:
import numpy as np

In [5]:
# this won't work
np.load('cyclone.dat')

In [7]:
# this works
dat = np.loadtxt('cyclone.dat', dtype = 'int')
print dat


[[   1    1  370]
 [   1    2  452]
 [   1    3  273]
 [   1    4  422]
 [   2    1  526]
 [   2    2  624]
 [   2    3  513]
 [   2    4 1059]
 [   3    1  980]
 [   3    2 1200]
 [   3    3  995]
 [   3    4 1751]]

In [8]:
# dimensions
dat.shape


Out[8]:
(12, 3)

In [9]:
# first row
dat[0]


Out[9]:
array([  1,   1, 370])

In [10]:
# some cells
dat[2,2]


Out[10]:
273

In [11]:
# selecting seasons and cyclones
seasons = dat[:,1]
cyclones = dat[:,2]

In [12]:
# cyclones of season 1
cyclones[(seasons == 1)]


Out[12]:
array([370, 526, 980])

In [13]:
totals = np.zeros(4)
for s in range(4):
    totals[s] = sum(cyclones[(seasons == s + 1)])
    
print totals


[ 1876.  2276.  1781.  3232.]