aiforge_python/project_evaluation_analysis/generate_statistics_data.py

89 lines
3.4 KiB
Python

import sys
import os
import config
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
import warnings
import pandas as pd
from datetime import datetime
from sqlalchemy import create_engine
from utils import get_before_date, compare_date, get_between_dates
from config import host, port, user, passwd, database
warnings.filterwarnings("ignore")
def generate_statistics_data():
"""
生成数据
:return:
"""
engine = create_engine(f'postgresql+psycopg2://{user}:{passwd}@{host}:{port}/{database}', pool_recycle=3600)
conn = engine.connect()
query_last_date_sql = f"""
select date_str from ai_repo_trend_statistics t group by date_str order by date_str desc limit 1
"""
query_last_date_df = pd.read_sql(query_last_date_sql, conn)
# 生成距今最多60天以前的数据
last_date = ''
before_60_day_date = get_before_date(60)
if not query_last_date_df.empty:
last_date = query_last_date_df.iloc[0, 0]
if compare_date(last_date, before_60_day_date):
last_date = before_60_day_date
else:
last_date = before_60_day_date
current_date = datetime.now().strftime('%Y-%m-%d')
date_list = get_between_dates(last_date, current_date)
if len(date_list) > 0:
for date in date_list:
if config.generate_fake_data_enable == False:
if date == current_date:
generate_statistics_data_single(conn, date)
else:
config.logger.info(f"因generate_fake_data_enable=False,故取消插入日期{date}的statistics数据")
continue
generate_statistics_data_single(conn, date)
config.logger.info(f"统计个人画像数据完成")
def generate_statistics_data_single(conn, date):
config.logger.info(f"统计个人画像数据:{date}")
sql = f"""select * from ai_repository_history where date_str = '{date}'"""
all_df = pd.read_sql(sql, conn)
# 发展趋势
tmp_df = all_df[['num_watches', 'num_stars', 'num_forks', 'clone_cnt', 'num_issues', 'num_pulls', 'num_commit', 'is_test']]
all_df['sum'] = tmp_df.sum(axis=1)
all_df['all_avg'] = all_df['sum'].mean()
all_df = all_df.round(2)
db_df = all_df[['repo_id', 'date_str', 'num_watches', 'num_stars', 'num_forks', 'clone_cnt', 'num_issues', 'num_pulls', 'num_commit', 'is_test', 'sum', 'all_avg']]
db_df.insert(2, 'type', 'repo_trend')
db_df.insert(3, 'add_time', datetime.now())
db_df = db_df.rename(columns={'sum': 'sum_value', 'all_avg': 'all_repo_avg_value'})
db_df.to_sql('ai_repo_trend_statistics', conn, index=False, if_exists='append')
# 开源潜力
tmp_df = all_df[['num_watches', 'num_stars', 'num_forks', 'clone_cnt', 'is_test']]
all_df['sum'] = tmp_df.sum(axis=1)
all_df['all_avg'] = all_df['sum'].mean()
all_df = all_df.round(2)
db_df = all_df[['repo_id', 'date_str', 'num_watches', 'num_stars', 'num_forks', 'clone_cnt', 'is_test', 'sum', 'all_avg']]
db_df.insert(2, 'type', 'repo_potential')
db_df.insert(3, 'add_time', datetime.now())
db_df.insert(4, 'num_issues', 0)
db_df.insert(5, 'num_pulls', 0)
db_df.insert(6, 'num_commit', 0)
db_df = db_df.rename(columns={'sum': 'sum_value', 'all_avg': 'all_repo_avg_value'})
db_df.to_sql('ai_repo_trend_statistics', conn, index=False, if_exists='append')
if __name__ == '__main__':
generate_statistics_data()