データクレンジングを行っていこう！顧客名の変更と日付の変更

# 1.今回用いるデータ

私はpythonでとても重要なデータクレンジングについて、様々な記事を書いております。
その中で今回用いるのは

『データクレンジングを行ってみよう！価格変更偏』の１番にあるデータを使っていきます。
良かったらダウンロードしてみてください。それではいきます


## 2.データの読み込み
```Python
import pandas as pd

kokyaku_data = pd.read_excel("kokyaku_daicho.xlsx")
```
kokyaku_dataは人が入力していると思われるので、とても汚いデータとなっております。
顧客名については、半角の空欄があったり全角の空欄があったり
登録日については、記述がばらばらであったりします
今回は、その２つをきれいにクレンジングしていきましょう。
```Python
kokyaku_data

顧客名	かな	地域	メールアドレス	登録日
0	須賀ひとみ	すが ひとみ	H市	suga_hitomi@example.com	2018/01/04
1	岡田　 敏也	おかだ としや	E市	okada_toshiya@example.com	42782
2	芳賀 希	はが のぞみ	A市	haga_nozomi@example.com	2018/01/07
3	荻野 愛	おぎの あい	F市	ogino_ai@example.com	42872
4	栗田 憲一	くりた けんいち	E市	kurita_kenichi@example.com	43127
...	...	...	...	...	...
195	川上 りえ	かわかみ りえ	G市	kawakami_rie@example.com	2017/06/20
196	小松 季衣	こまつ としえ	E市	komatsu_toshie@example.com	2018/06/20
197	白鳥 りえ	しらとり りえ	F市	shiratori_rie@example.com	2017/04/29
198	大西 隆之介	おおにし りゅうのすけ	H市	oonishi_ryuunosuke@example.com	2019/04/19
199	福井 美希	ふくい みき	D市	fukui_miki1@example.com	2019/04/23
```

### 3.顧客名をきれいにしよう
改めて顧客名を見ていきますか
0番は苗字と名前の間にスペースがありません。
1番は間が全角
2番は間が半角となっていて汚れておりますね
```Python
kokyaku_data["顧客名"]

0       須賀ひとみ
1      岡田　 敏也
2        芳賀 希
3       荻野  愛
4       栗田 憲一
        ...  
195     川上 りえ
196     小松 季衣
197     白鳥 りえ
198    大西 隆之介
199     福井 美希
Name: 顧客名, Length: 200, dtype: object

```
これを解決するためには、`astype`メソッドと`replace`を用いれば解決できます。
`replace(" " , "")`としているのは半角の空欄から空欄なしにしています。
みてみると、１番は変更されていないものの、他は間がなくなっています。
```Python
kokyaku_data["顧客名"].astype("str").str.replace(" " , "")

0      須賀ひとみ
1      岡田　敏也
2        芳賀希
3        荻野愛
4       栗田憲一
       ...  
195     川上りえ
196     小松季衣
197     白鳥りえ
198    大西隆之介
199     福井美希
```
全角の間も同様な処理をしていきます。
```Python
# 半角空欄から空欄なし
kokyaku_data["顧客名"]=kokyaku_data["顧客名"]=kokyaku_data["顧客名"].astype("str").str.replace(" " , "")

# 全角空欄から空欄なし
kokyaku_data["顧客名"]=kokyaku_data["顧客名"]=kokyaku_data["顧客名"].astype("str").str.replace("　" , "")
```

みていきます
```Python
kokyaku_data["顧客名"]

0      須賀ひとみ
1       岡田敏也
2        芳賀希
3        荻野愛
4       栗田憲一
       ...  
195     川上りえ
196     小松季衣
197     白鳥りえ
198    大西隆之介
199     福井美希
Name: 顧客名, Length: 200, dtype: object
```
いい感じになりましたね。
それでは次にいきましょう。

4.日付データの変更

まずはデータを見ていきます
数値になっているものがあることがみられます。
```Python
kokyaku_data["登録日"]

0      2018/01/04
1           42782
2      2018/01/07
3           42872
4           43127
          ...    
195    2017/06/20
196    2018/06/20
197    2017/04/29
198    2019/04/19
199    2019/04/23
Name: 登録日, Length: 200, dtype: object
```
ここで、数字の登録日をほかの時間とどうようにしていきたいと思います。
まずは数字がどこにあるのかを探していきます。
`astype("str")`でいったん文字列とし、その中で数字があればTrueを返してくれる`str.isdigit()`を使って、特定していきます。
```Python
kokyaku_data["登録日"].astype("str").str.isdigit()

0      False
1       True
2      False
3       True
4       True
       ...  
195    False
196    False
197    False
198    False
199    False
Name: 登録日, Length: 200, dtype: bool
```
これを変数に格納していき、それをlocメソッドで条件として抽出する作業をします。
二行目以降の説明をします。
まずは、数字となっている行且つ`登録日`を整数にし、それを`time_delta`で日付単位にします
その後、それを他の日付単位に合わせるために`to_datetime`で以下のような記述をします。
```Python
flg_is_serial = kokyaku_data["登録日"].astype("str").str.isdigit()

fromSerial = pd.to_timedelta(kokyaku_data.loc[flg_is_serial, "登録日"].astype("float"), unit="D") + pd.to_datetime("1900/01/01")

```
これでデータを見ていきましょう。
dtypeがdatetimeになっていることが分かります。
時系列データの分析を行う際は、この処理が欠かせないので忘れずに覚えておきましょう。

```Python
fromSerial

1     2017-02-18
3     2017-05-19
4     2018-01-29
21    2017-07-06
27    2017-06-17
47    2017-01-08
49    2017-07-15
53    2017-04-10
76    2018-03-31
80    2018-01-12
99    2017-06-01
114   2018-06-05
118   2018-01-31
122   2018-04-18
139   2017-05-27
143   2017-03-26
155   2017-01-21
172   2018-03-24
179   2017-01-10
183   2017-07-26
186   2018-07-15
192   2018-06-10
Name: 登録日, dtype: datetime64[ns]
```