【PostgreSQL 】csvファイルの読み込み（前処理大全より）

# はじめに
　この記事では初心者エンジニアがエラーにぶち当たった時にどう回避したかを記録する内容を記載していきます。
また、私自身が調べて実際にどのようにエラーから回避できたのかを記録することにより見返すことができるため、Qiitaを利用していきます。


## 動作環境
・Mac OS 12.1
・psql (PostgreSQL) 14.2
・pgAdmin4

## 参考テキスト
私は機械学習エンジニアになるため、データを取り扱うために必要な前処理を強化したいと思い「前処理大全」を購入しました。このテキストでは<B>R/python/SQL</B>の３つの言語についての挙動が知れるためお勧めします.
<table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#f1e8b2;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2a19cdee.17a97014.2a19cdef.e9e02969/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15389184%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"  ><img src="https://hbb.afl.rakuten.co.jp/hgb/2a19cdee.17a97014.2a19cdef.e9e02969/?me_id=1213310&item_id=19043378&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F6473%2F9784774196473.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2a19cdee.17a97014.2a19cdef.e9e02969/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15389184%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"  >前処理大全 データ分析のためのSQL／R／Python実践テク [ 本橋智光 ]</a><br><span >価格：3300円（税込、送料無料)</span> <span style="color:#BBB">(2022/8/2時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2a19cdee.17a97014.2a19cdef.e9e02969/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15389184%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"  ><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0"></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2a19cdee.17a97014.2a19cdef.e9e02969/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15389184%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"  ><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;">楽天で購入</div></a></div></td></tr></table></div><br><p style="color:#0c57de;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word">前処理大全［データ分析のためのSQL/R/Python実践テクニック］｜本橋 智光</p></td></tr></table>

## つまずき（その１）
まずデータの準備でつまづいてしまいました。テキストにはAWSのRedshiftを準備するように書かれていました。
まずここで。。。
### <font color="Red">AWSはまだ勉強していないしわからん！！</font>
となったわけで...だったら
### <font color="Red">ローカル環境でやろう !</font>
となったわけです。
次の項目からgitコマンドのクローンでgithubからひっぱてきたデータをSQLで操作できるようにするためcsvファイルをデータベースに読み込む必要があり、データベースはpostgreSQLを使っていこうと思います。

postgreSQLへのサーバーの繋げ方は省略します。
詳しくは以下のサイトを参考にしてください。
<a href ="https://densan-hoshigumi.com/server/postgresql-remote-connection">postgreSQL サーバーへの接続方法</a>
【URL】<a href ="https://densan-hoshigumi.com/server/postgresql-remote-connection">https://densan-hoshigumi.com/server/postgresql-remote-connection </a>

## 作業（１）
psqlコマンドのメタコマンドである <b>\copy</b>コマンドを使うことでデータベース側にhotel.csvがコピーされます。


```
postgres=# \copy hotel_tb from '/Users/kentaro/Desktop/前処理大全/awesomebook/data/hotel.csv' with csv header
ERROR:  relation "hotel_tb" does not exist
```

#### エラー内容 
写真エラー内容は「hotel_tb」が存在しないよと言われました。
このエラーはスキーマを作成しその中にテーブルを作成することでこのエラーが出なくなりました。
<a href="https://tech.pscsrv.co.jp/2021/08/02/%E3%80%90postgresql%E3%80%91postgresql%E3%81%AE%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E%EF%BC%88schema%EF%BC%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/#:~:text=%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E%EF%BC%88Schema%EF%BC%89%20%E3%81%A8%E3%81%AF%E3%80%81,%E4%B8%8B%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82">スキーマ</a>とはデータベースに複数設定できる名前空間のことを言います。
詳しくは参考文献のサイトから確認して下さい。
下記にスキーマとテーブルを作成するコードを載せています。

```
postgres=# create schema 前処理 authorization postgres;
```
```
postgres=# create table 前処理.hotel_tb(
postgres(# hotel_id text not null,
postgres(# base_price numeric not null,
postgres(# big_area_name text not null,
postgres(# small_area_name text not null,
postgres(# hotel_latitude numeric,
postgres(# hotel_longitude numeric not null,
postgres(# is_business boolean not null);
CREATE TABLE

```
これらを実行し、pgAdmin４で挙動を見てみましょう。
すると赤枠で囲まれたスキーマと緑枠で囲まれたテーブルが作成されたことがわかります。
<img width="250" alt="pgAdmin4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2669832/1f55d3a6-6085-28f7-8262-da37c94bd03c.png"></img>

作成後、\copyコマンドをもう一度実行してみましょう！

```
postgres=# \copy 前処理.hotel_tb from '/Users/kentaro/Desktop/前処理大全/awesomebook/data/hotel.csv' with csv header
COPY 300
```
### <font color="Red">成功しました！！</font>

## 終わりに
今回はAWSを使用しないやり方でやりましたが、今後はAWSについて勉強し利用できる知識が身につけば、テキスト通りRedshiftを使ったデータベースの連携をしていきたいと思います。

## 参考文献
・<a href='https://tech.pscsrv.co.jp/2021/08/02/%E3%80%90postgresql%E3%80%91postgresql%E3%81%AE%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E%EF%BC%88schema%EF%BC%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/#:~:text=%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E%EF%BC%88Schema%EF%BC%89%20%E3%81%A8%E3%81%AF%E3%80%81,%E4%B8%8B%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82'><font color="blue">【PostgreSQL】PostgreSQLのスキーマ（Schema）について</font></a>
・<a href="https://catcherweb.com/awesomebook/"><font color="blue">前処理大全でデータ分析の「下ごしらえ」を学習しました</font></a>
・<a　href="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2669832/71c75691-d1cc-9d1f-113a-5becd98c9fc1.png"><font color="blue">前処理大全［データ分析のためのSQL/R/Python実践テクニック］| 本橋 智光</font></a>