From ce9c003089da945f97f06051607bd03e1b8f9c7e Mon Sep 17 00:00:00 2001 From: crystal20277 Date: Thu, 8 Sep 2022 11:05:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E7=94=A8=E6=88=B7=E6=B4=BB=E8=B7=83?= =?UTF-8?q?=E5=BA=A6=E6=95=B0=E6=8D=AE=E4=BF=9D=E5=AD=98=E5=88=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/01_2022-08-09.sql | 13 ++++++++++++- .../activity_analysis/data_process.py | 13 +++++++++++++ user_portrait_analysis/activity_analysis/train.py | 11 +++++++---- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/sql/01_2022-08-09.sql b/sql/01_2022-08-09.sql index c91e540..119bd16 100644 --- a/sql/01_2022-08-09.sql +++ b/sql/01_2022-08-09.sql @@ -96,4 +96,15 @@ CREATE TABLE "public"."ai_repo_topic_detail" ( "topic_id" int4, "topic_name" varchar(255) COLLATE "pg_catalog"."default", "created_unix" int8 -); \ No newline at end of file +); + + + +CREATE TABLE "public"."ai_user_activity" ( + "user_id" int8, + "activity" int4, + "type" varchar(20) COLLATE "pg_catalog"."default", + "created_unix" int8 + ); + + diff --git a/user_portrait_analysis/activity_analysis/data_process.py b/user_portrait_analysis/activity_analysis/data_process.py index 239d6d0..4775a66 100644 --- a/user_portrait_analysis/activity_analysis/data_process.py +++ b/user_portrait_analysis/activity_analysis/data_process.py @@ -87,6 +87,19 @@ def get_rfm_data(): return df_rfm +def save_train_result_to_pgsql(df): + start = datetime.datetime.now() + logger.info("开始将用户活跃度数据保存到数据库...") + + engine = create_engine(f'postgresql+psycopg2://{user}:{passwd}@{host}:{port}/{database}', pool_recycle=3600) + conn = engine.connect() + + df['type'] = 'activity' + df['created_unix'] = int(datetime.datetime.now().timestamp()) + df.to_sql('ai_user_activity', conn, index=False, if_exists='replace') + logger.info("用户活跃度数据保存到数据库完毕,共" + str(df.shape[0]) + "条数据,总耗时" + str((datetime.datetime.now() - start).seconds) + "秒") + + if __name__ == '__main__': # 取之前多少天登录的数据 latest_data_date = get_before_date(data_before_days) diff --git a/user_portrait_analysis/activity_analysis/train.py b/user_portrait_analysis/activity_analysis/train.py index 36cb01d..4baf3dc 100644 --- a/user_portrait_analysis/activity_analysis/train.py +++ b/user_portrait_analysis/activity_analysis/train.py @@ -4,7 +4,7 @@ import pandas as pd from sklearn.cluster import KMeans from config import logger from config import RANDOM_SEED -from data_process import get_rfm_data +from data_process import get_rfm_data, save_train_result_to_pgsql from config import activity_analysis_path warnings.filterwarnings('ignore') @@ -68,14 +68,17 @@ def train(): # 将用户 id 和活跃度分值提取出来并创新建立一个表 result_csv['user_id'] = result_csv['user_id'].astype(int) result_csv['activity'] = result_csv['activity'].astype(int) - resuts_dict = dict(zip(result_csv['user_id'], result_csv['activity'])) + result_dict = dict(zip(result_csv['user_id'], result_csv['activity'])) + + # 将训练结果保存到数据库 + save_train_result_to_pgsql(result_csv) # 保存模型和结果 pickle.dump(kmeans_model, open(activity_analysis_path + 'results/user_activity_model.pkl', 'wb')) - pickle.dump(resuts_dict, open(activity_analysis_path + 'results/user_activity_dict.pkl', 'wb')) + pickle.dump(result_dict, open(activity_analysis_path + 'results/user_activity_dict.pkl', 'wb')) logger.info('用户活跃度分析模型训练完成') - return resuts_dict + return result_dict if __name__ == '__main__':