Google Colaboratory内で画像やCSVファイルにアクセスするのが一苦労だった話

# はじめに

GoogleのColaboratoryにて、無料でGPUが使えるという嬉しすぎる報告から簡易テスト用はこれを使うこと一択！と思っています。
しかも、**TeslaのK80**という太っ腹過ぎます！
いつも使っているディープラーニングフレームワークであるChainerでも対応しており、TensorFlow, Pytorchと基本はノートブック内で `!pip install 〜`とするだけでOKです。
参考：[【秒速で無料GPUを使う】TensorFlow/Keras/PyTorch/Chainer深層学習環境 on Colaboratory](https://qiita.com/tomo_makes/items/f70fe48c428d3a61e131)

簡単にMNISTを通すテストだけでは気づかなかったのですが、実務で使い始めると、画像やCSVファイルを読み込みたいケースがあり、その時に控えめに言っても**結構めんどくさい**し、全然リファレンスが見つかりませんでしたので、今回ざっくりとまとめておきます。
* もっと他にスマートな方法があれば教えてもらえるとありがたいです m(_ _)m

前提としては、Googleのアカウントを持っていることだけです。

# 1. ファイルをアップロード

それでは、今回は `sample.csv` ファイルを読み込む練習をしてみましょう。
まずは、Google Driveのどこでも良いので、ドラッグドロップでアップロードしましょう。

<img width="1043" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/ef72b9d5-a919-2e0c-415d-ed6654e4e09d.png">

# 2. 共有リンクを取得

ファイルを右クリックでメニューを開き、『共有可能なリンクを取得』しましょう。

<img width="1436" alt="２.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/ba3a3e7b-b790-4439-b089-02df39d010fd.png">

`リンクの共有がオフです`と出てくる場合は、右側のバーをスライドさせて共有をオンにしましょう。

<img width="344" alt="３.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/f4e8cf18-3332-8760-4e14-0401ad701e6a.png">

そうすると、共有リンクが取得できるため、こちらをコピーしておきましょう。
大事なところは、`id=`以下になります。
例えば、ここからは `https://drive.google.com/open?id=kikagaku` だとして話を進めていきましょう。

<img width="488" alt="４.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/4d2204d3-a977-ed1c-a5ff-abfea89a4db7.png">

# 3. Colaboratoryでノートブックを開く

[Google Colab](https://colab.research.google.com)にアクセスして、新規もしくは既存のノートブックを開いてください。
ノートブックは自動的にGoogle Driveの`Colab Notebook`というフォルダに保存されています。
このフォルダに読み込みたいデータをアップロードしておけばOKかな？と思ったのですが、全然そういう訳ではありませんでした。

<img width="488" alt="スクリーンショット 2018-02-10 16.36.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/0df2468a-2d39-94fb-de44-6288f058fedb.png">

最初には `datalab` という得体の知れないファイルのみあり、それ以外は何もありません。

# 4. Google Driveにアクセスするための準備

まず、`PyDrive` というGoogle Driveと接続するためのモジュールをインストールしておく必要があります。

```python3:PyDriveのインストール
!pip install -U -q PyDrive
```

つぎに、インストールした中で必要なライブラリを読み込んでおきましょう。

```python3:ライブラリの読み込み
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
```

もし、`google`がありませんとエラーが出た場合は、同様に `!pip install google` でインストール完了です。

そして、Google Cloud SDKの認証を行いましょう。

```python3:GoogleCloudSDKの認証を行う
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
```

こちらを実行すると、下記のようにGoogle Cloud SDKの認証リンクが出てきます。

<img width="484" alt="5.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/89fd7d56-e5b5-43b5-c9a0-a81d56fabb3a.png">

リンクへアクセスし、ユーザーIDを選択して、Google Cloud SDKでの使用を許可すると、下記の画面のように Verification Code が得られます。

<img width="615" alt="６.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/2113ae3d-78a9-9442-b364-a26d2dc464bf.png">

こちらのコードを`Enter verification code`の部分にコピペしてEnterです。
特にエラーが起きなければ認証完了です。

# 5. Google Drive上のファイルにアクセス

ここで、Step2で取得していた共有リンクの出番です。
`id`という変数に、共有リンクで取得した id= より後の部分を貼り付けて、下記のコードを実行してください。

```python3:ファイルへアクセス
id = 'kikagaku'  # 共有リンクで取得した id= より後の部分
downloaded = drive.CreateFile({'id': id})
downloaded.GetContentFile('sample.csv')
```

こちらを実行して特にエラーが出なければ、Google Drive上のファイルがダウンロードされています。
ディレクトリの中身を確認してみましょう。

<img width="291" alt="7.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/4cddc89e-9323-d9cd-d3ac-f13f897dd03b.png">

これで後はローカルのファイルと同様に読み込むことができます。

# 6. （補足）ディレクトリ毎アップロードしたい場合

ディレクトリは `id` とは異なる共有リンクであるため、zipファイルに圧縮してアップロードを行いダウンロードするのが無難そうです。

例えば、`images.zip`というファイル名で圧縮した後にGoogle Driveへアップロードを行った場合、前述の手順と同様に共有リンクを元にダウンロードを行います。

<img width="301" alt="スクリーンショット 2018-02-10 17.01.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/34660131-debd-968d-b717-0d4133a61620.png">

こんな風に `images.zip`をダウンロードしてくることができるのですが、解凍しないと使えないため、`unzip`コマンドで解凍しましょう。

```python3:images.zipを解凍
!unzip images.zip
```

<img width="415" alt="スクリーンショット 2018-02-10 17.03.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/d6b51028-5160-2264-621e-6c972bc37a02.png">

非常に簡単に解凍できました。
解凍後に`images.zip`が必要なければ、`!rm images.zip`で削除すればOKです。

<img width="321" alt="スクリーンショット 2018-02-10 17.04.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/764e875f-5a34-ec32-b575-3e7fdbf06232.png">

こんな風にディレクトリのアップロードも完了しました。

# おわりに

Dropbox等であれば、`wget`で取ってくる方法もあるそうです。
参考：[colaboratory をつかってみる CSVのファイルをアップロード](https://qiita.com/zanjibar/items/2f9c562f98881e6d277c)

みなさん、ハッピーなディープラーニングライフを送りましょう！

# 著者紹介

<img src='https://qiita-image-store.s3.amazonaws.com/0/130181/profile-images/1506322419' width='150px'>
株式会社キカガク
代表取締役社長　吉崎 亮介（twitter: [@yoshizaki_kkgk](https://twitter.com/yoshizaki_kkgk)）

[Twitter](https://twitter.com/yoshizaki_kkgk)でAI関連の情報をつぶやいていますので、フォローお待ちしています！