mdbq 3.5.0__py3-none-any.whl → 3.5.2__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.
@@ -305,6 +305,130 @@ class MysqlDatasQuery:
305
305
  )
306
306
  return True
307
307
 
308
+ def _tb_wxt(self, db_name='聚合数据', table_name='淘宝_主体报表', is_maximize=True):
309
+ start_date, end_date = self.months_data(num=self.months)
310
+ projection = {
311
+ '日期': 1,
312
+ '场景名字': 1,
313
+ '主体id': 1,
314
+ '花费': 1,
315
+ '展现量': 1,
316
+ '点击量': 1,
317
+ '总购物车数': 1,
318
+ '总成交笔数': 1,
319
+ '总成交金额': 1,
320
+ '自然流量曝光量': 1,
321
+ '直接成交笔数': 1,
322
+ '直接成交金额': 1,
323
+ '店铺名称': 1,
324
+ }
325
+ __res = []
326
+ for year in range(2024, datetime.datetime.today().year+1):
327
+ df = self.download.data_to_df(
328
+ db_name='推广数据_淘宝店',
329
+ table_name=f'主体报表_{year}',
330
+ start_date=start_date,
331
+ end_date=end_date,
332
+ projection=projection,
333
+ )
334
+ __res.append(df)
335
+ df = pd.concat(__res, ignore_index=True)
336
+ df.rename(columns={
337
+ '场景名字': '营销场景',
338
+ '主体id': '商品id',
339
+ '总购物车数': '加购量',
340
+ '总成交笔数': '成交笔数',
341
+ '总成交金额': '成交金额'
342
+ }, inplace=True)
343
+ df = df.astype({
344
+ '商品id': str,
345
+ '花费': 'float64',
346
+ '展现量': 'int64',
347
+ '点击量': 'int64',
348
+ '加购量': 'int64',
349
+ '成交笔数': 'int64',
350
+ '成交金额': 'float64',
351
+ '自然流量曝光量': 'int64',
352
+ '直接成交笔数': 'int64',
353
+ '直接成交金额': 'float64',
354
+ }, errors='raise')
355
+ df = df[df['花费'] > 0]
356
+ if is_maximize:
357
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '点击量'], as_index=False).agg(
358
+ **{
359
+ '展现量': ('展现量', np.max),
360
+ '加购量': ('加购量', np.max),
361
+ '成交笔数': ('成交笔数', np.max),
362
+ '成交金额': ('成交金额', np.max),
363
+ '自然流量曝光量': ('自然流量曝光量', np.max),
364
+ '直接成交笔数': ('直接成交笔数', np.max),
365
+ '直接成交金额': ('直接成交金额', np.max)
366
+ }
367
+ )
368
+ else:
369
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '点击量'], as_index=False).agg(
370
+ **{
371
+ '展现量': ('展现量', np.min),
372
+ '加购量': ('加购量', np.min),
373
+ '成交笔数': ('成交笔数', np.min),
374
+ '成交金额': ('成交金额', np.min),
375
+ '自然流量曝光量': ('自然流量曝光量', np.min),
376
+ '直接成交笔数': ('直接成交笔数', np.max),
377
+ '直接成交金额': ('直接成交金额', np.max)
378
+ }
379
+ )
380
+ df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
381
+ set_typ = {
382
+ '日期': 'date',
383
+ '推广渠道': 'varchar(100)',
384
+ '店铺名称': 'varchar(100)',
385
+ '营销场景': 'varchar(100)',
386
+ '商品id': 'bigint',
387
+ '花费': 'decimal(12,2)',
388
+ '展现量': 'int',
389
+ '点击量': 'int',
390
+ '加购量': 'int',
391
+ '成交笔数': 'int',
392
+ '成交金额': 'decimal(12,2)',
393
+ '自然流量曝光量': 'int',
394
+ '直接成交笔数': 'int',
395
+ '直接成交金额': 'decimal(12,2)',
396
+ }
397
+
398
+ if not self.update_service:
399
+ return
400
+ min_date = df['日期'].min()
401
+ max_date = df['日期'].max()
402
+ now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
403
+ print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
404
+ m_engine.df_to_mysql(
405
+ df=df,
406
+ db_name=db_name,
407
+ table_name=table_name,
408
+ # icm_update=['日期', '推广渠道', '营销场景', '商品id', '花费'], # 增量更新, 在聚合数据中使用,其他不要用
409
+ move_insert=True, # 先删除,再插入
410
+ df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
411
+ drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
412
+ count=None,
413
+ filename=None, # 用来追踪处理进度
414
+ reset_id=True, # 是否重置自增列
415
+ set_typ=set_typ,
416
+ )
417
+ company_engine.df_to_mysql(
418
+ df=df,
419
+ db_name=db_name,
420
+ table_name=table_name,
421
+ # icm_update=['日期', '推广渠道', '营销场景', '商品id', '花费'], # 增量更新, 在聚合数据中使用,其他不要用
422
+ move_insert=True, # 先删除,再插入
423
+ df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
424
+ drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
425
+ count=None,
426
+ filename=None, # 用来追踪处理进度
427
+ reset_id=True, # 是否重置自增列
428
+ set_typ=set_typ,
429
+ )
430
+ return True
431
+
308
432
  @try_except
309
433
  def syj(self, db_name='聚合数据', table_name='生意经_宝贝指标'):
310
434
  start_date, end_date = self.months_data(num=self.months)
@@ -2401,6 +2525,7 @@ class MysqlDatasQuery:
2401
2525
  """
2402
2526
  df_tm = pd.DataFrame() # 天猫营销场景
2403
2527
  df_tb = pd.DataFrame() # 淘宝营销场景
2528
+ df_al = pd.DataFrame() # 奥莱营销场景
2404
2529
  df_tb_qzt = pd.DataFrame() # 淘宝全站推广
2405
2530
  df_tm_pxb = pd.DataFrame() # 天猫品销宝
2406
2531
  df_tm_living = pd.DataFrame() # 天猫超级直播
@@ -2444,6 +2569,33 @@ class MysqlDatasQuery:
2444
2569
  '成交金额': ('总成交金额', np.max)
2445
2570
  }
2446
2571
  )
2572
+ # 奥莱店
2573
+ __res = []
2574
+ for year in range(2024, datetime.datetime.today().year + 1):
2575
+ df_al = self.download.data_to_df(
2576
+ db_name='推广数据_奥莱店',
2577
+ table_name=f'营销场景报表_{year}',
2578
+ start_date=start_date,
2579
+ end_date=end_date,
2580
+ projection=projection,
2581
+ )
2582
+ __res.append(df_al)
2583
+ df_al = pd.concat(__res, ignore_index=True)
2584
+ if len(df_al) > 0:
2585
+ df_al.rename(columns={'场景名字': '营销场景'}, inplace=True)
2586
+ df_al['店铺名称'] = df_al['店铺名称'].apply(lambda x: '万里马箱包outlet店' if x == 'Wanlima万里马箱包outlet店' else x)
2587
+ df_al = df_al.groupby(
2588
+ ['日期', '店铺名称', '场景id', '营销场景', '花费', '展现量'],
2589
+ as_index=False).agg(
2590
+ **{
2591
+ # '展现量': ('展现量', np.max),
2592
+ '点击量': ('点击量', np.max),
2593
+ '加购量': ('总购物车数', np.max),
2594
+ '成交笔数': ('总成交笔数', np.max),
2595
+ '成交金额': ('总成交金额', np.max)
2596
+ }
2597
+ )
2598
+ # 淘宝店
2447
2599
  __res = []
2448
2600
  for year in range(2024, datetime.datetime.today().year + 1):
2449
2601
  df_tb = self.download.data_to_df(
@@ -2677,7 +2829,7 @@ class MysqlDatasQuery:
2677
2829
  df_jd_qzyx = df_jd_qzyx[['日期', '店铺名称', '营销场景', '花费', '展现量', '点击量', '成交笔数', '成交金额']]
2678
2830
  df_jd_qzyx = df_jd_qzyx[df_jd_qzyx['花费'] > 0]
2679
2831
 
2680
- _datas = [item for item in [df_tm, df_tb, df_tb_qzt, df_tm_pxb, df_tm_living, df_jd, df_jd_qzyx] if len(item) > 0] # 阻止空的 dataframe
2832
+ _datas = [item for item in [df_tm, df_tb, df_tb_qzt, df_al, df_tm_pxb, df_tm_living, df_jd, df_jd_qzyx] if len(item) > 0] # 阻止空的 dataframe
2681
2833
  df = pd.concat(_datas, axis=0, ignore_index=True)
2682
2834
  df['日期'] = pd.to_datetime(df['日期'], format='%Y-%m-%d', errors='ignore') # 转换日期列
2683
2835
  df = df.groupby(
@@ -3782,6 +3934,7 @@ def query1(months=1, less_dict=[]):
3782
3934
  sdq.months = months # 设置数据周期, 1 表示近 2 个月
3783
3935
  sdq.update_service = True # 调试时加,true: 将数据写入 mysql 服务器
3784
3936
 
3937
+ sdq._tb_wxt(db_name='聚合数据', table_name='淘宝_主体报表')
3785
3938
  sdq.tg_wxt(db_name='聚合数据', table_name='天猫_主体报表')
3786
3939
  sdq.syj(db_name='聚合数据', table_name='生意经_宝贝指标')
3787
3940
  sdq.idbm(db_name='聚合数据', table_name='商品id编码表')
@@ -3896,25 +4049,18 @@ def main(days=150, months=3):
3896
4049
 
3897
4050
  if __name__ == '__main__':
3898
4051
  # main(
3899
- # days=3, # 清理聚合数据的日期长度
3900
- # months=1 # 生成聚合数据的长度
4052
+ # days=150, # 清理聚合数据的日期长度
4053
+ # months=3 # 生成聚合数据的长度
3901
4054
  # )
3902
4055
 
3903
- # query_list = [query1, query2, query3]
3904
- # # 使用 ThreadPoolExecutor 来并行运行
3905
- # # with concurrent.futures.ThreadPoolExecutor() as executor:
3906
- # with concurrent.futures.ProcessPoolExecutor() as executor:
3907
- # for func_query in query_list:
3908
- # future_to_function = {
3909
- # executor.submit(
3910
- # func_query,
3911
- # months=1,
3912
- # less_dict=[],
3913
- # ),
3914
- # }
3915
-
3916
4056
  sdq = MysqlDatasQuery() # 实例化数据处理类
3917
- sdq.months = 2 # 设置数据周期, 1 表示近 2 个月
3918
- sdq.update_service = True # 调试时加,true: 将数据写入 mysql 服务器
3919
- sdq.dplyd(db_name='聚合数据', table_name='店铺流量来源构成')
4057
+ sdq.months = 1
4058
+ sdq.tg_by_day(db_name='聚合数据', table_name='多店推广场景_按日聚合')
4059
+
4060
+ optimize_data.op_data(
4061
+ db_name_lists=['聚合数据'],
4062
+ days=70, # 清理聚合数据的日期长度
4063
+ is_mongo=False,
4064
+ is_mysql=True,
4065
+ )
3920
4066
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 3.5.0
3
+ Version: 3.5.2
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -4,7 +4,7 @@ mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,
4
4
  mdbq/aggregation/aggregation.py,sha256=-yzApnlqSN2L0E1YMu5ml-W827qpKQvWPCOI7jj2kzY,80264
5
5
  mdbq/aggregation/datashow.py,sha256=1AYSIDkdUx-4as1Ax2rPj0cExM9d-qFMrFYLAaPHNuk,54962
6
6
  mdbq/aggregation/optimize_data.py,sha256=RXIv7cACCgYyehAxMjUYi_S7rVyjIwXKWMaM3nduGtA,3068
7
- mdbq/aggregation/query_data.py,sha256=JJ7OSrzWAORAah7LJIC8cXa7ikTUWYy-U-inDNa7baU,179119
7
+ mdbq/aggregation/query_data.py,sha256=JI-W2l6Oy98jrTOcw3pZc7ARZI_oFkpCllVaGifGvrM,185763
8
8
  mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
9
9
  mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
10
10
  mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
@@ -34,7 +34,7 @@ mdbq/pbix/refresh_all.py,sha256=OBT9EewSZ0aRS9vL_FflVn74d4l2G00wzHiikCC4TC0,5926
34
34
  mdbq/pbix/refresh_all_old.py,sha256=_pq3WSQ728GPtEG5pfsZI2uTJhU8D6ra-htIk1JXYzw,7192
35
35
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
36
36
  mdbq/spider/aikucun.py,sha256=zOacjrJ3MvToyuugA68xB-oN6RKj8K3GxMKudnln9EA,22207
37
- mdbq-3.5.0.dist-info/METADATA,sha256=2oZVnoWshrH8JUDGJr6WuY1t2RCLcJF36NleNi9D524,243
38
- mdbq-3.5.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
39
- mdbq-3.5.0.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
40
- mdbq-3.5.0.dist-info/RECORD,,
37
+ mdbq-3.5.2.dist-info/METADATA,sha256=BDEiMQwfpIL-OqUPcVBFxr35oV4f-WBlpNwh7v17rgU,243
38
+ mdbq-3.5.2.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
39
+ mdbq-3.5.2.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
40
+ mdbq-3.5.2.dist-info/RECORD,,
File without changes