diff --git a/assignments/FacerAin/02-YongwooSong.ipynb b/assignments/FacerAin/02-YongwooSong.ipynb
new file mode 100644
index 0000000..0f47af8
--- /dev/null
+++ b/assignments/FacerAin/02-YongwooSong.ipynb
@@ -0,0 +1,755 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Team | \n",
+ " Tournament | \n",
+ " Goals | \n",
+ " Shots pg | \n",
+ " yellow_cards | \n",
+ " red_cards | \n",
+ " Possession% | \n",
+ " Pass% | \n",
+ " AerialsWon | \n",
+ " Rating | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Manchester City | \n",
+ " Premier League | \n",
+ " 83 | \n",
+ " 15.8 | \n",
+ " 46 | \n",
+ " 2 | \n",
+ " 60.8 | \n",
+ " 89.4 | \n",
+ " 12.8 | \n",
+ " 7.01 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Bayern Munich | \n",
+ " Bundesliga | \n",
+ " 99 | \n",
+ " 17.1 | \n",
+ " 44 | \n",
+ " 3 | \n",
+ " 58.1 | \n",
+ " 85.5 | \n",
+ " 12.9 | \n",
+ " 6.95 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Paris Saint-Germain | \n",
+ " Ligue 1 | \n",
+ " 86 | \n",
+ " 15.0 | \n",
+ " 73 | \n",
+ " 7 | \n",
+ " 60.1 | \n",
+ " 89.5 | \n",
+ " 9.5 | \n",
+ " 6.88 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona | \n",
+ " LaLiga | \n",
+ " 85 | \n",
+ " 15.3 | \n",
+ " 68 | \n",
+ " 2 | \n",
+ " 62.4 | \n",
+ " 89.7 | \n",
+ " 10.6 | \n",
+ " 6.87 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Real Madrid | \n",
+ " LaLiga | \n",
+ " 67 | \n",
+ " 14.4 | \n",
+ " 57 | \n",
+ " 2 | \n",
+ " 57.7 | \n",
+ " 87.7 | \n",
+ " 11.8 | \n",
+ " 6.86 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 93 | \n",
+ " Sheffield United | \n",
+ " Premier League | \n",
+ " 20 | \n",
+ " 8.5 | \n",
+ " 73 | \n",
+ " 3 | \n",
+ " 43.0 | \n",
+ " 76.9 | \n",
+ " 19.1 | \n",
+ " 6.46 | \n",
+ "
\n",
+ " \n",
+ " | 94 | \n",
+ " Crotone | \n",
+ " Serie A | \n",
+ " 45 | \n",
+ " 9.5 | \n",
+ " 85 | \n",
+ " 4 | \n",
+ " 47.2 | \n",
+ " 80.4 | \n",
+ " 12.7 | \n",
+ " 6.43 | \n",
+ "
\n",
+ " \n",
+ " | 95 | \n",
+ " Benevento | \n",
+ " Serie A | \n",
+ " 40 | \n",
+ " 11.0 | \n",
+ " 90 | \n",
+ " 5 | \n",
+ " 44.2 | \n",
+ " 77.7 | \n",
+ " 13.4 | \n",
+ " 6.43 | \n",
+ "
\n",
+ " \n",
+ " | 96 | \n",
+ " Dijon | \n",
+ " Ligue 1 | \n",
+ " 25 | \n",
+ " 9.2 | \n",
+ " 75 | \n",
+ " 5 | \n",
+ " 46.9 | \n",
+ " 80.0 | \n",
+ " 14.3 | \n",
+ " 6.42 | \n",
+ "
\n",
+ " \n",
+ " | 97 | \n",
+ " Schalke 04 | \n",
+ " Bundesliga | \n",
+ " 25 | \n",
+ " 8.9 | \n",
+ " 70 | \n",
+ " 2 | \n",
+ " 46.2 | \n",
+ " 76.5 | \n",
+ " 15.6 | \n",
+ " 6.41 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
98 rows × 10 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Team Tournament Goals Shots pg yellow_cards \\\n",
+ "0 Manchester City Premier League 83 15.8 46 \n",
+ "1 Bayern Munich Bundesliga 99 17.1 44 \n",
+ "2 Paris Saint-Germain Ligue 1 86 15.0 73 \n",
+ "3 Barcelona LaLiga 85 15.3 68 \n",
+ "4 Real Madrid LaLiga 67 14.4 57 \n",
+ ".. ... ... ... ... ... \n",
+ "93 Sheffield United Premier League 20 8.5 73 \n",
+ "94 Crotone Serie A 45 9.5 85 \n",
+ "95 Benevento Serie A 40 11.0 90 \n",
+ "96 Dijon Ligue 1 25 9.2 75 \n",
+ "97 Schalke 04 Bundesliga 25 8.9 70 \n",
+ "\n",
+ " red_cards Possession% Pass% AerialsWon Rating \n",
+ "0 2 60.8 89.4 12.8 7.01 \n",
+ "1 3 58.1 85.5 12.9 6.95 \n",
+ "2 7 60.1 89.5 9.5 6.88 \n",
+ "3 2 62.4 89.7 10.6 6.87 \n",
+ "4 2 57.7 87.7 11.8 6.86 \n",
+ ".. ... ... ... ... ... \n",
+ "93 3 43.0 76.9 19.1 6.46 \n",
+ "94 4 47.2 80.4 12.7 6.43 \n",
+ "95 5 44.2 77.7 13.4 6.43 \n",
+ "96 5 46.9 80.0 14.3 6.42 \n",
+ "97 2 46.2 76.5 15.6 6.41 \n",
+ "\n",
+ "[98 rows x 10 columns]"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "\n",
+ "df = pd.read_csv('./Football teams.csv')\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "각 Column의 정보는 다음 링크에 있는 것과 같습니다.\n",
+ "\n",
+ "https://www.kaggle.com/varpit94/football-teams-rankings-stats\n",
+ "\n",
+ "## Assignments 1\n",
+ "패스 성공률이 높은 상위 5개의 팀을 추출 해 보세요\n",
+ "(hint: sort_values, head)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Team | \n",
+ " Tournament | \n",
+ " Goals | \n",
+ " Shots pg | \n",
+ " yellow_cards | \n",
+ " red_cards | \n",
+ " Possession% | \n",
+ " Pass% | \n",
+ " AerialsWon | \n",
+ " Rating | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona | \n",
+ " LaLiga | \n",
+ " 85 | \n",
+ " 15.3 | \n",
+ " 68 | \n",
+ " 2 | \n",
+ " 62.4 | \n",
+ " 89.7 | \n",
+ " 10.6 | \n",
+ " 6.87 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Paris Saint-Germain | \n",
+ " Ligue 1 | \n",
+ " 86 | \n",
+ " 15.0 | \n",
+ " 73 | \n",
+ " 7 | \n",
+ " 60.1 | \n",
+ " 89.5 | \n",
+ " 9.5 | \n",
+ " 6.88 | \n",
+ "
\n",
+ " \n",
+ " | 0 | \n",
+ " Manchester City | \n",
+ " Premier League | \n",
+ " 83 | \n",
+ " 15.8 | \n",
+ " 46 | \n",
+ " 2 | \n",
+ " 60.8 | \n",
+ " 89.4 | \n",
+ " 12.8 | \n",
+ " 7.01 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " Juventus | \n",
+ " Serie A | \n",
+ " 77 | \n",
+ " 15.7 | \n",
+ " 76 | \n",
+ " 6 | \n",
+ " 55.4 | \n",
+ " 88.3 | \n",
+ " 11.4 | \n",
+ " 6.85 | \n",
+ "
\n",
+ " \n",
+ " | 35 | \n",
+ " Sassuolo | \n",
+ " Serie A | \n",
+ " 64 | \n",
+ " 13.9 | \n",
+ " 74 | \n",
+ " 4 | \n",
+ " 58.2 | \n",
+ " 87.8 | \n",
+ " 10.9 | \n",
+ " 6.67 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Team Tournament Goals Shots pg yellow_cards \\\n",
+ "3 Barcelona LaLiga 85 15.3 68 \n",
+ "2 Paris Saint-Germain Ligue 1 86 15.0 73 \n",
+ "0 Manchester City Premier League 83 15.8 46 \n",
+ "6 Juventus Serie A 77 15.7 76 \n",
+ "35 Sassuolo Serie A 64 13.9 74 \n",
+ "\n",
+ " red_cards Possession% Pass% AerialsWon Rating \n",
+ "3 2 62.4 89.7 10.6 6.87 \n",
+ "2 7 60.1 89.5 9.5 6.88 \n",
+ "0 2 60.8 89.4 12.8 7.01 \n",
+ "6 6 55.4 88.3 11.4 6.85 \n",
+ "35 4 58.2 87.8 10.9 6.67 "
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "A1 = df.sort_values('Pass%',ascending = False).head()\n",
+ "A1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Assignments 2\n",
+ "모든 팀 중에서 점유율이 60% 이상인 팀을 추출 하세요"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Team | \n",
+ " Tournament | \n",
+ " Goals | \n",
+ " Shots pg | \n",
+ " yellow_cards | \n",
+ " red_cards | \n",
+ " Possession% | \n",
+ " Pass% | \n",
+ " AerialsWon | \n",
+ " Rating | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Manchester City | \n",
+ " Premier League | \n",
+ " 83 | \n",
+ " 15.8 | \n",
+ " 46 | \n",
+ " 2 | \n",
+ " 60.8 | \n",
+ " 89.4 | \n",
+ " 12.8 | \n",
+ " 7.01 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Paris Saint-Germain | \n",
+ " Ligue 1 | \n",
+ " 86 | \n",
+ " 15.0 | \n",
+ " 73 | \n",
+ " 7 | \n",
+ " 60.1 | \n",
+ " 89.5 | \n",
+ " 9.5 | \n",
+ " 6.88 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona | \n",
+ " LaLiga | \n",
+ " 85 | \n",
+ " 15.3 | \n",
+ " 68 | \n",
+ " 2 | \n",
+ " 62.4 | \n",
+ " 89.7 | \n",
+ " 10.6 | \n",
+ " 6.87 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Team Tournament Goals Shots pg yellow_cards \\\n",
+ "0 Manchester City Premier League 83 15.8 46 \n",
+ "2 Paris Saint-Germain Ligue 1 86 15.0 73 \n",
+ "3 Barcelona LaLiga 85 15.3 68 \n",
+ "\n",
+ " red_cards Possession% Pass% AerialsWon Rating \n",
+ "0 2 60.8 89.4 12.8 7.01 \n",
+ "2 7 60.1 89.5 9.5 6.88 \n",
+ "3 2 62.4 89.7 10.6 6.87 "
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "A2 = df[df['Possession%']>=60]\n",
+ "A2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Assignments 3\n",
+ "5대 리그 중, 제일 과격 한 리그는 무엇일까요? 일단 Yellow Card 갯수 순서로 리그를 정렬 해 주고, 거기서 yellow_cards와 red_cards 수로 정렬 해 주세요!\n",
+ "(hint: groupby, sum, loc)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " yellow_cards | \n",
+ " red_cards | \n",
+ "
\n",
+ " \n",
+ " | Tournament | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | LaLiga | \n",
+ " 1639 | \n",
+ " 75 | \n",
+ "
\n",
+ " \n",
+ " | Serie A | \n",
+ " 1597 | \n",
+ " 69 | \n",
+ "
\n",
+ " \n",
+ " | Ligue 1 | \n",
+ " 1419 | \n",
+ " 102 | \n",
+ "
\n",
+ " \n",
+ " | Premier League | \n",
+ " 1095 | \n",
+ " 48 | \n",
+ "
\n",
+ " \n",
+ " | Bundesliga | \n",
+ " 1081 | \n",
+ " 33 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " yellow_cards red_cards\n",
+ "Tournament \n",
+ "LaLiga 1639 75\n",
+ "Serie A 1597 69\n",
+ "Ligue 1 1419 102\n",
+ "Premier League 1095 48\n",
+ "Bundesliga 1081 33"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "A3 = df.groupby(df['Tournament']).sum().sort_values(['yellow_cards','red_cards'],ascending= False)\n",
+ "A3 = A3.loc[:,['yellow_cards','red_cards']]\n",
+ "A3"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Assignments 4\n",
+ "\n",
+ "생각해 보니 레드 카드도 감안을 해야 할 것 같습니다. 레드 카드 5점, 옐로우 카드 2점으로 점수를 산정 하여, 해당 점수를 바탕으로 정렬해서, 진짜 과격한 리그가 어느 리그인지 알아 보도록 해봐요!\n",
+ "\n",
+ "아 맞다, df['A'] = df['B'] * 5 + df['C'] * 2\n",
+ "\n",
+ "이런 식으로 새로운 Column을 만들면 되지 않을까요?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " yellow_cards | \n",
+ " red_cards | \n",
+ " score | \n",
+ "
\n",
+ " \n",
+ " | Tournament | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | LaLiga | \n",
+ " 1639 | \n",
+ " 75 | \n",
+ " 3653 | \n",
+ "
\n",
+ " \n",
+ " | Serie A | \n",
+ " 1597 | \n",
+ " 69 | \n",
+ " 3539 | \n",
+ "
\n",
+ " \n",
+ " | Ligue 1 | \n",
+ " 1419 | \n",
+ " 102 | \n",
+ " 3348 | \n",
+ "
\n",
+ " \n",
+ " | Premier League | \n",
+ " 1095 | \n",
+ " 48 | \n",
+ " 2430 | \n",
+ "
\n",
+ " \n",
+ " | Bundesliga | \n",
+ " 1081 | \n",
+ " 33 | \n",
+ " 2327 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " yellow_cards red_cards score\n",
+ "Tournament \n",
+ "LaLiga 1639 75 3653\n",
+ "Serie A 1597 69 3539\n",
+ "Ligue 1 1419 102 3348\n",
+ "Premier League 1095 48 2430\n",
+ "Bundesliga 1081 33 2327"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "A4 = A3\n",
+ "A4['score'] = A4['red_cards']*5 +A4['yellow_cards']*2\n",
+ "A4"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Assignments 5\n",
+ "흠.. 근데 패스 성공률과 점유율의 상관관계에 대해서 알아보고 싶은데.. 선형 적인 면에서 이를 알 수 있을까요? numpy를 이용해서 covariance matrix를 통해서 알아 보면 될 것 같은데...\n",
+ "\n",
+ "hint: to_numpy, T, cov"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[21.99771618, 19.52841995],\n",
+ " [19.52841995, 23.91276667]])"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "A5 = df[['Pass%','Possession%']].to_numpy().T\n",
+ "\n",
+ "np.cov(A5)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/assignments/FacerAin/03-YongwooSong.ipynb b/assignments/FacerAin/03-YongwooSong.ipynb
new file mode 100644
index 0000000..4126185
--- /dev/null
+++ b/assignments/FacerAin/03-YongwooSong.ipynb
@@ -0,0 +1,619 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 77,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 78,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Country name | \n",
+ " Regional indicator | \n",
+ " Ladder score | \n",
+ " Standard error of ladder score | \n",
+ " upperwhisker | \n",
+ " lowerwhisker | \n",
+ " Logged GDP per capita | \n",
+ " Social support | \n",
+ " Healthy life expectancy | \n",
+ " Freedom to make life choices | \n",
+ " Generosity | \n",
+ " Perceptions of corruption | \n",
+ " Ladder score in Dystopia | \n",
+ " Explained by: Log GDP per capita | \n",
+ " Explained by: Social support | \n",
+ " Explained by: Healthy life expectancy | \n",
+ " Explained by: Freedom to make life choices | \n",
+ " Explained by: Generosity | \n",
+ " Explained by: Perceptions of corruption | \n",
+ " Dystopia + residual | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Finland | \n",
+ " Western Europe | \n",
+ " 7.842 | \n",
+ " 0.032 | \n",
+ " 7.904 | \n",
+ " 7.780 | \n",
+ " 10.775 | \n",
+ " 0.954 | \n",
+ " 72.000 | \n",
+ " 0.949 | \n",
+ " -0.098 | \n",
+ " 0.186 | \n",
+ " 2.43 | \n",
+ " 1.446 | \n",
+ " 1.106 | \n",
+ " 0.741 | \n",
+ " 0.691 | \n",
+ " 0.124 | \n",
+ " 0.481 | \n",
+ " 3.253 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Denmark | \n",
+ " Western Europe | \n",
+ " 7.620 | \n",
+ " 0.035 | \n",
+ " 7.687 | \n",
+ " 7.552 | \n",
+ " 10.933 | \n",
+ " 0.954 | \n",
+ " 72.700 | \n",
+ " 0.946 | \n",
+ " 0.030 | \n",
+ " 0.179 | \n",
+ " 2.43 | \n",
+ " 1.502 | \n",
+ " 1.108 | \n",
+ " 0.763 | \n",
+ " 0.686 | \n",
+ " 0.208 | \n",
+ " 0.485 | \n",
+ " 2.868 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Switzerland | \n",
+ " Western Europe | \n",
+ " 7.571 | \n",
+ " 0.036 | \n",
+ " 7.643 | \n",
+ " 7.500 | \n",
+ " 11.117 | \n",
+ " 0.942 | \n",
+ " 74.400 | \n",
+ " 0.919 | \n",
+ " 0.025 | \n",
+ " 0.292 | \n",
+ " 2.43 | \n",
+ " 1.566 | \n",
+ " 1.079 | \n",
+ " 0.816 | \n",
+ " 0.653 | \n",
+ " 0.204 | \n",
+ " 0.413 | \n",
+ " 2.839 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Iceland | \n",
+ " Western Europe | \n",
+ " 7.554 | \n",
+ " 0.059 | \n",
+ " 7.670 | \n",
+ " 7.438 | \n",
+ " 10.878 | \n",
+ " 0.983 | \n",
+ " 73.000 | \n",
+ " 0.955 | \n",
+ " 0.160 | \n",
+ " 0.673 | \n",
+ " 2.43 | \n",
+ " 1.482 | \n",
+ " 1.172 | \n",
+ " 0.772 | \n",
+ " 0.698 | \n",
+ " 0.293 | \n",
+ " 0.170 | \n",
+ " 2.967 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Netherlands | \n",
+ " Western Europe | \n",
+ " 7.464 | \n",
+ " 0.027 | \n",
+ " 7.518 | \n",
+ " 7.410 | \n",
+ " 10.932 | \n",
+ " 0.942 | \n",
+ " 72.400 | \n",
+ " 0.913 | \n",
+ " 0.175 | \n",
+ " 0.338 | \n",
+ " 2.43 | \n",
+ " 1.501 | \n",
+ " 1.079 | \n",
+ " 0.753 | \n",
+ " 0.647 | \n",
+ " 0.302 | \n",
+ " 0.384 | \n",
+ " 2.798 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 144 | \n",
+ " Lesotho | \n",
+ " Sub-Saharan Africa | \n",
+ " 3.512 | \n",
+ " 0.120 | \n",
+ " 3.748 | \n",
+ " 3.276 | \n",
+ " 7.926 | \n",
+ " 0.787 | \n",
+ " 48.700 | \n",
+ " 0.715 | \n",
+ " -0.131 | \n",
+ " 0.915 | \n",
+ " 2.43 | \n",
+ " 0.451 | \n",
+ " 0.731 | \n",
+ " 0.007 | \n",
+ " 0.405 | \n",
+ " 0.103 | \n",
+ " 0.015 | \n",
+ " 1.800 | \n",
+ "
\n",
+ " \n",
+ " | 145 | \n",
+ " Botswana | \n",
+ " Sub-Saharan Africa | \n",
+ " 3.467 | \n",
+ " 0.074 | \n",
+ " 3.611 | \n",
+ " 3.322 | \n",
+ " 9.782 | \n",
+ " 0.784 | \n",
+ " 59.269 | \n",
+ " 0.824 | \n",
+ " -0.246 | \n",
+ " 0.801 | \n",
+ " 2.43 | \n",
+ " 1.099 | \n",
+ " 0.724 | \n",
+ " 0.340 | \n",
+ " 0.539 | \n",
+ " 0.027 | \n",
+ " 0.088 | \n",
+ " 0.648 | \n",
+ "
\n",
+ " \n",
+ " | 146 | \n",
+ " Rwanda | \n",
+ " Sub-Saharan Africa | \n",
+ " 3.415 | \n",
+ " 0.068 | \n",
+ " 3.548 | \n",
+ " 3.282 | \n",
+ " 7.676 | \n",
+ " 0.552 | \n",
+ " 61.400 | \n",
+ " 0.897 | \n",
+ " 0.061 | \n",
+ " 0.167 | \n",
+ " 2.43 | \n",
+ " 0.364 | \n",
+ " 0.202 | \n",
+ " 0.407 | \n",
+ " 0.627 | \n",
+ " 0.227 | \n",
+ " 0.493 | \n",
+ " 1.095 | \n",
+ "
\n",
+ " \n",
+ " | 147 | \n",
+ " Zimbabwe | \n",
+ " Sub-Saharan Africa | \n",
+ " 3.145 | \n",
+ " 0.058 | \n",
+ " 3.259 | \n",
+ " 3.030 | \n",
+ " 7.943 | \n",
+ " 0.750 | \n",
+ " 56.201 | \n",
+ " 0.677 | \n",
+ " -0.047 | \n",
+ " 0.821 | \n",
+ " 2.43 | \n",
+ " 0.457 | \n",
+ " 0.649 | \n",
+ " 0.243 | \n",
+ " 0.359 | \n",
+ " 0.157 | \n",
+ " 0.075 | \n",
+ " 1.205 | \n",
+ "
\n",
+ " \n",
+ " | 148 | \n",
+ " Afghanistan | \n",
+ " South Asia | \n",
+ " 2.523 | \n",
+ " 0.038 | \n",
+ " 2.596 | \n",
+ " 2.449 | \n",
+ " 7.695 | \n",
+ " 0.463 | \n",
+ " 52.493 | \n",
+ " 0.382 | \n",
+ " -0.102 | \n",
+ " 0.924 | \n",
+ " 2.43 | \n",
+ " 0.370 | \n",
+ " 0.000 | \n",
+ " 0.126 | \n",
+ " 0.000 | \n",
+ " 0.122 | \n",
+ " 0.010 | \n",
+ " 1.895 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
149 rows × 20 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Country name Regional indicator Ladder score \\\n",
+ "0 Finland Western Europe 7.842 \n",
+ "1 Denmark Western Europe 7.620 \n",
+ "2 Switzerland Western Europe 7.571 \n",
+ "3 Iceland Western Europe 7.554 \n",
+ "4 Netherlands Western Europe 7.464 \n",
+ ".. ... ... ... \n",
+ "144 Lesotho Sub-Saharan Africa 3.512 \n",
+ "145 Botswana Sub-Saharan Africa 3.467 \n",
+ "146 Rwanda Sub-Saharan Africa 3.415 \n",
+ "147 Zimbabwe Sub-Saharan Africa 3.145 \n",
+ "148 Afghanistan South Asia 2.523 \n",
+ "\n",
+ " Standard error of ladder score upperwhisker lowerwhisker \\\n",
+ "0 0.032 7.904 7.780 \n",
+ "1 0.035 7.687 7.552 \n",
+ "2 0.036 7.643 7.500 \n",
+ "3 0.059 7.670 7.438 \n",
+ "4 0.027 7.518 7.410 \n",
+ ".. ... ... ... \n",
+ "144 0.120 3.748 3.276 \n",
+ "145 0.074 3.611 3.322 \n",
+ "146 0.068 3.548 3.282 \n",
+ "147 0.058 3.259 3.030 \n",
+ "148 0.038 2.596 2.449 \n",
+ "\n",
+ " Logged GDP per capita Social support Healthy life expectancy \\\n",
+ "0 10.775 0.954 72.000 \n",
+ "1 10.933 0.954 72.700 \n",
+ "2 11.117 0.942 74.400 \n",
+ "3 10.878 0.983 73.000 \n",
+ "4 10.932 0.942 72.400 \n",
+ ".. ... ... ... \n",
+ "144 7.926 0.787 48.700 \n",
+ "145 9.782 0.784 59.269 \n",
+ "146 7.676 0.552 61.400 \n",
+ "147 7.943 0.750 56.201 \n",
+ "148 7.695 0.463 52.493 \n",
+ "\n",
+ " Freedom to make life choices Generosity Perceptions of corruption \\\n",
+ "0 0.949 -0.098 0.186 \n",
+ "1 0.946 0.030 0.179 \n",
+ "2 0.919 0.025 0.292 \n",
+ "3 0.955 0.160 0.673 \n",
+ "4 0.913 0.175 0.338 \n",
+ ".. ... ... ... \n",
+ "144 0.715 -0.131 0.915 \n",
+ "145 0.824 -0.246 0.801 \n",
+ "146 0.897 0.061 0.167 \n",
+ "147 0.677 -0.047 0.821 \n",
+ "148 0.382 -0.102 0.924 \n",
+ "\n",
+ " Ladder score in Dystopia Explained by: Log GDP per capita \\\n",
+ "0 2.43 1.446 \n",
+ "1 2.43 1.502 \n",
+ "2 2.43 1.566 \n",
+ "3 2.43 1.482 \n",
+ "4 2.43 1.501 \n",
+ ".. ... ... \n",
+ "144 2.43 0.451 \n",
+ "145 2.43 1.099 \n",
+ "146 2.43 0.364 \n",
+ "147 2.43 0.457 \n",
+ "148 2.43 0.370 \n",
+ "\n",
+ " Explained by: Social support Explained by: Healthy life expectancy \\\n",
+ "0 1.106 0.741 \n",
+ "1 1.108 0.763 \n",
+ "2 1.079 0.816 \n",
+ "3 1.172 0.772 \n",
+ "4 1.079 0.753 \n",
+ ".. ... ... \n",
+ "144 0.731 0.007 \n",
+ "145 0.724 0.340 \n",
+ "146 0.202 0.407 \n",
+ "147 0.649 0.243 \n",
+ "148 0.000 0.126 \n",
+ "\n",
+ " Explained by: Freedom to make life choices Explained by: Generosity \\\n",
+ "0 0.691 0.124 \n",
+ "1 0.686 0.208 \n",
+ "2 0.653 0.204 \n",
+ "3 0.698 0.293 \n",
+ "4 0.647 0.302 \n",
+ ".. ... ... \n",
+ "144 0.405 0.103 \n",
+ "145 0.539 0.027 \n",
+ "146 0.627 0.227 \n",
+ "147 0.359 0.157 \n",
+ "148 0.000 0.122 \n",
+ "\n",
+ " Explained by: Perceptions of corruption Dystopia + residual \n",
+ "0 0.481 3.253 \n",
+ "1 0.485 2.868 \n",
+ "2 0.413 2.839 \n",
+ "3 0.170 2.967 \n",
+ "4 0.384 2.798 \n",
+ ".. ... ... \n",
+ "144 0.015 1.800 \n",
+ "145 0.088 0.648 \n",
+ "146 0.493 1.095 \n",
+ "147 0.075 1.205 \n",
+ "148 0.010 1.895 \n",
+ "\n",
+ "[149 rows x 20 columns]"
+ ]
+ },
+ "execution_count": 78,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df = pd.read_csv('./world-happiness-report-2021.csv')\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Assignment 1\n",
+ "행복 지수를 1점 간격으로 두고 다음과 같은 **Histogram**을 작성 해 주세요.\n",
+ "행복 지수의 키 값은 \"Ladder score\" 입니다."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 79,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEWCAYAAABhffzLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAVQ0lEQVR4nO3de7TdZX3n8fcHAgIRBtDIBILGVS/IaKs04gW0HRBLRYRxvC7tgNJiO9Zi7Yymzpq1xl5hvFTH1q5SUVPvCFoYYVSGiyPVAkFQ7ooY5J5wk4uoBL7zx34im0NOcoL5nX1Onvdrrb3O776/v72Sz372s3+/Z6eqkCT1Y6tJFyBJml0GvyR1xuCXpM4Y/JLUGYNfkjpj8EtSZwx+dSnJE5Pck2TrSdcizTaDXxOTZFWSl0xZdmSSc4d+7qr6UVU9tqoeGPq5ZiLJUUmuTHJ3kluSnJ5kx0nXpS3TgkkXIPUuyW8AfwUcXFUXJdkVOHQzP8eCqlq7OY+p+csWv+a0JMuT/KC1hC9P8h/G1h2Z5F+S/G2SH7cW84Fj689J8tdJzk9yV5JTWqiSZGmSSrJgbNs/b8e7O8nXkjx+7FjPT/LNJHcm+U6S35xSxzVtvx8meUNb/pQkX2+13Zrk89Oc5nOBb1XVRQBVdXtVraiqu9txtk/y/iTXtmOdm2T7tu4VSS5rdZ2T5Bljda1K8q4k3wXuTbJgQ+ehjlSVDx8TeQCrgJdMWXYkcO7Y/KuB3Rk1Ul4L3AssHtt2LfDHwDZt/Y+BXdv6c4AbgGcCC4GTgU+1dUuBAhaMbfsD4GnA9m3+2LZuD+A24GWtjoPa/KJ23LuAp7dtFwP/rk1/FvhvbZ/tgP2neR1eBNwHvAfYD3jMlPV/1+rZA9gaeCHwmFbrva2ebYB3AlcD2469vhcDe7ZzmvY8Jv1vwcfsPmzxa9L+ubU+70xyJ/CR8ZVV9YWqurGqHqyqzwPfB/Yd22Q18MGqur+tvwo4ZGz9J6vq0qq6F/jvwGs28IXux6vqe1V1H3Ai8Oy2/I3A6VV1eqvjDGAlowAFeBB4ZpLtq+qmqrqsLb8feBKwe1X9tKrW+91FVX0DeCWwD3AacFuSDyTZOslWwJuBY6rqhqp6oKq+WVU/Y/RGd1pVnVFV9wPvYxTwLxw7/P+qquvaOW3sPNQJg1+TdnhV7bzuAfzn8ZVJ/lOSi8feGJ4JPH5skxuqanykwWsZfUJY57op67aZsv+4m8emfwI8tk0/CXj1lDeo/Rl98riXUQD/PnBTktOS7NX2eycQ4PzWHfPm6V6Eqvo/VXUosCtwGKNPM7/bat2O0aeRqXZv57TuGA+2891jmvOf9jymq0tbJoNfc1aSJwH/CPwh8Lj2xnApozBdZ48k4/NPBG4cm99zyrr7gVs3sZTrGH1y2HnssbCqjgWoqq9W1UGMAvTKVjNVdXNV/V5V7Q68BfhIkqds6IlaS/xM4CxGb3K3Aj8FfmU9m9/IKMwBaK/Dnoy6t35xyJmeh/ph8GsuW8gouNYAJHkTozAc9wTgj5Jsk+TVwDOA08fWvzHJ3kl2AP4MOKk2/RLOTwGHJvmt1v2yXZLfTLIkyW5JDkuyEPgZcA+jrh+SvDrJknaMO9q5PDj14G3/1yXZJSP7Ar8B/GtrxX8M+ECS3dvzvyDJYxh1Rx2S5MAk2wB/0mr45qaexya+HprnDH7NWVV1OfB+4FvALcCzgH+Zstl5wFMZtYz/EnhVVd02tv6TwCcYdeNsB/zRo6jjOkbdL+9m9CZ0HfBfGf3/2Qp4B6PW9+2MAvsP2q7PBc5Lcg9wKqN++mvW8xR3AL/H6PuLuxgF9Hur6tNt/X8BLgEuaM9xHLBVVV3FqN/+w+38DwUOraqfP4rzUEfy8O5Raf5IciTwu1W1/zTrz2F0Fc9HZ7Muaa7znV6SOjPonbtJVgF3Aw8Aa6tqWbuB5vOMrqNeBbymqu4Ysg5J0kMG7eppwb+sqm4dW/Y/gdur6tgky4FdqupdgxUhSXqYSXT1HAasaNMrgMMnUIMkdWvoFv8Peegytn+oquOT3Nmux1533fEd6+an7Hs0cDTAwoULf32vvfaauokkaQMuvPDCW6tq0dTlQ4/OuX9V3ZDkCcAZSa4cX1lVlWS97zxVdTxwPMCyZctq5cqVA5cqSVuWJNeub/mgXT1VdUP7uxr4EqMxVm5JsrgVtZjRWCuSpFkyWPAnWZj2QxLtrsaXMrrd/lTgiLbZEcApQ9UgSXqkIbt6dgO+1IZRWQB8pqq+kuQC4MQkRzEaYOo1A9YgSZpisOBvt6b/2nqW3wYc+Mg9pOEsXX7apEvYJKuOPWTjG0mPknfuSlJnDH5J6ozBL0mdMfglqTMGvyR1xuCXpM4Y/JLUGYNfkjpj8EtSZwx+SeqMwS9JnTH4JakzBr8kdcbgl6TOGPyS1BmDX5I6Y/BLUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktQZg1+SOmPwS1JnDH5J6ozBL0mdMfglqTMGvyR1xuCXpM4Y/JLUGYNfkjpj8EtSZwx+SeqMwS9JnRk8+JNsneSiJF9u809Ocl6Sq5N8Psm2Q9cgSXrIbLT4jwGuGJs/DvibqnoKcAdw1CzUIElqBg3+JEuAQ4CPtvkABwAntU1WAIcPWYMk6eGGbvF/EHgn8GCbfxxwZ1WtbfPXA3usb8ckRydZmWTlmjVrBi5TkvoxWPAneTmwuqoufDT7V9XxVbWsqpYtWrRoM1cnSf1aMOCx9wNekeRlwHbATsCHgJ2TLGit/iXADQPWIEmaYrAWf1X9aVUtqaqlwOuAs6rqDcDZwKvaZkcApwxVgyTpkSZxHf+7gHckuZpRn/8JE6hBkro1ZFfPL1TVOcA5bfoaYN/ZeF5J0iN5564kdcbgl6TOGPyS1BmDX5I6Y/BLUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktSZWRmrR1umpctPm3QJkh4FW/yS1BmDX5I6Y/BLUmcMfknqjF/uSnPQfPrifNWxh0y6BG0iW/yS1BmDX5I6Y/BLUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktQZg1+SOmPwS1JnDH5J6ozBL0mdMfglqTMGvyR1xuCXpM4Y/JLUmcGCP8l2Sc5P8p0klyV5T1v+5CTnJbk6yeeTbDtUDZKkRxqyxf8z4ICq+jXg2cDBSZ4PHAf8TVU9BbgDOGrAGiRJUwwW/DVyT5vdpj0KOAA4qS1fARw+VA2SpEcatI8/ydZJLgZWA2cAPwDurKq1bZPrgT2m2ffoJCuTrFyzZs2QZUpSVwYN/qp6oKqeDSwB9gX22oR9j6+qZVW1bNGiRUOVKEndmZWreqrqTuBs4AXAzkkWtFVLgBtmowZJ0siQV/UsSrJzm94eOAi4gtEbwKvaZkcApwxVgyTpkRZsfJNHbTGwIsnWjN5gTqyqLye5HPhckr8ALgJOGLAGSdIUgwV/VX0XeM56ll/DqL9fkjQB3rkrSZ0x+CWpMwa/JHXG4Jekzhj8ktSZGQV/kjNnskySNPdt8HLOJNsBOwCPT7ILkLZqJ6YZY0eSNLdt7Dr+twBvB3YHLuSh4L8L+NvhypIkDWWDwV9VHwI+lORtVfXhWapJkjSgGd25W1UfTvJCYOn4PlX1TwPVJUkayIyCP8kngV8BLgYeaIsLMPglaZ6Z6Vg9y4C9q6qGLEaSNLyZXsd/KfBvhyxEkjQ7ZtrifzxweZLzGf2IOgBV9YpBqpIkDWamwf8/hixCkjR7ZnpVz9eHLkSSNDtmelXP3Yyu4gHYFtgGuLeqdhqqMEnSMGba4t9x3XSSAIcBzx+qKEnScDZ5dM4a+WfgtzZ/OZKkoc20q+eVY7NbMbqu/6eDVCRJGtRMr+o5dGx6LbCKUXePJGmemWkf/5uGLkSSNDtm+kMsS5J8Kcnq9jg5yZKhi5MkbX4z/XL348CpjMbl3x34322ZJGmemWnwL6qqj1fV2vb4BLBowLokSQOZafDfluSNSbZujzcCtw1ZmCRpGDMN/jcDrwFuBm4CXgUcOVBNkqQBzfRyzj8DjqiqOwCS7Aq8j9EbgiRpHplpi/9X14U+QFXdDjxnmJIkSUOaafBvlWSXdTOtxT/TTwuSpDlkpuH9fuBbSb7Q5l8N/OUwJUmShjTTO3f/KclK4IC26JVVdflwZUmShjLj7poW9Ia9JM1zmzwssyRpfjP4JakzgwV/kj2TnJ3k8iSXJTmmLd81yRlJvt/+7rKxY0mSNp8hW/xrgT+pqr0Z/UzjW5PsDSwHzqyqpwJntnlJ0iwZLPir6qaq+nabvhu4AtiD0Q+4rGibrQAOH6oGSdIjzUoff5KljO70PQ/YrapuaqtuBnabZp+jk6xMsnLNmjWzUaYkdWHw4E/yWOBk4O1Vddf4uqoqoNa3X1UdX1XLqmrZokWOAC1Jm8ugwZ9kG0ah/+mq+mJbfEuSxW39YmD1kDVIkh5uyKt6ApwAXFFVHxhbdSpwRJs+AjhlqBokSY805EBr+wG/A1yS5OK27N3AscCJSY4CrmU0zr8kaZYMFvxVdS6QaVYfONTzSpI2zDt3JakzBr8kdcbgl6TOGPyS1BmDX5I6Y/BLUmcMfknqzJA3cEnqwNLlp026hE2y6thDJl3CxNnil6TOGPyS1BmDX5I6Y/BLUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktQZg1+SOmPwS1JnDH5J6ozBL0mdMfglqTMGvyR1xuCXpM4Y/JLUGYNfkjpj8EtSZwx+SeqMwS9JnTH4JakzBr8kdcbgl6TOLJh0AXq4pctPm3QJkrZwg7X4k3wsyeokl44t2zXJGUm+3/7uMtTzS5LWb8iunk8AB09Zthw4s6qeCpzZ5iVJs2iw4K+q/wfcPmXxYcCKNr0COHyo55ckrd9sf7m7W1Xd1KZvBnabbsMkRydZmWTlmjVrZqc6SerAxK7qqaoCagPrj6+qZVW1bNGiRbNYmSRt2WY7+G9Jshig/V09y88vSd2b7eA/FTiiTR8BnDLLzy9J3Rvycs7PAt8Cnp7k+iRHAccCByX5PvCSNi9JmkWD3cBVVa+fZtWBQz2nJGnjHLJBkjpj8EtSZwx+SeqMwS9JnTH4JakzBr8kdcbgl6TOGPyS1BmDX5I6Y/BLUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktQZg1+SOmPwS1JnDH5J6ozBL0mdMfglqTMGvyR1xuCXpM4Y/JLUGYNfkjpj8EtSZwx+SeqMwS9JnTH4JakzBr8kdcbgl6TOGPyS1BmDX5I6s2DSBQxt6fLTJl2CJM0ptvglqTMTCf4kBye5KsnVSZZPogZJ6tWsB3+SrYG/A34b2Bt4fZK9Z7sOSerVJFr8+wJXV9U1VfVz4HPAYROoQ5K6NIkvd/cArhubvx543tSNkhwNHN1m70ly1aN8vscDtz7KfSdhPtVrrcOZT/XOp1rJcfOq3l+21ietb+Gcvaqnqo4Hjv9lj5NkZVUt2wwlzYr5VK+1Dmc+1TufaoX5Ve9QtU6iq+cGYM+x+SVtmSRpFkwi+C8AnprkyUm2BV4HnDqBOiSpS7Pe1VNVa5P8IfBVYGvgY1V12YBP+Ut3F82y+VSvtQ5nPtU7n2qF+VXvILWmqoY4riRpjvLOXUnqjMEvSZ3ZYoM/yZ5Jzk5yeZLLkhwz6Zqmk2S7JOcn+U6r9T2Trmljkmyd5KIkX550LRuTZFWSS5JcnGTlpOvZmCQ7JzkpyZVJrkjygknXtD5Jnt5e03WPu5K8fdJ1TSfJH7f/X5cm+WyS7SZd04YkOabVetnmfl232D7+JIuBxVX17SQ7AhcCh1fV5RMu7RGSBFhYVfck2QY4Fzimqv51wqVNK8k7gGXATlX18knXsyFJVgHLqmpe3LSTZAXwjar6aLvybYequnPCZW1QG4rlBuB5VXXtpOuZKskejP5f7V1V9yU5ETi9qj4x2crWL8kzGY1qsC/wc+ArwO9X1dWb4/hbbIu/qm6qqm+36buBKxjdNTzn1Mg9bXab9piz78hJlgCHAB+ddC1bmiT/BngxcAJAVf18rod+cyDwg7kY+mMWANsnWQDsANw44Xo25BnAeVX1k6paC3wdeOXmOvgWG/zjkiwFngOcN+FSptW6Ti4GVgNnVNWcrRX4IPBO4MEJ1zFTBXwtyYVtKJC57MnAGuDjrSvto0kWTrqoGXgd8NlJFzGdqroBeB/wI+Am4MdV9bXJVrVBlwIvSvK4JDsAL+PhN77+Urb44E/yWOBk4O1Vddek65lOVT1QVc9mdCfzvu2j3pyT5OXA6qq6cNK1bIL9q2ofRiPCvjXJiydd0AYsAPYB/r6qngPcC8zpoctbd9QrgC9MupbpJNmF0WCQTwZ2BxYmeeNkq5peVV0BHAd8jVE3z8XAA5vr+Ft08Lf+8pOBT1fVFyddz0y0j/VnAwdPuJTp7Ae8ovWbfw44IMmnJlvShrXWHlW1GvgSo37Tuep64PqxT3wnMXojmMt+G/h2Vd0y6UI24CXAD6tqTVXdD3wReOGEa9qgqjqhqn69ql4M3AF8b3Mde4sN/vaF6QnAFVX1gUnXsyFJFiXZuU1vDxwEXDnRoqZRVX9aVUuqaimjj/dnVdWcbTklWdi+3Kd1mbyU0cfoOamqbgauS/L0tuhAYM5dkDDF65nD3TzNj4DnJ9mhZcOBjL73m7OSPKH9fSKj/v3PbK5jz9nROTeD/YDfAS5pfecA766q0ydX0rQWAyvalRFbASdW1Zy/THKe2A340uj/OguAz1TVVyZb0ka9Dfh060K5BnjThOuZVnszPQh4y6Rr2ZCqOi/JScC3gbXARcz9oRtOTvI44H7grZvzS/4t9nJOSdL6bbFdPZKk9TP4JakzBr8kdcbgl6TOGPyS1BmDX5I6Y/BLA2gDgUlzksEvNe0u39Pa7yJcmuS1SZ6b5Jtt2flJdmy/n/DxNsb/RUn+fdv/yCSnJjkLOLMd72Ntv4uSHDbhU5SALfvOXWlTHQzcWFWHwC+GSL4IeG1VXZBkJ+A+4BhGo2k/K8lejEb+fFo7xj7Ar1bV7Un+itGQFm9uQ3Kcn+T/VtW9s31i0jhb/NJDLgEOSnJckhcBTwRuqqoLAKrqrjY2+v7Ap9qyK4FrgXXBf0ZV3d6mXwosb0OGnANs144pTZQtfqmpqu8l2YfR2Od/AZz1KA4z3poP8B+r6qrNUZ+0udjil5okuwM/qapPAe8FngcsTvLctn7H9qXtN4A3tGVPY9SKX1+4fxV4WxsNkiTPGf4spI2zxS895FnAe5M8yGhExD9g1Gr/cBsu+z5G47p/BPj7JJcwGunxyKr6Wcv3cX/O6NfKvptkK+CHwJz+fWL1wdE5JakzdvVIUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktSZ/w8LnJ6i1ljlYQAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.hist(df['Ladder score'], range(2,10))\n",
+ "plt.xlabel(\"score\")\n",
+ "plt.ylabel(\"count\")\n",
+ "plt.title(\"Happiness Score\")\n",
+ "plt.ylim(0, 50) # y 범위 설정 (start, end)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Assignment 2\n",
+ "행복 지수를 y축으로, GDP를 x축으로 하여, scatter 한 값을 한 번 입력 해 보세요."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 80,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.scatter(df[\"Logged GDP per capita\"], df[\"Ladder score\"])\n",
+ "plt.xlabel(\"GDP\")\n",
+ "plt.ylabel(\"score\")\n",
+ "plt.title(\"Happiness Score per GDP\")\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Assignment 3\n",
+ "행복지수 상위 10개, 하위 10개를 선택 후, 각각의 Social support, Logged GDP per capita, Freedom to make life choices 의 평균을 구해서 꺾은 선 그래프로 나타내세요."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 81,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "best_happy_df = df[:10]\n",
+ "worst_happy_df = df[-10:]\n",
+ "\n",
+ "IND = [\"Social support\" , \"Logged GDP per capita\" ,\"Freedom to make life choices\" ]\n",
+ "x = ['Social', 'GDP Attribute', 'Freedom']\n",
+ "y1 = [best_happy_df[IND[i]].mean() for i in range(len(IND))]\n",
+ "y2 = [worst_happy_df[IND[i]].mean() for i in range(len(IND))]\n",
+ "#Scaling for visualizing\n",
+ "y1[0] *= 10\n",
+ "y2[0] *= 10\n",
+ "y1[2] *= 10\n",
+ "y2[2] *= 10\n",
+ "\n",
+ "\n",
+ "x_axis = np.arange(len(x))\n",
+ "plt.xticks(x_axis, x)\n",
+ "\n",
+ "plt.title(\"Happy Country and Unhappy Country\")\n",
+ "plt.ylabel(\"Score\")\n",
+ "\n",
+ "plt.bar(x_axis - 0.2, y1, width=0.3, color='green', align='center', label='Happy')\n",
+ "plt.bar(x_axis + 0.2, y2, width=0.3, color='blue', align='center', label='UnHappy')\n",
+ "plt.legend(loc=1)\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 82,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.title(\"Happy Country and Unhappy Country\")\n",
+ "plt.ylabel(\"Score\")\n",
+ "plt.plot(x, y1,'g-', label='Happy')\n",
+ "plt.plot(x, y2,'b-', label='UnHappy')\n",
+ "plt.legend(loc=1)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/assignments/FacerAin/04~08-YongwooSong.ipynb b/assignments/FacerAin/04~08-YongwooSong.ipynb
new file mode 100644
index 0000000..a0b40e3
--- /dev/null
+++ b/assignments/FacerAin/04~08-YongwooSong.ipynb
@@ -0,0 +1,1325 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 5,
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "colab": {
+ "name": "04~08-YongwooSong.ipynb",
+ "provenance": []
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Mg2AQMlk0RyQ"
+ },
+ "source": [
+ "## Module Import"
+ ],
+ "id": "Mg2AQMlk0RyQ"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "DmFWjQsI0RyS"
+ },
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import sklearn"
+ ],
+ "id": "DmFWjQsI0RyS",
+ "execution_count": 1,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "RDJeKskh0RyS"
+ },
+ "source": [
+ "## Assignment 1.\n",
+ "우리는 붓꽃의 **꽃받침의 길이, 꽃받침의 너비, 꽃잎의 길이, 꽃잎의 너비**를 통해서, **꽃의 종류**를 구분 해 볼 것입니다. **Input**으로 주어 지는 데이터는 다음과 같습니다.\n",
+ "\n",
+ "- Sepal Length: 꽃받침의 길이 정보이다.\n",
+ "- Sepal Width: 꽃받침의 너비 정보이다.\n",
+ "- Petal Length: 꽃잎의 길이 정보이다.\n",
+ "- Petal Width: 꽃잎의 너비 정보이다.\n",
+ "- Species: 꽃의 종류 정보이다. **setosa / versicolor / virginica** 의 3종류로 구분된다."
+ ],
+ "id": "RDJeKskh0RyS"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "HpOh_MJn0RyT",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "83a11b30-1b95-49e1-a99d-f6a70b3613e2"
+ },
+ "source": [
+ "from sklearn.datasets import load_iris\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "data = load_iris()\n",
+ "X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.33, random_state=42, shuffle=True)\n",
+ "\n",
+ "print(\"X_train의 shape:\", X_train.shape)\n",
+ "print(\"X_test의 shape:\", X_test.shape)\n",
+ "print(\"y_train의 shape:\", y_train.shape)\n",
+ "print(\"y_test의 shape:\", y_test.shape)"
+ ],
+ "id": "HpOh_MJn0RyT",
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "X_train의 shape: (100, 4)\n",
+ "X_test의 shape: (50, 4)\n",
+ "y_train의 shape: (100,)\n",
+ "y_test의 shape: (50,)\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "B2QttgPH0RyU"
+ },
+ "source": [
+ "### 1-1. Data Normalization\n",
+ "첫 번째로, 데이터를 정규화 하는 것이 중요 할 것 같습니다. 데이터를 정규화 해 보세요.\n",
+ "\n",
+ "(Min - Max 정규화를 이용하면 될 것 같죠? hint: ndarray.min(), ndarray.max())"
+ ],
+ "id": "B2QttgPH0RyU"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "7hBZ4dZa0RyU",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "b79447f2-db2e-4af5-ab6a-0ca94901a800"
+ },
+ "source": [
+ "X_train = (X_train - X_train.min()) / (X_train.max() - X_train.min())\n",
+ "X_test = (X_test - X_test.min()) / (X_test.max() - X_test.min())\n",
+ "print(X_train[:10])"
+ ],
+ "id": "7hBZ4dZa0RyU",
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[[0.73684211 0.36842105 0.53947368 0.15789474]\n",
+ " [0.98684211 0.38157895 0.85526316 0.26315789]\n",
+ " [0.72368421 0.38157895 0.57894737 0.18421053]\n",
+ " [0.65789474 0.44736842 0.17105263 0.01315789]\n",
+ " [1. 0.35526316 0.86842105 0.25 ]\n",
+ " [0.75 0.34210526 0.52631579 0.11842105]\n",
+ " [0.67105263 0.43421053 0.17105263 0.01315789]\n",
+ " [0.64473684 0.44736842 0.15789474 0.02631579]\n",
+ " [0.65789474 0.48684211 0.23684211 0.03947368]\n",
+ " [0.64473684 0.25 0.44736842 0.11842105]]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "452C6uGm0RyU"
+ },
+ "source": [
+ "## 1-2. Data Training\n",
+ "그 다음으로는 이제 데이터를 학습 시킬 시간입니다! SVM 모듈을 import 한 후, 학습을 시켜 보도록 하겠습니다."
+ ],
+ "id": "452C6uGm0RyU"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "GBn3Lvqp0RyU",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "561223a9-5e24-4e83-c32a-97fd55624336"
+ },
+ "source": [
+ "from sklearn.svm import SVC\n",
+ "\n",
+ "svm = SVC(C=2)\n",
+ "svm.fit(X_train, y_train)\n",
+ "\n",
+ "accuracy = (sum(svm.predict(X_test) == y_test) / 50) * 100\n",
+ "print(f'정확도 (accuracy): {accuracy}%')"
+ ],
+ "id": "GBn3Lvqp0RyU",
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "정확도 (accuracy): 100.0%\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "-EYN4w6a0RyV"
+ },
+ "source": [
+ "## Assignment 2.\n",
+ "다음은 **MNIST 데이터**에 대해 분류를 해보는 연습을 해 보겠습니다. **MNIST**는 손글씨 데이터로, **Input Data**는 [28 x 28]의 데이터로 이루어져 있습니다. 일단, 우리가 이를 학습 시키기 전에 한번 데이터를 확인 해 볼까요?\n",
+ "\n",
+ "이 예제는 DNN을 이용하기 때문에, **Pytorch**로 진행 하겠습니다. 실습은 **Hyperparameter**만 고치면 됩니다.\n",
+ "\n",
+ "**학습률 95%에 도전 해 보세요!**"
+ ],
+ "id": "-EYN4w6a0RyV"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "pUJEbVRP0RyV"
+ },
+ "source": [
+ "import time\n",
+ "import random\n",
+ "import torch\n",
+ "import torch.nn as nn\n",
+ "from torchvision.datasets import MNIST\n",
+ "from torchvision import transforms\n",
+ "from torch.utils.data import DataLoader\n",
+ "import torch.nn.functional as F"
+ ],
+ "id": "pUJEbVRP0RyV",
+ "execution_count": 5,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "tmskaYg20RyV",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "2fec68cd-3d56-4c56-e87a-5f1eda6df9e1"
+ },
+ "source": [
+ "# 이 부분은 절대 변경하지 마세요.\n",
+ "\n",
+ "RANDOM_SEED = 123\n",
+ "DEVICE = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')\n",
+ "\n",
+ "random.seed(RANDOM_SEED)\n",
+ "torch.manual_seed(RANDOM_SEED)"
+ ],
+ "id": "tmskaYg20RyV",
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 6
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "vgRaa6Uv0RyV"
+ },
+ "source": [
+ "## 2-0. Data Load\n",
+ "데이터를 불러와 보겠습니다. `transforms.Compose`를 이용하여, 데이터를 pytorch에서 사용하는 **Tensor**형으로 바꾸고, 이를 **Gaussian Distribution**으로 정규화합니다."
+ ],
+ "id": "vgRaa6Uv0RyV"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "qqCu1xMm0RyW"
+ },
+ "source": [
+ "# 수정 가능한 셀입니다.\n",
+ "BATCH_SIZE = 64 # 60000을 사용하면, Full-Batch 학습을 진행 합니다."
+ ],
+ "id": "qqCu1xMm0RyW",
+ "execution_count": 24,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "8Ke2IZBp0RyW"
+ },
+ "source": [
+ "# Don't Touch!\n",
+ "custom_train_transform = transforms.Compose([ \n",
+ " transforms.ToTensor(),\n",
+ " transforms.Normalize(mean=(0.5,), std=(0.5,))\n",
+ "])\n",
+ "\n",
+ "custom_test_transform = transforms.Compose([\n",
+ " transforms.ToTensor(),\n",
+ " transforms.Normalize(mean=(0.5,), std=(0.5,))\n",
+ "])"
+ ],
+ "id": "8Ke2IZBp0RyW",
+ "execution_count": 25,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "e4-oRbf50RyW"
+ },
+ "source": [
+ "`MNIST`를 이용하여 **MNIST** 데이터를 불러 오고, 이를 transform 해 줍니다. 또한, `DataLoader`를 이용하여, 셔플을 해준 후, 미니 배치를 생성 합니다."
+ ],
+ "id": "e4-oRbf50RyW"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "A8nqOI1g0RyW"
+ },
+ "source": [
+ "train_dataset = MNIST(\".\", train=True, download=True, transform=custom_train_transform)\n",
+ "\n",
+ "train_loader = DataLoader(dataset=train_dataset,\n",
+ " batch_size=BATCH_SIZE,\n",
+ " shuffle=True,\n",
+ " drop_last=True,\n",
+ " num_workers=2)\n",
+ "\n",
+ "\n",
+ "test_dataset = MNIST(\".\", train=False, download=True, transform=custom_test_transform)\n",
+ "\n",
+ "test_loader = DataLoader(dataset=test_dataset,\n",
+ " batch_size=BATCH_SIZE,\n",
+ " shuffle=False,\n",
+ " num_workers=2)"
+ ],
+ "id": "A8nqOI1g0RyW",
+ "execution_count": 26,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "07nKManR0RyW"
+ },
+ "source": [
+ "데이터가 잘 들어 왔는지 확인 합니다."
+ ],
+ "id": "07nKManR0RyW"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "0u9TbYB_0RyX",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 335
+ },
+ "outputId": "e04b8719-6ca4-4e09-bf9b-1dbaf263b66f"
+ },
+ "source": [
+ "for batch_idx, (x, y) in enumerate(train_loader):\n",
+ " print(' | Batch index:', batch_idx, end='')\n",
+ " print(' | Batch size:', y.size()[0])\n",
+ "\n",
+ " x = x.to(DEVICE)\n",
+ " y = y.to(DEVICE)\n",
+ "\n",
+ " x_numpy = x.numpy()\n",
+ " y_numpy = y.numpy()\n",
+ " print('input batch의 모양:', x_numpy.shape)\n",
+ " plt.imshow(x_numpy[0].reshape(28, 28))\n",
+ " plt.title(f'Label {y_numpy[0]}')\n",
+ " plt.show()\n",
+ "\n",
+ " print('break minibatch for-loop')\n",
+ " break"
+ ],
+ "id": "0u9TbYB_0RyX",
+ "execution_count": 27,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ " | Batch index: 0 | Batch size: 64\n",
+ "input batch의 모양: (64, 1, 28, 28)\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": [],
+ "needs_background": "light"
+ }
+ },
+ {
+ "output_type": "stream",
+ "text": [
+ "break minibatch for-loop\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "_IvFSDli0RyX"
+ },
+ "source": [
+ "## 2-1. Deep Neural Network\n",
+ "아래 셀은 Deep Neural Network를 정의 합니다."
+ ],
+ "id": "_IvFSDli0RyX"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "FegAwOXD0RyX"
+ },
+ "source": [
+ "# 변경 가능 합니다.\n",
+ "class DNN(nn.Module):\n",
+ " def __init__(self, num_features, num_hidden_1, num_hidden_2, num_hidden_3, num_hidden_4, num_hidden_5, num_hidden_6, num_classes):\n",
+ " \"\"\"\n",
+ " num_features: input feature 갯수\n",
+ " num_hidden_1: 첫 번째 레이어의 노드 갯수\n",
+ " num_hidden_2: 두 번째 레이어의 노드 갯수\n",
+ " num_hidden_3: 세 번째 레이어의 노드 갯수\n",
+ " num_classes: 분류하고자 하는 class 갯수\n",
+ " \"\"\"\n",
+ " super(DNN, self).__init__()\n",
+ " \n",
+ " self.num_classes = num_classes\n",
+ " \n",
+ " # 수정 가능!: 레이어를 쌓는 법을 아신다면, 여기서 레이어를 쌓으셔도, 혹은 지우셔도 무방 합니다. (단, nn.Linear만)\n",
+ " self.linear_1 = nn.Linear(num_features, num_hidden_1)\n",
+ " self.linear_2 = nn.Linear(num_hidden_1, num_hidden_2)\n",
+ " self.linear_3 = nn.Linear(num_hidden_2, num_hidden_3)\n",
+ " self.linear_4 = nn.Linear(num_hidden_3, num_hidden_4)\n",
+ " self.linear_5 = nn.Linear(num_hidden_4, num_hidden_5)\n",
+ " self.linear_6 = nn.Linear(num_hidden_5, num_hidden_6)\n",
+ " self.linear_out = nn.Linear(num_hidden_6, num_classes)\n",
+ " \n",
+ " def forward(self, x):\n",
+ " out = self.linear_1(x)\n",
+ " out = torch.relu(out)\n",
+ " out = self.linear_2(out)\n",
+ " out = torch.relu(out)\n",
+ " out = self.linear_3(out)\n",
+ " out = torch.relu(out)\n",
+ " out = self.linear_4(out)\n",
+ " out = torch.relu(out)\n",
+ " out = self.linear_5(out)\n",
+ " out = torch.relu(out)\n",
+ " out = self.linear_6(out)\n",
+ " out = torch.relu(out)\n",
+ " logits = self.linear_out(out)\n",
+ " probas = torch.sigmoid(logits)\n",
+ " return logits, probas\n",
+ "\n",
+ "# 수정 가능!\n",
+ "model = DNN(num_features=28*28, #784\n",
+ " num_hidden_1=512,\n",
+ " num_hidden_2=256,\n",
+ " num_hidden_3=128,\n",
+ " num_hidden_4=64,\n",
+ " num_hidden_5=32,\n",
+ " num_hidden_6=16,\n",
+ " num_classes=10)\n",
+ "\n",
+ "model = model.to(DEVICE)"
+ ],
+ "id": "FegAwOXD0RyX",
+ "execution_count": 28,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "32-FIqLL0RyY"
+ },
+ "source": [
+ "## 2-2. Training\n",
+ "여기서는 **Optimizer**와, **Epoch**를 설정 합니다. "
+ ],
+ "id": "32-FIqLL0RyY"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "-VZvj_zX0RyY"
+ },
+ "source": [
+ "# 수정 가능!\n",
+ "LEARNING_LATE = 0.01 # 흠.. 이 친구는 학습률로는 너무 큰 것 같네요..\n",
+ "NUM_EPOCHS = 20"
+ ],
+ "id": "-VZvj_zX0RyY",
+ "execution_count": 29,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "LC4RsJkp0RyY"
+ },
+ "source": [
+ "optimizer = torch.optim.SGD(model.parameters(), lr=LEARNING_LATE)"
+ ],
+ "id": "LC4RsJkp0RyY",
+ "execution_count": 30,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "mwsrd3SV0RyY",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "46603c05-7583-4b82-e12b-5ca0a80ed5fb"
+ },
+ "source": [
+ "def compute_accuracy_and_loss(model, data_loader, device):\n",
+ " correct_pred, num_examples = 0, 0\n",
+ " cross_entropy = 0.\n",
+ " for i, (features, targets) in enumerate(data_loader):\n",
+ " \n",
+ " features = features.view(-1, 28*28).to(device)\n",
+ " targets = targets.to(device)\n",
+ "\n",
+ " logits, probas = model(features)\n",
+ " cross_entropy += F.cross_entropy(logits, targets).item()\n",
+ " _, predicted_labels = torch.max(probas, 1)\n",
+ " num_examples += targets.size(0)\n",
+ " correct_pred += (predicted_labels == targets).sum()\n",
+ " return correct_pred.float()/num_examples * 100, cross_entropy/num_examples\n",
+ " \n",
+ "\n",
+ "start_time = time.time()\n",
+ "train_acc_lst, test_acc_lst = [], []\n",
+ "train_loss_lst, test_loss_lst = [], []\n",
+ "\n",
+ "for epoch in range(NUM_EPOCHS):\n",
+ " \n",
+ " model.train()\n",
+ " \n",
+ " for batch_idx, (features, targets) in enumerate(train_loader):\n",
+ " \n",
+ " ### PREPARE MINIBATCH\n",
+ " features = features.view(-1, 28*28).to(DEVICE)\n",
+ " targets = targets.to(DEVICE)\n",
+ " \n",
+ " ### FORWARD AND BACK PROP\n",
+ " logits, probas = model(features) # 모델 계산\n",
+ " cost = F.cross_entropy(logits, targets) # 크로스 엔트로피 계산\n",
+ " optimizer.zero_grad() # 기울기 초기화\n",
+ " \n",
+ " cost.backward() # 역전파\n",
+ " \n",
+ " ### UPDATE MODEL PARAMETERS\n",
+ " optimizer.step() # step 적용\n",
+ " \n",
+ " ### LOGGING\n",
+ " if not batch_idx % 40:\n",
+ " print (f'Epoch: {epoch+1:03d}/{NUM_EPOCHS:03d} | '\n",
+ " f'Batch {batch_idx:03d}/{len(train_loader):03d} |' \n",
+ " f' Cost: {cost:.4f}')\n",
+ "\n",
+ " # 매 Epoch마다 evaluation을 진행합니다. \n",
+ " # Epoch마다 Loss를 기록하여 학습과정을 살펴보고 Underfitting, Overfitting 여부를 확인합니다.\n",
+ " model.eval()\n",
+ " with torch.set_grad_enabled(False): # Gradient 계산이 안되도록\n",
+ " train_acc, train_loss = compute_accuracy_and_loss(model, train_loader, device=DEVICE) # train acc, loss 계산\n",
+ " test_acc, test_loss = compute_accuracy_and_loss(model, test_loader, device=DEVICE) # test acc, loss 계산\n",
+ " \n",
+ " # list에 train, test의 acc, loss 추가\n",
+ " train_acc_lst.append(train_acc)\n",
+ " test_acc_lst.append(test_acc)\n",
+ " train_loss_lst.append(train_loss)\n",
+ " test_loss_lst.append(test_loss)\n",
+ " \n",
+ " # 로깅\n",
+ " print(f'Epoch: {epoch+1:03d}/{NUM_EPOCHS:03d} Train Acc.: {train_acc:.2f}%'\n",
+ " f' | Test Acc.: {test_acc:.2f}%')\n",
+ " \n",
+ " # 1 epoch 학습 소요시간\n",
+ " elapsed = (time.time() - start_time)/60\n",
+ " print(f'Time elapsed: {elapsed:.2f} min')\n",
+ "\n",
+ "# 총 학습 소요시간\n",
+ "elapsed = (time.time() - start_time)/60\n",
+ "print(f'Total Training Time: {elapsed:.2f} min')"
+ ],
+ "id": "mwsrd3SV0RyY",
+ "execution_count": 31,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Epoch: 001/020 | Batch 000/937 | Cost: 2.3012\n",
+ "Epoch: 001/020 | Batch 040/937 | Cost: 2.3005\n",
+ "Epoch: 001/020 | Batch 080/937 | Cost: 2.3073\n",
+ "Epoch: 001/020 | Batch 120/937 | Cost: 2.3122\n",
+ "Epoch: 001/020 | Batch 160/937 | Cost: 2.3271\n",
+ "Epoch: 001/020 | Batch 200/937 | Cost: 2.3239\n",
+ "Epoch: 001/020 | Batch 240/937 | Cost: 2.2925\n",
+ "Epoch: 001/020 | Batch 280/937 | Cost: 2.2823\n",
+ "Epoch: 001/020 | Batch 320/937 | Cost: 2.3133\n",
+ "Epoch: 001/020 | Batch 360/937 | Cost: 2.2984\n",
+ "Epoch: 001/020 | Batch 400/937 | Cost: 2.3063\n",
+ "Epoch: 001/020 | Batch 440/937 | Cost: 2.3010\n",
+ "Epoch: 001/020 | Batch 480/937 | Cost: 2.2876\n",
+ "Epoch: 001/020 | Batch 520/937 | Cost: 2.3022\n",
+ "Epoch: 001/020 | Batch 560/937 | Cost: 2.2981\n",
+ "Epoch: 001/020 | Batch 600/937 | Cost: 2.2998\n",
+ "Epoch: 001/020 | Batch 640/937 | Cost: 2.3031\n",
+ "Epoch: 001/020 | Batch 680/937 | Cost: 2.3096\n",
+ "Epoch: 001/020 | Batch 720/937 | Cost: 2.2958\n",
+ "Epoch: 001/020 | Batch 760/937 | Cost: 2.2925\n",
+ "Epoch: 001/020 | Batch 800/937 | Cost: 2.3041\n",
+ "Epoch: 001/020 | Batch 840/937 | Cost: 2.2886\n",
+ "Epoch: 001/020 | Batch 880/937 | Cost: 2.2935\n",
+ "Epoch: 001/020 | Batch 920/937 | Cost: 2.2992\n",
+ "Epoch: 001/020 Train Acc.: 11.23% | Test Acc.: 11.35%\n",
+ "Time elapsed: 0.43 min\n",
+ "Epoch: 002/020 | Batch 000/937 | Cost: 2.2977\n",
+ "Epoch: 002/020 | Batch 040/937 | Cost: 2.3049\n",
+ "Epoch: 002/020 | Batch 080/937 | Cost: 2.2984\n",
+ "Epoch: 002/020 | Batch 120/937 | Cost: 2.3119\n",
+ "Epoch: 002/020 | Batch 160/937 | Cost: 2.2959\n",
+ "Epoch: 002/020 | Batch 200/937 | Cost: 2.2904\n",
+ "Epoch: 002/020 | Batch 240/937 | Cost: 2.2993\n",
+ "Epoch: 002/020 | Batch 280/937 | Cost: 2.2952\n",
+ "Epoch: 002/020 | Batch 320/937 | Cost: 2.2902\n",
+ "Epoch: 002/020 | Batch 360/937 | Cost: 2.2818\n",
+ "Epoch: 002/020 | Batch 400/937 | Cost: 2.2918\n",
+ "Epoch: 002/020 | Batch 440/937 | Cost: 2.2889\n",
+ "Epoch: 002/020 | Batch 480/937 | Cost: 2.2884\n",
+ "Epoch: 002/020 | Batch 520/937 | Cost: 2.2842\n",
+ "Epoch: 002/020 | Batch 560/937 | Cost: 2.2853\n",
+ "Epoch: 002/020 | Batch 600/937 | Cost: 2.2857\n",
+ "Epoch: 002/020 | Batch 640/937 | Cost: 2.2980\n",
+ "Epoch: 002/020 | Batch 680/937 | Cost: 2.2868\n",
+ "Epoch: 002/020 | Batch 720/937 | Cost: 2.2801\n",
+ "Epoch: 002/020 | Batch 760/937 | Cost: 2.2873\n",
+ "Epoch: 002/020 | Batch 800/937 | Cost: 2.2865\n",
+ "Epoch: 002/020 | Batch 840/937 | Cost: 2.2573\n",
+ "Epoch: 002/020 | Batch 880/937 | Cost: 2.2615\n",
+ "Epoch: 002/020 | Batch 920/937 | Cost: 2.2482\n",
+ "Epoch: 002/020 Train Acc.: 20.90% | Test Acc.: 21.09%\n",
+ "Time elapsed: 0.87 min\n",
+ "Epoch: 003/020 | Batch 000/937 | Cost: 2.2715\n",
+ "Epoch: 003/020 | Batch 040/937 | Cost: 2.2294\n",
+ "Epoch: 003/020 | Batch 080/937 | Cost: 2.2156\n",
+ "Epoch: 003/020 | Batch 120/937 | Cost: 2.2560\n",
+ "Epoch: 003/020 | Batch 160/937 | Cost: 2.2122\n",
+ "Epoch: 003/020 | Batch 200/937 | Cost: 2.1390\n",
+ "Epoch: 003/020 | Batch 240/937 | Cost: 2.1450\n",
+ "Epoch: 003/020 | Batch 280/937 | Cost: 2.0993\n",
+ "Epoch: 003/020 | Batch 320/937 | Cost: 2.0594\n",
+ "Epoch: 003/020 | Batch 360/937 | Cost: 2.0168\n",
+ "Epoch: 003/020 | Batch 400/937 | Cost: 2.0213\n",
+ "Epoch: 003/020 | Batch 440/937 | Cost: 1.8355\n",
+ "Epoch: 003/020 | Batch 480/937 | Cost: 1.8606\n",
+ "Epoch: 003/020 | Batch 520/937 | Cost: 1.7398\n",
+ "Epoch: 003/020 | Batch 560/937 | Cost: 1.7211\n",
+ "Epoch: 003/020 | Batch 600/937 | Cost: 1.5722\n",
+ "Epoch: 003/020 | Batch 640/937 | Cost: 1.5618\n",
+ "Epoch: 003/020 | Batch 680/937 | Cost: 1.4098\n",
+ "Epoch: 003/020 | Batch 720/937 | Cost: 1.3246\n",
+ "Epoch: 003/020 | Batch 760/937 | Cost: 1.6306\n",
+ "Epoch: 003/020 | Batch 800/937 | Cost: 1.5575\n",
+ "Epoch: 003/020 | Batch 840/937 | Cost: 1.5258\n",
+ "Epoch: 003/020 | Batch 880/937 | Cost: 1.3285\n",
+ "Epoch: 003/020 | Batch 920/937 | Cost: 2.2086\n",
+ "Epoch: 003/020 Train Acc.: 54.42% | Test Acc.: 54.22%\n",
+ "Time elapsed: 1.29 min\n",
+ "Epoch: 004/020 | Batch 000/937 | Cost: 1.1841\n",
+ "Epoch: 004/020 | Batch 040/937 | Cost: 1.2035\n",
+ "Epoch: 004/020 | Batch 080/937 | Cost: 1.3207\n",
+ "Epoch: 004/020 | Batch 120/937 | Cost: 1.3513\n",
+ "Epoch: 004/020 | Batch 160/937 | Cost: 0.9850\n",
+ "Epoch: 004/020 | Batch 200/937 | Cost: 1.0011\n",
+ "Epoch: 004/020 | Batch 240/937 | Cost: 1.3029\n",
+ "Epoch: 004/020 | Batch 280/937 | Cost: 0.9808\n",
+ "Epoch: 004/020 | Batch 320/937 | Cost: 1.1778\n",
+ "Epoch: 004/020 | Batch 360/937 | Cost: 1.1480\n",
+ "Epoch: 004/020 | Batch 400/937 | Cost: 0.9096\n",
+ "Epoch: 004/020 | Batch 440/937 | Cost: 1.0293\n",
+ "Epoch: 004/020 | Batch 480/937 | Cost: 0.9862\n",
+ "Epoch: 004/020 | Batch 520/937 | Cost: 0.7859\n",
+ "Epoch: 004/020 | Batch 560/937 | Cost: 1.2247\n",
+ "Epoch: 004/020 | Batch 600/937 | Cost: 1.0337\n",
+ "Epoch: 004/020 | Batch 640/937 | Cost: 0.8213\n",
+ "Epoch: 004/020 | Batch 680/937 | Cost: 0.8168\n",
+ "Epoch: 004/020 | Batch 720/937 | Cost: 0.9831\n",
+ "Epoch: 004/020 | Batch 760/937 | Cost: 1.0742\n",
+ "Epoch: 004/020 | Batch 800/937 | Cost: 0.9300\n",
+ "Epoch: 004/020 | Batch 840/937 | Cost: 0.7089\n",
+ "Epoch: 004/020 | Batch 880/937 | Cost: 1.0563\n",
+ "Epoch: 004/020 | Batch 920/937 | Cost: 0.7265\n",
+ "Epoch: 004/020 Train Acc.: 67.12% | Test Acc.: 67.47%\n",
+ "Time elapsed: 1.73 min\n",
+ "Epoch: 005/020 | Batch 000/937 | Cost: 1.0147\n",
+ "Epoch: 005/020 | Batch 040/937 | Cost: 0.7112\n",
+ "Epoch: 005/020 | Batch 080/937 | Cost: 0.8579\n",
+ "Epoch: 005/020 | Batch 120/937 | Cost: 0.6222\n",
+ "Epoch: 005/020 | Batch 160/937 | Cost: 0.6596\n",
+ "Epoch: 005/020 | Batch 200/937 | Cost: 0.6872\n",
+ "Epoch: 005/020 | Batch 240/937 | Cost: 0.8407\n",
+ "Epoch: 005/020 | Batch 280/937 | Cost: 0.6526\n",
+ "Epoch: 005/020 | Batch 320/937 | Cost: 0.4940\n",
+ "Epoch: 005/020 | Batch 360/937 | Cost: 0.7188\n",
+ "Epoch: 005/020 | Batch 400/937 | Cost: 0.5395\n",
+ "Epoch: 005/020 | Batch 440/937 | Cost: 0.3674\n",
+ "Epoch: 005/020 | Batch 480/937 | Cost: 0.3405\n",
+ "Epoch: 005/020 | Batch 520/937 | Cost: 0.3517\n",
+ "Epoch: 005/020 | Batch 560/937 | Cost: 0.4951\n",
+ "Epoch: 005/020 | Batch 600/937 | Cost: 0.6576\n",
+ "Epoch: 005/020 | Batch 640/937 | Cost: 0.7479\n",
+ "Epoch: 005/020 | Batch 680/937 | Cost: 0.3695\n",
+ "Epoch: 005/020 | Batch 720/937 | Cost: 0.6057\n",
+ "Epoch: 005/020 | Batch 760/937 | Cost: 0.3740\n",
+ "Epoch: 005/020 | Batch 800/937 | Cost: 0.4241\n",
+ "Epoch: 005/020 | Batch 840/937 | Cost: 0.5830\n",
+ "Epoch: 005/020 | Batch 880/937 | Cost: 0.5765\n",
+ "Epoch: 005/020 | Batch 920/937 | Cost: 0.3985\n",
+ "Epoch: 005/020 Train Acc.: 88.10% | Test Acc.: 87.90%\n",
+ "Time elapsed: 2.16 min\n",
+ "Epoch: 006/020 | Batch 000/937 | Cost: 0.5638\n",
+ "Epoch: 006/020 | Batch 040/937 | Cost: 0.7022\n",
+ "Epoch: 006/020 | Batch 080/937 | Cost: 0.4420\n",
+ "Epoch: 006/020 | Batch 120/937 | Cost: 0.3430\n",
+ "Epoch: 006/020 | Batch 160/937 | Cost: 0.4842\n",
+ "Epoch: 006/020 | Batch 200/937 | Cost: 0.5151\n",
+ "Epoch: 006/020 | Batch 240/937 | Cost: 0.5414\n",
+ "Epoch: 006/020 | Batch 280/937 | Cost: 0.5612\n",
+ "Epoch: 006/020 | Batch 320/937 | Cost: 0.5559\n",
+ "Epoch: 006/020 | Batch 360/937 | Cost: 0.4830\n",
+ "Epoch: 006/020 | Batch 400/937 | Cost: 0.3299\n",
+ "Epoch: 006/020 | Batch 440/937 | Cost: 0.2323\n",
+ "Epoch: 006/020 | Batch 480/937 | Cost: 0.2040\n",
+ "Epoch: 006/020 | Batch 520/937 | Cost: 0.4372\n",
+ "Epoch: 006/020 | Batch 560/937 | Cost: 0.1655\n",
+ "Epoch: 006/020 | Batch 600/937 | Cost: 0.3542\n",
+ "Epoch: 006/020 | Batch 640/937 | Cost: 0.4034\n",
+ "Epoch: 006/020 | Batch 680/937 | Cost: 0.3368\n",
+ "Epoch: 006/020 | Batch 720/937 | Cost: 0.5149\n",
+ "Epoch: 006/020 | Batch 760/937 | Cost: 0.2821\n",
+ "Epoch: 006/020 | Batch 800/937 | Cost: 0.2961\n",
+ "Epoch: 006/020 | Batch 840/937 | Cost: 0.2889\n",
+ "Epoch: 006/020 | Batch 880/937 | Cost: 0.4820\n",
+ "Epoch: 006/020 | Batch 920/937 | Cost: 0.4762\n",
+ "Epoch: 006/020 Train Acc.: 92.00% | Test Acc.: 91.55%\n",
+ "Time elapsed: 2.60 min\n",
+ "Epoch: 007/020 | Batch 000/937 | Cost: 0.2578\n",
+ "Epoch: 007/020 | Batch 040/937 | Cost: 0.4315\n",
+ "Epoch: 007/020 | Batch 080/937 | Cost: 0.1823\n",
+ "Epoch: 007/020 | Batch 120/937 | Cost: 0.1640\n",
+ "Epoch: 007/020 | Batch 160/937 | Cost: 0.1813\n",
+ "Epoch: 007/020 | Batch 200/937 | Cost: 0.1806\n",
+ "Epoch: 007/020 | Batch 240/937 | Cost: 0.3556\n",
+ "Epoch: 007/020 | Batch 280/937 | Cost: 0.1148\n",
+ "Epoch: 007/020 | Batch 320/937 | Cost: 0.1593\n",
+ "Epoch: 007/020 | Batch 360/937 | Cost: 0.2746\n",
+ "Epoch: 007/020 | Batch 400/937 | Cost: 0.5478\n",
+ "Epoch: 007/020 | Batch 440/937 | Cost: 0.2493\n",
+ "Epoch: 007/020 | Batch 480/937 | Cost: 0.3318\n",
+ "Epoch: 007/020 | Batch 520/937 | Cost: 0.2553\n",
+ "Epoch: 007/020 | Batch 560/937 | Cost: 0.1771\n",
+ "Epoch: 007/020 | Batch 600/937 | Cost: 0.2877\n",
+ "Epoch: 007/020 | Batch 640/937 | Cost: 0.2490\n",
+ "Epoch: 007/020 | Batch 680/937 | Cost: 0.4531\n",
+ "Epoch: 007/020 | Batch 720/937 | Cost: 0.2225\n",
+ "Epoch: 007/020 | Batch 760/937 | Cost: 0.2489\n",
+ "Epoch: 007/020 | Batch 800/937 | Cost: 0.4087\n",
+ "Epoch: 007/020 | Batch 840/937 | Cost: 0.3234\n",
+ "Epoch: 007/020 | Batch 880/937 | Cost: 0.1445\n",
+ "Epoch: 007/020 | Batch 920/937 | Cost: 0.1421\n",
+ "Epoch: 007/020 Train Acc.: 93.96% | Test Acc.: 93.48%\n",
+ "Time elapsed: 3.03 min\n",
+ "Epoch: 008/020 | Batch 000/937 | Cost: 0.3549\n",
+ "Epoch: 008/020 | Batch 040/937 | Cost: 0.1031\n",
+ "Epoch: 008/020 | Batch 080/937 | Cost: 0.1758\n",
+ "Epoch: 008/020 | Batch 120/937 | Cost: 0.1400\n",
+ "Epoch: 008/020 | Batch 160/937 | Cost: 0.1813\n",
+ "Epoch: 008/020 | Batch 200/937 | Cost: 0.1809\n",
+ "Epoch: 008/020 | Batch 240/937 | Cost: 0.2539\n",
+ "Epoch: 008/020 | Batch 280/937 | Cost: 0.2136\n",
+ "Epoch: 008/020 | Batch 320/937 | Cost: 0.2260\n",
+ "Epoch: 008/020 | Batch 360/937 | Cost: 0.3757\n",
+ "Epoch: 008/020 | Batch 400/937 | Cost: 0.1228\n",
+ "Epoch: 008/020 | Batch 440/937 | Cost: 0.2938\n",
+ "Epoch: 008/020 | Batch 480/937 | Cost: 0.4992\n",
+ "Epoch: 008/020 | Batch 520/937 | Cost: 0.3056\n",
+ "Epoch: 008/020 | Batch 560/937 | Cost: 0.3212\n",
+ "Epoch: 008/020 | Batch 600/937 | Cost: 0.2707\n",
+ "Epoch: 008/020 | Batch 640/937 | Cost: 0.1113\n",
+ "Epoch: 008/020 | Batch 680/937 | Cost: 0.2023\n",
+ "Epoch: 008/020 | Batch 720/937 | Cost: 0.1617\n",
+ "Epoch: 008/020 | Batch 760/937 | Cost: 0.1719\n",
+ "Epoch: 008/020 | Batch 800/937 | Cost: 0.2084\n",
+ "Epoch: 008/020 | Batch 840/937 | Cost: 0.1476\n",
+ "Epoch: 008/020 | Batch 880/937 | Cost: 0.1321\n",
+ "Epoch: 008/020 | Batch 920/937 | Cost: 0.1562\n",
+ "Epoch: 008/020 Train Acc.: 94.87% | Test Acc.: 94.43%\n",
+ "Time elapsed: 3.47 min\n",
+ "Epoch: 009/020 | Batch 000/937 | Cost: 0.1231\n",
+ "Epoch: 009/020 | Batch 040/937 | Cost: 0.2433\n",
+ "Epoch: 009/020 | Batch 080/937 | Cost: 0.0852\n",
+ "Epoch: 009/020 | Batch 120/937 | Cost: 0.1873\n",
+ "Epoch: 009/020 | Batch 160/937 | Cost: 0.1123\n",
+ "Epoch: 009/020 | Batch 200/937 | Cost: 0.1657\n",
+ "Epoch: 009/020 | Batch 240/937 | Cost: 0.1034\n",
+ "Epoch: 009/020 | Batch 280/937 | Cost: 0.0921\n",
+ "Epoch: 009/020 | Batch 320/937 | Cost: 0.3472\n",
+ "Epoch: 009/020 | Batch 360/937 | Cost: 0.1432\n",
+ "Epoch: 009/020 | Batch 400/937 | Cost: 0.2078\n",
+ "Epoch: 009/020 | Batch 440/937 | Cost: 0.3860\n",
+ "Epoch: 009/020 | Batch 480/937 | Cost: 0.1206\n",
+ "Epoch: 009/020 | Batch 520/937 | Cost: 0.3270\n",
+ "Epoch: 009/020 | Batch 560/937 | Cost: 0.2375\n",
+ "Epoch: 009/020 | Batch 600/937 | Cost: 0.1796\n",
+ "Epoch: 009/020 | Batch 640/937 | Cost: 0.0934\n",
+ "Epoch: 009/020 | Batch 680/937 | Cost: 0.0770\n",
+ "Epoch: 009/020 | Batch 720/937 | Cost: 0.1732\n",
+ "Epoch: 009/020 | Batch 760/937 | Cost: 0.2545\n",
+ "Epoch: 009/020 | Batch 800/937 | Cost: 0.1963\n",
+ "Epoch: 009/020 | Batch 840/937 | Cost: 0.0865\n",
+ "Epoch: 009/020 | Batch 880/937 | Cost: 0.1539\n",
+ "Epoch: 009/020 | Batch 920/937 | Cost: 0.1869\n",
+ "Epoch: 009/020 Train Acc.: 94.35% | Test Acc.: 93.88%\n",
+ "Time elapsed: 3.90 min\n",
+ "Epoch: 010/020 | Batch 000/937 | Cost: 0.3590\n",
+ "Epoch: 010/020 | Batch 040/937 | Cost: 0.1529\n",
+ "Epoch: 010/020 | Batch 080/937 | Cost: 0.1383\n",
+ "Epoch: 010/020 | Batch 120/937 | Cost: 0.1237\n",
+ "Epoch: 010/020 | Batch 160/937 | Cost: 0.1837\n",
+ "Epoch: 010/020 | Batch 200/937 | Cost: 0.1683\n",
+ "Epoch: 010/020 | Batch 240/937 | Cost: 0.0845\n",
+ "Epoch: 010/020 | Batch 280/937 | Cost: 0.1453\n",
+ "Epoch: 010/020 | Batch 320/937 | Cost: 0.2665\n",
+ "Epoch: 010/020 | Batch 360/937 | Cost: 0.1664\n",
+ "Epoch: 010/020 | Batch 400/937 | Cost: 0.1516\n",
+ "Epoch: 010/020 | Batch 440/937 | Cost: 0.1237\n",
+ "Epoch: 010/020 | Batch 480/937 | Cost: 0.0793\n",
+ "Epoch: 010/020 | Batch 520/937 | Cost: 0.1785\n",
+ "Epoch: 010/020 | Batch 560/937 | Cost: 0.0770\n",
+ "Epoch: 010/020 | Batch 600/937 | Cost: 0.1104\n",
+ "Epoch: 010/020 | Batch 640/937 | Cost: 0.1387\n",
+ "Epoch: 010/020 | Batch 680/937 | Cost: 0.3228\n",
+ "Epoch: 010/020 | Batch 720/937 | Cost: 0.0711\n",
+ "Epoch: 010/020 | Batch 760/937 | Cost: 0.0645\n",
+ "Epoch: 010/020 | Batch 800/937 | Cost: 0.0912\n",
+ "Epoch: 010/020 | Batch 840/937 | Cost: 0.0730\n",
+ "Epoch: 010/020 | Batch 880/937 | Cost: 0.1896\n",
+ "Epoch: 010/020 | Batch 920/937 | Cost: 0.1323\n",
+ "Epoch: 010/020 Train Acc.: 95.76% | Test Acc.: 94.89%\n",
+ "Time elapsed: 4.34 min\n",
+ "Epoch: 011/020 | Batch 000/937 | Cost: 0.3141\n",
+ "Epoch: 011/020 | Batch 040/937 | Cost: 0.2399\n",
+ "Epoch: 011/020 | Batch 080/937 | Cost: 0.0969\n",
+ "Epoch: 011/020 | Batch 120/937 | Cost: 0.0378\n",
+ "Epoch: 011/020 | Batch 160/937 | Cost: 0.1284\n",
+ "Epoch: 011/020 | Batch 200/937 | Cost: 0.0599\n",
+ "Epoch: 011/020 | Batch 240/937 | Cost: 0.1038\n",
+ "Epoch: 011/020 | Batch 280/937 | Cost: 0.1736\n",
+ "Epoch: 011/020 | Batch 320/937 | Cost: 0.0980\n",
+ "Epoch: 011/020 | Batch 360/937 | Cost: 0.3053\n",
+ "Epoch: 011/020 | Batch 400/937 | Cost: 0.1455\n",
+ "Epoch: 011/020 | Batch 440/937 | Cost: 0.3743\n",
+ "Epoch: 011/020 | Batch 480/937 | Cost: 0.3741\n",
+ "Epoch: 011/020 | Batch 520/937 | Cost: 0.0461\n",
+ "Epoch: 011/020 | Batch 560/937 | Cost: 0.2599\n",
+ "Epoch: 011/020 | Batch 600/937 | Cost: 0.1628\n",
+ "Epoch: 011/020 | Batch 640/937 | Cost: 0.3181\n",
+ "Epoch: 011/020 | Batch 680/937 | Cost: 0.1171\n",
+ "Epoch: 011/020 | Batch 720/937 | Cost: 0.2842\n",
+ "Epoch: 011/020 | Batch 760/937 | Cost: 0.0703\n",
+ "Epoch: 011/020 | Batch 800/937 | Cost: 0.0969\n",
+ "Epoch: 011/020 | Batch 840/937 | Cost: 0.0353\n",
+ "Epoch: 011/020 | Batch 880/937 | Cost: 0.1061\n",
+ "Epoch: 011/020 | Batch 920/937 | Cost: 0.0692\n",
+ "Epoch: 011/020 Train Acc.: 97.07% | Test Acc.: 95.87%\n",
+ "Time elapsed: 4.78 min\n",
+ "Epoch: 012/020 | Batch 000/937 | Cost: 0.1496\n",
+ "Epoch: 012/020 | Batch 040/937 | Cost: 0.0741\n",
+ "Epoch: 012/020 | Batch 080/937 | Cost: 0.0524\n",
+ "Epoch: 012/020 | Batch 120/937 | Cost: 0.0694\n",
+ "Epoch: 012/020 | Batch 160/937 | Cost: 0.0904\n",
+ "Epoch: 012/020 | Batch 200/937 | Cost: 0.1062\n",
+ "Epoch: 012/020 | Batch 240/937 | Cost: 0.0866\n",
+ "Epoch: 012/020 | Batch 280/937 | Cost: 0.0812\n",
+ "Epoch: 012/020 | Batch 320/937 | Cost: 0.2009\n",
+ "Epoch: 012/020 | Batch 360/937 | Cost: 0.0972\n",
+ "Epoch: 012/020 | Batch 400/937 | Cost: 0.3654\n",
+ "Epoch: 012/020 | Batch 440/937 | Cost: 0.0789\n",
+ "Epoch: 012/020 | Batch 480/937 | Cost: 0.0727\n",
+ "Epoch: 012/020 | Batch 520/937 | Cost: 0.1924\n",
+ "Epoch: 012/020 | Batch 560/937 | Cost: 0.0490\n",
+ "Epoch: 012/020 | Batch 600/937 | Cost: 0.1828\n",
+ "Epoch: 012/020 | Batch 640/937 | Cost: 0.0780\n",
+ "Epoch: 012/020 | Batch 680/937 | Cost: 0.0249\n",
+ "Epoch: 012/020 | Batch 720/937 | Cost: 0.1490\n",
+ "Epoch: 012/020 | Batch 760/937 | Cost: 0.0711\n",
+ "Epoch: 012/020 | Batch 800/937 | Cost: 0.1214\n",
+ "Epoch: 012/020 | Batch 840/937 | Cost: 0.2558\n",
+ "Epoch: 012/020 | Batch 880/937 | Cost: 0.1298\n",
+ "Epoch: 012/020 | Batch 920/937 | Cost: 0.1253\n",
+ "Epoch: 012/020 Train Acc.: 96.96% | Test Acc.: 95.96%\n",
+ "Time elapsed: 5.21 min\n",
+ "Epoch: 013/020 | Batch 000/937 | Cost: 0.1789\n",
+ "Epoch: 013/020 | Batch 040/937 | Cost: 0.0726\n",
+ "Epoch: 013/020 | Batch 080/937 | Cost: 0.0366\n",
+ "Epoch: 013/020 | Batch 120/937 | Cost: 0.0714\n",
+ "Epoch: 013/020 | Batch 160/937 | Cost: 0.1054\n",
+ "Epoch: 013/020 | Batch 200/937 | Cost: 0.0288\n",
+ "Epoch: 013/020 | Batch 240/937 | Cost: 0.0378\n",
+ "Epoch: 013/020 | Batch 280/937 | Cost: 0.0630\n",
+ "Epoch: 013/020 | Batch 320/937 | Cost: 0.2096\n",
+ "Epoch: 013/020 | Batch 360/937 | Cost: 0.1481\n",
+ "Epoch: 013/020 | Batch 400/937 | Cost: 0.0264\n",
+ "Epoch: 013/020 | Batch 440/937 | Cost: 0.1189\n",
+ "Epoch: 013/020 | Batch 480/937 | Cost: 0.0971\n",
+ "Epoch: 013/020 | Batch 520/937 | Cost: 0.1194\n",
+ "Epoch: 013/020 | Batch 560/937 | Cost: 0.1063\n",
+ "Epoch: 013/020 | Batch 600/937 | Cost: 0.0454\n",
+ "Epoch: 013/020 | Batch 640/937 | Cost: 0.0993\n",
+ "Epoch: 013/020 | Batch 680/937 | Cost: 0.0435\n",
+ "Epoch: 013/020 | Batch 720/937 | Cost: 0.0345\n",
+ "Epoch: 013/020 | Batch 760/937 | Cost: 0.0661\n",
+ "Epoch: 013/020 | Batch 800/937 | Cost: 0.1311\n",
+ "Epoch: 013/020 | Batch 840/937 | Cost: 0.0297\n",
+ "Epoch: 013/020 | Batch 880/937 | Cost: 0.0915\n",
+ "Epoch: 013/020 | Batch 920/937 | Cost: 0.0660\n",
+ "Epoch: 013/020 Train Acc.: 97.67% | Test Acc.: 96.61%\n",
+ "Time elapsed: 5.65 min\n",
+ "Epoch: 014/020 | Batch 000/937 | Cost: 0.0616\n",
+ "Epoch: 014/020 | Batch 040/937 | Cost: 0.0285\n",
+ "Epoch: 014/020 | Batch 080/937 | Cost: 0.0268\n",
+ "Epoch: 014/020 | Batch 120/937 | Cost: 0.0627\n",
+ "Epoch: 014/020 | Batch 160/937 | Cost: 0.0545\n",
+ "Epoch: 014/020 | Batch 200/937 | Cost: 0.0540\n",
+ "Epoch: 014/020 | Batch 240/937 | Cost: 0.0803\n",
+ "Epoch: 014/020 | Batch 280/937 | Cost: 0.0845\n",
+ "Epoch: 014/020 | Batch 320/937 | Cost: 0.1103\n",
+ "Epoch: 014/020 | Batch 360/937 | Cost: 0.0378\n",
+ "Epoch: 014/020 | Batch 400/937 | Cost: 0.1181\n",
+ "Epoch: 014/020 | Batch 440/937 | Cost: 0.1154\n",
+ "Epoch: 014/020 | Batch 480/937 | Cost: 0.0558\n",
+ "Epoch: 014/020 | Batch 520/937 | Cost: 0.0421\n",
+ "Epoch: 014/020 | Batch 560/937 | Cost: 0.0519\n",
+ "Epoch: 014/020 | Batch 600/937 | Cost: 0.0735\n",
+ "Epoch: 014/020 | Batch 640/937 | Cost: 0.0315\n",
+ "Epoch: 014/020 | Batch 680/937 | Cost: 0.1610\n",
+ "Epoch: 014/020 | Batch 720/937 | Cost: 0.0124\n",
+ "Epoch: 014/020 | Batch 760/937 | Cost: 0.0783\n",
+ "Epoch: 014/020 | Batch 800/937 | Cost: 0.1037\n",
+ "Epoch: 014/020 | Batch 840/937 | Cost: 0.1573\n",
+ "Epoch: 014/020 | Batch 880/937 | Cost: 0.0210\n",
+ "Epoch: 014/020 | Batch 920/937 | Cost: 0.0786\n",
+ "Epoch: 014/020 Train Acc.: 97.47% | Test Acc.: 96.40%\n",
+ "Time elapsed: 6.09 min\n",
+ "Epoch: 015/020 | Batch 000/937 | Cost: 0.0479\n",
+ "Epoch: 015/020 | Batch 040/937 | Cost: 0.0098\n",
+ "Epoch: 015/020 | Batch 080/937 | Cost: 0.0437\n",
+ "Epoch: 015/020 | Batch 120/937 | Cost: 0.1208\n",
+ "Epoch: 015/020 | Batch 160/937 | Cost: 0.1970\n",
+ "Epoch: 015/020 | Batch 200/937 | Cost: 0.0446\n",
+ "Epoch: 015/020 | Batch 240/937 | Cost: 0.0987\n",
+ "Epoch: 015/020 | Batch 280/937 | Cost: 0.1855\n",
+ "Epoch: 015/020 | Batch 320/937 | Cost: 0.0427\n",
+ "Epoch: 015/020 | Batch 360/937 | Cost: 0.0667\n",
+ "Epoch: 015/020 | Batch 400/937 | Cost: 0.0605\n",
+ "Epoch: 015/020 | Batch 440/937 | Cost: 0.1831\n",
+ "Epoch: 015/020 | Batch 480/937 | Cost: 0.0432\n",
+ "Epoch: 015/020 | Batch 520/937 | Cost: 0.0832\n",
+ "Epoch: 015/020 | Batch 560/937 | Cost: 0.0664\n",
+ "Epoch: 015/020 | Batch 600/937 | Cost: 0.0755\n",
+ "Epoch: 015/020 | Batch 640/937 | Cost: 0.0918\n",
+ "Epoch: 015/020 | Batch 680/937 | Cost: 0.0487\n",
+ "Epoch: 015/020 | Batch 720/937 | Cost: 0.0321\n",
+ "Epoch: 015/020 | Batch 760/937 | Cost: 0.0615\n",
+ "Epoch: 015/020 | Batch 800/937 | Cost: 0.0261\n",
+ "Epoch: 015/020 | Batch 840/937 | Cost: 0.0737\n",
+ "Epoch: 015/020 | Batch 880/937 | Cost: 0.0902\n",
+ "Epoch: 015/020 | Batch 920/937 | Cost: 0.2007\n",
+ "Epoch: 015/020 Train Acc.: 97.89% | Test Acc.: 96.48%\n",
+ "Time elapsed: 6.54 min\n",
+ "Epoch: 016/020 | Batch 000/937 | Cost: 0.0447\n",
+ "Epoch: 016/020 | Batch 040/937 | Cost: 0.0435\n",
+ "Epoch: 016/020 | Batch 080/937 | Cost: 0.2645\n",
+ "Epoch: 016/020 | Batch 120/937 | Cost: 0.1039\n",
+ "Epoch: 016/020 | Batch 160/937 | Cost: 0.2067\n",
+ "Epoch: 016/020 | Batch 200/937 | Cost: 0.0886\n",
+ "Epoch: 016/020 | Batch 240/937 | Cost: 0.0718\n",
+ "Epoch: 016/020 | Batch 280/937 | Cost: 0.1545\n",
+ "Epoch: 016/020 | Batch 320/937 | Cost: 0.0302\n",
+ "Epoch: 016/020 | Batch 360/937 | Cost: 0.0590\n",
+ "Epoch: 016/020 | Batch 400/937 | Cost: 0.0560\n",
+ "Epoch: 016/020 | Batch 440/937 | Cost: 0.1834\n",
+ "Epoch: 016/020 | Batch 480/937 | Cost: 0.0223\n",
+ "Epoch: 016/020 | Batch 520/937 | Cost: 0.0470\n",
+ "Epoch: 016/020 | Batch 560/937 | Cost: 0.0448\n",
+ "Epoch: 016/020 | Batch 600/937 | Cost: 0.0507\n",
+ "Epoch: 016/020 | Batch 640/937 | Cost: 0.1167\n",
+ "Epoch: 016/020 | Batch 680/937 | Cost: 0.0591\n",
+ "Epoch: 016/020 | Batch 720/937 | Cost: 0.0466\n",
+ "Epoch: 016/020 | Batch 760/937 | Cost: 0.0615\n",
+ "Epoch: 016/020 | Batch 800/937 | Cost: 0.0466\n",
+ "Epoch: 016/020 | Batch 840/937 | Cost: 0.1365\n",
+ "Epoch: 016/020 | Batch 880/937 | Cost: 0.1401\n",
+ "Epoch: 016/020 | Batch 920/937 | Cost: 0.0401\n",
+ "Epoch: 016/020 Train Acc.: 98.12% | Test Acc.: 96.59%\n",
+ "Time elapsed: 6.98 min\n",
+ "Epoch: 017/020 | Batch 000/937 | Cost: 0.0769\n",
+ "Epoch: 017/020 | Batch 040/937 | Cost: 0.0438\n",
+ "Epoch: 017/020 | Batch 080/937 | Cost: 0.1746\n",
+ "Epoch: 017/020 | Batch 120/937 | Cost: 0.1629\n",
+ "Epoch: 017/020 | Batch 160/937 | Cost: 0.0291\n",
+ "Epoch: 017/020 | Batch 200/937 | Cost: 0.1429\n",
+ "Epoch: 017/020 | Batch 240/937 | Cost: 0.0414\n",
+ "Epoch: 017/020 | Batch 280/937 | Cost: 0.0926\n",
+ "Epoch: 017/020 | Batch 320/937 | Cost: 0.0250\n",
+ "Epoch: 017/020 | Batch 360/937 | Cost: 0.0082\n",
+ "Epoch: 017/020 | Batch 400/937 | Cost: 0.0382\n",
+ "Epoch: 017/020 | Batch 440/937 | Cost: 0.1146\n",
+ "Epoch: 017/020 | Batch 480/937 | Cost: 0.0573\n",
+ "Epoch: 017/020 | Batch 520/937 | Cost: 0.0085\n",
+ "Epoch: 017/020 | Batch 560/937 | Cost: 0.0237\n",
+ "Epoch: 017/020 | Batch 600/937 | Cost: 0.1302\n",
+ "Epoch: 017/020 | Batch 640/937 | Cost: 0.0528\n",
+ "Epoch: 017/020 | Batch 680/937 | Cost: 0.0351\n",
+ "Epoch: 017/020 | Batch 720/937 | Cost: 0.0732\n",
+ "Epoch: 017/020 | Batch 760/937 | Cost: 0.0245\n",
+ "Epoch: 017/020 | Batch 800/937 | Cost: 0.0395\n",
+ "Epoch: 017/020 | Batch 840/937 | Cost: 0.0228\n",
+ "Epoch: 017/020 | Batch 880/937 | Cost: 0.0448\n",
+ "Epoch: 017/020 | Batch 920/937 | Cost: 0.0416\n",
+ "Epoch: 017/020 Train Acc.: 98.65% | Test Acc.: 96.82%\n",
+ "Time elapsed: 7.42 min\n",
+ "Epoch: 018/020 | Batch 000/937 | Cost: 0.1535\n",
+ "Epoch: 018/020 | Batch 040/937 | Cost: 0.0489\n",
+ "Epoch: 018/020 | Batch 080/937 | Cost: 0.1077\n",
+ "Epoch: 018/020 | Batch 120/937 | Cost: 0.0768\n",
+ "Epoch: 018/020 | Batch 160/937 | Cost: 0.0150\n",
+ "Epoch: 018/020 | Batch 200/937 | Cost: 0.0680\n",
+ "Epoch: 018/020 | Batch 240/937 | Cost: 0.0236\n",
+ "Epoch: 018/020 | Batch 280/937 | Cost: 0.0489\n",
+ "Epoch: 018/020 | Batch 320/937 | Cost: 0.0961\n",
+ "Epoch: 018/020 | Batch 360/937 | Cost: 0.1147\n",
+ "Epoch: 018/020 | Batch 400/937 | Cost: 0.0097\n",
+ "Epoch: 018/020 | Batch 440/937 | Cost: 0.0372\n",
+ "Epoch: 018/020 | Batch 480/937 | Cost: 0.0117\n",
+ "Epoch: 018/020 | Batch 520/937 | Cost: 0.0354\n",
+ "Epoch: 018/020 | Batch 560/937 | Cost: 0.0632\n",
+ "Epoch: 018/020 | Batch 600/937 | Cost: 0.0865\n",
+ "Epoch: 018/020 | Batch 640/937 | Cost: 0.0346\n",
+ "Epoch: 018/020 | Batch 680/937 | Cost: 0.0340\n",
+ "Epoch: 018/020 | Batch 720/937 | Cost: 0.0600\n",
+ "Epoch: 018/020 | Batch 760/937 | Cost: 0.0275\n",
+ "Epoch: 018/020 | Batch 800/937 | Cost: 0.0484\n",
+ "Epoch: 018/020 | Batch 840/937 | Cost: 0.0546\n",
+ "Epoch: 018/020 | Batch 880/937 | Cost: 0.0406\n",
+ "Epoch: 018/020 | Batch 920/937 | Cost: 0.0525\n",
+ "Epoch: 018/020 Train Acc.: 97.57% | Test Acc.: 95.86%\n",
+ "Time elapsed: 7.86 min\n",
+ "Epoch: 019/020 | Batch 000/937 | Cost: 0.0201\n",
+ "Epoch: 019/020 | Batch 040/937 | Cost: 0.0070\n",
+ "Epoch: 019/020 | Batch 080/937 | Cost: 0.0375\n",
+ "Epoch: 019/020 | Batch 120/937 | Cost: 0.0170\n",
+ "Epoch: 019/020 | Batch 160/937 | Cost: 0.0265\n",
+ "Epoch: 019/020 | Batch 200/937 | Cost: 0.0052\n",
+ "Epoch: 019/020 | Batch 240/937 | Cost: 0.0862\n",
+ "Epoch: 019/020 | Batch 280/937 | Cost: 0.0598\n",
+ "Epoch: 019/020 | Batch 320/937 | Cost: 0.0658\n",
+ "Epoch: 019/020 | Batch 360/937 | Cost: 0.0587\n",
+ "Epoch: 019/020 | Batch 400/937 | Cost: 0.0267\n",
+ "Epoch: 019/020 | Batch 440/937 | Cost: 0.0339\n",
+ "Epoch: 019/020 | Batch 480/937 | Cost: 0.0387\n",
+ "Epoch: 019/020 | Batch 520/937 | Cost: 0.0109\n",
+ "Epoch: 019/020 | Batch 560/937 | Cost: 0.0221\n",
+ "Epoch: 019/020 | Batch 600/937 | Cost: 0.0234\n",
+ "Epoch: 019/020 | Batch 640/937 | Cost: 0.0164\n",
+ "Epoch: 019/020 | Batch 680/937 | Cost: 0.0169\n",
+ "Epoch: 019/020 | Batch 720/937 | Cost: 0.0231\n",
+ "Epoch: 019/020 | Batch 760/937 | Cost: 0.1381\n",
+ "Epoch: 019/020 | Batch 800/937 | Cost: 0.0262\n",
+ "Epoch: 019/020 | Batch 840/937 | Cost: 0.0402\n",
+ "Epoch: 019/020 | Batch 880/937 | Cost: 0.0682\n",
+ "Epoch: 019/020 | Batch 920/937 | Cost: 0.0060\n",
+ "Epoch: 019/020 Train Acc.: 98.47% | Test Acc.: 96.55%\n",
+ "Time elapsed: 8.30 min\n",
+ "Epoch: 020/020 | Batch 000/937 | Cost: 0.0434\n",
+ "Epoch: 020/020 | Batch 040/937 | Cost: 0.0673\n",
+ "Epoch: 020/020 | Batch 080/937 | Cost: 0.0414\n",
+ "Epoch: 020/020 | Batch 120/937 | Cost: 0.1378\n",
+ "Epoch: 020/020 | Batch 160/937 | Cost: 0.0901\n",
+ "Epoch: 020/020 | Batch 200/937 | Cost: 0.0652\n",
+ "Epoch: 020/020 | Batch 240/937 | Cost: 0.0150\n",
+ "Epoch: 020/020 | Batch 280/937 | Cost: 0.0026\n",
+ "Epoch: 020/020 | Batch 320/937 | Cost: 0.0081\n",
+ "Epoch: 020/020 | Batch 360/937 | Cost: 0.0200\n",
+ "Epoch: 020/020 | Batch 400/937 | Cost: 0.0268\n",
+ "Epoch: 020/020 | Batch 440/937 | Cost: 0.0329\n",
+ "Epoch: 020/020 | Batch 480/937 | Cost: 0.0198\n",
+ "Epoch: 020/020 | Batch 520/937 | Cost: 0.0186\n",
+ "Epoch: 020/020 | Batch 560/937 | Cost: 0.1687\n",
+ "Epoch: 020/020 | Batch 600/937 | Cost: 0.0098\n",
+ "Epoch: 020/020 | Batch 640/937 | Cost: 0.0056\n",
+ "Epoch: 020/020 | Batch 680/937 | Cost: 0.0309\n",
+ "Epoch: 020/020 | Batch 720/937 | Cost: 0.0575\n",
+ "Epoch: 020/020 | Batch 760/937 | Cost: 0.0231\n",
+ "Epoch: 020/020 | Batch 800/937 | Cost: 0.0271\n",
+ "Epoch: 020/020 | Batch 840/937 | Cost: 0.2149\n",
+ "Epoch: 020/020 | Batch 880/937 | Cost: 0.0182\n",
+ "Epoch: 020/020 | Batch 920/937 | Cost: 0.0227\n",
+ "Epoch: 020/020 Train Acc.: 98.77% | Test Acc.: 96.92%\n",
+ "Time elapsed: 8.74 min\n",
+ "Total Training Time: 8.74 min\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "47zkfPQ00RyZ"
+ },
+ "source": [
+ "## 2-3. Evaluation\n",
+ "테스트 데이터와 학습 데이터의 Loss 변화를 확인 합니다."
+ ],
+ "id": "47zkfPQ00RyZ"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "wgUANDH60RyZ",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 279
+ },
+ "outputId": "56e55393-d195-437b-c653-ab846b66de2f"
+ },
+ "source": [
+ "plt.plot(range(1, NUM_EPOCHS+1), train_loss_lst, label='Training loss')\n",
+ "plt.plot(range(1, NUM_EPOCHS+1), test_loss_lst, label='Test loss')\n",
+ "plt.legend(loc='upper right')\n",
+ "plt.ylabel('Cross entropy')\n",
+ "plt.xlabel('Epoch')\n",
+ "plt.show()"
+ ],
+ "id": "wgUANDH60RyZ",
+ "execution_count": 32,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": [],
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "fpfRX_uQ0RyZ",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 279
+ },
+ "outputId": "8205ce66-ded6-408d-ac13-abd2df423d2e"
+ },
+ "source": [
+ "plt.plot(range(1, NUM_EPOCHS+1), train_acc_lst, label='Training accuracy')\n",
+ "plt.plot(range(1, NUM_EPOCHS+1), test_acc_lst, label='Test accuracy')\n",
+ "plt.legend(loc='upper left')\n",
+ "plt.ylabel('Cross entropy')\n",
+ "plt.xlabel('Epoch')\n",
+ "plt.show()"
+ ],
+ "id": "fpfRX_uQ0RyZ",
+ "execution_count": 33,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": [],
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "3ws9MBWe0Rya",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "dcbeebaa-d216-4ae7-cea5-7bd84e3252e1"
+ },
+ "source": [
+ "model.eval()\n",
+ "with torch.set_grad_enabled(False): # save memory during inference\n",
+ " test_acc, test_loss = compute_accuracy_and_loss(model, test_loader, DEVICE)\n",
+ " print(f'Test accuracy: {test_acc:.2f}%')"
+ ],
+ "id": "3ws9MBWe0Rya",
+ "execution_count": 34,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Test accuracy: 96.92%\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "VqTgX3eb0Rya",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 122
+ },
+ "outputId": "44e4ec25-bdda-4085-da76-47572884fb16"
+ },
+ "source": [
+ "for batch_idx, (x, y) in enumerate(test_loader):\n",
+ " x = x.to(DEVICE)\n",
+ " y = y.to(DEVICE)\n",
+ "\n",
+ " x_numpy = x.numpy()\n",
+ " \n",
+ " fig, axes = plt.subplots(1, 5)\n",
+ " \n",
+ " for ax in axes:\n",
+ " index = random.randint(0, 64)\n",
+ " logits, probas = model(x[index].view(-1, 28*28))\n",
+ " _, predicted_labels = torch.max(probas, 1)\n",
+ " ax.imshow(x_numpy[index].reshape(28, 28))\n",
+ " ax.set_title(f'Label {predicted_labels[0]}')\n",
+ " \n",
+ " plt.show()\n",
+ " break"
+ ],
+ "id": "VqTgX3eb0Rya",
+ "execution_count": 35,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": [],
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "HXmmdf8P0Rya"
+ },
+ "source": [
+ "## 2-4. Discussion\n",
+ "1. Train Data에 대한 정확도와, Test Data에 대한 정확도가 왜 다를까요?\n",
+ "- Train Data를 잘 학습하였다 가정해도 Test Data의 정답을 보장할 수 없기 때문이다. Test Data에는 Train Data에는 없는 새로운 유형의 문제가 있을 수 있다. 또한 Train Data를 완벽히 학습한 모델이라해도 그 문제를 완벽하게 풀 수 있는 모델이라 할 수 없으며, 과적합(Overfiting)이 발생할 수도 있다. 따라서 이를 해결하기 위해서 하이퍼파라미터(학습률, 배치사이즈) 조정, Data Augmentation, 모델 개선, 정규화, 적절한 학습 중단 등의 방법들이 필요하다.\n",
+ "\n",
+ "2. 다른 사람들은 정확도가 99퍼가 넘는 모델도 만들던데, DNN의 한계가 있다면 어떤 점이 있을까요? (Hint: 우리는 28x28의 이미지를 768x1로 쫙 펴서 넣어 줬습니다.)\n",
+ "- 우선 입력층에 데이터를 28 * 28의 이미지를 768 * 1로 변환하여 넣어주며 정보의 손실이 발생하였다. (숫자의 위상 정보, 인접 색상 정보 등) \n",
+ "또한 해결하려는 문제에 비해 모델이 단순하여, 특징(Feature)를 추출하는데 한계가 있어 OverFiting이나 기울기 소실 등의 문제가 발생한다. 이를 해결하기 위해서 더욱 발전한 CNN이나 Pre-Trained 된 Inception 모델 등을 활용하여 문제를 해결하여야 한다"
+ ],
+ "id": "HXmmdf8P0Rya"
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "8G3ZPWYn0Rya"
+ },
+ "source": [
+ ""
+ ],
+ "id": "8G3ZPWYn0Rya",
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assignments/FacerAin/Football teams.csv b/assignments/FacerAin/Football teams.csv
new file mode 100644
index 0000000..8bdf49e
--- /dev/null
+++ b/assignments/FacerAin/Football teams.csv
@@ -0,0 +1,99 @@
+Team,Tournament,Goals,Shots pg,yellow_cards,red_cards,Possession%,Pass%,AerialsWon,Rating
+Manchester City,Premier League,83,15.8,46,2,60.8,89.4,12.8,7.01
+Bayern Munich,Bundesliga,99,17.1,44,3,58.1,85.5,12.9,6.95
+Paris Saint-Germain,Ligue 1,86,15,73,7,60.1,89.5,9.5,6.88
+Barcelona,LaLiga,85,15.3,68,2,62.4,89.7,10.6,6.87
+Real Madrid,LaLiga,67,14.4,57,2,57.7,87.7,11.8,6.86
+Manchester United,Premier League,73,13.8,64,1,54.5,84.8,14.5,6.85
+Juventus,Serie A,77,15.7,76,6,55.4,88.3,11.4,6.85
+Aston Villa,Premier League,55,13.7,63,4,49.1,78.6,19.4,6.84
+Borussia Dortmund,Bundesliga,75,14.6,43,1,57.5,85.5,12.8,6.84
+Atletico Madrid,LaLiga,67,12.1,100,0,51.8,83.1,14.4,6.84
+Atalanta,Serie A,90,16.3,66,3,53.5,83.5,16.8,6.84
+Chelsea,Premier League,58,14.6,49,3,58.6,87,15.2,6.83
+Liverpool,Premier League,68,16,40,0,59,85.7,14.3,6.82
+AC Milan,Serie A,74,14.7,80,4,51.4,84,15.2,6.82
+Lille,Ligue 1,64,12.8,67,2,52.6,83.5,15.8,6.82
+Tottenham,Premier League,68,11.7,53,2,51.3,81.8,16.4,6.81
+Napoli,Serie A,86,17,71,3,54.1,87,11.1,6.81
+Leicester,Premier League,68,12.8,61,0,53.2,82.1,16.2,6.8
+Wolfsburg,Bundesliga,61,14.1,56,3,51,78,16.9,6.8
+Inter,Serie A,89,14.5,59,2,52,87,11.8,6.8
+Lyon,Ligue 1,81,16.1,60,10,53.6,84.7,14.3,6.8
+RB Leipzig,Bundesliga,60,16,57,0,57.3,83.2,18.6,6.78
+Leeds,Premier League,62,13.7,61,1,55.1,80.8,14.5,6.77
+West Ham,Premier League,62,12.3,48,3,44.5,77.8,19.9,6.77
+Everton,Premier League,47,10.5,59,2,47.3,81.4,17.7,6.73
+Bayer Leverkusen,Bundesliga,53,13,58,0,57.3,84.4,13.1,6.73
+Eintracht Frankfurt,Bundesliga,69,13.2,80,1,52.4,79.6,17.9,6.73
+Monaco,Ligue 1,76,12.8,74,7,54.2,82.7,16.5,6.73
+Roma,Serie A,68,14.3,84,3,51.5,84.5,12.1,6.71
+Sevilla,LaLiga,53,12.1,75,2,58.7,86.2,16.6,6.7
+Borussia M.Gladbach,Bundesliga,64,13.4,61,2,51.5,82,15.3,6.7
+Arsenal,Premier League,55,12.1,47,5,52.7,85,13.5,6.69
+Rennes,Ligue 1,52,13.5,80,5,56.8,85.6,16.9,6.69
+VfB Stuttgart,Bundesliga,56,13.4,63,2,51.5,81.1,16.3,6.68
+Wolverhampton Wanderers,Premier League,36,12.2,53,1,49.7,83.2,15.3,6.67
+Sassuolo,Serie A,64,13.9,74,4,58.2,87.8,10.9,6.67
+Metz,Ligue 1,44,11.5,82,4,46.9,79.8,16.1,6.66
+Villarreal,LaLiga,60,10.7,65,5,54.3,84.4,13,6.66
+Real Sociedad,LaLiga,59,11.3,81,1,53.7,80.8,17.9,6.65
+Brighton,Premier League,40,12.8,45,6,50.7,81.3,14.2,6.65
+Real Betis,LaLiga,50,11.7,87,8,52.9,82,16.4,6.64
+Burnley,Premier League,33,10.1,48,0,43.5,71.6,23.4,6.64
+Lens,Ligue 1,55,11.7,84,7,51.1,81.8,17.4,6.64
+Brest,Ligue 1,50,11.8,60,4,49.4,81.3,18.6,6.64
+Fulham,Premier League,27,11.6,67,3,50,81.2,17.2,6.63
+Marseille,Ligue 1,54,10,94,9,52.4,82,14.9,6.63
+Sampdoria,Serie A,52,11.3,81,3,46.1,78.5,16.8,6.63
+Montpellier,Ligue 1,60,12.2,65,7,46.4,78.8,17.9,6.63
+Nice,Ligue 1,50,10.8,69,4,53.4,85.6,10.5,6.63
+Hoffenheim,Bundesliga,52,12.6,65,4,50.8,80.7,15.7,6.63
+Southampton,Premier League,47,11.2,52,3,51.4,79.3,14.1,6.62
+Newcastle United,Premier League,46,10.4,61,3,41.6,76,17.1,6.62
+Lazio,Serie A,61,13.8,100,5,52.2,83.8,14.6,6.62
+Nantes,Ligue 1,47,10.8,68,4,45.2,77,18.1,6.62
+Union Berlin,Bundesliga,50,11.7,55,2,45.9,76.2,17.6,6.62
+Strasbourg,Ligue 1,49,11.3,56,3,46.5,78.3,18.3,6.61
+Crystal Palace,Premier League,41,9.2,54,2,42.9,76.1,18.3,6.61
+Freiburg,Bundesliga,52,11.4,63,0,47.5,78.1,17.5,6.6
+Valencia,LaLiga,50,10.3,77,5,47.9,79.4,16.3,6.6
+Celta Vigo,LaLiga,55,9.4,104,5,52,79.9,16.5,6.6
+Reims,Ligue 1,42,9.6,75,8,46.3,80.7,13.4,6.6
+Torino,Serie A,50,12.2,72,4,48,80.5,16.1,6.59
+Verona,Serie A,43,10.6,91,1,49.6,76.3,20.6,6.59
+Saint-Etienne,Ligue 1,42,11.6,76,2,49,79.3,16.4,6.59
+Bordeaux,Ligue 1,42,11.1,74,4,50.2,83.3,15.4,6.59
+Hertha Berlin,Bundesliga,41,11.3,63,3,49.8,79.5,15.8,6.58
+Cagliari,Serie A,43,11.4,73,3,45.8,79.8,17.2,6.58
+Mainz 05,Bundesliga,39,11.1,61,1,42.7,71.3,18.3,6.57
+Bologna,Serie A,51,13.1,78,4,50.7,81.5,15.1,6.56
+Augsburg,Bundesliga,36,9.9,65,4,44,73.6,16.8,6.56
+Udinese,Serie A,42,10.9,63,2,47.2,82.5,13.1,6.55
+SD Huesca,LaLiga,34,10.7,68,2,48.7,79.8,15.7,6.55
+Athletic Bilbao,LaLiga,46,10.6,81,3,49.4,78.5,17.9,6.54
+Osasuna,LaLiga,37,9.8,74,5,44.6,70.2,26.8,6.54
+Lorient,Ligue 1,50,11.2,67,3,45.9,78.8,13.7,6.54
+Genoa,Serie A,47,9,85,2,46.1,79.7,13.7,6.54
+Arminia Bielefeld,Bundesliga,26,9.8,52,1,44.1,74.6,22.2,6.53
+Angers,Ligue 1,40,10.7,63,2,47.1,81.3,13.2,6.53
+Eibar,LaLiga,29,11.9,67,3,49.2,72.6,24.4,6.53
+Werder Bremen,Bundesliga,36,10.6,63,3,45.2,76.2,18.3,6.52
+Fiorentina,Serie A,47,9.8,86,5,46.8,81,14.2,6.52
+Nimes,Ligue 1,40,10.3,57,5,45.8,77.5,14,6.52
+West Bromwich Albion,Premier League,35,8.9,51,4,41,72.2,19.1,6.51
+FC Koln,Bundesliga,34,10.6,62,1,47.1,77.3,18.5,6.51
+Deportivo Alaves,LaLiga,36,9.1,87,8,44.6,72.9,22.6,6.5
+Levante,LaLiga,46,10.1,70,1,51.5,80.1,12.2,6.5
+Spezia,Serie A,52,10.2,92,5,51.6,81.1,14.4,6.5
+Getafe,LaLiga,28,9.5,117,7,44.4,66.5,22.8,6.49
+Parma Calcio 1913,Serie A,39,10.4,91,1,48.4,82.5,16.9,6.49
+Elche,LaLiga,34,7.1,95,3,48.1,81.5,13.2,6.48
+Granada,LaLiga,47,9.4,96,6,43.4,70,18.3,6.47
+Cadiz,LaLiga,36,8,77,3,38.5,68.8,18.5,6.47
+Real Valladolid,LaLiga,34,9.7,93,4,46.2,74.8,17.1,6.46
+Sheffield United,Premier League,20,8.5,73,3,43,76.9,19.1,6.46
+Crotone,Serie A,45,9.5,85,4,47.2,80.4,12.7,6.43
+Benevento,Serie A,40,11,90,5,44.2,77.7,13.4,6.43
+Dijon,Ligue 1,25,9.2,75,5,46.9,80,14.3,6.42
+Schalke 04,Bundesliga,25,8.9,70,2,46.2,76.5,15.6,6.41
diff --git a/assignments/FacerAin/world-happiness-report-2021.csv b/assignments/FacerAin/world-happiness-report-2021.csv
new file mode 100644
index 0000000..dbc8659
--- /dev/null
+++ b/assignments/FacerAin/world-happiness-report-2021.csv
@@ -0,0 +1,150 @@
+Country name,Regional indicator,Ladder score,Standard error of ladder score,upperwhisker,lowerwhisker,Logged GDP per capita,Social support,Healthy life expectancy,Freedom to make life choices,Generosity,Perceptions of corruption,Ladder score in Dystopia,Explained by: Log GDP per capita,Explained by: Social support,Explained by: Healthy life expectancy,Explained by: Freedom to make life choices,Explained by: Generosity,Explained by: Perceptions of corruption,Dystopia + residual
+Finland,Western Europe,7.842,0.032,7.904,7.780,10.775,0.954,72.000,0.949,-0.098,0.186,2.430,1.446,1.106,0.741,0.691,0.124,0.481,3.253
+Denmark,Western Europe,7.620,0.035,7.687,7.552,10.933,0.954,72.700,0.946,0.030,0.179,2.430,1.502,1.108,0.763,0.686,0.208,0.485,2.868
+Switzerland,Western Europe,7.571,0.036,7.643,7.500,11.117,0.942,74.400,0.919,0.025,0.292,2.430,1.566,1.079,0.816,0.653,0.204,0.413,2.839
+Iceland,Western Europe,7.554,0.059,7.670,7.438,10.878,0.983,73.000,0.955,0.160,0.673,2.430,1.482,1.172,0.772,0.698,0.293,0.170,2.967
+Netherlands,Western Europe,7.464,0.027,7.518,7.410,10.932,0.942,72.400,0.913,0.175,0.338,2.430,1.501,1.079,0.753,0.647,0.302,0.384,2.798
+Norway,Western Europe,7.392,0.035,7.462,7.323,11.053,0.954,73.300,0.960,0.093,0.270,2.430,1.543,1.108,0.782,0.703,0.249,0.427,2.580
+Sweden,Western Europe,7.363,0.036,7.433,7.293,10.867,0.934,72.700,0.945,0.086,0.237,2.430,1.478,1.062,0.763,0.685,0.244,0.448,2.683
+Luxembourg,Western Europe,7.324,0.037,7.396,7.252,11.647,0.908,72.600,0.907,-0.034,0.386,2.430,1.751,1.003,0.760,0.639,0.166,0.353,2.653
+New Zealand,North America and ANZ,7.277,0.040,7.355,7.198,10.643,0.948,73.400,0.929,0.134,0.242,2.430,1.400,1.094,0.785,0.665,0.276,0.445,2.612
+Austria,Western Europe,7.268,0.036,7.337,7.198,10.906,0.934,73.300,0.908,0.042,0.481,2.430,1.492,1.062,0.782,0.640,0.215,0.292,2.784
+Australia,North America and ANZ,7.183,0.041,7.265,7.102,10.796,0.940,73.900,0.914,0.159,0.442,2.430,1.453,1.076,0.801,0.647,0.291,0.317,2.598
+Israel,Middle East and North Africa,7.157,0.034,7.224,7.090,10.575,0.939,73.503,0.800,0.031,0.753,2.430,1.376,1.074,0.788,0.509,0.208,0.119,3.083
+Germany,Western Europe,7.155,0.040,7.232,7.077,10.873,0.903,72.500,0.875,0.011,0.460,2.430,1.480,0.993,0.757,0.600,0.195,0.306,2.824
+Canada,North America and ANZ,7.103,0.042,7.185,7.021,10.776,0.926,73.800,0.915,0.089,0.415,2.430,1.447,1.044,0.798,0.648,0.246,0.335,2.585
+Ireland,Western Europe,7.085,0.040,7.164,7.006,11.342,0.947,72.400,0.879,0.077,0.363,2.430,1.644,1.092,0.753,0.606,0.238,0.367,2.384
+Costa Rica,Latin America and Caribbean,7.069,0.056,7.179,6.960,9.880,0.891,71.400,0.934,-0.126,0.809,2.430,1.134,0.966,0.722,0.673,0.105,0.083,3.387
+United Kingdom,Western Europe,7.064,0.038,7.138,6.990,10.707,0.934,72.500,0.859,0.233,0.459,2.430,1.423,1.062,0.757,0.580,0.340,0.306,2.596
+Czech Republic,Central and Eastern Europe,6.965,0.049,7.062,6.868,10.556,0.947,70.807,0.858,-0.208,0.868,2.430,1.370,1.090,0.703,0.580,0.052,0.046,3.124
+United States,North America and ANZ,6.951,0.049,7.047,6.856,11.023,0.920,68.200,0.837,0.098,0.698,2.430,1.533,1.030,0.621,0.554,0.252,0.154,2.807
+Belgium,Western Europe,6.834,0.034,6.901,6.767,10.823,0.906,72.199,0.783,-0.153,0.646,2.430,1.463,0.998,0.747,0.489,0.088,0.187,2.862
+France,Western Europe,6.690,0.037,6.762,6.618,10.704,0.942,74.000,0.822,-0.147,0.571,2.430,1.421,1.081,0.804,0.536,0.092,0.235,2.521
+Bahrain,Middle East and North Africa,6.647,0.068,6.779,6.514,10.669,0.862,69.495,0.925,0.089,0.722,2.430,1.409,0.899,0.662,0.661,0.246,0.139,2.631
+Malta,Western Europe,6.602,0.044,6.688,6.516,10.674,0.931,72.200,0.927,0.133,0.653,2.430,1.411,1.055,0.747,0.664,0.275,0.183,2.268
+Taiwan Province of China,East Asia,6.584,0.038,6.659,6.510,10.871,0.898,69.600,0.784,-0.070,0.721,2.430,1.480,0.982,0.665,0.490,0.142,0.139,2.687
+United Arab Emirates,Middle East and North Africa,6.561,0.039,6.637,6.484,11.085,0.844,67.333,0.932,0.074,0.589,2.430,1.555,0.860,0.594,0.670,0.236,0.223,2.422
+Saudi Arabia,Middle East and North Africa,6.494,0.056,6.604,6.384,10.743,0.891,66.603,0.877,-0.149,0.684,2.430,1.435,0.964,0.571,0.603,0.090,0.163,2.668
+Spain,Western Europe,6.491,0.042,6.574,6.408,10.571,0.932,74.700,0.761,-0.081,0.745,2.430,1.375,1.057,0.826,0.462,0.135,0.124,2.513
+Italy,Western Europe,6.483,0.045,6.572,6.395,10.623,0.880,73.800,0.693,-0.084,0.866,2.430,1.393,0.940,0.798,0.379,0.133,0.047,2.794
+Slovenia,Central and Eastern Europe,6.461,0.043,6.546,6.376,10.529,0.948,71.400,0.949,-0.101,0.806,2.430,1.360,1.093,0.722,0.690,0.122,0.085,2.388
+Guatemala,Latin America and Caribbean,6.435,0.073,6.577,6.292,9.053,0.813,64.958,0.906,-0.038,0.775,2.430,0.845,0.790,0.519,0.638,0.163,0.105,3.375
+Uruguay,Latin America and Caribbean,6.431,0.046,6.521,6.341,9.966,0.925,69.100,0.896,-0.092,0.590,2.430,1.164,1.042,0.649,0.625,0.128,0.223,2.600
+Singapore,Southeast Asia,6.377,0.043,6.460,6.293,11.488,0.915,76.953,0.927,-0.018,0.082,2.430,1.695,1.019,0.897,0.664,0.176,0.547,1.379
+Kosovo,Central and Eastern Europe,6.372,0.059,6.487,6.257,9.318,0.821,63.813,0.869,0.257,0.917,2.430,0.937,0.807,0.483,0.593,0.356,0.014,3.182
+Slovakia,Central and Eastern Europe,6.331,0.041,6.411,6.251,10.369,0.936,69.201,0.766,-0.124,0.911,2.430,1.304,1.066,0.653,0.468,0.107,0.018,2.714
+Brazil,Latin America and Caribbean,6.330,0.043,6.415,6.245,9.577,0.882,66.601,0.804,-0.071,0.756,2.430,1.028,0.944,0.571,0.514,0.142,0.117,3.015
+Mexico,Latin America and Caribbean,6.317,0.053,6.420,6.213,9.859,0.831,68.597,0.862,-0.147,0.799,2.430,1.126,0.830,0.634,0.585,0.092,0.089,2.961
+Jamaica,Latin America and Caribbean,6.309,0.156,6.615,6.004,9.186,0.877,67.500,0.890,-0.137,0.884,2.430,0.891,0.932,0.599,0.618,0.099,0.035,3.135
+Lithuania,Central and Eastern Europe,6.255,0.045,6.344,6.167,10.499,0.935,67.906,0.773,-0.203,0.826,2.430,1.350,1.065,0.612,0.476,0.056,0.073,2.624
+Cyprus,Western Europe,6.223,0.049,6.319,6.128,10.576,0.802,73.898,0.763,-0.015,0.844,2.430,1.377,0.765,0.801,0.464,0.178,0.061,2.578
+Estonia,Central and Eastern Europe,6.189,0.038,6.263,6.115,10.481,0.941,68.800,0.909,-0.106,0.527,2.430,1.344,1.079,0.640,0.641,0.119,0.263,2.103
+Panama,Latin America and Caribbean,6.180,0.073,6.323,6.036,10.350,0.896,69.652,0.872,-0.166,0.856,2.430,1.298,0.976,0.667,0.596,0.079,0.053,2.509
+Uzbekistan,Commonwealth of Independent States,6.179,0.068,6.312,6.045,8.836,0.918,65.255,0.970,0.311,0.515,2.430,0.769,1.027,0.528,0.716,0.391,0.271,2.477
+Chile,Latin America and Caribbean,6.172,0.046,6.262,6.081,10.071,0.882,70.000,0.742,-0.044,0.830,2.430,1.200,0.946,0.678,0.438,0.159,0.070,2.682
+Poland,Central and Eastern Europe,6.166,0.040,6.245,6.087,10.382,0.898,69.702,0.841,-0.165,0.735,2.430,1.309,0.982,0.668,0.558,0.080,0.130,2.438
+Kazakhstan,Commonwealth of Independent States,6.152,0.047,6.243,6.060,10.155,0.952,65.200,0.853,-0.069,0.733,2.430,1.230,1.103,0.527,0.573,0.143,0.132,2.446
+Romania,Central and Eastern Europe,6.140,0.057,6.253,6.027,10.284,0.832,67.355,0.845,-0.219,0.938,2.430,1.275,0.832,0.595,0.564,0.045,0.001,2.830
+Kuwait,Middle East and North Africa,6.106,0.066,6.235,5.977,10.817,0.843,66.900,0.867,-0.104,0.736,2.430,1.461,0.857,0.580,0.591,0.120,0.130,2.368
+Serbia,Central and Eastern Europe,6.078,0.053,6.181,5.974,9.787,0.873,68.600,0.778,0.002,0.835,2.430,1.101,0.924,0.634,0.482,0.189,0.066,2.682
+El Salvador,Latin America and Caribbean,6.061,0.065,6.188,5.933,9.054,0.762,66.402,0.888,-0.110,0.688,2.430,0.845,0.675,0.565,0.615,0.116,0.160,3.085
+Mauritius,Sub-Saharan Africa,6.049,0.059,6.165,5.933,10.008,0.905,66.701,0.867,-0.054,0.789,2.430,1.178,0.996,0.574,0.590,0.153,0.096,2.462
+Latvia,Central and Eastern Europe,6.032,0.036,6.103,5.961,10.315,0.927,67.100,0.715,-0.162,0.800,2.430,1.285,1.047,0.587,0.405,0.082,0.089,2.536
+Colombia,Latin America and Caribbean,6.012,0.061,6.132,5.892,9.557,0.847,68.001,0.837,-0.135,0.841,2.430,1.021,0.866,0.615,0.554,0.100,0.063,2.794
+Hungary,Central and Eastern Europe,5.992,0.047,6.085,5.899,10.358,0.943,68.000,0.755,-0.186,0.876,2.430,1.301,1.083,0.615,0.454,0.067,0.040,2.432
+Thailand,Southeast Asia,5.985,0.047,6.077,5.893,9.805,0.888,67.401,0.884,0.287,0.895,2.430,1.107,0.957,0.596,0.611,0.375,0.028,2.309
+Nicaragua,Latin America and Caribbean,5.972,0.083,6.134,5.810,8.620,0.864,67.657,0.836,0.020,0.664,2.430,0.693,0.904,0.604,0.553,0.201,0.176,2.841
+Japan,East Asia,5.940,0.040,6.020,5.861,10.611,0.884,75.100,0.796,-0.258,0.638,2.430,1.389,0.949,0.838,0.504,0.020,0.192,2.048
+Argentina,Latin America and Caribbean,5.929,0.056,6.040,5.819,9.962,0.898,69.000,0.828,-0.182,0.834,2.430,1.162,0.980,0.646,0.544,0.069,0.067,2.461
+Portugal,Western Europe,5.929,0.055,6.037,5.821,10.421,0.879,72.600,0.892,-0.244,0.887,2.430,1.323,0.939,0.760,0.621,0.029,0.033,2.225
+Honduras,Latin America and Caribbean,5.919,0.082,6.081,5.758,8.648,0.812,67.300,0.857,0.081,0.809,2.430,0.703,0.787,0.593,0.578,0.241,0.083,2.934
+Croatia,Central and Eastern Europe,5.882,0.048,5.975,5.788,10.217,0.924,70.799,0.754,-0.118,0.939,2.430,1.251,1.039,0.703,0.453,0.111,0.000,2.325
+Philippines,Southeast Asia,5.880,0.052,5.982,5.778,9.076,0.830,62.000,0.917,-0.097,0.742,2.430,0.853,0.828,0.426,0.651,0.125,0.126,2.872
+South Korea,East Asia,5.845,0.042,5.928,5.763,10.651,0.799,73.900,0.672,-0.083,0.727,2.430,1.403,0.758,0.801,0.353,0.134,0.135,2.262
+Peru,Latin America and Caribbean,5.840,0.075,5.988,5.692,9.458,0.832,68.250,0.822,-0.154,0.891,2.430,0.986,0.833,0.623,0.536,0.087,0.031,2.744
+Bosnia and Herzegovina,Central and Eastern Europe,5.813,0.050,5.911,5.715,9.590,0.870,68.098,0.706,0.113,0.931,2.430,1.032,0.919,0.618,0.395,0.261,0.005,2.583
+Moldova,Commonwealth of Independent States,5.766,0.046,5.856,5.677,9.454,0.857,65.699,0.822,-0.079,0.918,2.430,0.985,0.888,0.542,0.536,0.137,0.013,2.665
+Ecuador,Latin America and Caribbean,5.764,0.057,5.875,5.653,9.313,0.821,68.800,0.842,-0.124,0.843,2.430,0.935,0.806,0.640,0.560,0.107,0.062,2.653
+Kyrgyzstan,Commonwealth of Independent States,5.744,0.046,5.834,5.653,8.538,0.893,64.401,0.935,0.119,0.908,2.430,0.665,0.971,0.501,0.673,0.266,0.020,2.648
+Greece,Western Europe,5.723,0.046,5.813,5.632,10.279,0.823,72.600,0.582,-0.288,0.823,2.430,1.273,0.811,0.760,0.243,0.000,0.074,2.561
+Bolivia,Latin America and Caribbean,5.716,0.053,5.819,5.613,9.046,0.810,63.901,0.875,-0.077,0.839,2.430,0.842,0.782,0.486,0.600,0.138,0.064,2.805
+Mongolia,East Asia,5.677,0.042,5.760,5.595,9.400,0.935,62.500,0.708,0.116,0.856,2.430,0.966,1.065,0.442,0.397,0.263,0.053,2.492
+Paraguay,Latin America and Caribbean,5.653,0.092,5.832,5.473,9.448,0.893,65.900,0.876,0.028,0.882,2.430,0.983,0.970,0.549,0.602,0.206,0.037,2.306
+Montenegro,Central and Eastern Europe,5.581,0.054,5.686,5.475,9.940,0.858,68.699,0.708,-0.034,0.812,2.430,1.155,0.891,0.637,0.397,0.166,0.081,2.254
+Dominican Republic,Latin America and Caribbean,5.545,0.071,5.685,5.405,9.802,0.853,66.102,0.860,-0.133,0.714,2.430,1.106,0.879,0.555,0.581,0.101,0.144,2.178
+North Cyprus,Western Europe,5.536,0.051,5.636,5.435,10.576,0.820,73.898,0.795,0.012,0.626,2.430,1.377,0.806,0.801,0.503,0.196,0.200,1.653
+Belarus,Commonwealth of Independent States,5.534,0.047,5.625,5.442,9.853,0.910,66.253,0.650,-0.180,0.627,2.430,1.124,1.007,0.560,0.326,0.070,0.199,2.247
+Russia,Commonwealth of Independent States,5.477,0.033,5.541,5.413,10.189,0.903,64.703,0.718,-0.111,0.845,2.430,1.241,0.992,0.511,0.409,0.115,0.060,2.148
+Hong Kong S.A.R. of China,East Asia,5.477,0.049,5.573,5.380,11.000,0.836,76.820,0.717,0.067,0.403,2.430,1.525,0.841,0.893,0.408,0.232,0.342,1.236
+Tajikistan,Commonwealth of Independent States,5.466,0.034,5.532,5.400,8.091,0.860,64.281,0.832,-0.056,0.553,2.430,0.508,0.895,0.498,0.548,0.152,0.247,2.619
+Vietnam,Southeast Asia,5.411,0.039,5.488,5.334,8.973,0.850,68.034,0.940,-0.098,0.796,2.430,0.817,0.873,0.616,0.679,0.124,0.091,2.211
+Libya,Middle East and North Africa,5.410,0.076,5.558,5.262,9.622,0.827,62.300,0.771,-0.087,0.667,2.430,1.044,0.821,0.435,0.474,0.131,0.174,2.331
+Malaysia,Southeast Asia,5.384,0.049,5.480,5.289,10.238,0.817,67.102,0.895,0.125,0.839,2.430,1.259,0.797,0.587,0.624,0.270,0.064,1.784
+Indonesia,Southeast Asia,5.345,0.056,5.454,5.235,9.365,0.811,62.236,0.873,0.542,0.867,2.430,0.954,0.786,0.433,0.598,0.541,0.046,1.987
+Congo (Brazzaville),Sub-Saharan Africa,5.342,0.097,5.533,5.151,8.117,0.636,58.221,0.695,-0.068,0.745,2.430,0.518,0.392,0.307,0.381,0.144,0.124,3.476
+China,East Asia,5.339,0.029,5.397,5.281,9.673,0.811,69.593,0.904,-0.146,0.755,2.430,1.061,0.785,0.665,0.636,0.093,0.117,1.982
+Ivory Coast,Sub-Saharan Africa,5.306,0.078,5.460,5.152,8.551,0.644,50.114,0.741,-0.016,0.794,2.430,0.669,0.409,0.052,0.438,0.177,0.092,3.469
+Armenia,Commonwealth of Independent States,5.283,0.058,5.397,5.168,9.487,0.799,67.055,0.825,-0.168,0.629,2.430,0.996,0.758,0.585,0.540,0.079,0.198,2.127
+Nepal,South Asia,5.269,0.070,5.406,5.132,8.120,0.774,64.233,0.782,0.152,0.727,2.430,0.519,0.702,0.496,0.488,0.287,0.135,2.642
+Bulgaria,Central and Eastern Europe,5.266,0.054,5.371,5.160,10.016,0.931,67.000,0.788,-0.096,0.932,2.430,1.181,1.055,0.583,0.494,0.125,0.005,1.823
+Maldives,South Asia,5.198,0.072,5.339,5.057,9.826,0.913,70.600,0.854,0.024,0.825,2.430,1.115,1.015,0.697,0.575,0.204,0.073,1.520
+Azerbaijan,Commonwealth of Independent States,5.171,0.040,5.250,5.091,9.569,0.836,65.656,0.814,-0.223,0.506,2.430,1.025,0.841,0.541,0.526,0.043,0.276,1.919
+Cameroon,Sub-Saharan Africa,5.142,0.074,5.288,4.996,8.189,0.710,53.515,0.731,0.026,0.848,2.430,0.543,0.556,0.159,0.425,0.205,0.058,3.195
+Senegal,Sub-Saharan Africa,5.132,0.068,5.266,4.998,8.118,0.710,59.802,0.695,-0.046,0.801,2.430,0.518,0.558,0.357,0.381,0.158,0.088,3.071
+Albania,Central and Eastern Europe,5.117,0.059,5.234,5.001,9.520,0.697,68.999,0.785,-0.030,0.901,2.430,1.008,0.529,0.646,0.491,0.168,0.024,2.250
+North Macedonia,Central and Eastern Europe,5.101,0.051,5.202,5.001,9.693,0.805,65.474,0.751,0.038,0.905,2.430,1.068,0.772,0.535,0.450,0.212,0.022,2.042
+Ghana,Sub-Saharan Africa,5.088,0.067,5.219,4.958,8.580,0.727,57.586,0.807,0.123,0.848,2.430,0.680,0.595,0.287,0.517,0.268,0.058,2.684
+Niger,Sub-Saharan Africa,5.074,0.102,5.273,4.875,7.098,0.641,53.780,0.806,0.018,0.693,2.430,0.162,0.402,0.167,0.516,0.200,0.157,3.470
+Turkmenistan,Commonwealth of Independent States,5.066,0.036,5.136,4.996,9.629,0.983,62.409,0.877,0.273,0.888,2.430,1.046,1.172,0.439,0.602,0.366,0.033,1.409
+Gambia,Sub-Saharan Africa,5.051,0.089,5.225,4.877,7.686,0.690,55.160,0.697,0.424,0.746,2.430,0.367,0.511,0.210,0.384,0.465,0.123,2.990
+Benin,Sub-Saharan Africa,5.045,0.073,5.189,4.901,8.087,0.489,54.713,0.757,-0.034,0.661,2.430,0.507,0.058,0.196,0.457,0.166,0.178,3.482
+Laos,Southeast Asia,5.030,0.045,5.119,4.941,8.947,0.728,58.968,0.910,0.123,0.658,2.430,0.808,0.598,0.330,0.643,0.268,0.179,2.204
+Bangladesh,South Asia,5.025,0.046,5.115,4.934,8.454,0.693,64.800,0.877,-0.041,0.682,2.430,0.635,0.520,0.514,0.603,0.161,0.164,2.427
+Guinea,Sub-Saharan Africa,4.984,0.090,5.160,4.808,7.838,0.639,55.008,0.697,0.095,0.766,2.430,0.420,0.399,0.206,0.384,0.250,0.111,3.216
+South Africa,Sub-Saharan Africa,4.956,0.060,5.074,4.839,9.403,0.860,56.904,0.749,-0.067,0.860,2.430,0.967,0.895,0.265,0.447,0.144,0.051,2.187
+Turkey,Middle East and North Africa,4.948,0.046,5.038,4.857,10.240,0.822,67.199,0.576,-0.139,0.776,2.430,1.260,0.809,0.590,0.236,0.097,0.104,1.852
+Pakistan,South Asia,4.934,0.068,5.066,4.802,8.458,0.651,58.709,0.726,0.098,0.787,2.430,0.637,0.423,0.322,0.418,0.252,0.097,2.784
+Morocco,Middle East and North Africa,4.918,0.060,5.036,4.800,8.903,0.560,66.208,0.774,-0.236,0.801,2.430,0.792,0.219,0.558,0.477,0.034,0.088,2.749
+Venezuela,Latin America and Caribbean,4.892,0.064,5.017,4.767,9.073,0.861,66.700,0.615,-0.169,0.827,2.430,0.852,0.897,0.574,0.284,0.078,0.072,2.135
+Georgia,Commonwealth of Independent States,4.891,0.054,4.998,4.785,9.585,0.671,64.300,0.783,-0.238,0.655,2.430,1.030,0.470,0.498,0.488,0.032,0.181,2.191
+Algeria,Middle East and North Africa,4.887,0.053,4.991,4.783,9.342,0.802,66.005,0.480,-0.067,0.752,2.430,0.946,0.765,0.552,0.119,0.144,0.120,2.242
+Ukraine,Commonwealth of Independent States,4.875,0.052,4.977,4.773,9.436,0.888,64.902,0.724,-0.011,0.924,2.430,0.979,0.958,0.517,0.417,0.181,0.010,1.813
+Iraq,Middle East and North Africa,4.854,0.059,4.970,4.738,9.240,0.746,60.583,0.630,-0.053,0.875,2.430,0.910,0.638,0.381,0.302,0.153,0.041,2.429
+Gabon,Sub-Saharan Africa,4.852,0.075,4.998,4.706,9.603,0.776,59.962,0.731,-0.200,0.840,2.430,1.037,0.707,0.362,0.424,0.058,0.064,2.201
+Burkina Faso,Sub-Saharan Africa,4.834,0.081,4.993,4.675,7.678,0.672,54.151,0.695,-0.009,0.748,2.430,0.364,0.472,0.179,0.381,0.182,0.122,3.133
+Cambodia,Southeast Asia,4.830,0.067,4.963,4.698,8.360,0.765,62.000,0.959,0.034,0.843,2.430,0.603,0.680,0.426,0.702,0.210,0.061,2.148
+Mozambique,Sub-Saharan Africa,4.794,0.103,4.997,4.592,7.158,0.744,54.706,0.882,0.061,0.684,2.430,0.183,0.634,0.196,0.608,0.228,0.163,2.783
+Nigeria,Sub-Saharan Africa,4.759,0.052,4.861,4.658,8.533,0.740,50.102,0.737,0.037,0.878,2.430,0.663,0.625,0.051,0.433,0.212,0.039,2.736
+Mali,Sub-Saharan Africa,4.723,0.082,4.884,4.563,7.744,0.724,51.969,0.697,-0.036,0.827,2.430,0.387,0.590,0.110,0.384,0.164,0.072,3.016
+Iran,Middle East and North Africa,4.721,0.055,4.828,4.614,9.584,0.710,66.300,0.608,0.218,0.714,2.430,1.030,0.557,0.561,0.275,0.330,0.144,1.823
+Uganda,Sub-Saharan Africa,4.636,0.073,4.780,4.493,7.677,0.781,56.101,0.709,0.122,0.855,2.430,0.364,0.718,0.240,0.398,0.267,0.054,2.596
+Liberia,Sub-Saharan Africa,4.625,0.106,4.833,4.417,7.288,0.720,56.498,0.735,0.050,0.850,2.430,0.228,0.580,0.253,0.430,0.221,0.057,2.857
+Kenya,Sub-Saharan Africa,4.607,0.072,4.747,4.466,8.361,0.688,60.704,0.779,0.287,0.825,2.430,0.603,0.508,0.385,0.483,0.375,0.073,2.180
+Tunisia,Middle East and North Africa,4.596,0.058,4.709,4.484,9.266,0.691,67.201,0.656,-0.201,0.870,2.430,0.919,0.515,0.590,0.334,0.057,0.044,2.138
+Lebanon,Middle East and North Africa,4.584,0.055,4.691,4.477,9.626,0.848,67.355,0.525,-0.073,0.898,2.430,1.045,0.868,0.595,0.175,0.140,0.026,1.736
+Namibia,Sub-Saharan Africa,4.574,0.064,4.700,4.448,9.161,0.818,56.799,0.719,-0.149,0.847,2.430,0.882,0.801,0.262,0.411,0.091,0.059,2.068
+Palestinian Territories,Middle East and North Africa,4.517,0.067,4.649,4.384,8.485,0.826,62.250,0.653,-0.163,0.821,2.430,0.646,0.819,0.434,0.330,0.082,0.075,2.131
+Myanmar,Southeast Asia,4.426,0.052,4.527,4.324,8.541,0.779,59.302,0.876,0.509,0.660,2.430,0.666,0.713,0.341,0.601,0.520,0.178,1.407
+Jordan,Middle East and North Africa,4.395,0.062,4.516,4.273,9.182,0.767,67.000,0.755,-0.167,0.705,2.430,0.890,0.685,0.583,0.455,0.079,0.150,1.553
+Chad,Sub-Saharan Africa,4.355,0.094,4.540,4.171,7.364,0.619,48.478,0.579,0.041,0.807,2.430,0.255,0.353,0.000,0.240,0.215,0.084,3.209
+Sri Lanka,South Asia,4.325,0.066,4.454,4.196,9.470,0.827,67.299,0.841,0.079,0.863,2.430,0.990,0.820,0.593,0.559,0.239,0.049,1.075
+Swaziland,Sub-Saharan Africa,4.308,0.071,4.448,4.168,9.065,0.770,50.833,0.647,-0.185,0.708,2.430,0.849,0.693,0.074,0.323,0.067,0.147,2.155
+Comoros,Sub-Saharan Africa,4.289,0.084,4.454,4.123,8.031,0.626,57.349,0.548,0.082,0.781,2.430,0.488,0.367,0.279,0.202,0.241,0.101,2.610
+Egypt,Middle East and North Africa,4.283,0.045,4.371,4.195,9.367,0.750,61.998,0.749,-0.182,0.795,2.430,0.954,0.647,0.426,0.446,0.069,0.092,1.648
+Ethiopia,Sub-Saharan Africa,4.275,0.051,4.374,4.175,7.694,0.764,59.000,0.752,0.082,0.761,2.430,0.370,0.679,0.331,0.451,0.241,0.114,2.089
+Mauritania,Sub-Saharan Africa,4.227,0.070,4.365,4.090,8.542,0.795,57.161,0.561,-0.106,0.731,2.430,0.666,0.749,0.273,0.218,0.119,0.133,2.069
+Madagascar,Sub-Saharan Africa,4.208,0.072,4.349,4.068,7.396,0.686,59.305,0.552,-0.005,0.803,2.430,0.266,0.503,0.341,0.207,0.185,0.087,2.620
+Togo,Sub-Saharan Africa,4.107,0.077,4.258,3.956,7.362,0.569,54.914,0.619,0.032,0.772,2.430,0.254,0.239,0.203,0.289,0.209,0.107,2.806
+Zambia,Sub-Saharan Africa,4.073,0.069,4.209,3.938,8.145,0.708,55.809,0.782,0.061,0.823,2.430,0.528,0.552,0.231,0.487,0.227,0.074,1.975
+Sierra Leone,Sub-Saharan Africa,3.849,0.077,4.001,3.698,7.434,0.630,51.651,0.717,0.084,0.866,2.430,0.279,0.377,0.100,0.408,0.243,0.047,2.396
+India,South Asia,3.819,0.026,3.869,3.769,8.755,0.603,60.633,0.893,0.089,0.774,2.430,0.741,0.316,0.383,0.622,0.246,0.106,1.405
+Burundi,Sub-Saharan Africa,3.775,0.107,3.985,3.565,6.635,0.490,53.400,0.626,-0.024,0.607,2.430,0.000,0.062,0.155,0.298,0.172,0.212,2.876
+Yemen,Middle East and North Africa,3.658,0.070,3.794,3.521,7.578,0.832,57.122,0.602,-0.147,0.800,2.430,0.329,0.831,0.272,0.268,0.092,0.089,1.776
+Tanzania,Sub-Saharan Africa,3.623,0.071,3.762,3.485,7.876,0.702,57.999,0.833,0.183,0.577,2.430,0.433,0.540,0.300,0.549,0.307,0.231,1.263
+Haiti,Latin America and Caribbean,3.615,0.173,3.953,3.276,7.477,0.540,55.700,0.593,0.422,0.721,2.430,0.294,0.173,0.227,0.257,0.463,0.139,2.060
+Malawi,Sub-Saharan Africa,3.600,0.092,3.781,3.419,6.958,0.537,57.948,0.780,0.038,0.729,2.430,0.113,0.168,0.298,0.484,0.213,0.134,2.190
+Lesotho,Sub-Saharan Africa,3.512,0.120,3.748,3.276,7.926,0.787,48.700,0.715,-0.131,0.915,2.430,0.451,0.731,0.007,0.405,0.103,0.015,1.800
+Botswana,Sub-Saharan Africa,3.467,0.074,3.611,3.322,9.782,0.784,59.269,0.824,-0.246,0.801,2.430,1.099,0.724,0.340,0.539,0.027,0.088,0.648
+Rwanda,Sub-Saharan Africa,3.415,0.068,3.548,3.282,7.676,0.552,61.400,0.897,0.061,0.167,2.430,0.364,0.202,0.407,0.627,0.227,0.493,1.095
+Zimbabwe,Sub-Saharan Africa,3.145,0.058,3.259,3.030,7.943,0.750,56.201,0.677,-0.047,0.821,2.430,0.457,0.649,0.243,0.359,0.157,0.075,1.205
+Afghanistan,South Asia,2.523,0.038,2.596,2.449,7.695,0.463,52.493,0.382,-0.102,0.924,2.430,0.370,0.000,0.126,0.000,0.122,0.010,1.895