JupyterNotebookの導入およびBigQueryへの接続手順

BigQueryのデータをJupyterNotebookで可視化したいと思ったが、まとまってる手順が見たあらず苦戦したので手順をメモしておきます。
Googleの認証周り色々ありすぎてよくわかってないです…。

不明な点や誤ってる点などあれが気軽にコメントいただけると嬉しいです。


## 前提
BigQueryが使える状態にあることが前提です。

## 環境
Windows 10

**導入したソフトなどのバージョン**
python 3.9.12
conda 4.12.0
anaconda 2022.05

```
>conda -V
conda 4.12.0

>python -V
Python 3.9.12

>conda list anaconda$
# packages in environment at C:\jupyter:
#
# Name                    Version                   Build  Channel
anaconda                  2022.05                  py39_0
```

## JupyterNotebookの導入

### anacondaをインストール
以下のリンクからインストーラーをダウンロードし、anacondaをインストールします。
https://www.anaconda.com/products/distribution

### **jupyter notebookの動作確認**

一旦、jupyter notebookが正常にインストールされているか確認する。

まず、windowsからjupyternotebookを起動する。
![image-20220724155130398.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182296/9a5fd039-b3b9-76f5-5b3f-c3a22987b9b8.png)

任意のフォルダを開き、`new > python`を選択
![image-20220724155231172.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182296/4d4c2b32-9c7b-a5b2-97a2-84abb9fd5ae2.png)


以下を入力して、それぞれのセクションで実行(Ctrl + Enter)する。
セクションの追加は「+」ボタンでできる。

```python
# matplotlib をインラインで使用することを指定する
%matplotlib inline
# ライブラリの読み込み
import matplotlib.pyplot as plt
```

```python
# グラフを描画する
plt.plot([1,2,3,4])
plt.show()
```

以下のようにグラフが出力されることを確認する。
![image-20220724155539223.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182296/34280a23-03bc-910f-a78a-6e3caf8ab926.png)

## GoogleおよびBigQueryとの接続

### GoogleおよびBigQueryのモジュールを導入
windowsからanaconda Promptを起動
![image-20220724163111615.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182296/312065b9-91ee-5a57-e3c9-31c2b1209f88.png)


anaconda Promptで以下のコマンドを実行する

```
pip install --upgrade google-cloud-bigquery
pip install --upgrade google-cloud-bigquery-storage
pip install --upgrade pydata-google-auth
```


### Googleへの認証
次に、以下のコマンドを順に実行し、googleへの認証を行う
参考：[google api coreの公式ドキュメント](https://googleapis.dev/python/google-api-core/latest/auth.html)

```
gcloud auth application-default login
gcloud auth login
gcloud components update
```
![image-20220724163914412.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182296/c43a7854-2690-0fd8-f3b7-b0b842868885.png)

使用するデフォルトのプロジェクトを設定する(PROJECT_IDをプロジェクトIDに置き換える)
PROJECT_IDは[BigQUeryのワークスペース一覧](https://console.cloud.google.com/projectselector2/bigquery?hl=ja&supportedpurview=project)を開き、`プロジェクトID`の箇所を確認する。

```
gcloud config set project PROJECT_ID
```
![image-20220724165744883.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182296/2fb1c9d9-c94a-b60f-8dbb-8e59de8cf4d6.png)

### JupyterNoteBookからBigQueyrへの接続確認
jupyterを再起動し、任意のnotebookを作成し以下を実行する

```python
from google.cloud import bigquery
client = bigquery.Client()
# 任意のクエリを指定
QUERY = ('select xxx from dataset.table') 
query_job = client.query(QUERY)
rows = query_job.result()
for row in rows:
	print(row.xxx)
```


## 参考

Google Clound公式ドキュメント
[jupyterノートブックでBigQueryデータを可視化する](https://cloud.google.com/bigquery/docs/visualize-jupyter?hl=ja)（この手順通りに動かず、あまり参考ならなかった）

GoogleAPIドキュメント
[google-cloud-bigquery](https://googleapis.dev/python/bigquery/latest/index.html)
[google-api-core](https://googleapis.dev/python/google-api-core/latest/index.html)
[google-auth](https://googleapis.dev/python/google-auth/latest/user-guide.html#service-account-private-key-files)

google-authのドキュメントにはサービスアカウントやOAuth2.0の記述もありますが、今回は採用せず、手順の確認はしませんでした。
ドキュメントを読む限り、認証情報（アクセストークンや認証のファイルなど）をコードに記述する必要があるようで、他の人とjupyter notebookで作成したコードを共有するときにそのままでは動作しない可能性があると思ったためです。