def proc_row(row):
    for year in years:
        if year not in headings: continue
        val = row[headings.index(year)].strip()
        if skipval(val): continue

        val = float(val)
        iso = wbfixes.get_iso(row[1].strip())
        if iso is None: continue

        # only consider aid data at country level
        if iso not in isos: continue

        indicator = row[3].strip()

        if val > 0 and indicator in donors_iid:
            src = donors_iid[indicator]
            donations[year] = donations.get(year, []) + [{
                'source': donors_iid[indicator],
                'target': iso,
                'usd': val
            }]
            # update donation totals for donors and recipients
            countries[year][iso]['received'] = countries[year][iso].get('received', 0) + val
            countries[year][src]['donated'] = countries[year][src].get('donated', 0) + val

        elif indicator in indicator_ids:
            countries[year][iso][indicator] = val
Exemple #2
0
def proc_row(row):
    for year in years:
        if year not in headings: continue
        val = row[headings.index(year)].strip()
        if skipval(val): continue

        val = float(val)
        iso = wbfixes.get_iso(row[1].strip())
        if iso is None: continue

        # only consider aid data at country level
        if iso not in isos: continue

        indicator = row[3].strip()

        if val > 0 and indicator in donors_iid:
            src = donors_iid[indicator]
            donations[year] = donations.get(
                year, []) + [{
                    'source': donors_iid[indicator],
                    'target': iso,
                    'usd': val
                }]
            # update donation totals for donors and recipients
            countries[year][iso]['received'] = countries[year][iso].get(
                'received', 0) + val
            countries[year][src]['donated'] = countries[year][src].get(
                'donated', 0) + val

        elif indicator in indicator_ids:
            countries[year][iso][indicator] = val
# convert to strings to be able to get field position
years = [r for r in range(1990, 2013)]

# dict keyed by year containing country info
countries = {}

def get_float(val):
    if '' == val:
        return None
    return float(val)

with open(args.csv, 'rb') as f:
    r = csv.reader(f)
    headings = r.next()
    for row in r:
        iso = wbfixes.get_iso(row[1])
        if not iso: continue

        indicator = row[2]
        indicatorid = row[3]

        region = continents[countries_by_iso[iso]['continentcode']]['name']

        if iso not in countries:
            countries[iso] = {
                'name': row[0],
                'region': region,
            }
        # data per year starts with column index 4
        countries[iso][indicatorid] = zip(years, map(get_float, row[4:-1]))