mdbq 2.9.8__py3-none-any.whl → 2.9.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
mdbq/aggregation/query_data.py
CHANGED
@@ -51,6 +51,9 @@ class MysqlDatasQuery:
|
|
51
51
|
self.months = 0 # 下载几个月数据, 0 表示当月, 1 是上月 1 号至今
|
52
52
|
# 实例化一个下载类
|
53
53
|
self.download = s_query.QueryDatas(username=username, password=password, host=host, port=port)
|
54
|
+
self.update_service = True # 调试时加,true: 将数据写入 mysql 服务器
|
55
|
+
self.pf_datas = []
|
56
|
+
self.pf_datas_jd = [] # 京东聚合销售表
|
54
57
|
|
55
58
|
@staticmethod
|
56
59
|
def try_except(func): # 在类内部定义一个异常处理方法
|
@@ -145,6 +148,22 @@ class MysqlDatasQuery:
|
|
145
148
|
'直接成交笔数': 'int',
|
146
149
|
'直接成交金额': 'decimal(12,2)',
|
147
150
|
}
|
151
|
+
self.pf_datas.append(
|
152
|
+
{
|
153
|
+
'集合名称': table_name,
|
154
|
+
'数据主体': df[['日期', '店铺名称', '商品id', '花费', '成交金额', '直接成交金额']]
|
155
|
+
}
|
156
|
+
) # 制作其他聚合表
|
157
|
+
self.pf_datas.append(
|
158
|
+
{
|
159
|
+
'集合名称': '天猫汇总表调用',
|
160
|
+
'数据主体': df[
|
161
|
+
['日期', '店铺名称', '推广渠道', '营销场景', '商品id', '花费', '展现量', '点击量', '加购量',
|
162
|
+
'成交笔数', '成交金额', '直接成交笔数', '直接成交金额', '自然流量曝光量']]
|
163
|
+
}
|
164
|
+
) # 制作其他聚合表
|
165
|
+
if not self.update_service:
|
166
|
+
return
|
148
167
|
min_date = df['日期'].min()
|
149
168
|
max_date = df['日期'].max()
|
150
169
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
@@ -221,9 +240,17 @@ class MysqlDatasQuery:
|
|
221
240
|
'退款额': 'decimal(12,2)',
|
222
241
|
'退款额_发货后': 'decimal(12,2)',
|
223
242
|
'退货量_发货后': 'int',
|
224
|
-
'件均价': '
|
243
|
+
'件均价': 'mediumint',
|
225
244
|
'价格带': 'varchar(100)',
|
226
245
|
}
|
246
|
+
self.pf_datas.append(
|
247
|
+
{
|
248
|
+
'集合名称': table_name,
|
249
|
+
'数据主体': df[['日期', '店铺名称', '宝贝id', '销售额', '销售量', '退款额_发货后', '退货量_发货后']]
|
250
|
+
}
|
251
|
+
) # 制作其他聚合表
|
252
|
+
if not self.update_service:
|
253
|
+
return
|
227
254
|
min_date = df['日期'].min()
|
228
255
|
max_date = df['日期'].max()
|
229
256
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
@@ -628,6 +655,14 @@ class MysqlDatasQuery:
|
|
628
655
|
}
|
629
656
|
)
|
630
657
|
df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
|
658
|
+
self.pf_datas.append(
|
659
|
+
{
|
660
|
+
'集合名称': table_name,
|
661
|
+
'数据主体': df[['日期', '店铺名称', '推广渠道', '营销场景', '花费', '展现量', '观看次数', '加购量', '成交笔数', '成交金额', '直接成交笔数', '直接成交金额']]
|
662
|
+
},
|
663
|
+
) # 制作其他聚合表
|
664
|
+
if not self.update_service:
|
665
|
+
return
|
631
666
|
set_typ = {
|
632
667
|
'日期': 'date',
|
633
668
|
'推广渠道': 'varchar(100)',
|
@@ -730,6 +765,14 @@ class MysqlDatasQuery:
|
|
730
765
|
)
|
731
766
|
df.insert(loc=1, column='推广渠道', value='品销宝') # df中插入新列
|
732
767
|
df.insert(loc=2, column='营销场景', value='品销宝') # df中插入新列
|
768
|
+
self.pf_datas.append(
|
769
|
+
{
|
770
|
+
'集合名称': table_name,
|
771
|
+
'数据主体': df[['日期', '店铺名称', '推广渠道', '营销场景', '花费', '展现量', '点击量', '加购量', '成交笔数', '成交金额']]
|
772
|
+
},
|
773
|
+
) # 制作其他聚合表
|
774
|
+
if not self.update_service:
|
775
|
+
return
|
733
776
|
set_typ = {
|
734
777
|
'日期': 'date',
|
735
778
|
'推广渠道': 'varchar(100)',
|
@@ -793,6 +836,14 @@ class MysqlDatasQuery:
|
|
793
836
|
'二级类目': 'varchar(100)',
|
794
837
|
'三级类目': 'varchar(100)',
|
795
838
|
}
|
839
|
+
self.pf_datas.append(
|
840
|
+
{
|
841
|
+
'集合名称': table_name,
|
842
|
+
'数据主体': df[['宝贝id', '商家编码']]
|
843
|
+
}
|
844
|
+
) # 制作其他聚合表
|
845
|
+
if not self.update_service:
|
846
|
+
return
|
796
847
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
797
848
|
print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name}')
|
798
849
|
m_engine.df_to_mysql(
|
@@ -842,6 +893,14 @@ class MysqlDatasQuery:
|
|
842
893
|
'日期': 'date',
|
843
894
|
'商品链接': 'varchar(255)',
|
844
895
|
}
|
896
|
+
self.pf_datas.append(
|
897
|
+
{
|
898
|
+
'集合名称': table_name,
|
899
|
+
'数据主体': df[['商品id', '商品图片']]
|
900
|
+
}
|
901
|
+
) # 制作其他聚合表
|
902
|
+
if not self.update_service:
|
903
|
+
return
|
845
904
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
846
905
|
print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name}')
|
847
906
|
m_engine.df_to_mysql(
|
@@ -960,6 +1019,14 @@ class MysqlDatasQuery:
|
|
960
1019
|
'天猫页面价': 'decimal(10,2)',
|
961
1020
|
'天猫中促价': 'decimal(10,2)',
|
962
1021
|
}
|
1022
|
+
self.pf_datas.append(
|
1023
|
+
{
|
1024
|
+
'集合名称': table_name,
|
1025
|
+
'数据主体': df[['款号', '成本价']]
|
1026
|
+
}
|
1027
|
+
) # 制作其他聚合表
|
1028
|
+
if not self.update_service:
|
1029
|
+
return
|
963
1030
|
min_date = df['日期'].min()
|
964
1031
|
max_date = df['日期'].max()
|
965
1032
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
@@ -1018,6 +1085,14 @@ class MysqlDatasQuery:
|
|
1018
1085
|
}
|
1019
1086
|
)
|
1020
1087
|
df = df[df['花费'] > 0]
|
1088
|
+
self.pf_datas_jd.append(
|
1089
|
+
{
|
1090
|
+
'集合名称': table_name,
|
1091
|
+
'数据主体': df[['日期', '产品线', '触发sku_id', '跟单sku_id', '花费']]
|
1092
|
+
}
|
1093
|
+
) # 制作其他聚合表
|
1094
|
+
if not self.update_service:
|
1095
|
+
return
|
1021
1096
|
set_typ = {
|
1022
1097
|
'日期': 'date',
|
1023
1098
|
'店铺名称': 'varchar(100)',
|
@@ -1247,6 +1322,14 @@ class MysqlDatasQuery:
|
|
1247
1322
|
'成交金额': ('成交金额', np.max),
|
1248
1323
|
}
|
1249
1324
|
)
|
1325
|
+
self.pf_datas_jd.append(
|
1326
|
+
{
|
1327
|
+
'集合名称': table_name,
|
1328
|
+
'数据主体': df
|
1329
|
+
}
|
1330
|
+
) # 制作其他聚合表
|
1331
|
+
if not self.update_service:
|
1332
|
+
return
|
1250
1333
|
set_typ = {
|
1251
1334
|
'日期': 'date',
|
1252
1335
|
'店铺名称': 'varchar(100)',
|
@@ -1399,11 +1482,15 @@ class MysqlDatasQuery:
|
|
1399
1482
|
'客单价': 'decimal(10,2)',
|
1400
1483
|
'uv价值': 'decimal(10,2)',
|
1401
1484
|
}
|
1485
|
+
min_date = df['日期'].min()
|
1486
|
+
max_date = df['日期'].max()
|
1487
|
+
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
1488
|
+
print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
|
1402
1489
|
m_engine.df_to_mysql(
|
1403
1490
|
df=df,
|
1404
1491
|
db_name=db_name,
|
1405
1492
|
table_name=table_name,
|
1406
|
-
icm_update=['日期', '
|
1493
|
+
icm_update=['日期', '店铺名称', '词类型', '搜索词'], # 增量更新, 在聚合数据中使用,其他不要用
|
1407
1494
|
move_insert=False, # 先删除,再插入
|
1408
1495
|
df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
|
1409
1496
|
drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
|
@@ -1783,6 +1870,8 @@ class MysqlDatasQuery:
|
|
1783
1870
|
'成交笔数': 'int',
|
1784
1871
|
'成交金额': 'decimal(12,2)',
|
1785
1872
|
}
|
1873
|
+
if not self.update_service:
|
1874
|
+
return
|
1786
1875
|
min_date = df['日期'].min()
|
1787
1876
|
max_date = df['日期'].max()
|
1788
1877
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
@@ -2296,33 +2385,77 @@ class MysqlDatasQuery:
|
|
2296
2385
|
return result
|
2297
2386
|
|
2298
2387
|
# @try_except
|
2299
|
-
def performance(self, bb_tg=True):
|
2300
|
-
|
2301
|
-
tg
|
2302
|
-
|
2303
|
-
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2307
|
-
pic['商品id'] = pic['商品id'].astype(str)
|
2308
|
-
|
2309
|
-
df =
|
2310
|
-
df =
|
2311
|
-
|
2312
|
-
df = pd.merge(
|
2313
|
-
df
|
2388
|
+
def performance(self, db_name, table_name, bb_tg=True):
|
2389
|
+
|
2390
|
+
tg= [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '天猫_主体报表'][0]
|
2391
|
+
syj = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '生意经_宝贝指标'][0]
|
2392
|
+
idbm = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '商品id编码表'][0]
|
2393
|
+
pic = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '商品id图片对照表'][0]
|
2394
|
+
cost = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '商品成本'][0]
|
2395
|
+
|
2396
|
+
# pic['商品id'] = pic['商品id'].astype(str)
|
2397
|
+
# # 1. id 编码表合并图片表
|
2398
|
+
# df = pd.merge(idbm, pic, how='left', left_on='宝贝id', right_on='商品id')
|
2399
|
+
# df = df[['宝贝id', '商家编码', '商品图片']]
|
2400
|
+
# # 2. df 合并商品成本表
|
2401
|
+
# df = pd.merge(df, cost, how='left', left_on='商家编码', right_on='款号')
|
2402
|
+
# df = df[['宝贝id', '商家编码', '商品图片', '成本价']]
|
2403
|
+
# # 3. 推广表合并 df
|
2404
|
+
# df = pd.merge(tg, df, how='left', left_on='商品id', right_on='宝贝id')
|
2405
|
+
# df.drop(labels='宝贝id', axis=1, inplace=True)
|
2406
|
+
|
2407
|
+
# 由于推广表之前根据场景、营销渠道等聚合的,这里不含这些字段所以要进一步聚合
|
2408
|
+
tg = tg.groupby(
|
2409
|
+
['日期', '店铺名称', '商品id'],
|
2410
|
+
as_index=False).agg(
|
2411
|
+
**{
|
2412
|
+
'花费': ('花费', np.sum),
|
2413
|
+
'成交金额': ('成交金额', np.sum),
|
2414
|
+
'直接成交金额': ('直接成交金额', np.sum),
|
2415
|
+
}
|
2416
|
+
)
|
2417
|
+
syj.to_csv('/Users/xigua/Downloads/ddd.csv', index=False, header=True, encoding='utf-8_sig')
|
2418
|
+
# 4. 生意经,推广表聚合
|
2314
2419
|
if bb_tg is True:
|
2315
2420
|
# 生意经合并推广表,完整的数据表,包含全店所有推广、销售数据
|
2316
|
-
df = pd.merge(syj,
|
2421
|
+
df = pd.merge(syj, tg, how='left', left_on=['日期', '店铺名称', '宝贝id'], right_on=['日期', '店铺名称', '商品id'])
|
2317
2422
|
df.drop(labels='商品id', axis=1, inplace=True) # 因为生意经中的宝贝 id 列才是完整的
|
2318
2423
|
df.rename(columns={'宝贝id': '商品id'}, inplace=True)
|
2319
|
-
# df.to_csv('/Users/xigua/Downloads/test.csv', encoding='utf-8_sig', index=False, header=True)
|
2320
2424
|
else:
|
2321
2425
|
# 推广表合并生意经 , 以推广数据为基准,销售数据不齐全
|
2322
|
-
df = pd.merge(
|
2426
|
+
df = pd.merge(tg, syj, how='left', left_on=['日期', '店铺名称', '商品id'], right_on=['日期', '店铺名称', '宝贝id'])
|
2323
2427
|
df.drop(labels='宝贝id', axis=1, inplace=True)
|
2324
|
-
|
2325
|
-
df.
|
2428
|
+
|
2429
|
+
df['商品id'] = df['商品id'].astype(int)
|
2430
|
+
df = df.groupby(
|
2431
|
+
['日期', '店铺名称', '商品id'],
|
2432
|
+
as_index=False).agg(
|
2433
|
+
**{
|
2434
|
+
'花费': ('花费', np.sum),
|
2435
|
+
'成交金额': ('成交金额', np.sum),
|
2436
|
+
'直接成交金额': ('直接成交金额', np.sum),
|
2437
|
+
'销售额': ('销售额', np.sum),
|
2438
|
+
'销售量': ('销售量', np.sum),
|
2439
|
+
'退款额_发货后': ('退款额_发货后', np.sum),
|
2440
|
+
'退货量_发货后': ('退货量_发货后', np.sum),
|
2441
|
+
}
|
2442
|
+
)
|
2443
|
+
# print(df.info())
|
2444
|
+
|
2445
|
+
idbm['宝贝id'] = idbm['宝贝id'].astype(int)
|
2446
|
+
# 1. id 编码表合并图片表
|
2447
|
+
df_cb = pd.merge(idbm, pic, how='left', left_on='宝贝id', right_on='商品id')
|
2448
|
+
df_cb = df_cb[['宝贝id', '商家编码', '商品图片']]
|
2449
|
+
# 2. df 合并商品成本表
|
2450
|
+
df_cb = pd.merge(df_cb, cost, how='left', left_on='商家编码', right_on='款号')
|
2451
|
+
df_cb = df_cb[['宝贝id', '商家编码', '商品图片', '成本价']]
|
2452
|
+
# print(df_cb.info())
|
2453
|
+
# 3. 合并 df
|
2454
|
+
df = pd.merge(df, df_cb, how='left', left_on='商品id', right_on='宝贝id')
|
2455
|
+
df.drop(labels='宝贝id', axis=1, inplace=True)
|
2456
|
+
|
2457
|
+
# df.drop_duplicates(subset=['日期', '店铺名称', '商品id', '花费', '销售额'], keep='last', inplace=True, ignore_index=True)
|
2458
|
+
# df.fillna(0, inplace=True)
|
2326
2459
|
df['成本价'] = df['成本价'].astype('float64')
|
2327
2460
|
df['销售额'] = df['销售额'].astype('float64')
|
2328
2461
|
df['销售量'] = df['销售量'].astype('int64')
|
@@ -2330,11 +2463,74 @@ class MysqlDatasQuery:
|
|
2330
2463
|
df['商品毛利'] = df.apply(lambda x: x['销售额'] - x['商品成本'], axis=1)
|
2331
2464
|
df['毛利率'] = df.apply(lambda x: round((x['销售额'] - x['商品成本']) / x['销售额'], 4) if x['销售额'] > 0 else 0, axis=1)
|
2332
2465
|
df['盈亏'] = df.apply(lambda x: x['商品毛利'] - x['花费'], axis=1)
|
2333
|
-
|
2466
|
+
set_typ = {
|
2467
|
+
'日期': 'date',
|
2468
|
+
'店铺名称': 'varchar(100)',
|
2469
|
+
'商品id': 'bigint',
|
2470
|
+
'销售额': 'decimal(12,2)',
|
2471
|
+
'销售量': 'int',
|
2472
|
+
'退款额_发货后': 'decimal(12,2)',
|
2473
|
+
'退货量_发货后': 'int',
|
2474
|
+
'花费': 'decimal(12,2)',
|
2475
|
+
'成交金额': 'decimal(12,2)',
|
2476
|
+
'直接成交金额': 'decimal(12,2)',
|
2477
|
+
'商家编码': 'varchar(100)',
|
2478
|
+
'商品图片': 'varchar(255)',
|
2479
|
+
'成本价': 'decimal(10,2)',
|
2480
|
+
'商品成本': 'decimal(10,2)',
|
2481
|
+
'商品毛利': 'decimal(10,2)',
|
2482
|
+
'毛利率': 'decimal(12,4)',
|
2483
|
+
'盈亏': 'decimal(12,4)',
|
2484
|
+
}
|
2485
|
+
if not self.update_service:
|
2486
|
+
return
|
2487
|
+
min_date = df['日期'].min()
|
2488
|
+
max_date = df['日期'].max()
|
2489
|
+
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
2490
|
+
print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
|
2491
|
+
m_engine.df_to_mysql(
|
2492
|
+
df=df,
|
2493
|
+
db_name=db_name,
|
2494
|
+
table_name=table_name,
|
2495
|
+
icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
|
2496
|
+
move_insert=True, # 先删除,再插入
|
2497
|
+
df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
|
2498
|
+
drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
|
2499
|
+
count=None,
|
2500
|
+
filename=None, # 用来追踪处理进度
|
2501
|
+
reset_id=False, # 是否重置自增列
|
2502
|
+
set_typ=set_typ,
|
2503
|
+
)
|
2504
|
+
return True
|
2334
2505
|
|
2335
2506
|
# @try_except
|
2336
|
-
def performance_concat(self, bb_tg=True):
|
2337
|
-
tg
|
2507
|
+
def performance_concat(self, db_name, table_name, bb_tg=True):
|
2508
|
+
tg = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '天猫汇总表调用'][0]
|
2509
|
+
zb = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '天猫_超级直播'][0]
|
2510
|
+
pxb = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '天猫_品销宝账户报表'][0]
|
2511
|
+
zb = zb.groupby(['日期', '店铺名称', '推广渠道', '营销场景'], as_index=False).agg(
|
2512
|
+
**{
|
2513
|
+
'花费': ('花费', np.sum),
|
2514
|
+
'展现量': ('展现量', np.sum),
|
2515
|
+
'观看次数': ('观看次数', np.sum),
|
2516
|
+
'加购量': ('加购量', np.sum),
|
2517
|
+
'成交笔数': ('成交笔数', np.sum),
|
2518
|
+
'成交金额': ('成交金额', np.sum),
|
2519
|
+
'直接成交笔数': ('直接成交笔数', np.sum),
|
2520
|
+
'直接成交金额': ('直接成交金额', np.sum),
|
2521
|
+
}
|
2522
|
+
)
|
2523
|
+
pxb = pxb.groupby(['日期', '店铺名称', '推广渠道', '营销场景'], as_index=False).agg(
|
2524
|
+
**{
|
2525
|
+
'花费': ('花费', np.sum),
|
2526
|
+
'展现量': ('展现量', np.sum),
|
2527
|
+
'点击量': ('点击量', np.sum),
|
2528
|
+
'加购量': ('加购量', np.sum),
|
2529
|
+
'成交笔数': ('成交笔数', np.sum),
|
2530
|
+
'成交金额': ('成交金额', np.sum)
|
2531
|
+
}
|
2532
|
+
)
|
2533
|
+
|
2338
2534
|
zb.rename(columns={
|
2339
2535
|
'观看次数': '点击量',
|
2340
2536
|
}, inplace=True)
|
@@ -2379,23 +2575,61 @@ class MysqlDatasQuery:
|
|
2379
2575
|
'自然流量曝光量': int,
|
2380
2576
|
}
|
2381
2577
|
)
|
2382
|
-
|
2578
|
+
set_typ = {
|
2579
|
+
'日期': 'date',
|
2580
|
+
'店铺名称': 'varchar(100)',
|
2581
|
+
'推广渠道': 'varchar(100)',
|
2582
|
+
'营销场景': 'varchar(100)',
|
2583
|
+
'商品id': 'bigint',
|
2584
|
+
'花费': 'decimal(12,2)',
|
2585
|
+
'展现量': 'int',
|
2586
|
+
'点击量': 'int',
|
2587
|
+
'加购量': 'int',
|
2588
|
+
'成交笔数': 'int',
|
2589
|
+
'成交金额': 'decimal(12,2)',
|
2590
|
+
'直接成交笔数': 'int',
|
2591
|
+
'直接成交金额': 'decimal(12,2)',
|
2592
|
+
'自然流量曝光量': 'int',
|
2593
|
+
}
|
2594
|
+
if not self.update_service:
|
2595
|
+
return
|
2596
|
+
min_date = df['日期'].min()
|
2597
|
+
max_date = df['日期'].max()
|
2598
|
+
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
2599
|
+
print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
|
2600
|
+
m_engine.df_to_mysql(
|
2601
|
+
df=df,
|
2602
|
+
db_name=db_name,
|
2603
|
+
table_name=table_name,
|
2604
|
+
icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
|
2605
|
+
move_insert=True, # 先删除,再插入
|
2606
|
+
df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
|
2607
|
+
drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
|
2608
|
+
count=None,
|
2609
|
+
filename=None, # 用来追踪处理进度
|
2610
|
+
reset_id=False, # 是否重置自增列
|
2611
|
+
set_typ=set_typ,
|
2612
|
+
)
|
2613
|
+
return True
|
2383
2614
|
|
2384
2615
|
# @try_except
|
2385
|
-
def performance_jd(self, jd_tg=True):
|
2386
|
-
jdtg
|
2616
|
+
def performance_jd(self, db_name, table_name, jd_tg=True, ):
|
2617
|
+
jdtg = [item['数据主体'] for item in self.pf_datas_jd if item['集合名称'] == '京东_京准通'][0]
|
2618
|
+
sku_sales = [item['数据主体'] for item in self.pf_datas_jd if item['集合名称'] == '京东_sku_商品明细'][0]
|
2619
|
+
cost = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '商品成本'][0]
|
2620
|
+
|
2387
2621
|
jdtg = jdtg.groupby(['日期', '跟单sku_id'],
|
2388
2622
|
as_index=False).agg(
|
2389
2623
|
**{
|
2390
2624
|
'花费': ('花费', np.sum)
|
2391
2625
|
}
|
2392
2626
|
)
|
2393
|
-
cost = self.data_tgyj['商品成本']
|
2394
2627
|
df = pd.merge(sku_sales, cost, how='left', left_on='货号', right_on='款号')
|
2395
2628
|
df = df[['日期', '商品id', '货号', '成交单量', '成交金额', '成本价']]
|
2396
2629
|
df['商品id'] = df['商品id'].astype(str)
|
2397
2630
|
jdtg['跟单sku_id'] = jdtg['跟单sku_id'].astype(str)
|
2398
2631
|
jdtg = jdtg.astype({'日期': 'datetime64[ns]'}, errors='raise')
|
2632
|
+
df = df.astype({'日期': 'datetime64[ns]'}, errors='raise')
|
2399
2633
|
if jd_tg is True:
|
2400
2634
|
# 完整的数据表,包含全店所有推广、销售数据
|
2401
2635
|
df = pd.merge(df, jdtg, how='left', left_on=['日期', '商品id'], right_on=['日期', '跟单sku_id']) # df 合并推广表
|
@@ -2414,7 +2648,40 @@ class MysqlDatasQuery:
|
|
2414
2648
|
df['毛利率'] = df.apply(
|
2415
2649
|
lambda x: round((x['成交金额'] - x['商品成本']) / x['成交金额'], 4) if x['成交金额'] > 0 else 0, axis=1)
|
2416
2650
|
df['盈亏'] = df.apply(lambda x: x['商品毛利'] - x['花费'], axis=1)
|
2417
|
-
|
2651
|
+
# print(df.info())
|
2652
|
+
set_typ = {
|
2653
|
+
'日期': 'date',
|
2654
|
+
'跟单sku_id': 'bigint',
|
2655
|
+
'花费': 'decimal(12,2)',
|
2656
|
+
'货号': 'varchar(100)',
|
2657
|
+
'成交单量': 'int',
|
2658
|
+
'成交金额': 'decimal(12,2)',
|
2659
|
+
'成本价': 'decimal(10,2)',
|
2660
|
+
'商品成本': 'decimal(10,2)',
|
2661
|
+
'商品毛利': 'decimal(10,2)',
|
2662
|
+
'毛利率': 'decimal(12,4)',
|
2663
|
+
'盈亏': 'decimal(12,4)',
|
2664
|
+
}
|
2665
|
+
if not self.update_service:
|
2666
|
+
return
|
2667
|
+
min_date = df['日期'].min()
|
2668
|
+
max_date = df['日期'].max()
|
2669
|
+
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
2670
|
+
print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
|
2671
|
+
m_engine.df_to_mysql(
|
2672
|
+
df=df,
|
2673
|
+
db_name=db_name,
|
2674
|
+
table_name=table_name,
|
2675
|
+
icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
|
2676
|
+
move_insert=True, # 先删除,再插入
|
2677
|
+
df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
|
2678
|
+
drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
|
2679
|
+
count=None,
|
2680
|
+
filename=None, # 用来追踪处理进度
|
2681
|
+
reset_id=False, # 是否重置自增列
|
2682
|
+
set_typ=set_typ,
|
2683
|
+
)
|
2684
|
+
return True
|
2418
2685
|
|
2419
2686
|
|
2420
2687
|
def date_table():
|
@@ -2501,13 +2768,14 @@ def query_(months=1, less_dict=[]):
|
|
2501
2768
|
return
|
2502
2769
|
sdq = MysqlDatasQuery() # 实例化数据处理类
|
2503
2770
|
sdq.months = months # 设置数据周期, 1 表示近 2 个月
|
2771
|
+
sdq.update_service = True # 调试时加,true: 将数据写入 mysql 服务器
|
2504
2772
|
|
2505
2773
|
sdq.tg_wxt(db_name='聚合数据', table_name='天猫_主体报表')
|
2506
2774
|
sdq.syj(db_name='聚合数据', table_name='生意经_宝贝指标')
|
2507
|
-
sdq.dplyd(db_name='聚合数据', table_name='店铺流量来源构成')
|
2508
2775
|
sdq.idbm(db_name='聚合数据', table_name='商品id编码表')
|
2509
2776
|
sdq.sp_picture(db_name='聚合数据', table_name='商品id图片对照表')
|
2510
2777
|
sdq.sp_cost(db_name='聚合数据', table_name='商品成本')
|
2778
|
+
sdq.dplyd(db_name='聚合数据', table_name='店铺流量来源构成')
|
2511
2779
|
sdq.jdjzt(db_name='聚合数据', table_name='京东_京准通')
|
2512
2780
|
sdq.jdqzyx(db_name='聚合数据', table_name='京东_京准通_全站营销')
|
2513
2781
|
sdq.sku_sales(db_name='聚合数据', table_name='京东_sku_商品明细')
|
@@ -2522,9 +2790,13 @@ def query_(months=1, less_dict=[]):
|
|
2522
2790
|
sdq.tg_by_day(db_name='聚合数据', table_name='多店推广场景_按日聚合')
|
2523
2791
|
sdq.aikucun_bd_spu(db_name='聚合数据', table_name='爱库存_商品spu榜单')
|
2524
2792
|
sdq.dmp_crowd(db_name='聚合数据', table_name='达摩盘_人群报表')
|
2793
|
+
sdq.performance(bb_tg=True, db_name='聚合数据', table_name='_全店商品销售') # _全店商品销售
|
2794
|
+
sdq.performance(bb_tg=False, db_name='聚合数据', table_name='_推广商品销售') # _推广商品销售
|
2795
|
+
sdq.performance_jd(jd_tg=False, db_name='聚合数据', table_name='_京东_推广商品销售') # _推广商品销售
|
2796
|
+
sdq.performance_concat(bb_tg=False, db_name='聚合数据', table_name='天猫_推广汇总') # _推广商品销售
|
2525
2797
|
|
2526
2798
|
|
2527
2799
|
if __name__ == '__main__':
|
2528
|
-
|
2800
|
+
main(days=100, months=3)
|
2529
2801
|
|
2530
|
-
query_(months=1)
|
2802
|
+
# query_(months=1)
|
@@ -5,7 +5,7 @@ mdbq/aggregation/aggregation.py,sha256=2KCVXZygQt4xVxGbFcDMBpL3PukY4yQF_uI-qLSTW
|
|
5
5
|
mdbq/aggregation/df_types.py,sha256=U9i3q2eRPTDY8qAPTw7irzu-Tlg4CIySW9uYro81wdk,8125
|
6
6
|
mdbq/aggregation/mysql_types.py,sha256=YTGyrF9vcRgfkQbpT-e-JdJ7c7VF1dDHgyx9YZRES8w,10934
|
7
7
|
mdbq/aggregation/optimize_data.py,sha256=79uwiM2WqNNFxGpE2wKz742PRq-ZGgFjdOV0vgptHdY,3513
|
8
|
-
mdbq/aggregation/query_data.py,sha256=
|
8
|
+
mdbq/aggregation/query_data.py,sha256=iuRaJkqXEiiT_MzoQixGcAzkUwuFxhSGh0qxPjDSlEU,124313
|
9
9
|
mdbq/aggregation/query_data_bak.py,sha256=r1FU0C4zjXln7oVSrRkElh4Ehl-9mYhGcq57jLbViUA,104071
|
10
10
|
mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
|
11
11
|
mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
|
@@ -44,7 +44,7 @@ mdbq/req_post/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
|
44
44
|
mdbq/req_post/req_tb.py,sha256=qg7pet73IgKGmCwxaeUyImJIoeK_pBQT9BBKD7fkBNg,36160
|
45
45
|
mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
|
46
46
|
mdbq/spider/aikucun.py,sha256=01qJo_Di5Kmi2lG5_HKb0OI283b1-Pgqh-nnA0pX4TY,19038
|
47
|
-
mdbq-2.9.
|
48
|
-
mdbq-2.9.
|
49
|
-
mdbq-2.9.
|
50
|
-
mdbq-2.9.
|
47
|
+
mdbq-2.9.9.dist-info/METADATA,sha256=GlOK8ubNuk_jdrf3mZccTt48sZye7H5MSPllrC1OSN8,243
|
48
|
+
mdbq-2.9.9.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
49
|
+
mdbq-2.9.9.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
|
50
|
+
mdbq-2.9.9.dist-info/RECORD,,
|
File without changes
|