View on GitHub

推薦処理用のデータの準備

Home

推薦処理用のデータの準備

パッケージのインストール

(recsys_full) offline$ pip install cryptography
(recsys_full) offline$ pip freeze
...(略)...
cffi==1.17.1
cryptography==44.0.2
pycparser==2.22
...(略)...

データの準備

offline$ cd data/
offline/data$
 psql ml_latest_small -U postgres -c "\copy (SELECT '00000000-0000-0000-0000-' || lpad(cast(user_id AS TEXT), 12, '0') AS id, user_name || '@rsl.org' AS email FROM users ORDER BY id ASC) to 'users_.csv' with delimiter E'\t' csv header encoding 'UTF8'"
 psql ml_latest_small -U postgres -c "\copy (SELECT movie_id AS id, title, year, imdb_id, tmdb_id FROM movies NATURAL JOIN links ORDER BY movie_id ASC) to 'movies.csv' with delimiter E'\t' csv header encoding 'UTF8'"
 psql ml_latest_small -U postgres -c "\copy (SELECT genre_id AS id, genre_name AS name FROM genres ORDER BY genre_id ASC) to 'genres.csv' with delimiter E'\t' csv header encoding 'UTF8'"
 psql ml_latest_small -U postgres -c "\copy (SELECT movie_id, genre_id FROM movies_genres ORDER BY movie_id ASC, genre_id ASC) to 'movies_genres.csv' with delimiter E'\t' csv header encoding 'UTF8'"
 psql ml_latest_small -U postgres -c "\copy (SELECT '00000000-0000-0000-0000-' || lpad(cast(user_id AS TEXT), 12, '0') || '_' || lpad(cast(movie_id AS TEXT), 6, '0') AS id, '00000000-0000-0000-0000-' || lpad(cast(user_id AS TEXT), 12, '0') AS user_id, movie_id, rating, rated_at FROM ratings ORDER BY user_id ASC, movie_id ASC) to 'ratings.csv' with delimiter E'\t' csv header encoding 'UTF8'"
 psql ml_latest_small -U postgres -c "\copy (SELECT '00000000-0000-0000-0000-' || lpad(cast(user_id AS TEXT), 12, '0') || '_' || lpad(cast(movie_id AS TEXT), 6, '0') AS id, '00000000-0000-0000-0000-' || lpad(cast(user_id AS TEXT), 12, '0') AS user_id, movie_id, tag, tagged_at FROM tags ORDER BY user_id ASC, movie_id ASC) to 'tags.csv' with delimiter E'\t' csv header encoding 'UTF8'"

ENCRYPTION_KEYの生成

  1. 下記ファイルをダウンロードする。
  2. keygen.pyを実行し、キーを生成する。
    (recsys_full) offline/data$ cd ../src/
    (recsys_full) offline/src$ mv ~/Downloads/keygen.py .
    (recsys_full) offline/src$ python keygen.py
    【Fernetキー】
    
  3. 生成したキーをファイルに保存する。 offline/key/keys
    ENCRYPTION_KEY=【Fernetキー】
    
  4. 生成したキーを環境変数に保存する。
    (recsys_full) offline/src$ export ENCRYPTION_KEY=【Fernetキー】
    

ユーザのemailアドレスの暗号化

  1. 下記ファイルをダウンロードする。
(recsys_full) offline/src$ mv ~/Downloads/user2encrypt.py .
(recsys_full) offline/src$ python user2encrypt.py --in_dir ../data/
processing users: 100%|███████████████████████████████████████████████████████████████| 610/610 [00:00<00:00, 37887.24it/s]

データの確認

offline/src$ cd ../data/
offline/data$ ls
genres.csv  ml-latest-small  ml-rdb  movies.csv  movies_genres.csv  ratings.csv  tags.csv  users.csv  users_.csv
offline/data$
 less users.csv
 less movies.csv
 less genres.csv
 less movies_genres.csv
 less ratings.csv
 less tags.csv

参考

  1. Pythonでの暗号化: cryptographyで対称鍵暗号化を実装する方法 - PyDocument