View on GitHub

推薦リストテーブルの設計とデータの登録

Home

推薦リストテーブルの設計とデータの登録

つづいて、推薦リストに関するテーブルも設計しましょう。それぞれ、次のようなテーブルを設計することにします。

reclist_popularity

カラム名説明データ型制約
idIDSERIALPRIMARY KEY
rank順位REALNOT NULL
item_idアイテムIDINTFOREIGN KEY(items.item_id), NOT NULL
scoreスコアREALNOT NULL

reclist_similarity

カラム名説明データ型制約
idIDSERIALPRIMARY KEY
base_item_idベースアイテムIDINTFOREIGN KEY(items.item_id), NOT NULL
rank順位REALNOT NULL
item_idアイテムIDINTFOREIGN KEY(items.item_id), NOT NULL
scoreスコアREALNOT NULL

reclist_itemcf

カラム名説明データ型制約
idIDSERIALPRIMARY KEY
user_idユーザIDINTFOREIGN KEY(users.user_id), NOT NULL
rank順位REALNOT NULL
item_idアイテムIDINTFOREIGN KEY(items.item_id), NOT NULL
score予測評価値REALNOT NULL

以上のテーブルをPostgreSQLのrecsys_djangoデータベース上で作成します。PostgreSQL上で下記のコマンドを実行してください。

recsys_django=#
CREATE TABLE reclist_popularity(
    id SERIAL,
    rank REAL NOT NULL,
    item_id INT NOT NULL,
    score REAL NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY(item_id) REFERENCES items(item_id)
);

recsys_django=#
CREATE TABLE reclist_similarity(
    id SERIAL,
    base_item_id INT NOT NULL,
    rank REAL NOT NULL,
    item_id INT NOT NULL,
    score REAL NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY(base_item_id) REFERENCES items(item_id),
    FOREIGN KEY(item_id) REFERENCES items(item_id)
);

recsys_django=#
CREATE TABLE reclist_itemcf(
    id SERIAL,
    user_id INT NOT NULL,
    rank REAL NOT NULL,
    item_id INT NOT NULL,
    score REAL NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY(user_id) REFERENCES users(user_id),
    FOREIGN KEY(item_id) REFERENCES items(item_id)
);

それぞれの所有者をrslに変更しておきましょう。

recsys_django=# ALTER TABLE reclist_popularity OWNER TO rsl;
ALTER TABLE
recsys_django=# ALTER TABLE reclist_similarity OWNER TO rsl;
ALTER TABLE
recsys_django=# ALTER TABLE reclist_itemcf OWNER TO rsl;
ALTER TABLE

つづいて、各テーブルにデータを登録します。recsyslab/recsys-django/contents/recsys_django/offline/data/からreclist_popularity.csvreclist_similarity.csvreclist_itemcf.csvを任意のディレクトリにダウンロードしてください。そして、PostgreSQL上でそれぞれ下記のコマンドを実行してください。ここで、【ディレクトリ】には各ファイルを置いているディレクトリを入力してください。

recsys_django=# COPY reclist_popularity FROM '【ディレクトリ】/reclist_popularity.csv' (DELIMITER E'\t', FORMAT csv, HEADER TRUE, ENCODING 'UTF-8');
COPY 3
recsys_django=# SELECT setval('reclist_popularity_id_seq', (SELECT max(id) FROM reclist_popularity));
 setval 
--------
      3
(1 row)
recsys_django=# COPY reclist_similarity FROM '【ディレクトリ】/reclist_similarity.csv' (DELIMITER E'\t', FORMAT csv, HEADER TRUE, ENCODING 'UTF-8');
COPY 27
recsys_django=# SELECT setval('reclist_similarity_id_seq', (SELECT max(id) FROM reclist_similarity));
 setval 
--------
      27
(1 row)
recsys_django=# COPY reclist_itemcf FROM '【ディレクトリ】/reclist_itemcf.csv' (DELIMITER E'\t', FORMAT csv, HEADER TRUE, ENCODING 'UTF-8');
COPY 14
recsys_django=# SELECT setval('reclist_itemcf_id_seq', (SELECT max(id) FROM reclist_itemcf));
 setval 
--------
     14
(1 row)

以上で、サンプルデータの登録が完了しました。ここまで作成したテーブルを確認しておきましょう。

recsys_django=# \dt
                       List of relations
 Schema |                 Name                 | Type  | Owner 
--------+--------------------------------------+-------+-------
 public | accounts_customuser                  | table | rsl
 public | accounts_customuser_groups           | table | rsl
 public | accounts_customuser_user_permissions | table | rsl
 public | auth_group                           | table | rsl
 public | auth_group_permissions               | table | rsl
 public | auth_permission                      | table | rsl
 public | django_admin_log                     | table | rsl
 public | django_content_type                  | table | rsl
 public | django_migrations                    | table | rsl
 public | django_session                       | table | rsl
 public | items                                | table | rsl
 public | ratings                              | table | rsl
 public | reclist_itemcf                       | table | rsl
 public | reclist_popularity                   | table | rsl
 public | reclist_similarity                   | table | rsl
 public | users                                | table | rsl
(16 rows)