推薦リストテーブルの設計とデータの登録
つづいて、推薦リストに関するテーブルも設計しましょう。それぞれ、次のようなテーブルを設計することにします。
reclist_popularity
カラム名 | 説明 | データ型 | 制約 |
---|---|---|---|
id | ID | SERIAL | PRIMARY KEY |
rank | 順位 | REAL | NOT NULL |
item_id | アイテムID | INT | FOREIGN KEY(items.item_id), NOT NULL |
score | スコア | REAL | NOT NULL |
reclist_similarity
カラム名 | 説明 | データ型 | 制約 |
---|---|---|---|
id | ID | SERIAL | PRIMARY KEY |
base_item_id | ベースアイテムID | INT | FOREIGN KEY(items.item_id), NOT NULL |
rank | 順位 | REAL | NOT NULL |
item_id | アイテムID | INT | FOREIGN KEY(items.item_id), NOT NULL |
score | スコア | REAL | NOT NULL |
reclist_itemcf
カラム名 | 説明 | データ型 | 制約 |
---|---|---|---|
id | ID | SERIAL | PRIMARY KEY |
user_id | ユーザID | INT | FOREIGN KEY(users.user_id), NOT NULL |
rank | 順位 | REAL | NOT NULL |
item_id | アイテムID | INT | FOREIGN KEY(items.item_id), NOT NULL |
score | 予測評価値 | REAL | NOT 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.csv
、reclist_similarity.csv
、reclist_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)