データ分析の一歩目（データ数、テーブル表示、欠損値）



データ分析の初めの一歩目、データの様子見＆前処理（今回は様子見メイン）
kaggleの勉強用コンペであるHouse Prices: Advanced Regression Techniquesのデータを用いる。
家のデータあれこれから価格予想してねってお題。
[House Prices: Advanced Regression Techniques](https://www.kaggle.com/c/house-prices-advanced-regression-techniques/overview)

##データの中身チェック

```python
import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns
```
どんなデータが入ってるかチェック

```python
!ls ../input/house-prices-advanced-regression-techniques
```
↓↓↓

```
data_description.txt  sample_submission.csv  test.csv  train.csv
```
`train.csv`が訓練用データ
`test.csv`がテスト用のデータ
`sample_submission.csv`がこんな感じで答えを提出してねっていう例示
`data_description.txt`が各カラムの説明

次に `pd.read_csv`で各csvファイルを`pandas.DataFrame`として読み込み

```python
TEST_PATH = "../input/house-prices-advanced-regression-techniques/test.csv"
TRAIN_PATH = "../input/house-prices-advanced-regression-techniques/train.csv"
SUBMISSION_PATH = "../input/house-prices-advanced-regression-techniques/sample_submission.csv"

test_data = pd.read_csv(TEST_PATH)
train_data = pd.read_csv(TRAIN_PATH)
sample_submission = pd.read_csv(SUBMISSION_PATH)
```
訓練データの中身を試しに見てみよう。
テーブル先頭５件を以下で表示

```python
train_data.head()
```
↓↓↓

```python

	Id	MSSubClass	MSZoning	LotFrontage	LotArea	Street	Alley	LotShape	...	MiscFeature	MiscVal	MoSold	YrSold	SaleType	SaleCondition	SalePrice
0	1	60	        RL	        65.0	    8450	Pave	NaN  	Reg	        ... NaN	        0	    2	    2008	WD	        Normal	        208500
1	2	20	        RL	        80.0	    9600	Pave	NaN	    Reg	        ... NaN	        0	    5	    2007	WD	        Normal	        181500
2	3	60	        RL	        68.0	    11250	Pave	NaN 	IR1	        ... NaN	        0	    9	    2008	WD	        Normal	        223500
3	4	70	        RL	        60.0	    9550	Pave	NaN 	IR1	        ... NaN	        0	    2	    2006	WD	        Abnorml	        140000
4	5	60	        RL	        84.0	    14260	Pave	NaN 	IR1	        ... NaN	        0	    12	    2008	WD	        Normal	        250000
5 rows × 81 columns
```
81カラムもあるようです。いっぱい。
因みにテストデータにはSalePriceが抜けています。SalePriceを予想してねってお題ですから。

さて、先頭５件だけ確認しましたが、全部でどれだけあるのでしょうか。

```python
print(len(train_data), len(test_data))
```
```python
1460 1459
```
なるほど、1460行と81列で訓練データは構成されているのだなと分かるわけです。

##欠損値の確認

これでデータ数の把握が出来ました。先ほどのテーブルを見ると、なにやら欠損値（NaNや空白）が散見されます。全体の欠損値が合計どれだけあるのか確認でもしてみましょう。

`isnull()`で欠損値があるかどうかを判定し（bool型で返す、つまり`True False`）、
`sum()`で`True=1``False=0`として欠損値の合計個数を算出、
`count()`で欠損値でないものを数える処理を意味しています。

```python

total = train_data.isnull().sum().sort_values(ascending=False)
percent = (train_data.isnull().sum()/train_data.isnull().count()).sort_values(ascending=False)
missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
missing_data.head(20)
```
↓↓↓

```python

	         Total	Percent
PoolQC	     1453	0.995205
MiscFeature	 1406	0.963014
Alley	     1369	0.937671
Fence	     1179	0.807534
FireplaceQu	 690	0.472603
LotFrontage	 259	0.177397
GarageCond	 81	    0.055479
GarageType	 81	    0.055479
GarageYrBlt	 81	    0.055479
GarageFinish 81 	0.055479
GarageQual	 81 	0.055479
BsmtExposure 38 	0.026027
BsmtFinType2 38 	0.026027
BsmtFinType1 37 	0.025342
BsmtCond	 37 	0.025342
BsmtQual	 37 	0.025342
MasVnrArea	 8  	0.005479
MasVnrType	 8  	0.005479
Electrical	 1  	0.000685
Utilities	 0  	0.000000
```

さて、欠損値に対して考えられる処理は、欠損値を何か違う値で埋め込むor欠損値を含む行または列を削除してしまうことです。例えば、一番上の`PoolQC`の行を見てみれば欠損値の割合がなんと９９％なので、以下のようにして列を消してしまいましょう。

```python
train_data = train_data.drop('PoolQC',axis=1)
```
本当に消えているか、先ほどのようにして欠損値のチェックすると


```python

	         Total	Percent
MiscFeature	 1406	0.963014
Alley	     1369	0.937671
Fence	     1179	0.807534
FireplaceQu	 690	0.472603
LotFrontage	 259	0.177397
GarageCond	 81	    0.055479
GarageType	 81	    0.055479
GarageYrBlt	 81	    0.055479
GarageFinish 81 	0.055479
GarageQual	 81 	0.055479
BsmtExposure 38 	0.026027
BsmtFinType2 38 	0.026027
BsmtFinType1 37 	0.025342
BsmtCond	 37 	0.025342
BsmtQual	 37 	0.025342
MasVnrArea	 8  	0.005479
MasVnrType	 8  	0.005479
Electrical	 1  	0.000685
Utilities	 0  	0.000000
```

確かに一番上の行が消えてますね。
さて、データフレームばかりでなく、今度はグラフを使って様子を見てみましょう。
（そのためにmatplotlib.pyplotとseabornをインポートしてました。）

長くなったので次回に！