Skip to content

Instantly share code, notes, and snippets.

@kiwamizamurai
Created November 27, 2018 08:55
Show Gist options
  • Save kiwamizamurai/1a884182e037bb5335f57e8a8d3d033c to your computer and use it in GitHub Desktop.
Save kiwamizamurai/1a884182e037bb5335f57e8a8d3d033c to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# REFERENCE\n",
"- http://pbpython.com/categorical-encoding.html\n",
"\n",
"ここでは上のリンクを参考にデータの読み方、前処理について勉強したいと思う。"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"pd.set_option('display.max_columns', 50)\n",
"import numpy as np\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"sns.set_style(\"whitegrid\")\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>symboling</th>\n",
" <th>normalized_losses</th>\n",
" <th>make</th>\n",
" <th>fuel_type</th>\n",
" <th>aspiration</th>\n",
" <th>num_doors</th>\n",
" <th>body_style</th>\n",
" <th>drive_wheels</th>\n",
" <th>engine_location</th>\n",
" <th>wheel_base</th>\n",
" <th>length</th>\n",
" <th>width</th>\n",
" <th>height</th>\n",
" <th>curb_weight</th>\n",
" <th>engine_type</th>\n",
" <th>num_cylinders</th>\n",
" <th>engine_size</th>\n",
" <th>fuel_system</th>\n",
" <th>bore</th>\n",
" <th>stroke</th>\n",
" <th>compression_ratio</th>\n",
" <th>horsepower</th>\n",
" <th>peak_rpm</th>\n",
" <th>city_mpg</th>\n",
" <th>highway_mpg</th>\n",
" <th>price</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>alfa-romero</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>convertible</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>88.6</td>\n",
" <td>168.8</td>\n",
" <td>64.1</td>\n",
" <td>48.8</td>\n",
" <td>2548</td>\n",
" <td>dohc</td>\n",
" <td>four</td>\n",
" <td>130</td>\n",
" <td>mpfi</td>\n",
" <td>3.47</td>\n",
" <td>2.68</td>\n",
" <td>9.0</td>\n",
" <td>111.0</td>\n",
" <td>5000.0</td>\n",
" <td>21</td>\n",
" <td>27</td>\n",
" <td>13495.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>alfa-romero</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>convertible</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>88.6</td>\n",
" <td>168.8</td>\n",
" <td>64.1</td>\n",
" <td>48.8</td>\n",
" <td>2548</td>\n",
" <td>dohc</td>\n",
" <td>four</td>\n",
" <td>130</td>\n",
" <td>mpfi</td>\n",
" <td>3.47</td>\n",
" <td>2.68</td>\n",
" <td>9.0</td>\n",
" <td>111.0</td>\n",
" <td>5000.0</td>\n",
" <td>21</td>\n",
" <td>27</td>\n",
" <td>16500.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>alfa-romero</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>hatchback</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>94.5</td>\n",
" <td>171.2</td>\n",
" <td>65.5</td>\n",
" <td>52.4</td>\n",
" <td>2823</td>\n",
" <td>ohcv</td>\n",
" <td>six</td>\n",
" <td>152</td>\n",
" <td>mpfi</td>\n",
" <td>2.68</td>\n",
" <td>3.47</td>\n",
" <td>9.0</td>\n",
" <td>154.0</td>\n",
" <td>5000.0</td>\n",
" <td>19</td>\n",
" <td>26</td>\n",
" <td>16500.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2</td>\n",
" <td>164.0</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>99.8</td>\n",
" <td>176.6</td>\n",
" <td>66.2</td>\n",
" <td>54.3</td>\n",
" <td>2337</td>\n",
" <td>ohc</td>\n",
" <td>four</td>\n",
" <td>109</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.40</td>\n",
" <td>10.0</td>\n",
" <td>102.0</td>\n",
" <td>5500.0</td>\n",
" <td>24</td>\n",
" <td>30</td>\n",
" <td>13950.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2</td>\n",
" <td>164.0</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>4wd</td>\n",
" <td>front</td>\n",
" <td>99.4</td>\n",
" <td>176.6</td>\n",
" <td>66.4</td>\n",
" <td>54.3</td>\n",
" <td>2824</td>\n",
" <td>ohc</td>\n",
" <td>five</td>\n",
" <td>136</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.40</td>\n",
" <td>8.0</td>\n",
" <td>115.0</td>\n",
" <td>5500.0</td>\n",
" <td>18</td>\n",
" <td>22</td>\n",
" <td>17450.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>sedan</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>99.8</td>\n",
" <td>177.3</td>\n",
" <td>66.3</td>\n",
" <td>53.1</td>\n",
" <td>2507</td>\n",
" <td>ohc</td>\n",
" <td>five</td>\n",
" <td>136</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.40</td>\n",
" <td>8.5</td>\n",
" <td>110.0</td>\n",
" <td>5500.0</td>\n",
" <td>19</td>\n",
" <td>25</td>\n",
" <td>15250.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1</td>\n",
" <td>158.0</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>105.8</td>\n",
" <td>192.7</td>\n",
" <td>71.4</td>\n",
" <td>55.7</td>\n",
" <td>2844</td>\n",
" <td>ohc</td>\n",
" <td>five</td>\n",
" <td>136</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.40</td>\n",
" <td>8.5</td>\n",
" <td>110.0</td>\n",
" <td>5500.0</td>\n",
" <td>19</td>\n",
" <td>25</td>\n",
" <td>17710.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>wagon</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>105.8</td>\n",
" <td>192.7</td>\n",
" <td>71.4</td>\n",
" <td>55.7</td>\n",
" <td>2954</td>\n",
" <td>ohc</td>\n",
" <td>five</td>\n",
" <td>136</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.40</td>\n",
" <td>8.5</td>\n",
" <td>110.0</td>\n",
" <td>5500.0</td>\n",
" <td>19</td>\n",
" <td>25</td>\n",
" <td>18920.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1</td>\n",
" <td>158.0</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>turbo</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>105.8</td>\n",
" <td>192.7</td>\n",
" <td>71.4</td>\n",
" <td>55.9</td>\n",
" <td>3086</td>\n",
" <td>ohc</td>\n",
" <td>five</td>\n",
" <td>131</td>\n",
" <td>mpfi</td>\n",
" <td>3.13</td>\n",
" <td>3.40</td>\n",
" <td>8.3</td>\n",
" <td>140.0</td>\n",
" <td>5500.0</td>\n",
" <td>17</td>\n",
" <td>20</td>\n",
" <td>23875.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>turbo</td>\n",
" <td>two</td>\n",
" <td>hatchback</td>\n",
" <td>4wd</td>\n",
" <td>front</td>\n",
" <td>99.5</td>\n",
" <td>178.2</td>\n",
" <td>67.9</td>\n",
" <td>52.0</td>\n",
" <td>3053</td>\n",
" <td>ohc</td>\n",
" <td>five</td>\n",
" <td>131</td>\n",
" <td>mpfi</td>\n",
" <td>3.13</td>\n",
" <td>3.40</td>\n",
" <td>7.0</td>\n",
" <td>160.0</td>\n",
" <td>5500.0</td>\n",
" <td>16</td>\n",
" <td>22</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" symboling normalized_losses make fuel_type aspiration num_doors \\\n",
"0 3 NaN alfa-romero gas std two \n",
"1 3 NaN alfa-romero gas std two \n",
"2 1 NaN alfa-romero gas std two \n",
"3 2 164.0 audi gas std four \n",
"4 2 164.0 audi gas std four \n",
"5 2 NaN audi gas std two \n",
"6 1 158.0 audi gas std four \n",
"7 1 NaN audi gas std four \n",
"8 1 158.0 audi gas turbo four \n",
"9 0 NaN audi gas turbo two \n",
"\n",
" body_style drive_wheels engine_location wheel_base length width \\\n",
"0 convertible rwd front 88.6 168.8 64.1 \n",
"1 convertible rwd front 88.6 168.8 64.1 \n",
"2 hatchback rwd front 94.5 171.2 65.5 \n",
"3 sedan fwd front 99.8 176.6 66.2 \n",
"4 sedan 4wd front 99.4 176.6 66.4 \n",
"5 sedan fwd front 99.8 177.3 66.3 \n",
"6 sedan fwd front 105.8 192.7 71.4 \n",
"7 wagon fwd front 105.8 192.7 71.4 \n",
"8 sedan fwd front 105.8 192.7 71.4 \n",
"9 hatchback 4wd front 99.5 178.2 67.9 \n",
"\n",
" height curb_weight engine_type num_cylinders engine_size fuel_system \\\n",
"0 48.8 2548 dohc four 130 mpfi \n",
"1 48.8 2548 dohc four 130 mpfi \n",
"2 52.4 2823 ohcv six 152 mpfi \n",
"3 54.3 2337 ohc four 109 mpfi \n",
"4 54.3 2824 ohc five 136 mpfi \n",
"5 53.1 2507 ohc five 136 mpfi \n",
"6 55.7 2844 ohc five 136 mpfi \n",
"7 55.7 2954 ohc five 136 mpfi \n",
"8 55.9 3086 ohc five 131 mpfi \n",
"9 52.0 3053 ohc five 131 mpfi \n",
"\n",
" bore stroke compression_ratio horsepower peak_rpm city_mpg \\\n",
"0 3.47 2.68 9.0 111.0 5000.0 21 \n",
"1 3.47 2.68 9.0 111.0 5000.0 21 \n",
"2 2.68 3.47 9.0 154.0 5000.0 19 \n",
"3 3.19 3.40 10.0 102.0 5500.0 24 \n",
"4 3.19 3.40 8.0 115.0 5500.0 18 \n",
"5 3.19 3.40 8.5 110.0 5500.0 19 \n",
"6 3.19 3.40 8.5 110.0 5500.0 19 \n",
"7 3.19 3.40 8.5 110.0 5500.0 19 \n",
"8 3.13 3.40 8.3 140.0 5500.0 17 \n",
"9 3.13 3.40 7.0 160.0 5500.0 16 \n",
"\n",
" highway_mpg price \n",
"0 27 13495.0 \n",
"1 27 16500.0 \n",
"2 26 16500.0 \n",
"3 30 13950.0 \n",
"4 22 17450.0 \n",
"5 25 15250.0 \n",
"6 25 17710.0 \n",
"7 25 18920.0 \n",
"8 20 23875.0 \n",
"9 22 NaN "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"headers = [\"symboling\", \"normalized_losses\", \"make\", \"fuel_type\", \"aspiration\",\n",
" \"num_doors\", \"body_style\", \"drive_wheels\", \"engine_location\",\n",
" \"wheel_base\", \"length\", \"width\", \"height\", \"curb_weight\",\n",
" \"engine_type\", \"num_cylinders\", \"engine_size\", \"fuel_system\",\n",
" \"bore\", \"stroke\", \"compression_ratio\", \"horsepower\", \"peak_rpm\",\n",
" \"city_mpg\", \"highway_mpg\", \"price\"]\n",
"\n",
"df = pd.read_csv(\"http://mlr.cs.umass.edu/ml/machine-learning-databases/autos/imports-85.data\",\n",
" header=None, names=headers, na_values=\"?\" )\n",
"df.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 各列、特徴量のデータのタイプを確認する。"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"symboling int64\n",
"normalized_losses float64\n",
"make object\n",
"fuel_type object\n",
"aspiration object\n",
"num_doors object\n",
"body_style object\n",
"drive_wheels object\n",
"engine_location object\n",
"wheel_base float64\n",
"length float64\n",
"width float64\n",
"height float64\n",
"curb_weight int64\n",
"engine_type object\n",
"num_cylinders object\n",
"engine_size int64\n",
"fuel_system object\n",
"bore float64\n",
"stroke float64\n",
"compression_ratio float64\n",
"horsepower float64\n",
"peak_rpm float64\n",
"city_mpg int64\n",
"highway_mpg int64\n",
"price float64\n",
"dtype: object"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# NULLがある列を確認する。"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"symboling False\n",
"normalized_losses True\n",
"make False\n",
"fuel_type False\n",
"aspiration False\n",
"num_doors True\n",
"body_style False\n",
"drive_wheels False\n",
"engine_location False\n",
"wheel_base False\n",
"length False\n",
"width False\n",
"height False\n",
"curb_weight False\n",
"engine_type False\n",
"num_cylinders False\n",
"engine_size False\n",
"fuel_system False\n",
"bore True\n",
"stroke True\n",
"compression_ratio False\n",
"horsepower True\n",
"peak_rpm True\n",
"city_mpg False\n",
"highway_mpg False\n",
"price True\n",
"dtype: bool"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().any()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"normalized_losses 41\n",
"num_doors 2\n",
"bore 4\n",
"stroke 4\n",
"horsepower 2\n",
"peak_rpm 2\n",
"price 4\n",
"dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().sum()[df.isnull().sum() != 0]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>symboling</th>\n",
" <th>normalized_losses</th>\n",
" <th>make</th>\n",
" <th>fuel_type</th>\n",
" <th>aspiration</th>\n",
" <th>num_doors</th>\n",
" <th>body_style</th>\n",
" <th>drive_wheels</th>\n",
" <th>engine_location</th>\n",
" <th>wheel_base</th>\n",
" <th>length</th>\n",
" <th>width</th>\n",
" <th>height</th>\n",
" <th>curb_weight</th>\n",
" <th>engine_type</th>\n",
" <th>num_cylinders</th>\n",
" <th>engine_size</th>\n",
" <th>fuel_system</th>\n",
" <th>bore</th>\n",
" <th>stroke</th>\n",
" <th>compression_ratio</th>\n",
" <th>horsepower</th>\n",
" <th>peak_rpm</th>\n",
" <th>city_mpg</th>\n",
" <th>highway_mpg</th>\n",
" <th>price</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>alfa-romero</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>convertible</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>88.6</td>\n",
" <td>168.8</td>\n",
" <td>64.1</td>\n",
" <td>48.8</td>\n",
" <td>2548</td>\n",
" <td>dohc</td>\n",
" <td>four</td>\n",
" <td>130</td>\n",
" <td>mpfi</td>\n",
" <td>3.47</td>\n",
" <td>2.68</td>\n",
" <td>9.0</td>\n",
" <td>111.0</td>\n",
" <td>5000.0</td>\n",
" <td>21</td>\n",
" <td>27</td>\n",
" <td>13495.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>alfa-romero</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>convertible</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>88.6</td>\n",
" <td>168.8</td>\n",
" <td>64.1</td>\n",
" <td>48.8</td>\n",
" <td>2548</td>\n",
" <td>dohc</td>\n",
" <td>four</td>\n",
" <td>130</td>\n",
" <td>mpfi</td>\n",
" <td>3.47</td>\n",
" <td>2.68</td>\n",
" <td>9.0</td>\n",
" <td>111.0</td>\n",
" <td>5000.0</td>\n",
" <td>21</td>\n",
" <td>27</td>\n",
" <td>16500.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>alfa-romero</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>hatchback</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>94.5</td>\n",
" <td>171.2</td>\n",
" <td>65.5</td>\n",
" <td>52.4</td>\n",
" <td>2823</td>\n",
" <td>ohcv</td>\n",
" <td>six</td>\n",
" <td>152</td>\n",
" <td>mpfi</td>\n",
" <td>2.68</td>\n",
" <td>3.47</td>\n",
" <td>9.0</td>\n",
" <td>154.0</td>\n",
" <td>5000.0</td>\n",
" <td>19</td>\n",
" <td>26</td>\n",
" <td>16500.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>sedan</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>99.8</td>\n",
" <td>177.3</td>\n",
" <td>66.3</td>\n",
" <td>53.1</td>\n",
" <td>2507</td>\n",
" <td>ohc</td>\n",
" <td>five</td>\n",
" <td>136</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.40</td>\n",
" <td>8.5</td>\n",
" <td>110.0</td>\n",
" <td>5500.0</td>\n",
" <td>19</td>\n",
" <td>25</td>\n",
" <td>15250.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>audi</td>\n",
" <td>gas</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>wagon</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>105.8</td>\n",
" <td>192.7</td>\n",
" <td>71.4</td>\n",
" <td>55.7</td>\n",
" <td>2954</td>\n",
" <td>ohc</td>\n",
" <td>five</td>\n",
" <td>136</td>\n",
" <td>mpfi</td>\n",
" <td>3.19</td>\n",
" <td>3.40</td>\n",
" <td>8.5</td>\n",
" <td>110.0</td>\n",
" <td>5500.0</td>\n",
" <td>19</td>\n",
" <td>25</td>\n",
" <td>18920.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" symboling normalized_losses make fuel_type aspiration num_doors \\\n",
"0 3 NaN alfa-romero gas std two \n",
"1 3 NaN alfa-romero gas std two \n",
"2 1 NaN alfa-romero gas std two \n",
"5 2 NaN audi gas std two \n",
"7 1 NaN audi gas std four \n",
"\n",
" body_style drive_wheels engine_location wheel_base length width \\\n",
"0 convertible rwd front 88.6 168.8 64.1 \n",
"1 convertible rwd front 88.6 168.8 64.1 \n",
"2 hatchback rwd front 94.5 171.2 65.5 \n",
"5 sedan fwd front 99.8 177.3 66.3 \n",
"7 wagon fwd front 105.8 192.7 71.4 \n",
"\n",
" height curb_weight engine_type num_cylinders engine_size fuel_system \\\n",
"0 48.8 2548 dohc four 130 mpfi \n",
"1 48.8 2548 dohc four 130 mpfi \n",
"2 52.4 2823 ohcv six 152 mpfi \n",
"5 53.1 2507 ohc five 136 mpfi \n",
"7 55.7 2954 ohc five 136 mpfi \n",
"\n",
" bore stroke compression_ratio horsepower peak_rpm city_mpg \\\n",
"0 3.47 2.68 9.0 111.0 5000.0 21 \n",
"1 3.47 2.68 9.0 111.0 5000.0 21 \n",
"2 2.68 3.47 9.0 154.0 5000.0 19 \n",
"5 3.19 3.40 8.5 110.0 5500.0 19 \n",
"7 3.19 3.40 8.5 110.0 5500.0 19 \n",
"\n",
" highway_mpg price \n",
"0 27 13495.0 \n",
"1 27 16500.0 \n",
"2 26 16500.0 \n",
"5 25 15250.0 \n",
"7 25 18920.0 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[df.isnull().any(axis=1)].head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# sklearn.preprocessing.Imputer"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ちなみにNULL値は次のコードで置き換えられる。\n",
"- http://lijiancheng0614.github.io/scikit-learn/modules/generated/sklearn.preprocessing.Imputer.html"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 各列の大まかな分析をする"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>symboling</th>\n",
" <th>normalized_losses</th>\n",
" <th>wheel_base</th>\n",
" <th>length</th>\n",
" <th>width</th>\n",
" <th>height</th>\n",
" <th>curb_weight</th>\n",
" <th>engine_size</th>\n",
" <th>bore</th>\n",
" <th>stroke</th>\n",
" <th>compression_ratio</th>\n",
" <th>horsepower</th>\n",
" <th>peak_rpm</th>\n",
" <th>city_mpg</th>\n",
" <th>highway_mpg</th>\n",
" <th>price</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>205.000000</td>\n",
" <td>164.000000</td>\n",
" <td>205.000000</td>\n",
" <td>205.000000</td>\n",
" <td>205.000000</td>\n",
" <td>205.000000</td>\n",
" <td>205.000000</td>\n",
" <td>205.000000</td>\n",
" <td>201.000000</td>\n",
" <td>201.000000</td>\n",
" <td>205.000000</td>\n",
" <td>203.000000</td>\n",
" <td>203.000000</td>\n",
" <td>205.000000</td>\n",
" <td>205.000000</td>\n",
" <td>201.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>0.834146</td>\n",
" <td>122.000000</td>\n",
" <td>98.756585</td>\n",
" <td>174.049268</td>\n",
" <td>65.907805</td>\n",
" <td>53.724878</td>\n",
" <td>2555.565854</td>\n",
" <td>126.907317</td>\n",
" <td>3.329751</td>\n",
" <td>3.255423</td>\n",
" <td>10.142537</td>\n",
" <td>104.256158</td>\n",
" <td>5125.369458</td>\n",
" <td>25.219512</td>\n",
" <td>30.751220</td>\n",
" <td>13207.129353</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>1.245307</td>\n",
" <td>35.442168</td>\n",
" <td>6.021776</td>\n",
" <td>12.337289</td>\n",
" <td>2.145204</td>\n",
" <td>2.443522</td>\n",
" <td>520.680204</td>\n",
" <td>41.642693</td>\n",
" <td>0.273539</td>\n",
" <td>0.316717</td>\n",
" <td>3.972040</td>\n",
" <td>39.714369</td>\n",
" <td>479.334560</td>\n",
" <td>6.542142</td>\n",
" <td>6.886443</td>\n",
" <td>7947.066342</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>-2.000000</td>\n",
" <td>65.000000</td>\n",
" <td>86.600000</td>\n",
" <td>141.100000</td>\n",
" <td>60.300000</td>\n",
" <td>47.800000</td>\n",
" <td>1488.000000</td>\n",
" <td>61.000000</td>\n",
" <td>2.540000</td>\n",
" <td>2.070000</td>\n",
" <td>7.000000</td>\n",
" <td>48.000000</td>\n",
" <td>4150.000000</td>\n",
" <td>13.000000</td>\n",
" <td>16.000000</td>\n",
" <td>5118.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>0.000000</td>\n",
" <td>94.000000</td>\n",
" <td>94.500000</td>\n",
" <td>166.300000</td>\n",
" <td>64.100000</td>\n",
" <td>52.000000</td>\n",
" <td>2145.000000</td>\n",
" <td>97.000000</td>\n",
" <td>3.150000</td>\n",
" <td>3.110000</td>\n",
" <td>8.600000</td>\n",
" <td>70.000000</td>\n",
" <td>4800.000000</td>\n",
" <td>19.000000</td>\n",
" <td>25.000000</td>\n",
" <td>7775.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1.000000</td>\n",
" <td>115.000000</td>\n",
" <td>97.000000</td>\n",
" <td>173.200000</td>\n",
" <td>65.500000</td>\n",
" <td>54.100000</td>\n",
" <td>2414.000000</td>\n",
" <td>120.000000</td>\n",
" <td>3.310000</td>\n",
" <td>3.290000</td>\n",
" <td>9.000000</td>\n",
" <td>95.000000</td>\n",
" <td>5200.000000</td>\n",
" <td>24.000000</td>\n",
" <td>30.000000</td>\n",
" <td>10295.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>2.000000</td>\n",
" <td>150.000000</td>\n",
" <td>102.400000</td>\n",
" <td>183.100000</td>\n",
" <td>66.900000</td>\n",
" <td>55.500000</td>\n",
" <td>2935.000000</td>\n",
" <td>141.000000</td>\n",
" <td>3.590000</td>\n",
" <td>3.410000</td>\n",
" <td>9.400000</td>\n",
" <td>116.000000</td>\n",
" <td>5500.000000</td>\n",
" <td>30.000000</td>\n",
" <td>34.000000</td>\n",
" <td>16500.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>3.000000</td>\n",
" <td>256.000000</td>\n",
" <td>120.900000</td>\n",
" <td>208.100000</td>\n",
" <td>72.300000</td>\n",
" <td>59.800000</td>\n",
" <td>4066.000000</td>\n",
" <td>326.000000</td>\n",
" <td>3.940000</td>\n",
" <td>4.170000</td>\n",
" <td>23.000000</td>\n",
" <td>288.000000</td>\n",
" <td>6600.000000</td>\n",
" <td>49.000000</td>\n",
" <td>54.000000</td>\n",
" <td>45400.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" symboling normalized_losses wheel_base length width \\\n",
"count 205.000000 164.000000 205.000000 205.000000 205.000000 \n",
"mean 0.834146 122.000000 98.756585 174.049268 65.907805 \n",
"std 1.245307 35.442168 6.021776 12.337289 2.145204 \n",
"min -2.000000 65.000000 86.600000 141.100000 60.300000 \n",
"25% 0.000000 94.000000 94.500000 166.300000 64.100000 \n",
"50% 1.000000 115.000000 97.000000 173.200000 65.500000 \n",
"75% 2.000000 150.000000 102.400000 183.100000 66.900000 \n",
"max 3.000000 256.000000 120.900000 208.100000 72.300000 \n",
"\n",
" height curb_weight engine_size bore stroke \\\n",
"count 205.000000 205.000000 205.000000 201.000000 201.000000 \n",
"mean 53.724878 2555.565854 126.907317 3.329751 3.255423 \n",
"std 2.443522 520.680204 41.642693 0.273539 0.316717 \n",
"min 47.800000 1488.000000 61.000000 2.540000 2.070000 \n",
"25% 52.000000 2145.000000 97.000000 3.150000 3.110000 \n",
"50% 54.100000 2414.000000 120.000000 3.310000 3.290000 \n",
"75% 55.500000 2935.000000 141.000000 3.590000 3.410000 \n",
"max 59.800000 4066.000000 326.000000 3.940000 4.170000 \n",
"\n",
" compression_ratio horsepower peak_rpm city_mpg highway_mpg \\\n",
"count 205.000000 203.000000 203.000000 205.000000 205.000000 \n",
"mean 10.142537 104.256158 5125.369458 25.219512 30.751220 \n",
"std 3.972040 39.714369 479.334560 6.542142 6.886443 \n",
"min 7.000000 48.000000 4150.000000 13.000000 16.000000 \n",
"25% 8.600000 70.000000 4800.000000 19.000000 25.000000 \n",
"50% 9.000000 95.000000 5200.000000 24.000000 30.000000 \n",
"75% 9.400000 116.000000 5500.000000 30.000000 34.000000 \n",
"max 23.000000 288.000000 6600.000000 49.000000 54.000000 \n",
"\n",
" price \n",
"count 201.000000 \n",
"mean 13207.129353 \n",
"std 7947.066342 \n",
"min 5118.000000 \n",
"25% 7775.000000 \n",
"50% 10295.000000 \n",
"75% 16500.000000 \n",
"max 45400.000000 "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a1e694ba8>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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gLWf4ft/DWwALAmcBqwOvNb2JcB2wL22twG+DiwsaYrt/wXupSScRz3LMfZbvfm8DnBN87GGpPkkLQi8bhR/R0RERMRA6DqBnJvPAXtKOosym/j43L7R9qPATMps5mzAwO+aPz4L2FzSRZQ9ln8CXtj82RHAesDp4zDezSSdDewBfMb2VZRk9rfASc345/pviIiIiBgknR2isX1M3+1HKHsNAZC0NvBh2zdI2hF4U/N9y/T9zFZ9t7fsu7113+1rgFXnMoSpwNG2n3yGcS4zl9uvbcYK8E3bTyWikl4A3GN7zWYG8hpKkhsREREx8Lo+hT03M4EfSnoYeBL48Hj+5ZIOosw+btHcfwew+xy+9Vu2T3oWIWZRlrAvoSyBH9ksm0dEREQMvHkygbR9HvCGFv/+vUbc/znw82f5d203h6/NBrZ/VoOLiIiImMfNq3sgIyIiImIelQQyIiIiIsYkCWREREREjEkSyIiIiIgYkySQERERETEmSSAjIiIiYkySQEZERETEmEwZGhpNq+doQX7xERER864pXQ9gXpYZyIiIiIgYk3myE81k8crlX1M95g03XgnAh1Zes3rs46/9PbP2WKd63CW/ciEAfz9xt+qxF/rAt3nivO9Ujzt1/U8AsNErV64e++wbri03rvlp9dis8p7u4gK379RaA625euERl/L6l72yetw/3HIDAK952Suqx77ylpu6+X8GWOU9rLDC6tXDzphxGQBfvfCP1WP/v3VW47uXXFk97sfXqP8eGaOXGciIiIiIGJMkkBERERExJkkgIyIiImJMkkBGRERExJgkgYyIiIiIMUkCGRERERFjkgQyIiIiIsYkCWREREREjEkSyIiIiIgYkySQERERETEmSSAjIiIiYkySQD5LkraT9I6uxxERERFR29SuBzCobB/T9RgiIiIiupAEci4kbQdsASwKLAl8CfgiMAN4FDDwV+Bw4NvAmsA0YF/bp0j6MrA+ZZb3YNs/rv1viIiIiGhDlrCf3nOBjYG3AgcDiwH7296673u2AJa0vSawKbCGpM2Al9teB9gQ2FvSYnWHHhEREdGOJJBP71zbs23fAdwDLEWZeewn4GIA23+1vQ+wKrC6pN8ApwMLAMtVG3VEREREi5JAPr3VASQtTVnKvhOYPeJ7rgPWaL7veZLOAK4HzrH9ZmAj4EfATZXGHBEREdGq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\n",
"text/plain": [
"<Figure size 792x648 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"corr = df.corr()\n",
"# Generate a mask for the upper triangle\n",
"mask = np.zeros_like(corr, dtype=np.bool)\n",
"mask[np.triu_indices_from(mask)] = True\n",
"\n",
"# Set up the matplotlib figure\n",
"f, ax = plt.subplots(figsize=(11, 9))\n",
"\n",
"# Draw the heatmap with the mask and correct aspect ratio\n",
"sns.heatmap(corr, mask=mask, vmax=.8, center=0,\n",
" square=True, linewidths=.5, cbar_kws={\"shrink\": .5})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# LabelEncoder"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import LabelEncoder"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['alfa-romero', 'audi', 'bmw', 'chevrolet', 'dodge', 'honda',\n",
" 'isuzu', 'jaguar', 'mazda', 'mercedes-benz', 'mercury',\n",
" 'mitsubishi', 'nissan', 'peugot', 'plymouth', 'porsche', 'renault',\n",
" 'saab', 'subaru', 'toyota', 'volkswagen', 'volvo'], dtype=object)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"make\"].unique()\n",
"df[\"make\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>make</th>\n",
" <th>make_encode</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>alfa-romero</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>alfa-romero</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>alfa-romero</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>bmw</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" make make_encode\n",
"0 alfa-romero 0\n",
"1 alfa-romero 0\n",
"2 alfa-romero 0\n",
"3 audi 1\n",
"4 audi 1\n",
"5 audi 1\n",
"6 audi 1\n",
"7 audi 1\n",
"8 audi 1\n",
"9 audi 1\n",
"10 bmw 2"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"le = LabelEncoder()\n",
"df[\"make_encode\"] = le.fit_transform(df[\"make\"])\n",
"df[[\"make\", \"make_encode\"]].head(11)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# LabelBinarizer"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import LabelBinarizer"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['convertible', 'hatchback', 'sedan', 'wagon', 'hardtop'],\n",
" dtype=object)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"body_style\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>convertible</th>\n",
" <th>hardtop</th>\n",
" <th>hatchback</th>\n",
" <th>sedan</th>\n",
" <th>wagon</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" convertible hardtop hatchback sedan wagon\n",
"0 1 0 0 0 0\n",
"1 1 0 0 0 0\n",
"2 0 0 1 0 0\n",
"3 0 0 0 1 0\n",
"4 0 0 0 1 0"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lb = LabelBinarizer()\n",
"lb_results = lb.fit_transform(df[\"body_style\"])\n",
"pd.DataFrame(lb_results, columns=lb.classes_).head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# OneHotEncoder"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import OneHotEncoder"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"これは上で得た次のデータの[make_encode]に適応させます"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>make</th>\n",
" <th>make_encode</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>alfa-romero</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>alfa-romero</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>alfa-romero</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>audi</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>bmw</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" make make_encode\n",
"0 alfa-romero 0\n",
"1 alfa-romero 0\n",
"2 alfa-romero 0\n",
"3 audi 1\n",
"4 audi 1\n",
"5 audi 1\n",
"6 audi 1\n",
"7 audi 1\n",
"8 audi 1\n",
"9 audi 1\n",
"10 bmw 2"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[[\"make\", \"make_encode\"]].head(11)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"この場合は各列が[alfa-romero, audi, bmw]に対応したOneHotVectorを返します。"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1., 0., 0.],\n",
" [1., 0., 0.],\n",
" [1., 0., 0.],\n",
" [0., 1., 0.],\n",
" [0., 1., 0.],\n",
" [0., 1., 0.],\n",
" [0., 1., 0.],\n",
" [0., 1., 0.],\n",
" [0., 1., 0.],\n",
" [0., 1., 0.],\n",
" [0., 0., 1.]])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"oh = OneHotEncoder()\n",
"oh.fit_transform(df[\"make_encode\"].head(11).values.reshape(-1,1)).A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# MinMaxScaler"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import MinMaxScaler"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"mms = MinMaxScaler()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1a28765f28>"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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I43c1F9Hh/e1xoNIivHedCNnMmaEsWn3kEWLFmlgYEA/+MEPtHLlyqHHH3zwQf34xz9WXV2dTjvtNF133XW69957tXv3bnV3d2vNmjW64YYb9OEPf1ivv/66LrroIv3617/W3r17tWTJEl177bXauXPnUFj09PTozjvvVH19va688kp94AMf0Nlnn61nn31WX/3qV/XjH/9Yu3btkiTt379ff/mXf6lPfvKT+upXv6re3l79/ve/11VXXaVZs2Zp69at+tWvfqUTTzxRl156qbZt26a9e/fqpptuUnNzsyZPnqzVq1drYGBAX/rSlzRr1iy99tpram1t1W233VZehyFcrBmEK4oiA1Se35WwYfwqdweGqC583r59u/t3f/d37jvvvOOee+657n/+53+6d911l/vQQw+5n/zkJ92+vj53YGDAveqqq9yf/OQn7tq1a93Vq1e7ruu6r732mrtw4UL3vffecw8ePOi2tra67777rtvT0+OeccYZruu67sMPP+y++eabruu67v333+/ed999Q6/r7e11Xdd1V65c6b788stDbfrpT3/qfvazn3V7e3vdbdu2udu3b3dd13UzmYx7+eWXu67rutdff727ZcsW13Vdd/Hixa7ruu6f//mfuxs3bnRd13Wfeuop9/Of/7z72muvuaeffrr7/vvvu/39/e6SJUvcgwcPltdpCRTrXQb6+1333HO9f9CplPf13HMrtsNIrPvGIvqluLjswGBF1GuS06ZN00033aQbbrhBp556qnp7e3XyyServr5eknTaaafp17/+tSSN2NV79uzZOuqoo9TQ0KAZM2boAx/4gKThjVM/9KEPac2aNZo6dareeuutoVtIHHfccWpoaBjVjhdeeEHf+ta39N3vflcNDQ065phjdP/992vdunVKpVLq7+8v+h4OHjyoj3zkI5Kkj33sY/r6178uSTr++OOHdgw/5phj1NvbW1ZfIWR8kkdQVVyFGds1o0qsSf7Jn/yJTjjhBK1fv16TJ0/Wnj171N/fL9d1tWvXrqEQmjRpuJv8duvO19HRoTvuuENf+9rXNHPmzKF1qfxj5Ozdu1dr1qzRvffeOxQef//3f6+LL75Yd911lxYuXDj0+lQqNWqNa+bMmXr11VcleQUOc+bMmVAbEQOsGaBUubWLFSukW2/1vi5bVjW7iMd2ZDSy+tFVU1Mq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\n",
"text/plain": [
"<Figure size 504x504 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.datasets import make_blobs\n",
"\n",
"X, Y = make_blobs(random_state=8,\n",
" n_samples=100, \n",
" n_features=2, \n",
" cluster_std=1.,\n",
" centers=1)\n",
"\n",
"plt.figure(figsize=(7, 7))\n",
"plt.scatter(X[:, 0], X[:, 1], marker='o', c=\"r\", s=25,label=\"original\")\n",
"\n",
"XX = mms.fit_transform(X)\n",
"plt.scatter(XX[:, 0], XX[:, 1], marker='o', c=\"b\", s=25, label=\"Normarization\")\n",
"\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# StandardScaler"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import StandardScaler"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"ss = StandardScaler()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1a287c64e0>"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaQAAAGXCAYAAAD8oiQ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xt8VOWdP/DPZDJDSFIrcpGbXSBsHqNgubREsSiuJRhLa7Velr7Q1d1qV1t05UerVlwVFPWli6hbW6W1tUtFK9gqqVli7YIpF1MjCsjkiUFtwYh4gdpkGJKZOb8/DifMTM5MzsycM/Ocmc/79eIVM5dznpPgfHgu5/t4NE0DERFRvpXkuwFEREQAA4mIiBTBQCIiIiUwkIiISAkMJCIiUgIDiYiIlFDq1IFbW1u5npyIiPqZPn26x+xxxwLp6EmdPHzWAoEAampq8t0MxxTy9fHa3InX5k52Xltra2vS5zhkR0RESmAgERGREhhIRESkBAYSEREpgYFERERKYCAREZESGEhERKQEBlKCV155Bc8880zS55977jm8/PLLaR/3zDPPzKZZREQFz9EbY7MWiQCNjcD27cDUqUB9PeD1OnrKs846K+XzF110kaPnJyIqVuoGUiQCzJ0LvPoq0N0NVFQAtbXAhg1ZhVJvby9+9KMfYe/evejq6sJ1112HNWvWYMiQIfjss8/wta99DX/5y1+wePFi/PjHP8Yf/vAHnHDCCTh8+DBuuOEGtLS0YNiwYZgwYQJWrVoFn8+Hffv24fzzz8e1116L9vZ23HvvvYhGo/jss8+wZMkSTJs2zcYfDBFRYVI3kBob9TDq6tK/7+rSv29sBObNy/iwzzzzDIYMGYL7778fr7/+Om6++Wb4/X5cccUVmDNnDp577jkAQFtbG5qbm7F27Vr09vbi61//er9jdXZ24oUXXkBPTw9mzZqFa6+9Fh0dHbjpppsghMD69evx3HPPMZCIiCxQN5C2b9d7RrG6u4E33sgqkPbs2YOZM2cCAAYPHoyqqips3rwZ48eP7/e6yZMnw+v1wuv1YtKkSf2OVV1djdLSUpSWlqKsrAwAMGLECDz66KMoKytDd3c3KisrM24rEVExsbyoQQhRK4TYePS/pwghmoUQG4UQG4QQJ9resqlT9WG6WBUVwJQpWR22qqoKr732GgDg8OHDaG9vx9ixY+HxxBefnThxInbu3IloNIqenh7s3r2737ES3wMAd999N66//nrcd999qK6uhqax6DlRUYpEgIYGYNky/Wskku8WKc9SD0kI8UMAlwMwuiwPAVgopXxDCPFdADcBWGRry+rr9TmjxDmk+vqsDnvppZfitttuw/z583Ho0CF8//vf7xumiyWEwNlnn41LL70UQ4YMgc/nQ2npwD+ub3zjG7juuuswdOhQjBw5EgcPHsyqvUTkQg7NgRc6q0N2ewBcBOB/jn7/z1LKD2KOEbK7YfB69V9eY6M+TDdlii2r7Px+P+677z4Ax0qqX3jhhX3PG6voPvnkExx33HFYu3Ytenp68LWvfQ2jRo3CwoUL+15bW1vb99+bN28GAFx11VW46qqr+p3XeJ6IioBDc+CFzlIgSSnXCSHGxXz/AQAIIWYC+D6A1GulM+X16r+8PPwChwwZgl27duFb3/oWPB4PLrnkEowePTrn7SAiF7JrDjwPt77kU8aLGoQQlwG4FcDXpJQfmb0mEAhkevicCIVCKdt4xRVXxH2v+vUkGuj63IzX5k6uuLZIBJXNzSgLBBCqqUHXrFmWQiD22iqHDcPowYPhDQaPHXbwYHQOHYouq9cfieALV1+Nsh07UHL4MKKDByN02mn466pVOQ+lXP3eMgokIcQCAN8FMFtK+Wmy16m+e2Ih7/AIFPb18drcSflry2LuJ+7aqquBdevijuOtrcVJ11xjPUwaGoBdu4CjoeYNBlGxaxdq3nsv56NGudoxNu1AEkJ4ATwM4K8AnhNCAMAmKeXtmTaQiBRQZMNDpuya+7FjDtyhW19UZjmQpJTvATj96LcnONIaIsoPrgrT2RkC2c6BG7e+GOEI2HLri8pYXJWI4nsGmhbfMygmDt3/mBHj1pfKSsDj0b/acOuLyhhIAFavXp31MS699FLs27cv7fft2bMHl19+OQDgxhtvRE9PT1rvf+mll/Dhhx/io48+wh133JH2+YkApO4ZFBOVQsAY9luzBli6VP9a4D1WpQMpEo2gob0ByzYtQ0N7AyJRZ+50/slPfuLIcdP14IMPwu/3p/WeX/3qV+jq6sLw4cMZSJQ5lXoG+aRaCBjDfkuW6F8LOIwAhWvZRaIRzF09F6++/yq6e7pR4a9A7ZhabFiwAd6SzH8p7777Lm655RaUlpYiFArh3HPPxd/+9jfccccdWLx4MW699Vb8/e9/x8GDB3HJJZfg29/+Ni6//HKcfPLJePvtt9HV1YWHHnoIY8aMwYMPPojm5ua4igz79+/HHXfcgSNHjuDQoUP43ve+h69+9auYN28exo0bB7/fj5tvvhmLFy+GpmkYPnx4X9v+6Z/+CY2Njbj77rvx7rvvAgB27dqF//zP/8Spp57ar4r4Z599hkAggJtuugn3338/brrpJvzmN7/B5s2bsXLlSkQiEYwePRrLly9HIBAwrU5OBMCxyiiulMf7HzNWKAtSNE1z5M9rr72mZWO9XK9VLq/UcAf6/lQur9TWy/VZHXf16tXa0qVLtZ6eHu3pp5/WpJTazJkzNU3TtF27dmkbNmzQNE3T9u/fr82ZM0fTNE1bsGCB9sILL2iapmkrVqzQHnvsMU1Kqc2fP1+LRCLa3//+d+2MM87Q9u7dq23evFnbtm2bpmma1traql155ZWapmnaOeeco7311luapmnavffeqz3zzDOapmna73//e23BggV9rwmFQn1tXbNmjbZ48WItGo1qv//977W2tjZN0zTthRde0G699da+tnV0dGh79+7VLrnkEi0ajWrnnHOOtn//fm337t3aL3/5S+3ee+/Vtm3bptXX12u9vb1ad3e3Nm3atKx+jvm2e/fufDfBMXm7tnBY09av17Rly/Sv4bDtp+DvzQHhsKade66mVVZqmsejfz33XFt/f3Ze29FsMM0NZXtI2z/Yju6e+DHt7p5uvLH/DcyrzvxfLhdffDFWrVqF73znOwCAL33pS33PDRs2DE8++SSamppQWVmJcDjc99wpp5wCABg5ciQ+/vhjdHR0YNKkSSgpKUFlZSWqq6sBAMOHD8dPfvITrF27Fh6PJ+4YRkXxt99+GxdccAEAYNq0aVizZk2/dr744ot4+eWX8eijj8Lj8ViuIn7w4EFUVlbixBNPxKeffoovf/nLWLFiBWbPnm1anZyojxt7BlRQZYqUnUOaOmoqKvzxY9oV/gpMGZndmPbLL7+M6dOn48knn8TMmTPxs5/9rK8i9xNPPIEpU6bggQcewHnnnZeyUvf48eOxY8cORKNRBINBdHR0AAAeeughXHDBBbj//vtRW1sbd4ySEv3HPWHCBGzfvh0AsHPnzn7HfuWVV7B69Wo89NBD8Pl8AJJXEfd4PHHnGDJkCLq6unDgwAEAQEtLC8aNG9f3WiIy4ebK3AW0IEXZHlL9xHrUjqntN4dUPzG7Me1JkybhBz/4AR555BGEQiEsW7YM+/btw+LFi3HxxRfjjjvuwPr163H88cfD6/UmXfVWU1OD8847DxdffDFGjBiBoUOHAgDOO+883H333XjssccwatQo02rfN9xwA2688Ua8+OKLGDt2bL/nr7/+elRXV+O73/0uAH1uKVkV8alTp+KHP/whli1bBkAPnbvuugsLFy5EKBTCyJEjcc899+Dtt9/O6udGVLDcfg9WId2vlGwsL9s/2c4haZqmhSNhbb1cry3btExbL9dr4Yi9Y9qFPJ6taYV9fbw2d1Ly2tav1+dd9Duw9D+VlfrjaeAckjWunEMCAG+JF/Oq52U1Z0RElJLbS/Q4tFVPPigdSERUJPK5bLkQhrwKZEEKA4mI8ivfcziJ92CVlwNVVYBRldqlvQ03UnaVHREViXzX0YutznDHHcDEicCePcCddwLz5+th6aZVdy7GQCKi/FJh2bIx5DVtmh5GxV5kNk8YSESUXyrV0VMhHIsYA4mI8kulCtsqhWMR4qIGIsovlZYts8hsXjGQiCj/VFi2bCw9nzULmDkTKC3V55S4yi5nGEhERMmWnt96K8MohziHRESU76XnBICBRERuZ0elbq6uUwKH7IjIveyq8lAI5YMKAHtIRORedg21qbT0vIixh0RE7mVXpW6Vlp4XMQYSEbmXnUNtsUvP7aw+ns9K5i7DQCIi93LiRlY7q4/nu5K5yzCQiMi9YofaXn8dCIf1xxobM++JxM5LAfHzUuneuGvnsYoAA4mI3M3r1cNn5Up7eiKp5qXq69MbfnP7brQ5xkAiKnaFMMdhZ08k2bzU5Mnmw28vvgg0NWFYUxNQVxf/8yuE5eSRCCo3bgTWrnX87wcDichN7A6PXMxxxLS5ctgwoLra/g80O3siyealgP6ht20bMGMGsGcPhnV3A7/4RfzPz+3FWo/+/Ri9dStw+LDjc2AMJCK3cCI8nJ7jSGjz6MGDgXXr7P9As7snsnAhMHKkfk/SxRfrP4vly81DLxAAenrgAfr//Ny+nPzo3w9vMKh/7/AcGG+MJXILJ+qtOV0yJ6HN3mDQmRpx2dzYGlt66Pnn9WG3BQuAp54Cfvc74JFH9NeZ7ZXk9wO9vfGPJf78jOXkS5YcCym3yHFJJfaQiNzCiQlyp+c4cjWpn2lPJLHXOWiQHjBGPbzY0DcbfquqOrbluSEfc0ROzQPmeA6MgUTkFk58ODg9x2HWZp8P6OnRP0Tt7C1ksqdS4pBlKNT/NbEBmhh6dXXA+ecDr74KrbsbHrOfX7phkcnrnZoHPPr3I7J1K7yxc0gOzYExkIjcwonwcHqOw2jztm1Adzc0AJ6eHmDFCmDLFvvmkjLtIZj14BLFhr6xUMF4L9C3yu6jl17CiDlz4s+dblgke/3Rc5hen5PzgEf/fnQ+/jhO+uQT5+fANE1z5M9rr72mqW737t35boKjCvn6ivbawmFNW79e05Yt07+Gw7lrWKbCYU277TZN8/s1TZ/90v9UVurXYMfxzz1XP57Ho38991xrP5v16/XXx7bL69W0sjLzY6U4l+nvzez4qa7b7PUVFZr2xS8mv76lS/XHY9/j8eh/R2xi5/9vR7PBNDe4qIHITdw4Qe716sN0A03+ZyqbxR5miyHOPht4+mlg6VJgzZr43ky650p3UYDZ64NBfSVfsnOaLbZw271OR3HIjoj6s3uS3MnJ8WwWTqQasrzgAuvneuYZDBsyJPsbY1PNuSW7Prff6xSDgURE8ZyYJHdycjzbsEunyrfZuUpKgLVrMezIkexvjE22kq+jIz4IE+e13HyvUwwGEhHFc2KS3MnJcbt6CFaCOPFcxjLxUMieG2PNXh+zkq+vXTNm6O1dtuxYcKa7wlBBDCQiiufUvUNeL7pmzwZqarJqntlxbekhWAnixHO1tQG//nX8cbq7gQcf1P/baEc6YWH2+thzTp4MPPywfvNugW1pYTmQhBC1AO6TUs4WQkwE8EsAGoBdAL4npYw600Qiyik3FgTN5B6kRFaDOPZcDQ16dYfYn5WmAX/8I9DSYl9QJJ6zpaUgt7SwtMpOCPFDAD8DUHb0oRUAlkgpZwHwADCZ/SMiV8qmDI+bZbJaLeZnpSU+Z0dpJzM5LueTS1aXfe8BcFHM99MBbDr6340Avmpno4goj4xhqTVrzJc+F4LY+nUNDfr3mQRxzM8qePrp/Z93IigKaJl3IktDdlLKdUKIcTEPeaSUxj8I/g7g82bvCwQC2bXOYaFQSPk2ZqOQr4/XlgNVVfofAGhvt+WQSlxbTw/GX3YZ/O+8A09vL6Ll5Qiddhr+umoVsHIlKpubMaitDUdOPhlds2ZZu/aqKvj/+Z8xbseOY5WxAUQGD0bn0KHosvOax43DFyZNQtmOHSg5fBjRwYMRmjQJfx03Tr9fyQG5+r1luqghdr7ocwAOmb2oxu7JS5sFAgHl25iNQr4+Xps75e3ajOXcra3Ak08C777b95Q3GETFzp2oee89fQ5m0qSMThGIROA944y41XDe2lqcdM019vcu//SnvkUO3ilTUFFfjxoHe7B2/t5aW1uTPpdpIG0XQsyWUm4EUA/g/zI8DhG5mR030Dq9Y23scu7YxQexbFpFmLP7gexYxKGgTAPp/wFYJYTwAwgAWGtfk4jIFey4gTabY1gNssbGvuKuSXk8+nJqK+1Ndc5cBEUhbDmfhOVAklK+B+D0o//dDuBsh9pERG5gxw20mR4jnSBrbR24orfHM3Bbc7Hduxva4CAWVyWizNix/DjTY6RT5NTYbC8VTQN27rTvnGZtSFzVlwkndg1WCAOJiDJjx/LjTI+RTpBZ6Tlkc87XX0/9PqNXM38+cPvt+te5czMLpQK+BwlgIBFRpuy4gTbTY6QTZNOn68eNVVIClJUlP6dZj8bsnJoGPPdc6nCxs1dj1obycr0aeLa9LwWwlh0RZcaOVWWZHiOdgqr19Xox0i1b9C3Ky8qAM84AbrhBH6aLPacRRIsWAZ2d+uuNwHrxRf2+rDffjD9+R4fefuOerUR21gZMvO7ycsDv13fgDQZdP6fEQCKizNmxqiyTY2Qbhh6Pfr7YPY+MobXNm/UgMhg9mqYm4MIL+wdSMKi3IVkg2VkbMPG6je3gjcBzeV07DtkRkdqSLQiwuntuY6NejNQImVBI/z5xyMwYWosNI0NXlz5XZDb8l0a9O1tqA8Zet8+nB2IsF88psYdEROqyY5mz1SEzs9fFeu454Oabkw8VJisx5OQNs26szJ4CA4mIciudGzvtuNfJ6oe22etidXTow3aZhItTN8wW0PblAAOJiHIp3R6PHQsCrH5oG69LVtXBWOJtBIsKczQFtH05wEAiohyqbG5Or8djx5CU1Q9tr1dfSTdjhr76Lmqy52g4bP28uVJAde24qIGIcqYsEEjvxk67FgRYXQDR1ATs2WMeRgBQyn/DO4k/XSLKmVBNTXo9nkyGpLIpPppqYUNFBTBtmrXjFIKYn2PlsGFAdbXjQ4EMJCLKma5Zs9KfhE9nSMrKHFViYNXV6T2j7duB3l7zhQ1lZcDpp7t2sUDaEn6OowcPBtatc/yGWwYSEeWO05PwA63KMwssn0+/wTQYPFb5oKJC/37QIGD0aP3m01RDfQMx67UZ7bXSk0vW63NqK4qEn6M3GMzJDbcMJCLKLScn4QdalWcWWImvBfTSQX6/PYFpFoIzZujPtbQMvNowWa/vxReB8893ZisKO8sdpYGBRETWqb453ECr8ga6+RXQe0Z+v74Awg5mIbhli/7fRlWIVKsNk/X67ror+3u0ksnTDbdcZUdE1ti5jYJTBlqVZ1YtO1FFhb57rB37FwHmIRgK9S9RlGy1YbLeyubNzm1FkfBzjJSX5+SGW/aQiMgaO6omOM24l+iuu/QP7DPP1Hs6Ri8uWbVsYw7JGE57+GFrw2lWmPU2ysr0r7GhlKwHkqy3cuaZehud6MUkzPV1Dh2Kk665hqvsiCgPzIbm8jSvkJZIJH5epaVFHx4zwsRsUcW55wL33HMswKZOBa64wr7gNasUkWwOKdn2GWYrE5cs0a/NqbJBMXN9XYFAToZmGUhEFC/ZJPrChdbmFfI5z2SlFxe7qCLxWltagBEj7A3eZCsLjfYOtNow1crEAiobBDCQiChRsg/1hQsHvofIjurcZqyGXLq9uMbG+Np1XV36vUiDBlkbTrMq2cpCq6sNk72/gMoGAQwkIkqU7EN9586B/0XuxDxTOiGX7uqw1tb+13rkCDB+PPDRRwVRQdtNGEhEFC/Vh/pA/yJ3Yp4pnZBLdzuGZKvnvv1tvTJDvofCVF9mbzMGEhHFy2aPnXR6KFarF6QTcunOqyR73O8/1p7t2/WvuQ4Dp4Y/FcZAIqJ42UyWWw2zdKoXWF1MEdt+q/Mqxpbkicf+4hfzHwZuWGZvM94YS0T9Wd2uwex9GzYAa9YAS5fqX80+xGM/bDXtWPWCLVviH3v1Vf31VragiETSv5nV7Eba00/Xn0tsnxEGuZKqZ1ig2EMiIntZ6aEkq16QyOpiikhEr9q9ZYt+nLIyYOZM/T1GJW+zOZhkvcHly/N/z1WeyvfkEwOJiHIv3eoFA4VcQwOwadOxXlEopH//5S8D77yTetjN7NgqhEFdHVBVBQQC+lL0HJXvyScO2RFR7pkNlc2cqf/JZHfYZ5/tP0QXiQC7d2c27GbXTrWZMipOdHToZY18PmDiRL0sUoEuaADYQyKifMi2eoFV4XD896mG3RJX/b34oj7cl4+l38YcmzFs2NOjb63e1FSwCxoABhIR5Us61QsGuh/nkkuAp5+O7yV5PPry7SNHjj2Wagl6slV1sW1J1Q5jUYUd9wy5oW6gAxhIRKQ2K/fjzJsHnH12/KKGM87QQ8lKAVMrS6yTLVW//nrgjTcwfs0a4P33nasQXuALGgAGEhGpzmrB1KamzIcArfRIzNqxaVNfCA6Kfa8TFcILfEEDwEAiItVZHb7KpoCplR6JWTsikb5hQk/iMZ2oEF7ACxoABhIRqS4Xw1dWeiRm7UjFqQrhBYyBRERqy8XwlZUeSWI7Skv1VXyaFn8sj6dohtjsxkAiovywWsk6V8NXA/VIjHY0NACLFgGdnfoNq0dpADwVFcAPfnCsZ7R8eVFU6bYLA4mIci/dStaqDF8Z26AfONCv1FHfHNKUKcAjjxRVlW67sFIDEeWeWXHVXBcvzZTZ4gZDMAisXavOtWVScDaP2EMiotzL142fdmx4l2pxQ3m5HkIq3NTqwv2UMgokIYQPwJMAxgGIALhaStlmY7uIqJDl48bPdD6gUwWXsbhh27a44NEAePx+4FvfAp5/Pv83tbpwP6VMh+zOB1AqpZwJYCmAu+1rEhEpzY5hICeKlw7ULqvDhEZwzZ8P3H67/nXu3GPHMxY3LFqklyY6ygPoNedKSvJbmNXgwv2UMh2yawdQKoQoAXAcgN4BXk9EhcCuYSC7V85ZaZfVYUKrlSF8vrhVdgD0OSQr+zflggvLD2UaSF3Qh+vaAAwDYNr/CwQCGR4+N0KhkPJtzEYhXx+vLT8qN27E6K1b4Q0G9Qe6uhDZuhWdjz+OrtmzB3x/v2urqtL/AEB7u6Ptqhw2DKMHDz72GgCRwYPROXQoumLaNKypCcO6u+MqL2jd3fjopZfwidHWgY7X3m7btWVs3Dh8YdIklO3YgZLDhxEdPBihSZPw13Hj9D2W0pCzv5OapqX9p7q6ekV1dfU9R//7pOrq6rerq6vLYl/z2muvaarbvXt3vpvgqEK+Pl5bnixdqmkej6bpg176H49H05Yts/R2x67NSrvCYU0791xNq6zUn6us1L8Ph+OPtX69/lzssSor9cdjJRwvXF5ufrx8Cof1di9bpn/NsG12/t6OZoNptmTaQzqIY8N0nwLwAVBz2QYR2UfVYaBk7Zo8OX5LCCt7HFmtDJEw7Ng5dChOuuYatVawqXL/lkWZBtKDAJ4QQjQD8AP4kZQyycJ8IioYqlahNmvXjBnAww/3334icY+jROnMb8V84HcFAmqFkQtlFEhSyi4Al9rcFiJSXb6rUCdbjm3WrkgEWLAgs2XPLutZFAreGEtE6cnXh/VAK+kS27VsmRo3qJJlLB1ERO6QbrkhY14pljHf5bKSOsWCPSQiyowdZXjSkW65oWTzXXV1riupUywYSESUvnzUSUt3hV+y+S4XltQpFhyyI6L05aNadyblhox5pSVL9K9erytL6hQL9pCIKH35qNZtxwq/SEQv9+Pz6XXnDCrcS0UMJCLKQL5ukM1mhV/sMGNiGKlwLxVxyI6IMuBEtW6nJc4dAXq17kWLuKBBEewhEVH68n2DbCbMhhl7e/VQUrndRYSBRESZcVs1A1Xr8FEfDtkRUXFw4zBjkWEPiYiKgxuHGYsMA4mIiofbhhmLDIfsiIhICQwkIiJSAgOJiIiUwDkkIqJYua5iTn0YSEREhnxUMac+DCQiKm6xPaLeXm5NkUcMJCIqXok9osQq4AC3Pc8hBhIRFa/EgquJYQSwvFAOcZUdERUvs4KrgF5wleWFco49JCIqXskKri5apIcSywvlFAOJiIqXUXA1cVXd7bczhPKAgURExYsFV5XCQCKi4saCq8rgogYiIlICA4mIiJTAQCIiIiUwkIiISAkMJCIiUgIDiYiIlMBAIiIiJTCQiIhICQwkIiJSAgOJiIiUwEAiIiIlMJCIiEgJDCQiIlICA4mIiJTAQCIiIiVkvB+SEOIWAN8A4AfwqJTy57a1ioiIik5GPSQhxGwAMwGcCeBsACfZ2CYiIipCmfaQ5gLYCeC3AI4D8APbWkREREXJo2la2m8SQqwC8A8A5gEYD+AFACdLKfsO1traqpWXl9vVTkeEQiGUlZXluxmOKeTr47W5E6/Nney8tmAwiOnTp3vMnsu0h/QJgDYpZQ8AKYQIARgO4EDsi2pqajI8fG4EAgHl25iNQr4+Xps78drcyc5ra21tTfpcpqvs/gTgPCGERwgxGkAF9JAiIiLKSEaBJKVsALAdQAuA9QC+J6WM2NkwIiIqLhkv+5ZS/tDOhhARUXHjjbFERKQEBhIRESmBgUREREpgIBERkRIYSEREpAQGEhERKYGBRERESmAgERGREhhIRESkBAYSEREpgYFERERKYCAREZESGEhERKQEBhIRESmBgUREREpgIBERkRIYSEREpAQGEhERKYGBRERESmAgERGREhhIRESkBAYSEREpgYFERERKYCAREZESGEhERKQEBhIRESmBgUREREpgIBERkRIYSEREpAQGEhERKYGBRERESmAgERGREhhIRESkBAYSEREpgYFERERKYCAREZESGEhERKQEBhIRESmBgUREREpgIBERkRJKs3mzEGIEgFYAc6SUbfY0iYiIilHGPSQhhA/AYwAO29ccIiIqVtkM2T0A4KcAOm1qCxERFTGPpmlpv0kIcSWAsVLKu4QQGwHTb18JAAAb1UlEQVT8e+KQXWtrq1ZeXm5LI50SCoVQVlaW72Y4ppCvj9fmTrw2d7Lz2oLBIKZPn+4xey7TOaR/BaAJIb4KYAqAXwkhviGl3B/7opqamgwPnxuBQED5NmajkK+P1+ZOvDZ3svPaWltbkz6XUSBJKc8y/jumh7Q/+TuIiIhS47JvIiJSQlbLvgFASjnbhnYQEVGRYw+JiIiUwEAiIiIlMJCIiEgJDCQiIlICA4mIiJTAQCIiIiUwkIiISAkMJCIiUgIDiYiIlMBAIiIiJTCQiIhICQwkIiJSAgOJiIiUwEAiIiIlMJCIiEgJDCQiIlICA4mIiJTAQCIiIiUwkIiISAkMJCIiUgIDiYiIlMBAIiIiJTCQiIhICQwkIiJSAgOJiIiUwEAiIiIlMJCIiEgJDCQiIlICA4mIiJTAQCIiIiUwkIiISAkMJCIiUgIDiYiIlMBAIiIiJZTmuwGkvkg0gsaORmz/YDumjpqK+on18JZ4890sIiowDCRKKRKNYO7quXj1/VfR3dONCn8FasfUYsOCDQwlIrIVh+wopcaORrz6/qvo6umCBg1dPV149f1X0djRaOn9kWgEDe0NWLZpGRraGxCJRhxuMRG5FXtIBS7b4bbtH2xHd0933GPdPd14Y/8bmFc9b8Bzs3dFRFYxkAqYHYEwddRUVPgr0NXT1fdYhb8CU0ZOGfC9sb0rAHG9q4HCjIiKT9EN2cUOIW3s3FjQQ0jN+5uzGm4DgPqJ9agdU4tKfyU88KDSX4naMbWon1g/4HtT9a6IiBJl1EMSQvgAPAFgHIBBAO6SUr5gY7sckdhjGFw6GOveX1ewQ0iBg4GMh9sM3hIvNizYgMaORryx/w1MGTnF8rBfNr0rIio+mfaQFgD4REo5C0A9gP+2r0nOSZygD4aDafcY3KRmSA0q/BVxj2USCN4SL+ZVz8OSs5ZgXvU8y+GdTe+KiIpPpnNIzwJYG/N92Ia2OC6bCXo3mjVyFmrH1PabQ8pVIGTTuyKi4uPRNC3jNwshPgfgBQCrpJRPxT7X2tqqlZeXZ9k8e23s3IjF2xYjGA72PVZeWo4HTn8As0fPzlu7nBIKheDz+9C8vxlth9pw8vEnY9bIWUoGQiQaQfP+ZgQOBlAzpGbAdoZCIZSVleWwhbnDa3MnXps1wWAQ06dP95g9l/EqOyHESQB+C+DRxDAy1NTUZHp4R1SLaqx7f13cHNIZJ52Ba865RskP6WwFAgHU1NRg0qmT8t2UlDJZDWhcWyHitbkTr82a1tbWpM9luqjhRABNAL4vpXw5w3blXOIQ0tDeoQUbRm7C5eFEBGTeQ/oRgCEAbhNC3Hb0sXop5WF7muUcY4J+XvU8BAKBgg2jSDSCjZ0bsfbAWuXrzxXb3B4RmcsokKSUNwC4wea2kE2MIbCte7ficPiw8hUSuDyciIAivDG2GBhDYMFwMOMbYnOJy8OJCGDpIMflY+sGtw2BcXk4EQEMJEflq7io2RDYoNJBaPu4DQ3tDUp+2MfO7RFRceKQnYOy3bohU8YQWHmpfh+Y1+NFb6QXT+18CvPXzcfc1XMLuoYfEbkTA8lB+SouagyBPXD6A1gweQF8Xh8iWsQV80lEVLwYSA4yhs5i5Wr1mLfEi9mjZ6N6aDWOhI/EPceK20SkIgaSg1RYPZbPUCQiSgcXNTgo36vHItEIIp4IRpSPQDgaxpHwkZwXWCUisoqB5LB8rR6LRCO4+pWrsevQLnT1dKGstAzjjx+PFXNXpLWFBBFRrjCQClRjRyN2fLqjr7J5KBzCgeABeEu8DCMiUhLnkBQVu9V6Q3tD2su0t3+wHYfD8aUFuZiBiFTGHpKC7LihduqoqRhcOjhu7ycuZiAilbGHpCA7bqitn1iP0044jfXhiMg12ENSkB216LwlXqw6axXe873H+nBE5ArsISnIrnuHjBV+t3zlFgDA8ublGc1HGbKd1yIiSoU9JAUZN9QmziFlMtxmV4HXfBWKJaLiwUBSUOwNta9/8DrC0TC8Hi8aOxrTHnZLtj14Q3sDvCVey9ticJtxInIaA0lR3hIv6ifWY+W2lVn1SpLNRy3asAgHggcsH9dteywRkfsoHUh2bm5ndizV2pjIjl5Jsr2ROrs6EQqH+h23fmK96fW4bZvxfGyMSETZUTaQ7JyzSHasldNXKtNGM3b0Suom1KFqSBUCHwXQG+1Fua8cJ1aciHcOvdPvuK9/8HrSHpmd81pO43wXkTspu8rOzs3tkh2reX+zMm00k8lqu9iVcH/c90fU/7oeHZ92oCfaA5/Xh4knTMT9c+5Hpb+y33HD0XDS6zHmtdZ8aw2WnrMUa761RtkP+HxtjEhE2VG2h2TnnEWyY7UdalOmjWbS7ZUk9gz8JX6EtTAimr48uyfSgz0H98Bb4jU9rtfjTXk9ThWKtXt4jfNdRO6kbCDZOWeR7FgnH3+y7W30lfjQE+lBJBrJuveQ7vYViXNOR6JH+r2mu6cbOw/sND1uY0dj0p95uqFh9fVODK+5bb6LiHTKBpKdcxbJjjVr5Cxb2rht3zZ09+r/Iu+J9mDF1hXYsndL1kNa6YaAWc8gkfHBbPR2jCBa3rwcp514GmaMnoGWzpa4n1PdhLq0QsMsZGaMnoHra6/Hjg93xF2LE8vJ3TTfRUTHKBtIdm5ul+xY7bLdljbeuelO3Lf5PvREegAA3b3dWX+oZtJzMOsZeD1e+Lw+0835kgXH6gtXY+eBnXE9p3RCw+z1m/6yCVv2bYlrx4YFGxwZXsv3xohElBllAwmwd3M7s2MZCwCymbvwlnjhK/GhN9Ib93i2H6qZ9BwSewaDSwfj9LGn4/ra6+MCxrjGZOdo/aAVvhJf33HTDQ2z10e0CCLhSL9rcWp4LV8bIxJR5pQOJCfF7qia7dyFEx+qmfQcEnsGQ3qGYOzYsf2GyVKeo7cb922+D72R3r6fycIZC9O6PrOfRyLjWm75yi0cXiMiAEUcSIk7qmYzd+HEnEWmIRc7N/SVx76CXX9OHrjJgsMYejR+JguxMK3rS/x5DCodhN5Ib99qv9hr4fAaERmKNpBS7aiabiA58aGabchZCdzEc/hKfOiJ9sQdJ9WqvGTXl/jzmDxiMh5+9eG+xRLlvnJUDalCa2drXzs4vEZERRtIdu+oavecRbYhZyVwE8/RE9FXCBorBoFjy9gBpHV9iT+PedXz+orFPhd4Dh2fduDOTXeyigIR9SnaQDJ2VE2cQ1Jp7iKbkLMauLHniEQj2LJ3iyPL2I3zAMD9W+7vOz6rhhORoWgDqdB2VE28Z6luQl3agevkMnYDqygQUTJFG0iAu5cGxwbQqcNPxZ2b7kTbx23ojfaiwleB2rG1+Omsn2Kvf29agevUMnYDqygQUTJFHUhuFXtDa1dPF0pQgiiifc939XZh275t2DJmC64999q0Q8TJ0GAVBSJKhoE0gGwLfzqxL0/iDa2xYWTo7s28eKyTocFl3kSUDAMphWwLf2byfisBtv2D7SlvOgUADzyo/nz1gO0zO1euQkPTNFuPR0TuxkBKIdvCn+m+32qAnXbiafB6vHE3mibywAOk+Lwf6FzJ5tfs6DFy8zwiMqPsBn0qSLUizIn327mxnAYN7Z8lLx7b2NGIV/fFn2vbvm0pz2WEyfx183H7xtsxf918zF09F5Fo8mA0PS83zyMiEwykFDLZsTWb91sNsB0f7kBU6z9vlHgeY7+n2F1kG9obEIlG0NrZiq7e+GG/7l59G/Nk7AiTZNf4zK5n4tpHRMWHQ3YpZDu5n+77ra5umzpqKsp95XEVFUo8JfB7/XHbO8w8cSaeb3seizYsQmdXJ0LhECr9lagdU4vTx55u2oZwNJz0euy4h8jsGks8JVgbWNtvawoO4REVFwZSCtlO7qf7fqsBVjehDn6vPy6QjvMfhycueAJvffQWpoycgroJdTh71dl449M3EAqH+l5n9GpGVIwwbUNpSfK/EnYsB09WeNVoIys3EBWvjANJCFEC4FEAXwRwBMB3pJQddjVMFdnePJvq/WYLBKwEWNM7Tf1uXO2N9sLn9WHJWUsAAA3tDdjx6Y64MDJ09XTBAw8qfBVxoVbhq8C0UdOSXosdy8ETQ7rtozb8etev417Dyg1ExSmbHtI3AZRJKc8QQpwO4L8AXGBPs9wpnRVoqVabDRSA2z/YHhckABDsDcZ9iJsVV42168Au1I6p7bdduZXSQtkuB48N6Yb2Bjzf/jwrNxBRVoH0FQD/CwBSym1CiC/Z0yR3Snc5czZLyq0MnZkVV4215+AeLD1nKbwl3rRLC9lZbomVG4jIkE0gHQfgbzHfR4QQpVLKvlnxQCCQxeGdFwqFbGvjxs6N2Lp3a9z+Q1v3bsXj//c4Zo+e3e/1TW81mS4QeGnnS6iKVKU817joOEw6fhJ2fLoDh8OHMbh0MCYdPwnjesf1XY/xml2HdpmGUndvN/6w6w+47tTrUDW8CogA7TL5MnEnrZy+Es1jmtF2qA0nH38yZo2cNWBb7PzdqYbX5k68tuxlE0ifAfhczPclsWEEADU1NVkc3nmBQMC2Nq49sLbfENnh8GF84vvE9Bx13jr84u1f9OvlzJk8BzXVA7fpTzV/GnDo7Of4OfZ49+DK312JQ0cO9TvGkKFDlPkdTTp1Ulqvt/N3pxpemzvx2qxpbW1N+lw2gbQZwNcB/OboHNLOLI7leumuQEtnqCrZ3NRAQ2dGxYXEnpgh1Yo6t3KidiAR5UY2n0i/BTBHCLEFgAfAVfY0yZ3SnQuxukDAytxU7IfwaSeeBkC/eXZYeBgOeA8grPW/t8hX4ku5os4JZns2Nb3TZFt4sCwRkbtlHEhSyiiAf7exLa6WyQo0K72cgRY/JH4Il3j04hsRLYLy0nL849B/RIWvol9VhlOGn5LRwoFMQ6VfWPgq4PPq26MHe4O2hEe2tQeJKL8Kb8wmj5zY8G+g6giJH8KxBVeD4SA6Pu3AxBMmouPTDgR7g/CV+FAzvAYt32lJ+4M/m1DpFxa9XUDMrVR2hAd3oyVyNwZSAtXmIAaamzL7EI4V7A3iopqLMG3UtKy3ksgmVAZqJ5B9eHA3WiJ3YyDFUHEOon5iPWaMnoEt+7YgFA6hrLQMM0bP6BtuM/sQjlXh16svGK/f/sH2vuOme03ZhMpA7TTamk148J4mIncr6kAyqmAbvaFINOK6OYjED+HEOaTaMbWom1BnS9BmEyqJ7Sz3lcPv9fcb7ssmPLgbLZG7FW0gRaIRXP3K1dh1aFffh/SI8hH9PmzN/sWfy2G9xo5GtHS29NWkC4VDaOls6QvJxA/hU4efitYPWrF171aIcoGVF65E0ztNtgRtNqFiFhbGggg7w8OJeTwiyo2iDaTGjkbs+HRHXGWFcDSMstKyuIKkif/it3NYz+p25QNN1BsfwvUT6zF39Vxs27cN3b3daC5pxpafbcE3xTdtmezPNlTMwoLhQUSGog0ks+KjR8JHMP748TgQPJB0DsKupcVWgy2difrGjsa+MAL0CuBvfvgmPjvyWb+l35nO1zBUiMgpRRtIZsVHK/wVWDF3RcqCo3YtLbYabOlM1JtVAQeAfX/bh1NGnII9B/fkfLJftVWLRKSuog2k+on1OO2E0+LmkGrH1PbNyyQLFys9FrMPYQBxj7V2tloKtnQm6qeOmto3pxMrrIXxzZO/iagWxea/bsaZXzgTS2YtcTwYVFy1SETqKtpA8pZ4seqsVXjP915ak+oD9VjMPoRnjJ4BAHF7D1UNqbI0jJZOD6N+Yj1qhtXgzQ/fjHu83FeO37X9rq+H1NLZgi17tzgeDKycQETpKNpAAjJbkTVQj8XsQ3jLvi0AELdNt1FBIdUwWiQaQd3/1MXdgzRz7Ew0Xd5kGiTeEi9avtOCGT+bgcBHAfREe1Dhq+ir1GAM5+UqGFg5gYjSUdSBlKlUQWb2IWy2jbiVCgoN7Q3Y9JdNfeWAQuEQNv1lE16QL8Dn9Zn2mvylfrRe04rGjka8tPMlzJk8B62drbhz051x589FMEwdNbVfL7DcV87KCURkioFkM7M5prLSMgDot5x82qhpKXtoz+5+Nq42HaDf8Hrd769DV29X0nkZIzCrIlV9eyvlo6RO3YQ6+Ly+uPJCfq8fdRPqHD0vEblTSb4bUGiMOaZKfyU88KDSX4mZY2di5tiZcY9ZWuWmmT/8cfBjdPV0QYMWN/yWTptyscqu6Z2mfgsseiI9aHqnydHzEpE7sYdks2RzTABM551SLVq45NRL8PRbT8f1kjzw9NvfKFk1iY2dG7H2wFpMHTUVL377xX43sAKIK51kpU3p2P7BdgR747dPD/YGOYdERKYYSA5INseU+NhAy6LnVc/D2f9wdtyihuoTqvHOwXdSrs4zjrt171YcDh+OO65xfrOtJKpOqMIF4gI8L5/Hnk/3oLs3u6XarL5NROngkF0exa7IMxt+85Z40XR5E5695FksO2cZnr3kWfz56j+jdmzq4TfjuMFwMOmwXr9z93bhzQ/fxNJXluLND99EV6/1IcFk8jVUSETuxB5SHqVTpy62ZzXQjbJWjmtlK4lk77WK1beJKB0MpDzKdEhroPunrBzXylYS6bQp07YSERk4ZOcQY6+lZZuWoaG9AZFopN9rnBrSMo5bXlqe9LjGayp8FUmPw2E2Isol9pAcYLWGm1NDWsZxH/+/x/GJ7xPT4xqvuXPTnbjvT/ehJxq/PHuQdxBu+cotfT2j5c3LWRyViBzFQHJAOjXcnBrS8pZ4MXv0bNTU1KR8ja/Eh95ob7/noloUU0ZOwSMtj+StOCorhRMVFwaSA3JZwy3bD+2po6bCV+Lr10PqjfbiN2/9Jm/FUVkpnKj4MJAckKv7b6x+aKcKrfqJ9agZ3r9COAD88d0/5q04KiuFExUfLmowYWVBQip2LlZI1ZaB7mMy3j939VzMXzcft2+8HfPXzcfc1XP7jmNUCB9//Ph+5z4YOohBpYPiHsvVja2peplEVJjYQ0pgx1CRXYsVBmqLlaFBKz0Nf6kf//LFf8Gdm+6EFlNA70jkCCYMmYAD3cm3dHcKqzwQFR8GUgK7horsWKwwUFusfGhbnc+aPnp6v2NV+iuxoi71lu5OSWfrdiIqDAykBCptKmfWlq6eLjyz6xls/2A7TjvxNMwYPSNuJ9rED22rPY1kATDQlu5OYZUHouLDQEqg0lCRWVu8Hi/WBtbiSPhI3/boqy9cjZ0Hdpp+aFvtaagYAKzyQFRcGEgJ8jVUZLYSLrEtg0oHoTfSG7cVektnC7wlXiw5a4npcdMJGgYAEeUTAylBPnoKqRYvxLal7eM2PLXzqbj3WhlOZNAQkRswkEzk+gN8oMULxp+G9gY8L583HU4062EREbkJAymFXJWusbqQItlwYt2EOtMe1srpK21vKxGRUxhISeSydI3VhRTJhhOT9bCaxzRj0qmTbG0rEZFTWKkhCStVEOySTmUHYzhxyVlL+npPT+98ut++Rt093Wg71GZ7W4mInMIeUhK5vB8p04UURi9u897N/Z6r8Ffg5ONPtrWdREROYiAlkev7kTJZSGH04oxl4Iay0jLUjqnFrJGz7G4mEZFjOGSXhFO7udrJrBcHABfXXMxtGojIddhDSkLFygWJzHpxlf5KXDbpMqXaSURkBQMpBdVvKGUBUiIqJBkFkhDi8wBWAzgOgB/AIinlVjsbRgNzQy+OiMiqTHtIiwC8LKVcKYQQANYAmGZfs8gq1XtxRERWZRpIDwI4EnOMUIrXEhERDcijaVrKFwgh/g3AjQkPXyWl/LMQYiSARgD/IaXcFPuC1tZWrby83NbG2i0UCqGsrCzfzXBMIV8fr82deG3uZOe1BYNBTJ8+3WP23IA9JCnlzwH8PPFxIcRkAE8DWJwYRoaampo0m5pbgUBA+TZmIxAIoFpU56QeX64V8u+O1+ZOvDZrWltbkz6X6aKGUwA8C+AyKeWbGbaLHJbLenxERNnK9MbYewCUAXhICLFRCPG8jW2iLEWiETS0N+CWlluwee/mnNTjIyLKVkY9JCnlBXY3hOwR2ytKLLgKOFePj4goWywdVGASt6JI5GQ9PiKibDCQCkyy+nYAlKzHR0RkYOmgAmNW366stAwX11yMyyZdVjCr7Iio8DCQCkyy+na//OYvGUREpDQGUoGJrW/30s6XMGfyHPaKiMgVGEgFyKhvVxWpQk11Yd6oR0SFh4saiIhICQwkIiJSAgOJiIiUwEAiIiIlMJCIiEgJDCQiIlICA4mIiJTAQCIiIiUwkIiISAkMJCIiUgIDiYiIlMBAIiIiJTCQiIhICR5N0xw5cGtrqzMHJiIiV5s+fbrH7HHHAomIiCgdHLIjIiIlMJCIiEgJRb1jrBDi8wBWAzgOgB/AIinl1vy2KjtCiBIAjwL4IoAjAL4jpezIb6vsIYTwAXgCwDgAgwDcJaV8Ia+NspkQYgSAVgBzpJRt+W6PnYQQtwD4BvT/1x6VUv48z02yxdG/l09C/3sZAXB1IfzuhBC1AO6TUs4WQkwE8EsAGoBdAL4npYzafc5i7yEtAvCylPJsAFcC+HF+m2OLbwIok1KeAeBmAP+V5/bYaQGAT6SUswDUA/jvPLfHVkc/2B4DcDjfbbGbEGI2gJkAzgRwNoCT8toge50PoFRKORPAUgB357k9WRNC/BDAzwCUHX1oBYAlR//f8wC4wInzFnsgPQj9AwDQe4uhPLbFLl8B8L8AIKXcBuBL+W2OrZ4FcFvM9+F8NcQhDwD4KYDOfDfEAXMB7ATwWwDrATTktzm2agdQenR04jgAvXlujx32ALgo5vvpADYd/e9GAF914qRFM2QnhPg3ADcmPHyVlPLPQoiR0Ifu/iP3LbPdcQD+FvN9RAhRKqV0/Ye3lLILAIQQnwOwFsCS/LbIPkKIKwF8JKXccHRoq9AMA/APAOYBGA/gBSHEyVLKQljm2wV9uK4N+nXOy2trbCClXCeEGBfzkCfmd/V3AJ934rxFE0hHx6v7jVkLISYDeBrAYinlpn5vdJ/PAHwu5vuSQggjgxDiJOj/yn5USvlUvttjo38FoAkhvgpgCoBfCSG+IaXcn+d22eUTAG1Syh4AUggRAjAcwIH8NssWNwLYIKW85ejfzz8KISZLKQthxMUQO1/0OQCHnDhJUQ/ZCSFOgT4M9G0pZWO+22OTzdDHtCGEOB36MElBEEKcCKAJwE1Syify3R47SSnPklKeLaWcDeANAFcUUBgBwJ8AnCeE8AghRgOogB5SheAgjo1KfArAB8Cbv+Y4YvvReUBAn79tduIkRdNDSuIe6JN2DwkhAOBvUkpHJuty6LcA5gghtkCffLwqz+2x048ADAFwmxDCmEuql1IW3CKAQiOlbBBCnAWgBfo/hL8npYzkuVl2eRDAE0KIZugrCH8kpezOc5vs9v8ArBJC+AEEoA+Z246VGoiISAlFPWRHRETqYCAREZESGEhERKQEBhIRESmBgUREREpgIBERkRIYSEREpAQGEhERKeH/AxoOksuoFBnDAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 504x504 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.datasets import make_blobs\n",
"\n",
"X, Y = make_blobs(random_state=8,\n",
" n_samples=100, \n",
" n_features=2, \n",
" cluster_std=1.,\n",
" centers=1)\n",
"\n",
"plt.figure(figsize=(7, 7))\n",
"plt.scatter(X[:, 0], X[:, 1], marker='o', c=\"r\", s=25,label=\"original\")\n",
"\n",
"XX = ss.fit_transform(X)\n",
"plt.scatter(XX[:, 0], XX[:, 1], marker='o', c=\"g\", s=25, label=\"standardization\")\n",
"\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 標準化(StandardScaler)と正規化(MinMaxScaler)を比較"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1a289030f0>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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bRsnnHACl156KZs2bRpIKJ2dnVx//fWUl5dz4YUXcsABB/CpT32Kp556iquuuoqHHnqI5557DoDW1lbOO+88zjzzTK666iq6urp49913+drXvsakSZNYt24d//u//8uJJ57IWWedxfr169m2bRvLli0jEAgwatQoli1bRl9fH9/4xjeYNGkSu3btYsaMGXz/+9/P7A3zgpEyvVRMRkp5eb6LPIqZ4zgF+frLX/7iZOLBBx2nutpx3LkE96u62r09Exs2bHAuuOAC5+2333ZOOukk56WXXnJuuOEG53e/+51z5plnOt3d3U5fX5/zta99zXnsscecW265xVm2bJnjOI6za9cup66uztm7d6+zZ88eZ8aMGc4777zjdHZ2Oh//+Mcdx3GclStXOq+//rrjOI5z++23O7fddtvA87q6uhzHcZzFixc7O3bsGIjp8ccfdy644AKnq6vLWb9+vbNhwwbHcRynqanJ+fKXv+w4juNcfvnlzsqVKx3HcZzjjjvOcRzH+cIXvuBs27bNcRzHeeSRR5wlS5Y4u3btco499ljn/fffd3p7e50TTjjB2bNnT2ZvWoZCMWYkV/8QcWQl7gLwTNy9vY5z0knu36mkxP1+0knu7RE8E3OKFHfq+nND1Lzh2xFWrtcxx40bx3e+8x2+/e1vM3v2bLq6ujjmmGMoLy8H4CMf+QgvvPACwJBO7h/84AfZb7/9qKioYPz48RxwwAHAYCPcgw8+mOXLlzNmzBjeeOONgUuLfOADH6CiomJYHH/5y1/47//+b375y19SUVHBhAkTuP3221m9ejUlJSX09vbGfA179uwZaDH10Y9+lB//+McAfOhDHxroEj9hwgS6uroyeq88QQvb/qORh6TIt2tY+VjH/PSnP81hhx3G/fffz6hRo9i8eTO9vb04jsNzzz03kKhKSwffxmgd2sMtXbqUa665huuuu46JEycOrJOFbyNk27ZtLF++nFtvvXUgwdx8880sXLiQG264gbq6uoHnl5SU0NfXN+T5EydOZPv27YBblDFlypSkYvQlLWz7U6i8fOlS97uSlcTh2xFWjpq1D3PllVeyYcMGqqqqqK+vZ9GiRfT19TFnzhw+85nPDCSEZC1cuJCzzz6bsWPHMn78ePbs2RPzsd/85jcJBAJceumlgLu2dsopp7B8+XJ+/vOfM3ny5IFu78cccwx3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\n",
"text/plain": [
"<Figure size 504x504 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X, Y = make_blobs(random_state=8,\n",
" n_samples=100, \n",
" n_features=2, \n",
" cluster_std=2.,\n",
" centers=1)\n",
"\n",
"plt.figure(figsize=(7, 7))\n",
"plt.scatter(X[:, 0], X[:, 1], marker='o', c=\"r\", s=25,label=\"original\")\n",
"\n",
"Y = mms.fit_transform(X)\n",
"plt.scatter(Y[:, 0], Y[:, 1], marker='o', c=\"b\", s=25, label=\"Normarization\")\n",
"\n",
"XX = ss.fit_transform(X)\n",
"plt.scatter(XX[:, 0], XX[:, 1], marker='o', c=\"green\", s=25, label=\"standardization\")\n",
"\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:py35]",
"language": "python",
"name": "conda-env-py35-py"
},
"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.5.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment