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
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]))