├── requirements.txt ├── .gitignore ├── README.md └── prove.py /requirements.txt: -------------------------------------------------------------------------------- 1 | agate==1.4.0 2 | proof==0.3.0 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.py[co] 2 | data 3 | test 4 | .DS_Store 5 | .xlsx 6 | .proof 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # brexit-fdi 2 | 3 | Data analysis of UK foreign direct investment and possible consequences of Brexit. 4 | -------------------------------------------------------------------------------- /prove.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import agate 4 | import proof 5 | 6 | 7 | text = agate.Text() 8 | number = agate.Number(null_values=[':', '', None]) 9 | 10 | COLUMN_NAMES = ['partner', 'geo', 'indicator', 'variable', 'year', 'value'] 11 | COLUMN_TYPES = [text, text, text, text, text, number] 12 | 13 | 14 | def load_data(data): 15 | tables = [] 16 | 17 | for i in range(1, 41): 18 | print('Loading table %i' % i) 19 | tables.append(agate.Table.from_csv('data/bop_fdi_main_%i_Data.csv' % i, column_names=COLUMN_NAMES, column_types=COLUMN_TYPES, encoding='latin1')) 20 | 21 | data['table'] = agate.Table.merge(tables) 22 | 23 | 24 | def uk_stocks(data): 25 | stocks = data['table'].where(lambda r: r['indicator'] == 'Direct investment stocks - Million ECU/EUR' and r['geo'] == 'United Kingdom' and r['year'] == '2012') 26 | 27 | inbound_stocks = stocks.where(lambda r: r['variable'] == 'Financial account, Direct investment, In the reporting economy').select(['partner', 'value']).rename({ 28 | 'value': 'inbound' 29 | }) 30 | outbound_stocks = stocks.where(lambda r: r['variable'] == 'Financial account, Direct investment, Abroad').select(['partner', 'value']).rename({ 31 | 'value': 'outbound' 32 | }) 33 | 34 | data['uk_stocks'] = inbound_stocks.join(outbound_stocks, 'partner', columns=['outbound']) 35 | data['uk_stocks'].to_csv('uk_stocks.csv') 36 | 37 | 38 | def uk_flows(data): 39 | flows = data['table'].where(lambda r: r['indicator'] == 'Direct investment flows - Million ECU/EUR' and r['geo'] == 'United Kingdom' and r['year'] == '2012') 40 | 41 | inbound_flows = flows.where(lambda r: r['variable'] == 'Financial account, Direct investment, In the reporting economy').select(['partner', 'value']).rename({ 42 | 'value': 'inbound' 43 | }) 44 | outbound_flows = flows.where(lambda r: r['variable'] == 'Financial account, Direct investment, Abroad').select(['partner', 'value']).rename({ 45 | 'value': 'outbound' 46 | }) 47 | 48 | data['uk_flows'] = inbound_flows.join(outbound_flows, 'partner', columns=['outbound']) 49 | data['uk_flows'].to_csv('uk_flows.csv') 50 | 51 | 52 | def spit_it_out(data): 53 | data['table'].print_table(10) 54 | 55 | 56 | if __name__ == '__main__': 57 | data_loaded = proof.Analysis(load_data) 58 | data_loaded.then(uk_stocks) 59 | data_loaded.then(uk_flows) 60 | 61 | data_loaded.run() 62 | --------------------------------------------------------------------------------