はじめに
この記事では初心者エンジニアがエラーにぶち当たった時にどう回避したかを記録する内容を記載していきます。
また、私自身が調べて実際にどのようにエラーから回避できたのかを記録することにより見返すことができるため、Qiitaを利用していきます。
動作環境
・Mac OS 12.1
・psql (PostgreSQL) 14.2
・pgAdmin4
参考テキスト
私は機械学習エンジニアになるため、データを取り扱うために必要な前処理を強化したいと思い「前処理大全」を購入しました。このテキストではR/python/SQLの3つの言語についての挙動が知れるためお勧めします.
前処理大全[データ分析のためのSQL/R/Python実践テクニック]|本橋 智光 |
つまずき(その1)
まずデータの準備でつまづいてしまいました。テキストにはAWSのRedshiftを準備するように書かれていました。
まずここで。。。
AWSはまだ勉強していないしわからん!!
となったわけで...だったら
ローカル環境でやろう !
となったわけです。
次の項目からgitコマンドのクローンでgithubからひっぱてきたデータをSQLで操作できるようにするためcsvファイルをデータベースに読み込む必要があり、データベースはpostgreSQLを使っていこうと思います。
postgreSQLへのサーバーの繋げ方は省略します。
詳しくは以下のサイトを参考にしてください。
postgreSQL サーバーへの接続方法
【URL】https://densan-hoshigumi.com/server/postgresql-remote-connection
作業(1)
psqlコマンドのメタコマンドである \copyコマンドを使うことでデータベース側に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」が存在しないよと言われました。
このエラーはスキーマを作成しその中にテーブルを作成することでこのエラーが出なくなりました。
スキーマとはデータベースに複数設定できる名前空間のことを言います。
詳しくは参考文献のサイトから確認して下さい。
下記にスキーマとテーブルを作成するコードを載せています。
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
これらを実行し、pgAdmin4で挙動を見てみましょう。
すると赤枠で囲まれたスキーマと緑枠で囲まれたテーブルが作成されたことがわかります。
作成後、\copyコマンドをもう一度実行してみましょう!
postgres=# \copy 前処理.hotel_tb from '/Users/kentaro/Desktop/前処理大全/awesomebook/data/hotel.csv' with csv header
COPY 300
成功しました!!
終わりに
今回はAWSを使用しないやり方でやりましたが、今後はAWSについて勉強し利用できる知識が身につけば、テキスト通りRedshiftを使ったデータベースの連携をしていきたいと思います。
参考文献
・【PostgreSQL】PostgreSQLのスキーマ(Schema)について
・前処理大全でデータ分析の「下ごしらえ」を学習しました
・前処理大全[データ分析のためのSQL/R/Python実践テクニック]| 本橋 智光