mdbq 2.6.2__py3-none-any.whl → 2.6.4__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.
@@ -1302,25 +1302,27 @@ if __name__ == '__main__':
1302
1302
  username, password, host, port = get_myconf.select_config_values(target_service='nas', database='mysql')
1303
1303
  print(username, password, host, port)
1304
1304
  # file_dir(one_file=False, target_service='company')
1305
- # one_file_to_mysql(
1306
- # file='/Users/xigua/Downloads/爱库存_商品榜单_spu_2024-10-17_2024-10-17.csv',
1307
- # db_name='爱库存2',
1308
- # table_name='商品spu榜单',
1309
- # target_service='company',
1310
- # database='mysql'
1311
- # )
1312
1305
 
1313
- # 上传一个目录到指定数据库
1314
- db_name = '天猫_推广数据3'
1315
- table_name = '主体报表'
1316
- upload_dir(
1317
- path='/Users/xigua/数据中心/原始文件3/天猫推广报表/主体报表',
1318
- db_name=db_name,
1319
- collection_name=table_name,
1320
- dbs={'mysql': True, 'mongodb': False},
1306
+ # 上传 1 个文件到数据库
1307
+ one_file_to_mysql(
1308
+ file='/Users/xigua/Downloads/万里马箱包推广1_营销概况_qwqw全站营销_2024-08-18_2024-09-01.csv',
1309
+ db_name='京东数据3',
1310
+ table_name='推广数据_全站营销',
1321
1311
  target_service='company',
1312
+ database='mysql'
1322
1313
  )
1323
1314
 
1315
+ # # 上传一个目录到指定数据库
1316
+ # db_name = '天猫_推广数据3'
1317
+ # table_name = '主体报表'
1318
+ # upload_dir(
1319
+ # path='/Users/xigua/数据中心/原始文件3/天猫推广报表/主体报表',
1320
+ # db_name=db_name,
1321
+ # collection_name=table_name,
1322
+ # dbs={'mysql': True, 'mongodb': False},
1323
+ # target_service='company',
1324
+ # )
1325
+
1324
1326
 
1325
1327
  # # 新版 数据分类
1326
1328
  # dp = DatabaseUpdate(path='/Users/xigua/Downloads')
@@ -120,6 +120,7 @@ class MysqlDatasQuery:
120
120
  '自然流量曝光量': 1,
121
121
  '直接成交笔数': 1,
122
122
  '直接成交金额': 1,
123
+ '店铺名称': 1,
123
124
  }
124
125
  df = self.download.data_to_df(
125
126
  db_name='推广数据2',
@@ -171,6 +172,7 @@ class MysqlDatasQuery:
171
172
  '直接成交笔数': 1,
172
173
  '直接成交金额': 1,
173
174
  '人群名字': 1,
175
+ '店铺名称': 1,
174
176
  }
175
177
  df = self.download.data_to_df(
176
178
  db_name='推广数据2',
@@ -198,6 +200,7 @@ class MysqlDatasQuery:
198
200
  '总成交金额': 1,
199
201
  '直接成交笔数': 1,
200
202
  '直接成交金额': 1,
203
+ '店铺名称': 1,
201
204
  }
202
205
  df = self.download.data_to_df(
203
206
  db_name='推广数据2',
@@ -226,6 +229,7 @@ class MysqlDatasQuery:
226
229
  '总成交金额': 1,
227
230
  '直接成交笔数': 1,
228
231
  '直接成交金额': 1,
232
+ '店铺名称': 1,
229
233
  }
230
234
  df = self.download.data_to_df(
231
235
  db_name='推广数据2',
@@ -252,6 +256,7 @@ class MysqlDatasQuery:
252
256
  '成交笔数': 1,
253
257
  '成交金额': 1,
254
258
  # '成交访客数': 1
259
+ '店铺名称': 1,
255
260
  }
256
261
  df = self.download.data_to_df(
257
262
  db_name='推广数据2',
@@ -277,8 +282,8 @@ class MysqlDatasQuery:
277
282
  def sp_picture(self):
278
283
  """ 用生意经日数据制作商品 id 和编码对照表 """
279
284
  data_values = self.download.columns_to_list(
280
- db_name='属性设置2',
281
- table_name='商品素材导出',
285
+ db_name='属性设置3',
286
+ table_name='商品素材中心',
282
287
  columns_name=['日期', '商品id', '商品白底图', '方版场景图'],
283
288
  )
284
289
  df = pd.DataFrame(data=data_values)
@@ -298,14 +303,16 @@ class MysqlDatasQuery:
298
303
  '支付买家数': 1,
299
304
  '支付转化率': 1,
300
305
  '加购人数': 1,
306
+ '店铺名称': 1,
301
307
  }
302
308
  df = self.download.data_to_df(
303
- db_name='生意参谋2',
304
- table_name='店铺来源_日数据',
309
+ db_name='生意参谋3',
310
+ table_name='店铺流量来源构成',
305
311
  start_date=start_date,
306
312
  end_date=end_date,
307
313
  projection=projection,
308
314
  )
315
+ # df = df[df['店铺名称'] == '万里马官方旗舰店']
309
316
  return df
310
317
 
311
318
  @try_except
@@ -335,7 +342,7 @@ class MysqlDatasQuery:
335
342
  def sp_cost(self):
336
343
  """ 电商定价 """
337
344
  data_values = self.download.columns_to_list(
338
- db_name='属性设置2',
345
+ db_name='属性设置3',
339
346
  table_name='电商定价',
340
347
  columns_name=['日期', '款号', '年份季节', '吊牌价', '商家平台', '成本价', '天猫页面价', '天猫中促价'],
341
348
  )
@@ -360,9 +367,10 @@ class MysqlDatasQuery:
360
367
  '直接加购数': 1,
361
368
  '总加购数': 1,
362
369
  'spu id': 1,
370
+ '店铺名称':1,
363
371
  }
364
372
  df = self.download.data_to_df(
365
- db_name='京东数据2',
373
+ db_name='京东数据3',
366
374
  table_name='推广数据_京准通',
367
375
  start_date=start_date,
368
376
  end_date=end_date,
@@ -386,8 +394,8 @@ class MysqlDatasQuery:
386
394
  '核心位置点击量': 1,
387
395
  }
388
396
  df = self.download.data_to_df(
389
- db_name='京东数据2',
390
- table_name='推广数据_全站营销',
397
+ db_name='京东数据3',
398
+ table_name='推广数据_全站营销', # 暂缺
391
399
  start_date=start_date,
392
400
  end_date=end_date,
393
401
  projection=projection,
@@ -415,13 +423,13 @@ class MysqlDatasQuery:
415
423
  '总订单行': 1,
416
424
  '总订单金额': 1,
417
425
  '总加购数': 1,
418
- '下单新客数_去重': 1,
426
+ '下单新客数(去重)': 1,
419
427
  '领券数': 1,
420
428
  '商品关注数': 1,
421
- '店铺关注数': 1
429
+ '店铺关注数': 1,
422
430
  }
423
431
  df = self.download.data_to_df(
424
- db_name='京东数据2',
432
+ db_name='京东数据3',
425
433
  table_name='推广数据_关键词报表',
426
434
  start_date=start_date,
427
435
  end_date=end_date,
@@ -444,8 +452,8 @@ class MysqlDatasQuery:
444
452
  '加购人数': 1,
445
453
  }
446
454
  df = self.download.data_to_df(
447
- db_name='京东数据2',
448
- table_name='sku_商品明细',
455
+ db_name='京东数据3',
456
+ table_name='京东商智_sku_商品明细',
449
457
  start_date=start_date,
450
458
  end_date=end_date,
451
459
  projection=projection,
@@ -467,8 +475,8 @@ class MysqlDatasQuery:
467
475
  '加购人数': 1,
468
476
  }
469
477
  df = self.download.data_to_df(
470
- db_name='京东数据2',
471
- table_name='spu_商品明细',
478
+ db_name='京东数据3',
479
+ table_name='京东商智_spu_商品明细',
472
480
  start_date=start_date,
473
481
  end_date=end_date,
474
482
  projection=projection,
@@ -498,9 +506,10 @@ class MysqlDatasQuery:
498
506
  '下单买家数': 1,
499
507
  '加购人数': 1,
500
508
  '新访客': 1,
509
+ '店铺名称': 1,
501
510
  }
502
511
  df = self.download.data_to_df(
503
- db_name='生意参谋2',
512
+ db_name='生意参谋3',
504
513
  table_name='店铺来源_手淘搜索',
505
514
  start_date=start_date,
506
515
  end_date=end_date,
@@ -543,9 +552,10 @@ class MysqlDatasQuery:
543
552
  '退款金额(元)': 1,
544
553
  '预售定金支付金额(元)': 1,
545
554
  '预售预估总金额(元)': 1,
555
+ '店铺名称': 1,
546
556
  }
547
557
  df = self.download.data_to_df(
548
- db_name='生意参谋2',
558
+ db_name='生意参谋3',
549
559
  table_name='直播场次分析',
550
560
  start_date=start_date,
551
561
  end_date=end_date,
@@ -553,7 +563,7 @@ class MysqlDatasQuery:
553
563
  )
554
564
  return df
555
565
 
556
- @try_except
566
+ # @try_except
557
567
  def tg_by_day(self):
558
568
  """
559
569
  汇总各个店铺的推广数据,按日汇总
@@ -568,6 +578,7 @@ class MysqlDatasQuery:
568
578
  '总购物车数': 1,
569
579
  '总成交笔数': 1,
570
580
  '总成交金额': 1,
581
+ '店铺名称': 1,
571
582
  }
572
583
  df_tm = self.download.data_to_df(
573
584
  db_name='推广数据2',
@@ -578,7 +589,7 @@ class MysqlDatasQuery:
578
589
  )
579
590
  df_tm.rename(columns={'场景名字': '营销场景'}, inplace=True)
580
591
  df_tm = df_tm.groupby(
581
- ['日期', '营销场景', '花费'],
592
+ ['日期', '店铺名称', '营销场景', '花费'],
582
593
  as_index=False).agg(
583
594
  **{
584
595
  '展现量': ('展现量', np.max),
@@ -588,7 +599,6 @@ class MysqlDatasQuery:
588
599
  '成交金额': ('总成交金额', np.max)
589
600
  }
590
601
  )
591
- df_tm.insert(loc=1, column='店铺', value='WLM天猫旗舰店') # df中添加列
592
602
 
593
603
  df_tb = self.download.data_to_df(
594
604
  db_name='推广数据_淘宝店',
@@ -602,7 +612,7 @@ class MysqlDatasQuery:
602
612
  # df_tb.to_csv('/Users/xigua/Downloads/test.csv', index=False, header=True, encoding='utf-8_sig')
603
613
  df_tb.rename(columns={'场景名字': '营销场景'}, inplace=True)
604
614
  df_tb = df_tb.groupby(
605
- ['日期', '营销场景', '花费'],
615
+ ['日期', '店铺名称', '营销场景', '花费'],
606
616
  as_index=False).agg(
607
617
  **{
608
618
  '展现量': ('展现量', np.max),
@@ -612,7 +622,6 @@ class MysqlDatasQuery:
612
622
  '成交金额': ('总成交金额', np.max)
613
623
  }
614
624
  )
615
- df_tb.insert(loc=1, column='店铺', value='淘宝c店') # df中添加列
616
625
 
617
626
  projection = {
618
627
  '日期': 1,
@@ -623,6 +632,7 @@ class MysqlDatasQuery:
623
632
  '宝贝加购数': 1,
624
633
  '成交笔数': 1,
625
634
  '成交金额': 1,
635
+ '店铺名称': 1,
626
636
  }
627
637
  df_tm_pxb = self.download.data_to_df(
628
638
  db_name='推广数据2',
@@ -633,7 +643,7 @@ class MysqlDatasQuery:
633
643
  )
634
644
  df_tm_pxb = df_tm_pxb[df_tm_pxb['报表类型'] == '账户']
635
645
  df_tm_pxb = df_tm_pxb.groupby(
636
- ['日期', '报表类型', '消耗'],
646
+ ['日期', '店铺名称', '报表类型', '消耗'],
637
647
  as_index=False).agg(
638
648
  **{
639
649
  '展现量': ('展现量', np.max),
@@ -645,7 +655,6 @@ class MysqlDatasQuery:
645
655
  )
646
656
  df_tm_pxb.rename(columns={'报表类型': '营销场景', '消耗': '花费'}, inplace=True)
647
657
  df_tm_pxb['营销场景'] = '品销宝'
648
- df_tm_pxb.insert(loc=1, column='店铺', value='WLM天猫旗舰店') # df中添加列
649
658
 
650
659
  projection = {
651
660
  '日期': 1,
@@ -662,15 +671,16 @@ class MysqlDatasQuery:
662
671
  '直接加购数': 1,
663
672
  '总加购数': 1,
664
673
  'spu id': 1,
674
+ '店铺名称': 1,
665
675
  }
666
676
  df_jd = self.download.data_to_df(
667
- db_name='京东数据2',
677
+ db_name='京东数据3',
668
678
  table_name='推广数据_京准通',
669
679
  start_date=start_date,
670
680
  end_date=end_date,
671
681
  projection=projection,
672
682
  )
673
- df_jd = df_jd.groupby(['日期', '产品线', '触发sku id', '跟单sku id', 'spu id', '花费', '展现数', '点击数'],
683
+ df_jd = df_jd.groupby(['日期', '店铺名称', '产品线', '触发sku id', '跟单sku id', 'spu id', '花费', '展现数', '点击数'],
674
684
  as_index=False).agg(
675
685
  **{'直接订单行': ('直接订单行', np.max),
676
686
  '直接订单金额': ('直接订单金额', np.max),
@@ -680,10 +690,9 @@ class MysqlDatasQuery:
680
690
  '加购量': ('总加购数', np.max),
681
691
  }
682
692
  )
683
- df_jd = df_jd[['日期', '产品线', '花费', '展现数', '点击数', '加购量', '成交笔数', '成交金额']]
693
+ df_jd = df_jd[['日期', '店铺名称', '产品线', '花费', '展现数', '点击数', '加购量', '成交笔数', '成交金额']]
684
694
  df_jd.rename(columns={'产品线': '营销场景', '展现数': '展现量', '点击数': '点击量'}, inplace=True)
685
695
  df_jd = df_jd[df_jd['花费'] > 0]
686
- df_jd.insert(loc=1, column='店铺', value='京东箱包') # df中添加列
687
696
 
688
697
  projection = {
689
698
  '日期': 1,
@@ -696,15 +705,16 @@ class MysqlDatasQuery:
696
705
  '全站费比': 1,
697
706
  '核心位置展现量': 1,
698
707
  '核心位置点击量': 1,
708
+ '店铺名称': 1,
699
709
  }
700
710
  df_jd_qzyx = self.download.data_to_df(
701
- db_name='京东数据2',
711
+ db_name='京东数据3',
702
712
  table_name='推广数据_全站营销',
703
713
  start_date=start_date,
704
714
  end_date=end_date,
705
715
  projection=projection,
706
716
  )
707
- df_jd_qzyx = df_jd_qzyx.groupby(['日期', '产品线', '花费'], as_index=False).agg(
717
+ df_jd_qzyx = df_jd_qzyx.groupby(['日期', '店铺名称', '产品线', '花费'], as_index=False).agg(
708
718
  **{'全站roi': ('全站roi', np.max),
709
719
  '成交金额': ('全站交易额', np.max),
710
720
  '成交笔数': ('全站订单行', np.max),
@@ -715,9 +725,8 @@ class MysqlDatasQuery:
715
725
  }
716
726
  )
717
727
  df_jd_qzyx.rename(columns={'产品线': '营销场景'}, inplace=True)
718
- df_jd_qzyx = df_jd_qzyx[['日期', '营销场景', '花费', '展现量', '点击量', '成交笔数', '成交金额']]
728
+ df_jd_qzyx = df_jd_qzyx[['日期', '店铺名称', '营销场景', '花费', '展现量', '点击量', '成交笔数', '成交金额']]
719
729
  df_jd_qzyx = df_jd_qzyx[df_jd_qzyx['花费'] > 0]
720
- df_jd_qzyx.insert(loc=1, column='店铺', value='京东箱包') # df中添加列
721
730
 
722
731
  _datas = [item for item in [df_tm, df_tb, df_tm_pxb, df_jd, df_jd_qzyx] if len(item) > 0] # 阻止空的 dataframe
723
732
  df = pd.concat(_datas, axis=0, ignore_index=True)
@@ -760,6 +769,7 @@ class MysqlDatasQuery:
760
769
  'sku数_成交': 1,
761
770
  '营销后供货额': 1,
762
771
  '营销后供货价': 1,
772
+ '店铺名称': 1,
763
773
  }
764
774
  projection = {}
765
775
  df = self.download.data_to_df(
@@ -842,7 +852,7 @@ class GroupBy:
842
852
 
843
853
  return wrapper
844
854
 
845
- @try_except
855
+ # @try_except
846
856
  def groupby(self, df, table_name, is_maximize=True):
847
857
  """
848
858
  self.is_maximize: 是否最大转化数据
@@ -885,7 +895,7 @@ class GroupBy:
885
895
  '直接成交金额': float,
886
896
  }, errors='raise')
887
897
  if is_maximize:
888
- df = df.groupby(['日期', '营销场景', '商品id', '花费', '展现量', '点击量'], as_index=False).agg(
898
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '展现量', '点击量'], as_index=False).agg(
889
899
  **{'加购量': ('加购量', np.max),
890
900
  '成交笔数': ('成交笔数', np.max),
891
901
  '成交金额': ('成交金额', np.max),
@@ -895,7 +905,7 @@ class GroupBy:
895
905
  }
896
906
  )
897
907
  else:
898
- df = df.groupby(['日期', '营销场景', '商品id', '花费', '展现量', '点击量'], as_index=False).agg(
908
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '展现量', '点击量'], as_index=False).agg(
899
909
  **{
900
910
  '加购量': ('加购量', np.min),
901
911
  '成交笔数': ('成交笔数', np.min),
@@ -906,7 +916,7 @@ class GroupBy:
906
916
  }
907
917
  )
908
918
  df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
909
- df_new = df.groupby(['日期', '商品id'], as_index=False).agg(
919
+ df_new = df.groupby(['日期', '店铺名称', '商品id'], as_index=False).agg(
910
920
  **{
911
921
  '花费': ('花费', np.sum),
912
922
  '成交笔数': ('成交笔数', np.max),
@@ -934,7 +944,8 @@ class GroupBy:
934
944
  else:
935
945
  year_my = today.year
936
946
  # 截取 从上月1日 至 今天的花费数据, 推广款式按此数据从高到低排序(商品图+排序)
937
- df_pic = df.groupby(['日期', '商品id'], as_index=False).agg({'花费': 'sum'})
947
+ df_pic_lin = df[df['店铺名称'] == '万里马官方旗舰店']
948
+ df_pic = df_pic_lin.groupby(['日期', '商品id'], as_index=False).agg({'花费': 'sum'})
938
949
  df_pic = df_pic[~df_pic['商品id'].isin([''])] # 指定列中删除包含空值的行
939
950
  df_pic = df_pic[(df_pic['日期'] >= f'{year_my}-{last_month.month}-01')]
940
951
  df_pic = df_pic.groupby(['商品id'], as_index=False).agg({'花费': 'sum'})
@@ -942,9 +953,9 @@ class GroupBy:
942
953
  df_pic.reset_index(inplace=True)
943
954
  df_pic['index'] = df_pic['index'] + 100
944
955
  df_pic.rename(columns={'index': '商品索引'}, inplace=True)
945
- df_pic_new = pd.merge(df, df_pic, how='left', on=['商品id'])
956
+ df_pic_new = pd.merge(df_pic_lin, df_pic, how='left', on=['商品id'])
946
957
  df_pic_new['商品索引'].fillna(1000, inplace=True)
947
- self.sp_index_datas = df_pic_new[['商品id', '商品索引']]
958
+ self.sp_index_datas = df_pic_new[['商品id', '商品索引']] # 商品索引表_主推排序调用
948
959
  return df
949
960
  elif '商品索引表' in table_name:
950
961
  return df
@@ -952,6 +963,7 @@ class GroupBy:
952
963
  df.drop_duplicates(
953
964
  subset=[
954
965
  '日期',
966
+ '店铺名称',
955
967
  'spu_id',
956
968
  '访客量',
957
969
  '浏览量',
@@ -981,7 +993,7 @@ class GroupBy:
981
993
  '直接成交金额': float,
982
994
  }, errors='raise')
983
995
  if is_maximize:
984
- df = df.groupby(['日期', '营销场景', '商品id', '花费', '展现量', '点击量', '人群名字'], as_index=False).agg(
996
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '展现量', '点击量', '人群名字'], as_index=False).agg(
985
997
  **{'加购量': ('加购量', np.max),
986
998
  '成交笔数': ('成交笔数', np.max),
987
999
  '成交金额': ('成交金额', np.max),
@@ -990,7 +1002,7 @@ class GroupBy:
990
1002
  }
991
1003
  )
992
1004
  else:
993
- df = df.groupby(['日期', '营销场景', '商品id', '花费', '展现量', '点击量', '人群名字'], as_index=False).agg(
1005
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '展现量', '点击量', '人群名字'], as_index=False).agg(
994
1006
  **{
995
1007
  '加购量': ('加购量', np.min),
996
1008
  '成交笔数': ('成交笔数', np.min),
@@ -1079,7 +1091,6 @@ class GroupBy:
1079
1091
  # df.to_csv('/Users/xigua/Downloads/test_人群分类.csv', index=False, header=True, encoding='utf-8_sig')
1080
1092
  # breakpoint()
1081
1093
  return df
1082
-
1083
1094
  elif '天猫_关键词报表' in table_name:
1084
1095
  df.rename(columns={
1085
1096
  '场景名字': '营销场景',
@@ -1101,7 +1112,7 @@ class GroupBy:
1101
1112
  '直接成交金额': float,
1102
1113
  }, errors='raise')
1103
1114
  if is_maximize:
1104
- df = df.groupby(['日期', '营销场景', '商品id', '词类型', '词名字/词包名字', '花费', '展现量', '点击量'], as_index=False).agg(
1115
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '词类型', '词名字/词包名字', '花费', '展现量', '点击量'], as_index=False).agg(
1105
1116
  **{'加购量': ('加购量', np.max),
1106
1117
  '成交笔数': ('成交笔数', np.max),
1107
1118
  '成交金额': ('成交金额', np.max),
@@ -1110,7 +1121,7 @@ class GroupBy:
1110
1121
  }
1111
1122
  )
1112
1123
  else:
1113
- df = df.groupby(['日期', '营销场景', '商品id', '词类型', '词名字/词包名字', '花费', '展现量', '点击量'], as_index=False).agg(
1124
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '词类型', '词名字/词包名字', '花费', '展现量', '点击量'], as_index=False).agg(
1114
1125
  **{
1115
1126
  '加购量': ('加购量', np.min),
1116
1127
  '成交笔数': ('成交笔数', np.min),
@@ -1166,7 +1177,7 @@ class GroupBy:
1166
1177
  '观看次数': int,
1167
1178
  }, errors='raise')
1168
1179
  if is_maximize:
1169
- df = df.groupby(['日期', '营销场景', '人群名字', '计划名字', '花费', '观看次数', '展现量'],
1180
+ df = df.groupby(['日期', '店铺名称', '营销场景', '人群名字', '计划名字', '花费', '观看次数', '展现量'],
1170
1181
  as_index=False).agg(
1171
1182
  **{
1172
1183
  '进店量': ('进店量', np.max),
@@ -1179,7 +1190,7 @@ class GroupBy:
1179
1190
  }
1180
1191
  )
1181
1192
  else:
1182
- df = df.groupby(['日期', '营销场景', '人群名字', '计划名字', '花费', '观看次数', '展现量'],
1193
+ df = df.groupby(['日期', '店铺名称', '营销场景', '人群名字', '计划名字', '花费', '观看次数', '展现量'],
1183
1194
  as_index=False).agg(
1184
1195
  **{
1185
1196
  '进店量': ('进店量', np.min),
@@ -1194,7 +1205,7 @@ class GroupBy:
1194
1205
  df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
1195
1206
  # df.insert(loc=2, column='营销场景', value='超级直播') # df中插入新列
1196
1207
  # df = df.loc[df['日期'].between(start_day, today)]
1197
- df_new = df.groupby(['日期', '推广渠道', '营销场景'], as_index=False).agg(
1208
+ df_new = df.groupby(['日期', '店铺名称', '推广渠道', '营销场景'], as_index=False).agg(
1198
1209
  **{
1199
1210
  '花费': ('花费', np.sum),
1200
1211
  '展现量': ('展现量', np.sum),
@@ -1232,7 +1243,7 @@ class GroupBy:
1232
1243
  '品牌搜索人数': int,
1233
1244
  }, errors='raise')
1234
1245
  if is_maximize:
1235
- df = df.groupby(['日期', '报表类型', '花费', '展现量', '点击量'], as_index=False).agg(
1246
+ df = df.groupby(['日期', '店铺名称', '报表类型', '花费', '展现量', '点击量'], as_index=False).agg(
1236
1247
  **{
1237
1248
  '加购量': ('加购量', np.max),
1238
1249
  '成交笔数': ('成交笔数', np.max),
@@ -1242,7 +1253,7 @@ class GroupBy:
1242
1253
  }
1243
1254
  )
1244
1255
  else:
1245
- df = df.groupby(['日期', '报表类型', '花费', '展现量', '点击量'], as_index=False).agg(
1256
+ df = df.groupby(['日期', '店铺名称', '报表类型', '花费', '展现量', '点击量'], as_index=False).agg(
1246
1257
  **{
1247
1258
  '加购量': ('加购量', np.min),
1248
1259
  '成交笔数': ('成交笔数', np.min),
@@ -1253,7 +1264,7 @@ class GroupBy:
1253
1264
  )
1254
1265
  df.insert(loc=1, column='推广渠道', value='品销宝') # df中插入新列
1255
1266
  df.insert(loc=2, column='营销场景', value='品销宝') # df中插入新列
1256
- df_new = df.groupby(['日期', '推广渠道', '营销场景'], as_index=False).agg(
1267
+ df_new = df.groupby(['日期', '店铺名称', '推广渠道', '营销场景'], as_index=False).agg(
1257
1268
  **{
1258
1269
  '花费': ('花费', np.sum),
1259
1270
  '展现量': ('展现量', np.sum),
@@ -1299,35 +1310,7 @@ class GroupBy:
1299
1310
  }
1300
1311
  )
1301
1312
  return df
1302
- elif '店铺来源_日数据' in table_name and '旧版' not in table_name:
1303
- # 包含三级来源名称和预设索引值列
1304
- # 截取 从上月1日 至 今天的花费数据, 推广款式按此数据从高到低排序(商品图+排序)
1305
- df_visitor3 = df.groupby(['日期', '三级来源'], as_index=False).agg({'访客数': 'sum'})
1306
- df_visitor3 = df_visitor3[~df_visitor3['三级来源'].isin([''])] # 指定列中删除包含空值的行
1307
- # df_visitor = df_visitor[(df_visitor['日期'] >= f'{year_my}-{last_month.month}-01')]
1308
- df_visitor3 = df_visitor3.groupby(['三级来源'], as_index=False).agg({'访客数': 'sum'})
1309
- df_visitor3.sort_values('访客数', ascending=False, ignore_index=True, inplace=True)
1310
- df_visitor3.reset_index(inplace=True)
1311
- df_visitor3['index'] = df_visitor3['index'] + 100
1312
- df_visitor3.rename(columns={'index': '三级访客索引'}, inplace=True)
1313
- df_visitor3 = df_visitor3[['三级来源', '三级访客索引']]
1314
-
1315
- # 包含二级来源名称和预设索引值列
1316
- df_visitor2 = df.groupby(['日期', '二级来源'], as_index=False).agg({'访客数': 'sum'})
1317
- df_visitor2 = df_visitor2[~df_visitor2['二级来源'].isin([''])] # 指定列中删除包含空值的行
1318
- # df_visitor2 = df_visitor2[(df_visitor2['日期'] >= f'{year_my}-{last_month.month}-01')]
1319
- df_visitor2 = df_visitor2.groupby(['二级来源'], as_index=False).agg({'访客数': 'sum'})
1320
- df_visitor2.sort_values('访客数', ascending=False, ignore_index=True, inplace=True)
1321
- df_visitor2.reset_index(inplace=True)
1322
- df_visitor2['index'] = df_visitor2['index'] + 100
1323
- df_visitor2.rename(columns={'index': '二级访客索引'}, inplace=True)
1324
- df_visitor2 = df_visitor2[['二级来源', '二级访客索引']]
1325
-
1326
- df = pd.merge(df, df_visitor2, how='left', left_on='二级来源', right_on='二级来源')
1327
- df = pd.merge(df, df_visitor3, how='left', left_on='三级来源', right_on='三级来源')
1328
- return df
1329
- elif '天猫_店铺来源_日数据_旧版' in table_name:
1330
-
1313
+ elif '店铺流量来源构成' in table_name:
1331
1314
  # 包含三级来源名称和预设索引值列
1332
1315
  # 截取 从上月1日 至 今天的花费数据, 推广款式按此数据从高到低排序(商品图+排序)
1333
1316
  df_visitor3 = df.groupby(['日期', '三级来源'], as_index=False).agg({'访客数': 'sum'})
@@ -1409,7 +1392,7 @@ class GroupBy:
1409
1392
  )
1410
1393
  return df
1411
1394
  elif '京东_京准通' in table_name and '全站营销' not in table_name:
1412
- df = df.groupby(['日期', '产品线', '触发sku id', '跟单sku id', 'spu id', '花费', '展现数', '点击数'], as_index=False).agg(
1395
+ df = df.groupby(['日期', '店铺名称', '产品线', '触发sku id', '跟单sku id', 'spu id', '花费', '展现数', '点击数'], as_index=False).agg(
1413
1396
  **{'直接订单行': ('直接订单行', np.max),
1414
1397
  '直接订单金额': ('直接订单金额', np.max),
1415
1398
  '总订单行': ('总订单行', np.max),
@@ -1479,7 +1462,7 @@ class GroupBy:
1479
1462
  '总订单行': ('总订单行', np.max),
1480
1463
  '总订单金额': ('总订单金额', np.max),
1481
1464
  '总加购数': ('总加购数', np.max),
1482
- '下单新客数': ('下单新客数_去重', np.max),
1465
+ '下单新客数': ('下单新客数(去重)', np.max),
1483
1466
  '领券数': ('领券数', np.max),
1484
1467
  '商品关注数': ('商品关注数', np.max),
1485
1468
  '店铺关注数': ('店铺关注数', np.max)
@@ -1493,7 +1476,7 @@ class GroupBy:
1493
1476
  return df
1494
1477
  elif '天猫店铺来源_手淘搜索' in table_name:
1495
1478
  df = df.groupby(
1496
- ['日期', '关键词'],
1479
+ ['日期', '关键词', '店铺名称'],
1497
1480
  as_index=False).agg(
1498
1481
  **{
1499
1482
  '访客数': ('访客数', np.max),
@@ -1512,7 +1495,7 @@ class GroupBy:
1512
1495
  return df
1513
1496
  elif '多店推广场景_按日聚合' in table_name:
1514
1497
  df = df.groupby(
1515
- ['日期', '店铺', '营销场景'],
1498
+ ['日期', '店铺名称', '营销场景'],
1516
1499
  as_index=False).agg(
1517
1500
  **{
1518
1501
  '花费': ('花费', np.sum),
@@ -1523,7 +1506,7 @@ class GroupBy:
1523
1506
  '成交金额': ('成交金额', np.sum)
1524
1507
  }
1525
1508
  )
1526
- df.sort_values(['日期', '店铺', '花费'], ascending=[False, False, False], ignore_index=True, inplace=True)
1509
+ df.sort_values(['日期', '店铺名称', '花费'], ascending=[False, False, False], ignore_index=True, inplace=True)
1527
1510
  # df.to_csv('/Users/xigua/Downloads/test.csv', encoding='utf-8_sig', index=False, header=True)
1528
1511
  return df
1529
1512
  elif '达摩盘_人群报表' in table_name:
@@ -1835,7 +1818,7 @@ class GroupBy:
1835
1818
  break
1836
1819
  return result
1837
1820
 
1838
- @try_except
1821
+ # @try_except
1839
1822
  def performance(self, bb_tg=True):
1840
1823
  # print(self.data_tgyj)
1841
1824
  tg, syj, idbm, pic, cost = (
@@ -1861,7 +1844,7 @@ class GroupBy:
1861
1844
  # 推广表合并生意经 , 以推广数据为基准,销售数据不齐全
1862
1845
  df = pd.merge(df, syj, how='left', left_on=['日期', '商品id'], right_on=['日期', '宝贝id'])
1863
1846
  df.drop(labels='宝贝id', axis=1, inplace=True)
1864
- df.drop_duplicates(subset=['日期', '商品id', '花费', '销售额'], keep='last', inplace=True, ignore_index=True)
1847
+ df.drop_duplicates(subset=['日期', '店铺名称', '商品id', '花费', '销售额'], keep='last', inplace=True, ignore_index=True)
1865
1848
  df.fillna(0, inplace=True)
1866
1849
  df['成本价'] = df['成本价'].astype('float64')
1867
1850
  df['销售额'] = df['销售额'].astype('float64')
@@ -2036,7 +2019,7 @@ class GroupBy:
2036
2019
  except:
2037
2020
  print(f'{filename}: sort_values排序参数错误!')
2038
2021
  df.to_excel(os.path.join(path, filename + '.xlsx'), index=index, header=header, engine=engine, freeze_panes=freeze_panes)
2039
-
2022
+
2040
2023
 
2041
2024
  def g_group():
2042
2025
  pass
@@ -2120,16 +2103,10 @@ def data_aggregation(service_databases=[{}], months=1, is_juhe=True):
2120
2103
  },
2121
2104
  {
2122
2105
  '数据库名': '聚合数据',
2123
- '集合名': '天猫_店铺来源_日数据',
2106
+ '集合名': '店铺流量来源构成',
2124
2107
  '唯一主键': ['日期', '一级来源', '二级来源', '三级来源', '访客数'],
2125
2108
  '数据主体': sdq.dplyd(),
2126
2109
  },
2127
- {
2128
- '数据库名': '聚合数据',
2129
- '集合名': '天猫_店铺来源_日数据_旧版',
2130
- '唯一主键': ['日期', '一级来源', '二级来源', '三级来源'],
2131
- '数据主体': sdq.dplyd_old(),
2132
- },
2133
2110
  {
2134
2111
  '数据库名': '聚合数据',
2135
2112
  '集合名': '商品id编码表',
@@ -2144,7 +2121,7 @@ def data_aggregation(service_databases=[{}], months=1, is_juhe=True):
2144
2121
  },
2145
2122
  {
2146
2123
  '数据库名': '聚合数据',
2147
- '集合名': '商品成本',
2124
+ '集合名': '商品成本', # 暂缺 10.31
2148
2125
  '唯一主键': ['款号'],
2149
2126
  '数据主体': sdq.sp_cost(),
2150
2127
  },
@@ -2156,7 +2133,7 @@ def data_aggregation(service_databases=[{}], months=1, is_juhe=True):
2156
2133
  },
2157
2134
  {
2158
2135
  '数据库名': '聚合数据',
2159
- '集合名': '京东_京准通_全站营销',
2136
+ '集合名': '京东_京准通_全站营销', # 暂缺
2160
2137
  '唯一主键': ['日期', '产品线', '花费'],
2161
2138
  '数据主体': sdq.jdqzyx(),
2162
2139
  },
@@ -2204,13 +2181,13 @@ def data_aggregation(service_databases=[{}], months=1, is_juhe=True):
2204
2181
  },
2205
2182
  {
2206
2183
  '数据库名': '聚合数据',
2207
- '集合名': '天猫店铺来源_手淘搜索',
2184
+ '集合名': '天猫店铺来源_手淘搜索', # 暂缺
2208
2185
  '唯一主键': ['日期', '关键词', '访客数'],
2209
2186
  '数据主体': sdq.tm_search(),
2210
2187
  },
2211
2188
  {
2212
2189
  '数据库名': '聚合数据',
2213
- '集合名': '生意参谋_直播场次分析',
2190
+ '集合名': '生意参谋_直播场次分析', # 暂缺
2214
2191
  '唯一主键': ['场次id'],
2215
2192
  '数据主体': sdq.zb_ccfx(),
2216
2193
  },
@@ -2240,8 +2217,8 @@ def data_aggregation(service_databases=[{}], months=1, is_juhe=True):
2240
2217
  # 由推广主体报表,写入一个商品索引表,索引规则:从上月 1 号至今花费从高到低排序
2241
2218
  m.df_to_mysql(
2242
2219
  df=g.sp_index_datas,
2243
- db_name='属性设置2',
2244
- table_name='商品索引表',
2220
+ db_name='属性设置3',
2221
+ table_name='商品索引表_主推排序调用',
2245
2222
  move_insert=False, # 先删除,再插入
2246
2223
  # df_sql=True,
2247
2224
  drop_duplicates=False,
@@ -2249,7 +2226,7 @@ def data_aggregation(service_databases=[{}], months=1, is_juhe=True):
2249
2226
  service_database=service_database,
2250
2227
  )
2251
2228
  g.sp_index_datas = pd.DataFrame() # 重置,不然下个循环会继续刷入数据库
2252
- # # g.as_csv(df=df, filename=table_name + '.csv') # 导出 csv
2229
+ # g.as_csv(df=df, filename=table_name + '.csv') # 导出 csv
2253
2230
  if '日期' in df.columns.tolist():
2254
2231
  m.df_to_mysql(
2255
2232
  df=df,
@@ -2327,6 +2304,6 @@ def main():
2327
2304
 
2328
2305
 
2329
2306
  if __name__ == '__main__':
2330
- data_aggregation(service_databases=[{'company': 'mysql'}], months=0, is_juhe=False) # 正常的聚合所有数据
2307
+ data_aggregation(service_databases=[{'company': 'mysql'}], months=0, is_juhe=True) # 正常的聚合所有数据
2331
2308
  # data_aggregation_one(service_databases=[{'company': 'mysql'}], months=1) # 单独聚合某一个数据库,具体库进函数编辑
2332
2309
  # optimize_data.op_data(service_databases=[{'company': 'mysql'}], days=3650) # 立即启动对聚合数据的清理工作
@@ -99,19 +99,9 @@ class DataClean:
99
99
  '集合名称': '店铺流量来源构成',
100
100
  },
101
101
  {
102
- '文件简称': '商品类目属性_', # 文件名中包含的字符
103
- '数据库名': '生意参谋3',
104
- '集合名称': '商品类目属性',
105
- },
106
- {
107
- '文件简称': '商品主图视频_', # 文件名中包含的字符
108
- '数据库名': '生意参谋3',
109
- '集合名称': '商品主图视频',
110
- },
111
- {
112
- '文件简称': '商品sku属性_', # 文件名中包含的字符
113
- '数据库名': '生意参谋3',
114
- '集合名称': '商品sku',
102
+ '文件简称': '爱库存_商品榜单_', # 文件名中包含的字符
103
+ '数据库名': '爱库存2',
104
+ '集合名称': '商品spu榜单',
115
105
  },
116
106
  ]
117
107
  for root, dirs, files in os.walk(path, topdown=False):
@@ -160,10 +150,13 @@ class DataClean:
160
150
  new_name = f'py_xg_{os.path.splitext(name)[0]}.csv'
161
151
  self.save_to_csv(df, root, new_name, encoding='utf-8_sig')
162
152
  os.remove(os.path.join(root, name))
163
- elif name.endswith('.csv') and ('商品类目属性' in name or '商品主图视频' in name or '商品sku属性' in name):
153
+ elif name.endswith('.csv') and '爱库存_商品榜单_' in name:
164
154
  df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
155
+ if '店铺名称' not in df.columns.tolist():
156
+ df.insert(loc=1, column='店铺名称', value='爱库存平台') # df中插入新列
165
157
  new_name = f'py_xg_{os.path.splitext(name)[0]}.csv'
166
- os.rename(os.path.join(root, name), os.path.join(root, new_name))
158
+ self.save_to_csv(df, root, new_name, encoding='utf-8_sig')
159
+ os.remove(os.path.join(root, name))
167
160
 
168
161
  # 将数据传入 self.datas 等待更新进数据库
169
162
  if not db_name or not collection_name:
@@ -245,67 +238,67 @@ class DataClean:
245
238
  report_names = [
246
239
  {
247
240
  '文件简称': 'tg_report_主体报表',
248
- '数据库名': '推广数据3',
241
+ '数据库名': '推广数据2',
249
242
  '集合名称': '主体报表',
250
243
  },
251
244
  {
252
245
  '文件简称': 'tg_report_创意报表_创意',
253
- '数据库名': '推广数据3',
246
+ '数据库名': '推广数据2',
254
247
  '集合名称': '创意报表_创意',
255
248
  },
256
249
  {
257
250
  '文件简称': 'tg_report_创意报表_素材',
258
- '数据库名': '推广数据3',
251
+ '数据库名': '推广数据2',
259
252
  '集合名称': '创意报表_素材',
260
253
  },
261
254
  {
262
255
  '文件简称': 'tg_report_单元报表',
263
- '数据库名': '推广数据3',
256
+ '数据库名': '推广数据2',
264
257
  '集合名称': '单元报表',
265
258
  },
266
259
  {
267
260
  '文件简称': 'tg_report_地域报表_省份',
268
- '数据库名': '推广数据3',
261
+ '数据库名': '推广数据2',
269
262
  '集合名称': '地域报表_省份',
270
263
  },
271
264
  {
272
265
  '文件简称': 'tg_report_地域报表_城市',
273
- '数据库名': '推广数据3',
266
+ '数据库名': '推广数据2',
274
267
  '集合名称': '地域报表_城市',
275
268
  },
276
269
  {
277
270
  '文件简称': 'tg_report_关键词报表',
278
- '数据库名': '推广数据3',
271
+ '数据库名': '推广数据2',
279
272
  '集合名称': '关键词报表',
280
273
  },
281
274
  {
282
275
  '文件简称': 'tg_report_计划报表',
283
- '数据库名': '推广数据3',
276
+ '数据库名': '推广数据2',
284
277
  '集合名称': '计划报表',
285
278
  },
286
279
  {
287
280
  '文件简称': 'tg_report_权益报表',
288
- '数据库名': '推广数据3',
281
+ '数据库名': '推广数据2',
289
282
  '集合名称': '权益报表',
290
283
  },
291
284
  {
292
285
  '文件简称': 'tg_report_人群报表',
293
- '数据库名': '推广数据3',
286
+ '数据库名': '推广数据2',
294
287
  '集合名称': '人群报表',
295
288
  },
296
289
  {
297
290
  '文件简称': 'tg_report_营销场景报表',
298
- '数据库名': '推广数据3',
291
+ '数据库名': '推广数据2',
299
292
  '集合名称': '营销场景报表',
300
293
  },
301
294
  {
302
295
  '文件简称': 'tg_report_超级直播报表_人群',
303
- '数据库名': '推广数据3',
296
+ '数据库名': '推广数据2',
304
297
  '集合名称': '超级直播',
305
298
  },
306
299
  {
307
300
  '文件简称': 'tg_report_品销宝_明星店铺',
308
- '数据库名': '推广数据3',
301
+ '数据库名': '推广数据2',
309
302
  '集合名称': '品销宝',
310
303
  }
311
304
  ]
@@ -338,9 +331,9 @@ class DataClean:
338
331
  continue
339
332
  # 区分淘宝和天猫的报表
340
333
  if '万里马官方旗舰店' in name:
341
- db_name = f'天猫_{db_name}'
334
+ pass
342
335
  elif '万里马官方企业店' in name:
343
- db_name = f'淘宝_{db_name}'
336
+ db_name = '推广数据_淘宝店'
344
337
  else:
345
338
  print(f'报表名称错误,不属于天猫/淘宝店:{name}')
346
339
  continue
@@ -407,22 +400,22 @@ class DataClean:
407
400
  report_names = [
408
401
  {
409
402
  '文件简称': 'baobei',
410
- '数据库名': '天猫_生意经3',
403
+ '数据库名': '生意经2',
411
404
  '集合名称': '宝贝指标',
412
405
  },
413
406
  {
414
407
  '文件简称': 'order',
415
- '数据库名': '天猫_生意经3',
408
+ '数据库名': '生意经2',
416
409
  '集合名称': '订单指标',
417
410
  },
418
411
  {
419
412
  '文件简称': '省份城市分析',
420
- '数据库名': '天猫_生意经3',
413
+ '数据库名': '生意经2',
421
414
  '集合名称': '省份城市分析',
422
415
  },
423
416
  {
424
417
  '文件简称': '店铺销售指标',
425
- '数据库名': '天猫_生意经3',
418
+ '数据库名': '生意经2',
426
419
  '集合名称': '店铺销售指标',
427
420
  },
428
421
  ]
@@ -803,6 +796,29 @@ class DataClean:
803
796
  def sp_scene_clean(self, path=None, is_except=[]):
804
797
  if not path:
805
798
  path = self.path
799
+ report_names = [
800
+ {
801
+ '文件简称': '商品素材_', # 文件名中包含的字符
802
+ '数据库名': '属性设置3',
803
+ '集合名称': '商品素材中心',
804
+ },
805
+ {
806
+ '文件简称': '商品类目属性_', # 文件名中包含的字符
807
+ '数据库名': '属性设置3',
808
+ '集合名称': '商品类目属性',
809
+ },
810
+ {
811
+ '文件简称': '商品主图视频_', # 文件名中包含的字符
812
+ '数据库名': '属性设置3',
813
+ '集合名称': '商品主图视频',
814
+ },
815
+ {
816
+ '文件简称': '商品sku属性_', # 文件名中包含的字符
817
+ '数据库名': '属性设置3',
818
+ '集合名称': '商品sku',
819
+ },
820
+ ]
821
+
806
822
  for root, dirs, files in os.walk(path, topdown=False):
807
823
  for name in files:
808
824
  if '~$' in name or '.DS' in name or '.localized' in name or '.jpg' in name or '.png' in name:
@@ -820,18 +836,29 @@ class DataClean:
820
836
  continue
821
837
  db_name = None # 初始化参数
822
838
  collection_name = None
839
+ for item in report_names:
840
+ if item['文件简称'] in name:
841
+ db_name = item['数据库名']
842
+ collection_name = item['集合名称']
843
+ is_continue = True
844
+ if not is_continue:
845
+ continue
823
846
 
824
847
  if name.endswith('.xlsx') and '商品素材_' in name:
825
848
  shop_name = re.findall(r'_([\u4e00-\u9fffA-Za-z]+店)_', name)[0]
826
849
  df = pd.read_excel(os.path.join(root, name), header=0)
850
+ if '日期' not in df.columns.tolist():
851
+ df.insert(loc=0, column='日期', value=datetime.datetime.today().strftime('%Y-%m-%d'))
827
852
  if '店铺名称' not in df.columns.tolist():
828
853
  df.insert(loc=1, column='店铺名称', value=shop_name)
829
854
  new_name = f'py_xg_{name}'
830
855
  df.to_excel(os.path.join(upload_path, new_name),
831
856
  index=False, header=True, engine='openpyxl', freeze_panes=(1, 0))
832
- db_name = '属性设置3'
833
- collection_name = '商品素材'
834
857
  os.remove(os.path.join(root, name))
858
+ elif name.endswith('.csv') and ('商品类目属性' in name or '商品主图视频' in name or '商品sku属性' in name):
859
+ df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
860
+ new_name = f'py_xg_{os.path.splitext(name)[0]}.csv'
861
+ os.rename(os.path.join(root, name), os.path.join(root, new_name))
835
862
 
836
863
  # 将数据传入 self.datas 等待更新进数据库
837
864
  if not db_name or not collection_name:
@@ -908,6 +935,9 @@ class DataClean:
908
935
  '商品类目属性' in name or '商品主图视频' in name or '商品sku属性' in name):
909
936
  t_path = os.path.join(self.source_path, '生意参谋', '商品属性')
910
937
  bib(t_path, _as_month=True)
938
+ elif name.endswith('.csv') and '爱库存_商品榜单_' in name:
939
+ t_path = os.path.join(self.source_path, '爱库存', 'spu商品榜单')
940
+ bib(t_path, _as_month=True)
911
941
 
912
942
  def move_dmp(self, path=None, is_except=[]):
913
943
  """ 达摩盘 """
@@ -936,7 +966,7 @@ class DataClean:
936
966
  continue
937
967
 
938
968
  if name.endswith('.csv') and '人群属性_万里马官方旗舰店' in name:
939
- t_path = os.path.join(self.source_path, '天猫_达摩盘', '我的人群属性')
969
+ t_path = os.path.join(self.source_path, '达摩盘', '我的人群属性')
940
970
  bib(t_path, _as_month=True)
941
971
 
942
972
 
@@ -1364,6 +1394,51 @@ class DataClean:
1364
1394
  df_to_json.as_json_file() # 写入 json 文件, 包含数据的 dtypes 信息
1365
1395
 
1366
1396
 
1397
+ def test():
1398
+ # main_key = '单元报表'
1399
+ path = f'/Users/xigua/数据中心/原始文件3/天猫推广报表/主体报表'
1400
+ for root, dirs, files in os.walk(path, topdown=False):
1401
+ for name in files:
1402
+ if '~$' in name or '.DS' in name or '.localized' in name or '.jpg' in name or '.png' in name:
1403
+ continue
1404
+ # if 'py_xg' in name:
1405
+ # continue
1406
+ # if 'TM_旧表_字段' in root:
1407
+ # continue
1408
+
1409
+ if name.endswith('.csv'):
1410
+ print(name)
1411
+ df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
1412
+ # if '店铺名称' not in df.columns.tolist():
1413
+ # df.insert(loc=1, column='店铺名称', value='万里马官方旗舰店')
1414
+ # df.replace(to_replace=['-'], value=0, regex=False, inplace=True)
1415
+ # df.replace(to_replace=[','], value='', regex=True, inplace=True)
1416
+ # if '统计日期' in df.columns.tolist() and '日期' not in df.columns.tolist():
1417
+ # df.rename(columns={'统计日期': '日期', '商品ID': '商品id'}, inplace=True)
1418
+ # shop_name = re.findall(r'_([\u4e00-\u9fffA-Za-z]+店)', name)[0]
1419
+ # df.insert(loc=1, column='店铺名称', value=shop_name)
1420
+
1421
+ date_all = re.findall(r'_(\d{4}-\d{2}-\d{2})_', name)[0]
1422
+
1423
+ date = re.findall(r'_(\d{4}-\d{2})-\d{2}', name)[0]
1424
+
1425
+ new_path = f'/Users/xigua/数据中心/原始文件3/天猫_生意参谋/商品排行/{date}'
1426
+ # new_path = os.path.join(new_path, date) # 添加 年月分类
1427
+ if not os.path.exists(new_path):
1428
+ os.makedirs(new_path, exist_ok=True)
1429
+ # print(date_all)
1430
+
1431
+ new_name = f'py_xg_商品排行_万里马官方旗舰店_{date_all}.csv'
1432
+ # print(os.path.join(new_path, new_name))
1433
+ # breakpoint()
1434
+ df.to_csv(os.path.join(new_path, new_name), encoding='utf-8_sig', index=False, header=True)
1435
+ # try:
1436
+ # df.to_excel(os.path.join(new_path, new_name),
1437
+ # index=False, header=True, engine='openpyxl', freeze_panes=(1, 0))
1438
+ # except Exception as e:
1439
+ # print(e)
1440
+
1441
+
1367
1442
  def main(service_databases=None, is_mysql=False):
1368
1443
  """
1369
1444
  is_mysql: 调试时加,False: 是否后续的聚合数据
@@ -1410,20 +1485,16 @@ def main(service_databases=None, is_mysql=False):
1410
1485
  # 清理所有非聚合数据的库
1411
1486
  optimize_data.op_data(
1412
1487
  db_name_lists=[
1413
- '京东数据2',
1488
+ '京东数据3',
1489
+ '属性设置3',
1414
1490
  '推广数据2',
1415
- '市场数据2',
1416
- '生意参谋2',
1491
+ '生意参谋3',
1492
+ '推广数据_淘宝店',
1493
+ '爱库存2'
1494
+ '生意参谋3',
1417
1495
  '生意经2',
1418
- '属性设置2',
1419
1496
  # '聚合数据', # 不在这里清理聚合数据, 还未开始聚合呢
1420
- '京东数据3',
1421
- '天猫_推广数据3',
1422
- '淘宝_推广数据3',
1423
- # '市场数据3',
1424
- '生意参谋3',
1425
- '天猫_生意经3',
1426
- # '淘宝_生意经3',
1497
+ '达摩盘3',
1427
1498
  ],
1428
1499
  days=100,
1429
1500
  is_mongo=True,
@@ -1445,63 +1516,16 @@ def main(service_databases=None, is_mysql=False):
1445
1516
  )
1446
1517
 
1447
1518
 
1448
- def test():
1449
- # main_key = '单元报表'
1450
- path = f'/Users/xigua/数据中心/原始文件3/天猫推广报表/主体报表'
1451
- for root, dirs, files in os.walk(path, topdown=False):
1452
- for name in files:
1453
- if '~$' in name or '.DS' in name or '.localized' in name or '.jpg' in name or '.png' in name:
1454
- continue
1455
- # if 'py_xg' in name:
1456
- # continue
1457
- # if 'TM_旧表_字段' in root:
1458
- # continue
1459
-
1460
- if name.endswith('.csv'):
1461
- print(name)
1462
- df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
1463
- # if '店铺名称' not in df.columns.tolist():
1464
- # df.insert(loc=1, column='店铺名称', value='万里马官方旗舰店')
1465
- # df.replace(to_replace=['-'], value=0, regex=False, inplace=True)
1466
- # df.replace(to_replace=[','], value='', regex=True, inplace=True)
1467
- # if '统计日期' in df.columns.tolist() and '日期' not in df.columns.tolist():
1468
- # df.rename(columns={'统计日期': '日期', '商品ID': '商品id'}, inplace=True)
1469
- # shop_name = re.findall(r'_([\u4e00-\u9fffA-Za-z]+店)', name)[0]
1470
- # df.insert(loc=1, column='店铺名称', value=shop_name)
1471
-
1472
- date_all = re.findall(r'_(\d{4}-\d{2}-\d{2})_', name)[0]
1473
-
1474
- date = re.findall(r'_(\d{4}-\d{2})-\d{2}', name)[0]
1475
-
1476
- new_path = f'/Users/xigua/数据中心/原始文件3/天猫_生意参谋/商品排行/{date}'
1477
- # new_path = os.path.join(new_path, date) # 添加 年月分类
1478
- if not os.path.exists(new_path):
1479
- os.makedirs(new_path, exist_ok=True)
1480
- # print(date_all)
1481
-
1482
- new_name = f'py_xg_商品排行_万里马官方旗舰店_{date_all}.csv'
1483
- # print(os.path.join(new_path, new_name))
1484
- # breakpoint()
1485
- df.to_csv(os.path.join(new_path, new_name), encoding='utf-8_sig', index=False, header=True)
1486
- # try:
1487
- # df.to_excel(os.path.join(new_path, new_name),
1488
- # index=False, header=True, engine='openpyxl', freeze_panes=(1, 0))
1489
- # except Exception as e:
1490
- # print(e)
1491
-
1492
-
1493
-
1494
-
1495
1519
  if __name__ == '__main__':
1496
- main(
1497
- service_databases = [
1498
- {'company': 'mysql'},
1499
- # {'home_lx': 'mysql'},
1500
- # {'home_lx': 'mongodb'},
1501
- # {'nas': 'mysql'},
1502
- ],
1503
- is_mysql = False,
1504
- )
1520
+ # main(
1521
+ # service_databases = [
1522
+ # {'company': 'mysql'},
1523
+ # # {'home_lx': 'mysql'},
1524
+ # # {'home_lx': 'mongodb'},
1525
+ # # {'nas': 'mysql'},
1526
+ # ],
1527
+ # is_mysql = False, # 清理聚合数据
1528
+ # )
1505
1529
 
1506
1530
  # c = DataClean(
1507
1531
  # path=upload_path, # 源文件目录,下载文件夹
@@ -1512,4 +1536,4 @@ if __name__ == '__main__':
1512
1536
  # c.move_tg_tm(is_except=['临时文件', ]) # 天猫,移到文件到原始文件夹
1513
1537
 
1514
1538
 
1515
- # test()
1539
+ test()
mdbq/spider/aikucun.py CHANGED
@@ -216,6 +216,7 @@ class AikuCun:
216
216
  today = datetime.date.today()
217
217
  for date_s in range(date_num):
218
218
  new_date = today - datetime.timedelta(days=date_s) # 会用作文件名
219
+ print(f'正在下载爱库存文件 {date_s}/{date_num}: {new_date}')
219
220
  str_date = str(new_date)[2:]
220
221
  wait = WebDriverWait(_driver, timeout=15) #
221
222
  elements = _driver.find_elements(
@@ -254,7 +255,7 @@ class AikuCun:
254
255
  '//button[@class="el-button el-button--primary el-button--small is-plain"]/span[contains(text(), "下载数据")]')
255
256
  _driver.execute_script("arguments[0].click();", elements[0]) # 点击
256
257
  time.sleep(5)
257
- self.clean_data(date=new_date)
258
+ self.clean_data(date=new_date) # 每下载一个文件,需要立即清洗数据
258
259
  _driver.quit()
259
260
 
260
261
  def clean_data(self, date):
@@ -275,6 +276,7 @@ class AikuCun:
275
276
  os.remove(os.path.join(root, name))
276
277
  continue
277
278
  df.insert(loc=0, column='日期', value=date) # df中插入新列
279
+ df.insert(loc=1, column='店铺名称', value='爱库存平台') # df中插入新列
278
280
  df.rename(columns={'spuId': 'spu_id'}, inplace=True)
279
281
  df['数据更新时间'] = pd.to_datetime(df['数据更新时间'], format='%Y-%m-%d %H:%M:%S', errors='ignore')
280
282
  # df['数据更新时间'] = df['数据更新时间'].apply(lambda x: re.sub(' ', ' ', str(x)) if x else x)
@@ -290,24 +292,24 @@ def akucun():
290
292
  akc.get_data(shop_name='aikucun', date_num=10) # 获取最近 N 天数据,0表示今天
291
293
  # akc.clean_data()
292
294
 
293
- # 新版 数据分类
294
- dp = aggregation.DatabaseUpdate(path=upload_path)
295
- dp.new_unzip(is_move=True)
296
- dp.cleaning(is_move=False, is_except=['临时文件']) # 清洗数据, 存入 self.datas, 不需要立即移除文件,仍保留文件到原始文件中
297
- # 将 self.datas 更新至数据库
298
- dp.upload_df(service_databases=[
299
- # {'home_lx': 'mongodb'},
300
- # {'home_lx': 'mysql'},
301
- {'company': 'mysql'},
302
- # {'nas': 'mysql'},
303
- ])
304
- # 数据分类
305
- c = data_clean.DataClean(path=upload_path, source_path=Source_Path)
306
- c.set_up_to_mogo = False # 不再使用 data_clean 更新数据库,改为 aggregation.py
307
- c.set_up_to_mysql = False # 不再使用 data_clean 更新数据库,改为 aggregation.py
308
- c.new_unzip(is_move=True, ) # 解压文件
309
- c.change_and_sort(is_except=['临时文件'])
310
- c.move_all(is_except=['临时文件']) # 移到文件到原始文件夹
295
+ # # 新版 数据分类
296
+ # dp = aggregation.DatabaseUpdate(path=upload_path)
297
+ # dp.new_unzip(is_move=True)
298
+ # dp.cleaning(is_move=False, is_except=['临时文件']) # 清洗数据, 存入 self.datas, 不需要立即移除文件,仍保留文件到原始文件中
299
+ # # 将 self.datas 更新至数据库
300
+ # dp.upload_df(service_databases=[
301
+ # # {'home_lx': 'mongodb'},
302
+ # # {'home_lx': 'mysql'},
303
+ # {'company': 'mysql'},
304
+ # # {'nas': 'mysql'},
305
+ # ])
306
+ # # 数据分类
307
+ # c = data_clean.DataClean(path=upload_path, source_path=Source_Path)
308
+ # c.set_up_to_mogo = False # 不再使用 data_clean 更新数据库,改为 aggregation.py
309
+ # c.set_up_to_mysql = False # 不再使用 data_clean 更新数据库,改为 aggregation.py
310
+ # c.new_unzip(is_move=True, ) # 解压文件
311
+ # c.change_and_sort(is_except=['临时文件'])
312
+ # c.move_all(is_except=['临时文件']) # 移到文件到原始文件夹
311
313
 
312
314
 
313
315
  class AikuCunNew:
@@ -359,7 +361,7 @@ class AikuCunNew:
359
361
 
360
362
  if __name__ == '__main__':
361
363
  pass
362
- # get_cookie_aikucun()
364
+ get_cookie_aikucun()
363
365
  akucun()
364
366
 
365
367
  # a = AikuCunNew(shop_name='aikucun')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 2.6.2
3
+ Version: 2.6.4
4
4
  Home-page: https://pypi.org/project/mdbsql
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,15 +1,15 @@
1
1
  mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
2
2
  mdbq/__version__.py,sha256=y9Mp_8x0BCZSHsdLT_q5tX9wZwd5QgqrSIENLrb6vXA,62
3
3
  mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
4
- mdbq/aggregation/aggregation.py,sha256=ZBsaQbazp2J9rQDoTvwRNav1O4g3PrZue31_6iM4k5g,76166
4
+ mdbq/aggregation/aggregation.py,sha256=YWfi6mhGAxEmY7DVIw--PimKYRx8wUhQYlz9zd-i1vk,76249
5
5
  mdbq/aggregation/df_types.py,sha256=U9i3q2eRPTDY8qAPTw7irzu-Tlg4CIySW9uYro81wdk,8125
6
6
  mdbq/aggregation/mysql_types.py,sha256=DQYROALDiwjJzjhaJfIIdnsrNs11i5BORlj_v6bp67Y,11062
7
7
  mdbq/aggregation/optimize_data.py,sha256=gdScrgTAb6RbXHZy1LitX7lggMGn1GTLhkYSgztfwew,4903
8
- mdbq/aggregation/query_data.py,sha256=6hEmrqPiI5yUuQyTP5_w9n9aVoOXutuJK6Z_jRlsV_s,104438
8
+ mdbq/aggregation/query_data.py,sha256=0NGYmfl1klQryriHu4V6_Twi9WPERHbl56X3kUqmZaY,102619
9
9
  mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
10
10
  mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
11
11
  mdbq/clean/__init__.py,sha256=A1d6x3L27j4NtLgiFV5TANwEkLuaDfPHDQNrPBbNWtU,41
12
- mdbq/clean/clean_upload.py,sha256=t_vUPUuDrWAKxdJO8Ptcu9H6aSGzAgBKg9sur-Mr0oM,77929
12
+ mdbq/clean/clean_upload.py,sha256=ZiPuyLhdEkAVTiqMCXGw2TbIuJtQL6qzXS4qf5Lncus,79427
13
13
  mdbq/clean/data_clean.py,sha256=ucfslhqXVZoH2QaXHSAWDky0GhIvH9f4GeNaHg4SrFE,104790
14
14
  mdbq/company/__init__.py,sha256=qz8F_GsP_pMB5PblgJAUAMjasuZbOEp3qQOCB39E8f0,21
15
15
  mdbq/company/copysh.py,sha256=NvlXCBZBcO2GIT5nLRYYqhOyHWM1-1RE7DHvgbj6jmQ,19723
@@ -41,8 +41,8 @@ mdbq/pbix/refresh_all_old.py,sha256=_pq3WSQ728GPtEG5pfsZI2uTJhU8D6ra-htIk1JXYzw,
41
41
  mdbq/req_post/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
42
42
  mdbq/req_post/req_tb.py,sha256=PexWSCPJNM6Tv0ol4lAWIhlOwsAr_frnjtcdSHCFiek,36179
43
43
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
44
- mdbq/spider/aikucun.py,sha256=3EjeTPbwk_qLGMVqDhBZoEPGfD2oM-SBiODjxLL3A8U,16883
45
- mdbq-2.6.2.dist-info/METADATA,sha256=YWpQrR1j4lfvAEEea_-hzDw7IblqooNfsPi6JcB_d8M,245
46
- mdbq-2.6.2.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
47
- mdbq-2.6.2.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
48
- mdbq-2.6.2.dist-info/RECORD,,
44
+ mdbq/spider/aikucun.py,sha256=4Y5zd64hZUFtll8AdpUc2napDas-La-A6XzAhb2mLv0,17157
45
+ mdbq-2.6.4.dist-info/METADATA,sha256=jxpJC0SoZbSmRSFQRw56smOeg_66YUnRBWT8bQl7L38,245
46
+ mdbq-2.6.4.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
47
+ mdbq-2.6.4.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
48
+ mdbq-2.6.4.dist-info/RECORD,,
File without changes