Google Colabで複数ファイルをサクっと統合しよう！

## はじめに

先日、以下のTweetを見かけました。

https://twitter.com/noa_capm/status/1569320293268865025?s=20&t=WmcN7F1XFgeCtNa57DTLtQ

現実、分析する前の手間が多いなと感じていますので、本当にそうだな・・・と思いました。

この手間のひとつに **データ統合** があります。
例えば、販売実績ファイルが月毎に生成されていたり、生産実績ファイルがロット毎に生成されていたりという場合、ファイルの単位が分析の単位と一致していなければ、データを統合しなければなりません。
この記事では、GoogleColabでファイル統合を実行する方法について触れたいと思います。


## 実行したこと
>- Google Colabで実行
>- 同じファイルフォーマット（この記事ではcsv）の複数ファイルをフォルダに収めた後、フォルダをGoogleDriveにアップロードし、フォルダ内のcsvファイルを1つのファイルに統合し、保存するというものになります。


## 複数のcsvファイルを格納したフォルダをGoogleDriveにアップロード
GoogleDriveへのアップロードは、以下のサイトでわかりやすく説明されています。

http://one-u.jp/gsuite/2019/08/12/google-drive-howto/

## ファイル統合の実行

### フォルダ名称の指定

最初に、統合したいファイルを格納したフォルダの名称を指定します。

```Python:フォルダ名指定
#@title Google Colab のマイドライブに保存したフォルダ名を指定

Folder_name = '/content/drive/MyDrive/輸送実績明細(2018-2021)' #@param {type:"raw"}
```

GoogleColabのセル表示は以下となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/f6119cc2-7ffc-9ae8-17c8-9c9f9d2f9b94.png)
GoogleDriveの マイドライブ に格納した📁のパスは、**/content/drive/MyDrive/** となります。
上記の例では 📂名称を**輸送実績明細(2018-2021)** と記述していますが、GoogleDriveにアップロードした📂名称 に書き改めればOKです。


### GoogleDriveへのアクセス許可

```Python:GoogleColabからGoogleDriveへのアクセス許可
#@title Googleドライブを Google Colab にマウント

from google.colab import drive
drive.mount('/content/drive')
```

　
上記を実行すると、以下の表示が現れますので、**[Googleドライブに接続]** をクリックしてください。
![83ACE727-854D-4D53-A54D-77A3447F4E5E.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/dd5fb5f4-fa16-6fbb-c69d-e2ad00387e4a.jpeg)

次にアカウント選択画面が現れますので、アカウントを選択し、リクエストに関する確認も許可してください。
![D87B5890-A4D5-4FE1-98C6-5F068614A09C.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/c6d35860-5943-0600-39ff-f196742cfa62.jpeg)
![433A1789-8E28-4ABD-8FE5-80FF4C20CBFA.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/b8ff44da-c5a9-9dcf-0a33-5270dabc91c9.jpeg)
　
GoogleDriveにアクセスできれば、以下のようにGoogleColabの画面表示左のファイルに **drive** が表示されます。**MyDrive** 内に収めたフォルダもここから確認できます。
![92CACCBE-34BD-4263-9ADB-D336384EEA0B.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/906c4a4d-496c-6b6f-eef3-f5bc5cc1ab76.jpeg)


### フォルダ内のファイルリスト確認
```Python:フォルダ内ファイル一覧表示
#@title フォルダ内のファイルリストを表示（マウント時のみ）
import os

path = Folder_name
print(os.listdir(path))
```
これを実行することにより、フォルダ内のファイルリストが表示されます。

例えば以下です。
>['実績明細一覧2018r1.csv', '実績明細一覧2019r1.csv', '実績明細一覧2020r1.csv', '実績明細一覧2021r1.csv']


## フォルダ内のファイルの統合

```Python:ファイル結合実行⇒保存
#@title ファイル結合 ⇒ 保存（ファイル名はmerged_data.csv）
import pandas as pd
import glob

# csvファイルフォルダのパスと保存パス
path = Folder_name
path_after = '/content/'
  
# パスの末尾にスラッシュ
if path[:-1] != "/":
  path = path + "/"

# csvファイルリスト取得
csv_files = glob.glob(path + '*.csv')

# csvファイルをmerge
merged_file = pd.concat( [ pd.read_csv(c) for c in csv_files ] )
merged_file.to_csv(path_after + 'merged_data.csv', index=False, encoding='utf_8_sig')

print('complete.')
```
実行すればファイルが統合されます。
統合ファイル **merged_data.csv** は、GoogleColabの画面表示左のファイルに表示されますので、アクセスすることができます。

## 統合ファイルをローカルに保存

```Python:統合ファイルをローカルに保存
#@title 輸送区分結果 csv出力（☑ ＝実行）

merged_csv_output = True #@param {type:"boolean"}

#csv出力
if merged_csv_output == True:
  from google.colab import files
  files.download('merged_data.csv')
```
先の通り、統合ファイル **merged_data.csv** は、GoogleColabの画面表示左のファイルに保存されますが、ローカルファイルへの保存も実行できるようにしたものです。
☑ で実行しますので、こちらは任意となります。


## 最後に
上記コードは、GoogleColabのフォームを利用していますので、GoogleColabのセル表示は以下の通り、シンプルです。
手作業よりも圧倒的に楽に実行できます。

統合後も欠損値や異常値を処理したりと、これで終わりというわけではありませんが、これはこれで助かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/85ed7e7e-1520-8401-cdd9-ed3786605297.png)