FinCEN文章を解析する_02（年別の時間変化）


FinCEN文章を解析する_02（各国の時間変化）

第一回：https://qiita.com/s_zh/items/b7c7eb7bc2af98b850d7

# 内容について

前回の記事で全期間中の各金融機関のなどの状況を解析したり、国別でデータを見ましたが、今回は年単位で各国の状況を見てみます。目標は各国の送金関係の時間変化を可視化することです。今回はその前処理として、まず各国の送金の時間変化についておおよその状況を掴みます。

https://nlp.stanford.edu/projects/histwords/


ソースコードはこちらになります。

https://github.com/lightondust/topics_by_jupyter_notebook/blob/master/FinCEN_02.ipynb

Colabに上げてNeo4j Sandboxと組み合わせればブラウザだけで解析することもできるはずです（ライブラリを適宜インストールする必要がありますが、必要な方はこちらの記事をご参照くださいhttps://qiita.com/s_zh/items/3b183e258bcd6506e8cb）

# ライブラリ読み込み、データベースアクセスの準備

お約束の構文です。


```python
import plotly.express as px
import numpy as np
```


```python
from neo4j import GraphDatabase
from tqdm.notebook import tqdm
import json

import pandas as pd
```


```python
auth_path = './data/neo4j_graph/auth.json'
with open(auth_path, 'r') as f:
    auth = json.load(f)

# ローカルの場合は通常 uri: bolt(or neo4j)://localhost:7687, user: neo4j, pd: 設定したもの
# サンドボックスの場合は作成画面から接続情報が見られます
uri = 'neo4j://localhost:7687'
driver = GraphDatabase.driver(uri=uri, auth=(auth['user'], auth['pd']))

# Sandboxの場合はこんな感じ
# uri = 'bolt://54.175.38.249:35275'
# driver = GraphDatabase.driver(uri=uri, auth=('neo4j', 'spray-missile-sizing'))
```

# 年別の傾向

年別のレコードを取得して集計します。送金額をamount、送金回数をcountとします。


```python
with driver.session() as session:
    res = session.run('''
    MATCH (n:Filing)
    RETURN n.begin.year as year, sum(n.amount) as amount, count(n) as count
    ORDER BY year
    ''')
```


```python
res_df = pd.DataFrame([r.data() for r in res])
```


```python
res_df.shape
```




    (18, 3)



送金量について見てみます。


```python
px.bar(res_df, x='year', y='amount')
```

![02_01_amount_year.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239303/0ff9d49a-1555-49e0-38df-0776e0338c99.png)


金融危機と同じ時期に急増しているのは興味深いですね。２００９年の急減はヨーロッパ通貨危機とかぶるのも何か関係があるのでしょうか。２０１３年にピークをつけているようです。

では送金回数を見てみましょう。


```python
px.bar(res_df, x='year', y='count')
```

![02_02_count_year.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239303/01dcc113-cff9-10ab-43dc-2e1e6a2eb0b4.png)

基本的に２０１４年までは増加傾向のようです。２００９年の金額の急落はお金がないから減ったのかな、２０１６年は件数が減っているのに金額が増えたのも実は潤っているからか、と邪推したくなりますね。

# amount by country

国別に見てみましょう。国別の金額と回数の集計をします。


```python
with driver.session() as session:
    res = session.run('''
    MATCH (n:Filing)-[:BENEFITS]-(:Entity)--(c:Country)
    RETURN c.name as country, n.begin.year as year, sum(n.amount) as amount, count(n) as count
    ORDER BY year
    ''')
```

日付のないデータを落とします。


```python
res_df = pd.DataFrame([r.data() for r in res])
res_df.shape
```




    (465, 4)




```python
res_df = res_df.dropna()
res_df.shape
```




    (460, 4)



国別、年別に集計します。

まずは金額から


```python
res_df_country = res_df.groupby(['country']).sum()
```


```python
res_df_country_order_by_amount = res_df_country.sort_values('amount', ascending=False)
res_df_country_order_by_amount
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>year</th>
      <th>amount</th>
      <th>count</th>
    </tr>
    <tr>
      <th>country</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Russia</th>
      <td>24138.0</td>
      <td>7.279861e+09</td>
      <td>486</td>
    </tr>
    <tr>
      <th>Latvia</th>
      <td>22132.0</td>
      <td>3.947781e+09</td>
      <td>498</td>
    </tr>
    <tr>
      <th>Switzerland</th>
      <td>24136.0</td>
      <td>3.744860e+09</td>
      <td>445</td>
    </tr>
    <tr>
      <th>Singapore</th>
      <td>22132.0</td>
      <td>2.947456e+09</td>
      <td>238</td>
    </tr>
    <tr>
      <th>Hong Kong</th>
      <td>20123.0</td>
      <td>2.655467e+09</td>
      <td>263</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>Jamaica</th>
      <td>4020.0</td>
      <td>1.942582e+04</td>
      <td>2</td>
    </tr>
    <tr>
      <th>Greece</th>
      <td>2009.0</td>
      <td>5.738450e+03</td>
      <td>1</td>
    </tr>
    <tr>
      <th>Jersey</th>
      <td>2011.0</td>
      <td>3.224220e+03</td>
      <td>1</td>
    </tr>
    <tr>
      <th>Colombia</th>
      <td>2015.0</td>
      <td>2.250000e+03</td>
      <td>1</td>
    </tr>
    <tr>
      <th>Romania</th>
      <td>2014.0</td>
      <td>9.000000e+02</td>
      <td>1</td>
    </tr>
  </tbody>
</table>
<p>107 rows × 3 columns</p>
</div>



送金回数も同様です。


```python
res_df_country_order_by_count = res_df_country.sort_values('count', ascending=False)
res_df_country_order_by_count
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>year</th>
      <th>amount</th>
      <th>count</th>
    </tr>
    <tr>
      <th>country</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Latvia</th>
      <td>22132.0</td>
      <td>3.947781e+09</td>
      <td>498</td>
    </tr>
    <tr>
      <th>Russia</th>
      <td>24138.0</td>
      <td>7.279861e+09</td>
      <td>486</td>
    </tr>
    <tr>
      <th>Switzerland</th>
      <td>24136.0</td>
      <td>3.744860e+09</td>
      <td>445</td>
    </tr>
    <tr>
      <th>United States</th>
      <td>28143.0</td>
      <td>1.824221e+09</td>
      <td>267</td>
    </tr>
    <tr>
      <th>Hong Kong</th>
      <td>20123.0</td>
      <td>2.655467e+09</td>
      <td>263</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>Puerto Rico</th>
      <td>2015.0</td>
      <td>1.670000e+05</td>
      <td>1</td>
    </tr>
    <tr>
      <th>Sri Lanka</th>
      <td>2008.0</td>
      <td>2.300000e+05</td>
      <td>1</td>
    </tr>
    <tr>
      <th>Qatar</th>
      <td>2014.0</td>
      <td>6.965325e+05</td>
      <td>1</td>
    </tr>
    <tr>
      <th>Romania</th>
      <td>2014.0</td>
      <td>9.000000e+02</td>
      <td>1</td>
    </tr>
    <tr>
      <th>Jersey</th>
      <td>2011.0</td>
      <td>3.224220e+03</td>
      <td>1</td>
    </tr>
  </tbody>
</table>
<p>107 rows × 3 columns</p>
</div>



上位国の推移を見てみます。


```python
country_list_amount = res_df_country_order_by_amount.index[:7]
country_list_count = res_df_country_order_by_count.index[:7]
```

金額の推移です。


```python
res_df_filtered_by_country = res_df[res_df.country.isin(country_list_amount)]

px.line(res_df_filtered_by_country, x='year', y='amount', color='country')
```

![02_03_country_amount_year.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239303/0b4de9ad-864f-0775-d125-be0c98b2a0a0.png)

時間と共に大きく変化しています。ロシアへの送金は２０１１年に集中していて、その後は減少傾向です。一方でシンガポール、スウェーデン、ラトビアは近年増えています。

送金回数の推移です。


```python
res_df_filtered_by_country = res_df[res_df.country.isin(country_list_count)]
px.line(res_df_filtered_by_country, x='year', y='count', color='country')
```

![02_04_country_count_year.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239303/c9e22d94-c2b3-0e5f-8fa1-2d2ea01a7eaa.png)


ラトビアは概ねトレンドを描いて上昇傾向であるように見えます。金額では目立たないUAEが浮上してきました。

これを時々見かける時間変化の動画にすると次のような感じになります。

https://public.flourish.studio/visualisation/3942049/

# Bar Chart Race

時間変化の動画を作るためのソースコードが下記です


```python
information_format = {}
for rec in res_df.to_dict(orient='records'):
    country = rec['country']
    year = rec['year']
    amount = rec['amount']
    if not year:
        continue
    if country in information_format:
        information_format[country][year] = amount
    else:
        information_format[country] = {year: amount}
    
```


```python
country_year_amount_df = pd.DataFrame(information_format)
```


```python
country_year_amount_df = country_year_amount_df.sort_index().T
```


```python
country_year_amount_df
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>2000.0</th>
      <th>2001.0</th>
      <th>2002.0</th>
      <th>2004.0</th>
      <th>2005.0</th>
      <th>2006.0</th>
      <th>2007.0</th>
      <th>2008.0</th>
      <th>2009.0</th>
      <th>2010.0</th>
      <th>2011.0</th>
      <th>2012.0</th>
      <th>2013.0</th>
      <th>2014.0</th>
      <th>2015.0</th>
      <th>2016.0</th>
      <th>2017.0</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Peru</th>
      <td>5700446.06</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1961821.00</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1.801819e+05</td>
      <td>2.904759e+05</td>
      <td>3.625025e+06</td>
      <td>3.044300e+07</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>United States</th>
      <td>NaN</td>
      <td>7769.89</td>
      <td>NaN</td>
      <td>54297237.53</td>
      <td>NaN</td>
      <td>83950000.0</td>
      <td>79593802.00</td>
      <td>1.680078e+08</td>
      <td>4799923.17</td>
      <td>81111267.42</td>
      <td>7.504763e+07</td>
      <td>2.865208e+07</td>
      <td>8.391423e+08</td>
      <td>1.491771e+08</td>
      <td>1.721105e+07</td>
      <td>1.478597e+08</td>
      <td>95363351.00</td>
    </tr>
    <tr>
      <th>Belarus</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>9402.0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>3.958548e+07</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>Spain</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>20000.00</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>2.243146e+06</td>
      <td>7.968587e+06</td>
      <td>1.944970e+03</td>
      <td>1.500000e+04</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>Switzerland</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>195000.00</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>18788349.56</td>
      <td>1.042613e+08</td>
      <td>44588788.40</td>
      <td>38177154.77</td>
      <td>1.990626e+08</td>
      <td>4.396638e+08</td>
      <td>1.328279e+09</td>
      <td>1.004730e+09</td>
      <td>4.415746e+08</td>
      <td>1.183473e+08</td>
      <td>7191512.77</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>Maldives</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>5.013589e+05</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>Puerto Rico</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1.670000e+05</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>Saudi Arabia</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>4.793496e+07</td>
      <td>1.528821e+07</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>Lao People's Democratic Republic</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1.388230e+06</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>Uzbekistan</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>3.693000e+06</td>
      <td>NaN</td>
    </tr>
  </tbody>
</table>
<p>107 rows × 17 columns</p>
</div>




```python
country_year_amount_df.to_csv('./data/fincen/country_year_amount.csv')
```

このままだと国旗が表示されません。国旗を表示させるためには各国の国旗のURLを与える必要があります。

## flags


```python
country_flags = pd.read_csv('./data/country_flags.csv', header=None)
country_flags.columns = ['country', 'cotinent', 'flag']
```


```python
country_flags = country_flags.set_index('country')
```


```python
country_flags
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>cotinent</th>
      <th>flag</th>
    </tr>
    <tr>
      <th>country</th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Angola</th>
      <td>Africa</td>
      <td>https://www.countryflags.io/ao/flat/64.png</td>
    </tr>
    <tr>
      <th>Burundi</th>
      <td>Africa</td>
      <td>https://www.countryflags.io/bi/flat/64.png</td>
    </tr>
    <tr>
      <th>Benin</th>
      <td>Africa</td>
      <td>https://www.countryflags.io/bj/flat/64.png</td>
    </tr>
    <tr>
      <th>Burkina Faso</th>
      <td>Africa</td>
      <td>https://www.countryflags.io/bf/flat/64.png</td>
    </tr>
    <tr>
      <th>Botswana</th>
      <td>Africa</td>
      <td>https://www.countryflags.io/bw/flat/64.png</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>Solomon Islands</th>
      <td>Oceania</td>
      <td>https://www.countryflags.io/sb/flat/64.png</td>
    </tr>
    <tr>
      <th>Tonga</th>
      <td>Oceania</td>
      <td>https://www.countryflags.io/to/flat/64.png</td>
    </tr>
    <tr>
      <th>Tuvalu</th>
      <td>Oceania</td>
      <td>https://www.countryflags.io/tv/flat/64.png</td>
    </tr>
    <tr>
      <th>Vanuatu</th>
      <td>Oceania</td>
      <td>https://www.countryflags.io/vu/flat/64.png</td>
    </tr>
    <tr>
      <th>Samoa</th>
      <td>Oceania</td>
      <td>https://www.countryflags.io/ws/flat/64.png</td>
    </tr>
  </tbody>
</table>
<p>215 rows × 2 columns</p>
</div>




```python
country_year_amount_df.shape
```




    (107, 17)




```python
country_year_amount_df.join(country_flags)
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>2000.0</th>
      <th>2001.0</th>
      <th>2002.0</th>
      <th>2004.0</th>
      <th>2005.0</th>
      <th>2006.0</th>
      <th>2007.0</th>
      <th>2008.0</th>
      <th>2009.0</th>
      <th>2010.0</th>
      <th>2011.0</th>
      <th>2012.0</th>
      <th>2013.0</th>
      <th>2014.0</th>
      <th>2015.0</th>
      <th>2016.0</th>
      <th>2017.0</th>
      <th>cotinent</th>
      <th>flag</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Peru</th>
      <td>5700446.06</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1961821.00</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1.801819e+05</td>
      <td>2.904759e+05</td>
      <td>3.625025e+06</td>
      <td>3.044300e+07</td>
      <td>NaN</td>
      <td>Americas</td>
      <td>https://www.countryflags.io/pe/flat/64.png</td>
    </tr>
    <tr>
      <th>United States</th>
      <td>NaN</td>
      <td>7769.89</td>
      <td>NaN</td>
      <td>54297237.53</td>
      <td>NaN</td>
      <td>83950000.0</td>
      <td>79593802.00</td>
      <td>1.680078e+08</td>
      <td>4799923.17</td>
      <td>81111267.42</td>
      <td>7.504763e+07</td>
      <td>2.865208e+07</td>
      <td>8.391423e+08</td>
      <td>1.491771e+08</td>
      <td>1.721105e+07</td>
      <td>1.478597e+08</td>
      <td>95363351.00</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>Belarus</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>9402.0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>3.958548e+07</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Europe</td>
      <td>https://www.countryflags.io/by/flat/64.png</td>
    </tr>
    <tr>
      <th>Spain</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>20000.00</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>2.243146e+06</td>
      <td>7.968587e+06</td>
      <td>1.944970e+03</td>
      <td>1.500000e+04</td>
      <td>NaN</td>
      <td>Europe</td>
      <td>https://www.countryflags.io/es/flat/64.png</td>
    </tr>
    <tr>
      <th>Switzerland</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>195000.00</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>18788349.56</td>
      <td>1.042613e+08</td>
      <td>44588788.40</td>
      <td>38177154.77</td>
      <td>1.990626e+08</td>
      <td>4.396638e+08</td>
      <td>1.328279e+09</td>
      <td>1.004730e+09</td>
      <td>4.415746e+08</td>
      <td>1.183473e+08</td>
      <td>7191512.77</td>
      <td>Europe</td>
      <td>https://www.countryflags.io/ch/flat/64.png</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>Maldives</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>5.013589e+05</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Asia</td>
      <td>https://www.countryflags.io/mv/flat/64.png</td>
    </tr>
    <tr>
      <th>Puerto Rico</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1.670000e+05</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Americas</td>
      <td>https://www.countryflags.io/pr/flat/64.png</td>
    </tr>
    <tr>
      <th>Saudi Arabia</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>4.793496e+07</td>
      <td>1.528821e+07</td>
      <td>NaN</td>
      <td>Asia</td>
      <td>https://www.countryflags.io/sa/flat/64.png</td>
    </tr>
    <tr>
      <th>Lao People's Democratic Republic</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1.388230e+06</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>Uzbekistan</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>3.693000e+06</td>
      <td>NaN</td>
      <td>Asia</td>
      <td>https://www.countryflags.io/uz/flat/64.png</td>
    </tr>
  </tbody>
</table>
<p>107 rows × 19 columns</p>
</div>




```python
country_year_amount_df.join(country_flags).to_csv('./data/fincen/country_year_amount_flag.csv')
```