def populate_organization_level_data(country, organizations=None):
    """
    Populate data on funding by organization type
    """
    if organizations is None:
        organizations = get_organizations_indexed_by_name()

    # load appeals, analyze each one
    appeals = fts_queries.fetch_appeals_json_for_country_as_dataframe(country)

    funding_dataframes_by_appeal = []

    for appeal_id, appeal_row in appeals.iterrows():
        # first check if there is any funding at all (otherwise API calls will get upset)
        if appeal_row['funding'] == 0:
            continue

        # query funding by recipient, including "carry over" from previous years
        funding_by_recipient = fts_queries.fetch_funding_json_for_appeal_as_dataframe(
            appeal_id, grouping='Recipient', alias='organisation')

        funding_by_recipient['year'] = appeal_row['year']

        funding_dataframes_by_appeal.append(funding_by_recipient)

    if funding_dataframes_by_appeal:
        # combine the data across appeals
        funding_by_recipient_overall = pd.concat(funding_dataframes_by_appeal)
        # now roll up by organization type and year
        grouped = funding_by_recipient_overall.join(
            organizations.type).groupby(['type', 'year'])
        funding_by_type_year = grouped.funding.sum()
    else:
        funding_by_type_year = pd.Series()  # just an empty Series

    for year in range(YEAR_START, YEAR_END + 1):
        ngo_funding = 0.
        private_org_funding = 0.
        un_agency_funding = 0.

        if (ORG_TYPE_NGOS, year) in funding_by_type_year:
            ngo_funding = funding_by_type_year[(ORG_TYPE_NGOS, year)]
        if (ORG_TYPE_PRIVATE_ORGS, year) in funding_by_type_year:
            private_org_funding = funding_by_type_year[(ORG_TYPE_PRIVATE_ORGS,
                                                        year)]
        if (ORG_TYPE_UN_AGENCIES, year) in funding_by_type_year.index:
            un_agency_funding = funding_by_type_year[(ORG_TYPE_UN_AGENCIES,
                                                      year)]

        add_row_to_values('FY190', country, year, ngo_funding)
        add_row_to_values('FY200', country, year, private_org_funding)
        add_row_to_values('FY210', country, year, un_agency_funding)
示例#2
0
def populate_organization_level_data(country, organizations=None):
    """
    Populate data on funding by organization type
    """
    if organizations is None:
        organizations = get_organizations_indexed_by_name()

    # load appeals, analyze each one
    appeals = fts_queries.fetch_appeals_json_for_country_as_dataframe(country)

    funding_dataframes_by_appeal = []

    for appeal_id, appeal_row in appeals.iterrows():
        # first check if there is any funding at all (otherwise API calls will get upset)
        if appeal_row['funding'] == 0:
            continue

        # query funding by recipient, including "carry over" from previous years
        funding_by_recipient = fts_queries.fetch_funding_json_for_appeal_as_dataframe(
            appeal_id, grouping='Recipient', alias='organisation')

        funding_by_recipient['year'] = appeal_row['year']

        funding_dataframes_by_appeal.append(funding_by_recipient)

    if funding_dataframes_by_appeal:
        funding_by_recipient_overall = pd.concat(funding_dataframes_by_appeal)
        # now roll up by organization type
        funding_by_type = funding_by_recipient_overall.join(organizations.type).groupby(['type', 'year']).funding.sum()
    else:
        funding_by_type = pd.Series()  # just an empty Series

    for year in range(YEAR_START, YEAR_END + 1):
        ngo_funding = 0.
        private_org_funding = 0.
        un_agency_funding = 0.

        if (ORG_TYPE_NGOS, year) in funding_by_type:
            ngo_funding = funding_by_type[(ORG_TYPE_NGOS, year)]
        if (ORG_TYPE_PRIVATE_ORGS, year) in funding_by_type:
            private_org_funding = funding_by_type[(ORG_TYPE_PRIVATE_ORGS, year)]
        if (ORG_TYPE_UN_AGENCIES, year) in funding_by_type.index:
            un_agency_funding = funding_by_type[(ORG_TYPE_UN_AGENCIES, year)]

        add_row_to_values('FY190', country, year, ngo_funding)
        add_row_to_values('FY200', country, year, private_org_funding)
        add_row_to_values('FY210', country, year, un_agency_funding)
def populate_organization_level_data(country, organizations=None):
    if organizations is None:
        organizations = get_organizations_indexed_by_name()

    # load appeals, analyze each one
    appeals = fts_queries.fetch_appeals_json_for_country_as_dataframe(country)

    funding_dataframes_by_appeal = []

    for appeal_id, appeal_row in appeals.iterrows():
        # first check if there is any funding at all (otherwise API calls will get upset)
        if appeal_row['funding'] == 0:
            continue

        # query funding by recipient, including "carry over" from previous years
        funding_by_recipient = fts_queries.fetch_funding_json_for_appeal_as_dataframe(
            appeal_id, grouping='Recipient', alias='organisation')

        funding_by_recipient['year'] = appeal_row['year']

        funding_dataframes_by_appeal.append(funding_by_recipient)

    if not funding_dataframes_by_appeal:
        return

    funding_by_recipient_overall = pd.concat(funding_dataframes_by_appeal)

    # now roll up by organization type
    funding_by_type = funding_by_recipient_overall.join(organizations.type).groupby(['type', 'year']).sum()

    for (org_type, year), row in funding_by_type.iterrows():
        if org_type == ORG_TYPE_NGOS:
            add_row_to_values('FY190', country, year, row['funding'])
        elif org_type == ORG_TYPE_PRIVATE_ORGS:
            add_row_to_values('FY200', country, year, row['funding'])
        elif org_type == ORG_TYPE_UN_AGENCIES:
            add_row_to_values('FY210', country, year, row['funding'])
        else:
            # note that some organizations (e.g. Red Cross/Red Crescent) fall outside the 3 indicator categories
            print 'Ignoring funding for organization type ' + org_type
示例#4
0
"""
Take in an appeal ID and generate a type "G" FTS report:
Donor
Funding USD
% of Grand Total
Uncommitted pledges USD
"""

import fts_queries
import pandas as pd
import argparse
import sys

parser = argparse.ArgumentParser(description='Produce a FTS type "G" report for a given appeal')
parser.add_argument('appeal_id', type=int)
args = parser.parse_args()
appeal_id = args.appeal_id

funding_by_donor = fts_queries.fetch_funding_json_for_appeal_as_dataframe(appeal_id, grouping='Donor', alias='donor')
pledges_by_donor = fts_queries.fetch_pledges_json_for_appeal_as_dataframe(appeal_id, grouping='Donor', alias='donor')

merged = pd.merge(funding_by_donor, pledges_by_donor, left_index=True, right_index=True, how='inner')
merged['fraction_of_total'] = merged.funding / merged.funding.sum()

merged.to_csv(sys.stdout, index=True, encoding='utf-8')
Funding USD - contributions + commitments, including carry-over from previous year
"""

import fts_queries
import argparse
import sys

parser = argparse.ArgumentParser(description='Produce a report on funding by agency type for a given appeal')
parser.add_argument('appeal_id', type=int)
args = parser.parse_args()
appeal_id = args.appeal_id

# load organizations dataset
organizations = fts_queries.fetch_organizations_json_as_dataframe()
# we'll be joining on name (sadly) so make that the index
organizations = organizations.set_index('name')
# extract out the types Series
organizations_type = organizations.type

# query funding, which includes "carry over" from previous years
funding_by_recipient =\
    fts_queries.fetch_funding_json_for_appeal_as_dataframe(appeal_id, grouping='Recipient', alias='organisation')

# join the funding with the organization type
joined = funding_by_recipient.join(organizations_type)

# now roll up by organization type
aggregated = joined.groupby('type').sum()

aggregated.to_csv(sys.stdout, index=True, encoding='utf-8')