| Server IP : 157.22.201.140 / Your IP : 216.73.216.150 Web Server : nginx/1.30.1 System : Linux mit.vincode.fvds.ru 6.8.0-111-generic #111-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 11 23:16:02 UTC 2026 x86_64 User : root ( 0) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /opt/llm_MaxGPT/aDAT_REPORTS/SOLLERS/ |
Upload File : |
import pandas as pd
from bootstrap import *
import random
import numpy as np
task = U24.data2Df_upload(root_path + '/aDAT_REPORTS/SOLLERS/data_in/soollers_task.xlsx')
task = U24.findTovgruppa(task, column_to_scan='description', contact_how='left')
task['task_art'] = task['task_art'].astype(str)
task.rename(columns={'cross_tovgruppa':'task_tovgruppa'}, inplace=True)
def newPrice(df, target):
price_cfnt = {'emex': .78, 'exist': .87, 'autopiter': .93, 'autoopt': .89}
new_price_cfnt = price_cfnt[target] if target in price_cfnt else .83
new_price_cfnt = new_price_cfnt * (1 + random.randint(-5, 5)/100)
df["price_b2b"] = df["price"].astype(int)
df["price_b2b"] = df["price_b2b"] * new_price_cfnt
df["price_b2b"] = df["price_b2b"].astype(int)
return df
def aggAutoopt():
path = root_path + '/aDAT_REPORTS/SOLLERS/data_in/autoopt_parsed/'
df = U24.data2Df_upload(path)
#############
df = U24.findTovgruppa(df, contact_how='left')
df['task_art'] = df['task_art'].astype(str)
df['task_art'] = df['task_art'].str.replace('40600160109005', '040600160109005') # костыль
df = pd.merge(df, task[['task_art', 'task_tovgruppa', 'description']], on='task_art', how='left')
df = BAP.constructBartCol(df, prepare_bart=True)
df['ttime'] = 5
newPrice(df, target = 'autoopt')
U24.tmp_saveOut(df)
return df
def aggEmex():
path_in = root_path + '/aDAT_REPORTS/SOLLERS/data_in/emex_parsed/'
df = U24.data2Df_upload(path_in)
tdf = df.copy()
df = U24.findTovgruppa(df, contact_how='left')
tdf = tdf[~tdf['task_art'].isin(df['task_art'])]
df = pd.concat([df, tdf])
# df = TCONV.main_t_converter(df, target='emex', days_back=1)
df['task_art'] = df['task_art'].astype(str)
df['task_art'] = df['task_art'].str.replace('40600160109005', '040600160109005') #костыль
df = pd.merge(df, task[['task_art', 'task_tovgruppa', 'description']], on='task_art', how='left')
df = BAP.constructBartCol(df, prepare_bart=True)
newPrice(df, target='emex')
U24.tmp_saveOut(df, suffix='_emx')
return df
#exist_parsed
def aggExist():
path_in = root_path + '/aDAT_REPORTS/SOLLERS/data_in/exist_parsed/'
df = U24.data2Df_upload(path_in)
df = U24.findTovgruppa(df, contact_how='left')
df = pd.merge(df, task[['href', 'task_art', 'task_tovgruppa', 'description']], left_on='url', right_on='href', how='left')
df = BAP.constructBartCol(df, prepare_bart=True)
df['ttime'] = 5
newPrice(df, target = 'exist')
U24.tmp_saveOut(df, suffix='_exist')
return df
def aggAutopiter():
path_in = root_path + '/aDAT_REPORTS/SOLLERS/data_in/autopiter_parsed/'
df = U24.data2Df_upload(path_in)
# df['task_art'] = df['task_art'].str.replace('40600160109005', '040600160109005') #костыль
del df['task_art']
df['base_art'] = df['url'].str.replace('https://autopiter.ru/goods/', '').str.split('/', expand=True)[0]
df['base_art'] = df['base_art'].apply(lambda x: U24.clearWaste(x, type_waste='art'))
df['base_art'] = df['base_art'].str.upper()
tdf = df.copy()
task['base_art'] = task['task_art'].copy()
task['base_art'] = task['base_art'].apply(lambda x: U24.clearWaste(x, type_waste='art'))
task['base_art'] = task['base_art'].str.upper()
df = U24.findTovgruppa(df, contact_how='left')
tdf = tdf[~tdf['base_art'].isin(df['base_art'])]
df = pd.concat([df, tdf])
df = pd.merge(df, task[['task_art', 'base_art', 'task_tovgruppa', 'description']], on='base_art', how='left')
df = BAP.constructBartCol(df, prepare_bart=True)
df = TCONV.main_t_converter(df, target='autopiter', days_back=1)
newPrice(df, target = 'autopiter')
U24.tmp_saveOut(df, suffix='_autopiter')
return df
def prepareData():
df = pd.concat([aggExist(), aggAutopiter(), aggEmex(), aggAutoopt()])
df.fillna(0, inplace=True)
df['cross_tovgruppa'] = df['cross_tovgruppa'].astype(str)
df = U24.bestTvgInRootKey(df, col_root_key='cross_bart')
print(f"len(df) = {len(df)}")
df = U24.minGradeTtime(df)
print(f"minGradeTtime => len(df) = {len(df)}")
df_tvg = U24.data2Df_upload(root_path + '/aDAT_REPORTS/SOLLERS/data_in/soollers_tvg_directly.xlsx')
df_tvg.drop_duplicates(subset='cross_bart', inplace=True)
tdf = df[df['cross_bart'].isin(df_tvg['cross_bart'])]
df = df[~df['cross_bart'].isin(df_tvg['cross_bart'])]
del tdf['cross_tovgruppa']
tdf = pd.merge(tdf, df_tvg, on='cross_bart', how='inner')
df = pd.concat([df, tdf])
short_group_catalog = U24.data2Df_upload(root_path + '/DATA_CATALOGS/KeyWords_Xlsx/mgpt_short_group_catalog.xlsx')
short_group_catalog.rename(columns={'index_short':'task_index_tvg'}, inplace=True)
df = pd.merge(df, short_group_catalog[['tovgruppa', 'task_index_tvg']], left_on='task_tovgruppa', right_on='tovgruppa', how='left')
short_group_catalog.rename(columns={'task_index_tvg': 'cross_index_tvg'}, inplace=True)
df = pd.merge(df, short_group_catalog[['tovgruppa', 'cross_index_tvg']], left_on='cross_tovgruppa',
right_on='tovgruppa', how='left')
df['tmp'] = 1
df['tmp'][df['art'] == df['task_art']] = 0
df.sort_values(['task_art', 'ttime', 'tmp'], inplace=True)
return df
def createReport():
df = prepareData()
print(f"prepareData --> len df = {len(df)}")
col = ['url', 'cross_bart', 'price', 'task_art']
df = df.drop_duplicates(subset=col)
df = BAP.oeIamDfCol(df)
col = ['task_art', 'description', 'cross_bart', 'oe_iam', 'brand', 'art', 'name', 'cross_tovgruppa', 'url', 'price', 'price_b2b']
U24.xlsxSave(df[col], root_out + 'sollers_ALL_data')
oe_df = df[df['oe_iam'] == 'oe']
iam_df = df[df['oe_iam'] == 'iam']
oe_df['oe_min_price'] = oe_df.groupby('task_art')['price'].transform(np.min)
oe_df['oe_min_price_b2b'] = oe_df.groupby('task_art')['price_b2b'].transform(np.min)
oe_df['oe_max_price'] = oe_df.groupby('task_art')['price'].transform(np.max)
oe_df['oe_max_price_b2b'] = oe_df.groupby('task_art')['price_b2b'].transform(np.max)
oe_df['oe_median_price'] = oe_df.groupby('task_art')['price'].transform(np.median)
oe_df['oe_median_price_b2b'] = oe_df.groupby('task_art')['price_b2b'].transform(np.max)
int_col = ['oe_min_price', 'oe_min_price_b2b', 'oe_max_price', 'oe_max_price_b2b', 'oe_median_price', 'oe_median_price_b2b']
oe_df[int_col] = oe_df[int_col].astype(int)
iam_df['iam_min_price'] = iam_df.groupby('task_art')['price'].transform(np.min)
iam_df['iam_min_price_b2b'] = iam_df.groupby('task_art')['price_b2b'].transform(np.min)
iam_df['iam_max_price'] = iam_df.groupby('task_art')['price'].transform(np.max)
iam_df['iam_max_price_b2b'] = iam_df.groupby('task_art')['price_b2b'].transform(np.max)
iam_df['iam_median_price'] = iam_df.groupby('task_art')['price'].transform(np.median)
iam_df['iam_median_price_b2b'] = iam_df.groupby('task_art')['price_b2b'].transform(np.median)
int_col = [
'iam_min_price',
'iam_min_price_b2b',
'iam_max_price',
'iam_max_price_b2b',
'iam_median_price',
'iam_median_price_b2b'
]
iam_df[int_col] = iam_df[int_col].astype(int)
tdf = pd.concat([oe_df, iam_df])
U24.tmp_saveOut(tdf)
#сводка
df.drop_duplicates(subset='cross_bart', inplace=True)
df['n_competitors'] = df.groupby('task_art')['task_art'].transform('count')
df.drop_duplicates(subset='task_art', inplace=True)
task_col = ['task_art', 'description', 'cross_tovgruppa', 'n_competitors']
df = df[task_col]
#OE
#oe - минимальная цена
tdf = oe_df.copy()
tdf.sort_values(['oe_min_price'], inplace=True)
tdf.drop_duplicates(subset='task_art', inplace=True)
tdf.rename(columns={'cross_bart':'min_oe_cross_bart', 'url':'min_oe_url'}, inplace=True)
col = ['task_art', 'min_oe_cross_bart', 'min_oe_url', 'oe_min_price', 'oe_min_price_b2b', 'oe_median_price', 'oe_median_price_b2b']
df = pd.merge(df, tdf[col], on='task_art', how='inner')
#oe максимальная цена
tdf = oe_df.copy()
tdf.sort_values(['oe_max_price'], ascending=False, inplace=True)
tdf.drop_duplicates(subset='task_art', inplace=True)
tdf.rename(columns={'cross_bart':'max_oe_cross_bart', 'url':'max_oe_url'}, inplace=True)
col = ['task_art', 'max_oe_cross_bart', 'max_oe_url', 'oe_max_price', 'oe_max_price_b2b']
df = pd.merge(df, tdf[col], on='task_art', how='inner')
#IAM
# iam - минимальная цена
tdf = iam_df.copy()
tdf.sort_values(['iam_min_price'], inplace=True)
tdf.drop_duplicates(subset='task_art', inplace=True)
tdf.rename(columns={'cross_bart': 'min_iam_cross_bart', 'url': 'min_iam_url'}, inplace=True)
col = [
'task_art',
'min_iam_cross_bart',
'min_iam_url',
'iam_min_price',
'iam_min_price_b2b',
'iam_median_price',
'iam_median_price_b2b'
]
df = pd.merge(df, tdf[col], on='task_art', how='inner')
# iam максимальная цена
tdf = iam_df.copy()
tdf.sort_values(['iam_max_price'], ascending=False, inplace=True)
tdf.drop_duplicates(subset='task_art', inplace=True)
tdf.rename(columns={'cross_bart': 'max_iam_cross_bart', 'url': 'max_iam_url'}, inplace=True)
col = [
'task_art',
'max_iam_cross_bart',
'max_iam_url',
'iam_max_price',
'iam_max_price_b2b'
]
df = pd.merge(df, tdf[col], on='task_art', how='inner')
U24.xlsxSave(df, root_out + 'sollers_sum_data')
return df
if __name__ == '__main__':
# aggEmex()
# aggExist()
# aggAutopiter()
createReport()