mdbq 1.5.9__py3-none-any.whl → 1.6.1__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.
@@ -42,6 +42,7 @@ class DatabaseUpdate:
42
42
  def cleaning(self, is_move=True):
43
43
  """
44
44
  数据清洗, 返回包含 数据库名, 集合名称, 和 df 主体
45
+ 修改 cleaning 时,要同步 support 下的 标题对照表.csv
45
46
  """
46
47
  if not os.path.exists(self.path):
47
48
  print(f'1.1.0 初始化时传入了不存在的目录: {self.path}')
@@ -108,8 +109,12 @@ class DatabaseUpdate:
108
109
  # df.replace(to_replace=['\\N'], value=0, regex=False, inplace=True) # 替换掉特殊字符
109
110
  # df.replace(to_replace=[''], value=0, regex=False, inplace=True)
110
111
  # df.fillna(0, inplace=True)
111
- db_name = '推广数据2'
112
- collection_name = f'{tg_name}'
112
+ if '省' in df.columns.tolist() and '场景名字' in df.columns.tolist() and '地域报表' in name:
113
+ db_name = '推广数据2'
114
+ collection_name = f'完整_{tg_name}'
115
+ else:
116
+ db_name = '推广数据2'
117
+ collection_name = f'{tg_name}'
113
118
  if name.endswith('.csv') and '超级直播' in name:
114
119
  # 超级直播
115
120
  df = pd.read_csv(os.path.join(root, name), encoding=encoding, header=0, na_filter=False)
@@ -516,6 +521,13 @@ class DatabaseUpdate:
516
521
  print(f'{name} 报表数据为空')
517
522
  continue
518
523
  df = df[df['缩略图'] != '合计']
524
+ elif name.endswith('.csv') and '营销概况_全站营销' in name:
525
+ df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=1, na_filter=False)
526
+ df = df[(df['日期'] != '日期') & (df['日期'] != '汇总') & (df['日期'] != '0') & (df['花费'] != '0') & (df['花费'] != '0.00')]
527
+ df['日期'] = df['日期'].apply(lambda x: f'{str(x)[:4]}-{str(x)[4:6]}-{str(x)[6:8]}')
528
+ df.drop("'当前时间'", axis=1, inplace=True)
529
+ df.rename(columns={'全站ROI': '全站roi'}, inplace=True)
530
+ df.insert(loc=1, column='产品线', value='全站营销')
519
531
 
520
532
  # 商品素材,必须保持放在最后处理
521
533
  elif name.endswith('xlsx'):
@@ -836,10 +848,11 @@ class DatabaseUpdate:
836
848
  def other_table(self, service_databases=[{'home_lx': 'mysql'}]):
837
849
  """ 上传 support 文件夹下的 主推商品.csv """
838
850
  support_file = set_support.SetSupport(dirname='support').dirname
839
- filename = '主推商品.csv'
851
+ filename = '主推商品.xlsx'
840
852
  if not os.path.isfile(os.path.join(support_file, filename)):
841
853
  return
842
- df = pd.read_csv(os.path.join(support_file, filename), encoding='utf-8_sig', header=0, na_filter=False)
854
+ # df = pd.read_csv(os.path.join(support_file, filename), encoding='utf-8_sig', header=0, na_filter=False)
855
+ df = pd.read_excel(os.path.join(support_file, filename), header=0)
843
856
  for service_database in service_databases:
844
857
  for service_name, database in service_database.items():
845
858
  username, password, host, port = get_myconf.select_config_values(
@@ -893,16 +906,16 @@ def upload_dir(path, db_name, collection_name, dbs={'mysql': True, 'mongodb': Tr
893
906
  host=host,
894
907
  port=port,
895
908
  )
896
- username, password, host, port = get_myconf.select_config_values(
897
- target_service='nas',
898
- database='mysql',
899
- )
900
- nas = mysql.MysqlUpload(
901
- username=username,
902
- password=password,
903
- host=host,
904
- port=port,
905
- )
909
+ # username, password, host, port = get_myconf.select_config_values(
910
+ # target_service='nas',
911
+ # database='mysql',
912
+ # )
913
+ # nas = mysql.MysqlUpload(
914
+ # username=username,
915
+ # password=password,
916
+ # host=host,
917
+ # port=port,
918
+ # )
906
919
 
907
920
  # 从本地 json 文件从读取 df 的数据类型信息
908
921
  df_to_json = df_types.DataTypes()
@@ -961,6 +974,7 @@ def one_file_to_mysql(file, db_name, table_name, target_service, database):
961
974
  username, password, host, port = get_myconf.select_config_values(target_service=target_service, database=database)
962
975
  filename = os.path.basename(file)
963
976
  df = pd.read_csv(file, encoding='utf-8_sig', header=0, na_filter=False, float_precision='high')
977
+ # df.replace(to_replace=[','], value='', regex=True, inplace=True) # 替换掉特殊字符
964
978
  m = mysql.MysqlUpload(username=username, password=password, host=host, port=port)
965
979
  m.df_to_mysql(df=df, db_name=db_name, table_name=table_name, filename=filename, df_sql=True, drop_duplicates=False,)
966
980
 
@@ -1044,22 +1058,17 @@ if __name__ == '__main__':
1044
1058
  print(username, password, host, port)
1045
1059
  # file_dir(one_file=False)
1046
1060
  # one_file_to_mysql(
1047
- # file='/Users/xigua/数据中心/原始文件2/推广报表/品销宝/账户/账户_明星店铺报表_2023-11-13_2023-12-12.csv',
1048
- # db_name='推广数据2',
1049
- # table_name='品销宝',
1050
- # target_service='home_lx',
1061
+ # file='/Users/xigua/数据中心/原始文件2/京东报表/JD推广_全站营销报表/2024-08/万里马箱包推广1_营销概况_全站营销_2024-08-19_2024-09-02.csv',
1062
+ # db_name='京东数据2',
1063
+ # table_name='推广数据_全站营销',
1064
+ # target_service='company',
1051
1065
  # database='mysql'
1052
1066
  # )
1053
- # db_name = '生意参谋2'
1054
- # table_name = '店铺来源_日数据'
1055
- # upload_dir(
1056
- # path='/Users/xigua/数据中心/原始文件2/生意参谋/流量来源',
1057
- # db_name=db_name,
1058
- # collection_name=table_name,
1059
- # dbs={'mysql': True, 'mongodb': False},
1060
- # )
1061
-
1062
- # test2()
1063
-
1064
- dp = DatabaseUpdate(path='')
1065
- dp.other_table(service_databases=[{'company': 'mysql'}])
1067
+ db_name = '推广数据2'
1068
+ table_name = '超级直播'
1069
+ upload_dir(
1070
+ path='/Users/xigua/数据中心/原始文件2/推广报表/超级直播',
1071
+ db_name=db_name,
1072
+ collection_name=table_name,
1073
+ dbs={'mysql': True, 'mongodb': False},
1074
+ )
@@ -13,6 +13,9 @@ import platform
13
13
  import getpass
14
14
  import json
15
15
  import os
16
+
17
+ from sqlalchemy.event import remove
18
+
16
19
  """
17
20
  程序用于下载数据库(调用 s_query.py 下载并清洗), 并对数据进行聚合清洗, 不会更新数据库信息;
18
21
 
@@ -189,6 +192,33 @@ class MysqlDatasQuery:
189
192
  )
190
193
  return df
191
194
 
195
+ def tg_cjzb(self):
196
+ start_date, end_date = self.months_data(num=self.months)
197
+ projection = {
198
+ '日期': 1,
199
+ '场景名字': 1,
200
+ '人群名字': 1,
201
+ '计划名字': 1,
202
+ '花费': 1,
203
+ '展现量': 1,
204
+ '进店量': 1,
205
+ '粉丝关注量': 1,
206
+ '观看次数': 1,
207
+ '总购物车数': 1,
208
+ '总成交笔数': 1,
209
+ '总成交金额': 1,
210
+ '直接成交笔数': 1,
211
+ '直接成交金额': 1,
212
+ }
213
+ df = self.download.data_to_df(
214
+ db_name='推广数据2',
215
+ table_name='超级直播',
216
+ start_date=start_date,
217
+ end_date=end_date,
218
+ projection=projection,
219
+ )
220
+ return df
221
+
192
222
  def idbm(self):
193
223
  """ 用生意经日数据制作商品 id 和编码对照表 """
194
224
  data_values = self.download.columns_to_list(
@@ -207,6 +237,7 @@ class MysqlDatasQuery:
207
237
  columns_name=['日期', '商品id', '商品白底图', '方版场景图'],
208
238
  )
209
239
  df = pd.DataFrame(data=data_values)
240
+
210
241
  return df
211
242
 
212
243
  def dplyd(self):
@@ -290,7 +321,28 @@ class MysqlDatasQuery:
290
321
  projection=projection,
291
322
  )
292
323
  return df
293
-
324
+ def jdqzyx(self):
325
+ start_date, end_date = self.months_data(num=self.months)
326
+ projection = {
327
+ '日期': 1,
328
+ '产品线': 1,
329
+ '花费': 1,
330
+ '全站roi': 1,
331
+ '全站交易额': 1,
332
+ '全站订单行': 1,
333
+ '全站订单成本': 1,
334
+ '全站费比': 1,
335
+ '核心位置展现量': 1,
336
+ '核心位置点击量': 1,
337
+ }
338
+ df = self.download.data_to_df(
339
+ db_name='京东数据2',
340
+ table_name='推广数据_全站营销',
341
+ start_date=start_date,
342
+ end_date=end_date,
343
+ projection=projection,
344
+ )
345
+ return df
294
346
  def sku_sales(self):
295
347
  start_date, end_date = self.months_data(num=self.months)
296
348
  projection = {
@@ -337,6 +389,7 @@ class GroupBy:
337
389
  self.output = os.path.join('数据中心/数据库导出')
338
390
  self.data_tgyj = {} # 推广综合聚合数据表
339
391
  self.data_jdtg = {} # 京东推广数据,聚合数据
392
+ self.sp_index_datas = pd.DataFrame() # 商品 id 索引表
340
393
 
341
394
  @staticmethod
342
395
  def try_except(func): # 在类内部定义一个异常处理方法
@@ -353,6 +406,7 @@ class GroupBy:
353
406
  def groupby(self, df, table_name, is_maximize=True):
354
407
  """
355
408
  self.is_maximize: 是否最大转化数据
409
+ table_name: 聚合数据库处的名称,不是原始数据库
356
410
  """
357
411
  if isinstance(df, pd.DataFrame):
358
412
  if len(df) == 0:
@@ -361,6 +415,7 @@ class GroupBy:
361
415
  else:
362
416
  print(f'query_data.groupby函数中 {table_name} 传入的 df 不是 dataframe 结构')
363
417
  return pd.DataFrame()
418
+ # print(table_name)
364
419
  if '宝贝主体报表' in table_name:
365
420
  df.rename(columns={
366
421
  '场景名字': '营销场景',
@@ -369,6 +424,7 @@ class GroupBy:
369
424
  '总成交笔数': '成交笔数',
370
425
  '总成交金额': '成交金额'
371
426
  }, inplace=True)
427
+ df.fillna(0, inplace=True)
372
428
  df = df.astype({
373
429
  '商品id': str,
374
430
  '花费': float,
@@ -381,7 +437,6 @@ class GroupBy:
381
437
  '直接成交笔数': int,
382
438
  '直接成交金额': float,
383
439
  }, errors='raise')
384
- df.fillna(0, inplace=True)
385
440
  if is_maximize:
386
441
  df = df.groupby(['日期', '营销场景', '商品id', '花费', '展现量', '点击量'], as_index=False).agg(
387
442
  **{'加购量': ('加购量', np.max),
@@ -419,6 +474,27 @@ class GroupBy:
419
474
  table_name: df_new,
420
475
  }
421
476
  )
477
+ # df_pic:商品排序索引表, 给 powerbi 中的主推款排序用的,(从上月1号到今天的总花费进行排序)
478
+ today = datetime.date.today()
479
+ last_month = today - datetime.timedelta(days=30)
480
+ if last_month.month == 12:
481
+ year_my = today.year - 1
482
+ else:
483
+ year_my = today.year
484
+ # 截取 从上月1日 至 今天的花费数据, 推广款式按此数据从高到低排序(商品图+排序)
485
+ df_pic = df.groupby(['日期', '商品id'], as_index=False).agg({'花费': 'sum'})
486
+ df_pic = df_pic[~df_pic['商品id'].isin([''])] # 指定列中删除包含空值的行
487
+ df_pic = df_pic[(df_pic['日期'] >= f'{year_my}-{last_month.month}-01')]
488
+ df_pic = df_pic.groupby(['商品id'], as_index=False).agg({'花费': 'sum'})
489
+ df_pic.sort_values('花费', ascending=False, ignore_index=True, inplace=True)
490
+ df_pic.reset_index(inplace=True)
491
+ df_pic['index'] = df_pic['index'] + 100
492
+ df_pic.rename(columns={'index': '商品索引'}, inplace=True)
493
+ df_pic_new = pd.merge(df, df_pic, how='left', on=['商品id'])
494
+ df_pic_new['商品索引'].fillna(1000, inplace=True)
495
+ self.sp_index_datas = df_pic_new[['商品id', '商品索引']]
496
+ return df
497
+ elif '商品索引表' in table_name:
422
498
  return df
423
499
  elif '人群报表' in table_name:
424
500
  df.rename(columns={
@@ -428,6 +504,7 @@ class GroupBy:
428
504
  '总成交笔数': '成交笔数',
429
505
  '总成交金额': '成交金额'
430
506
  }, inplace=True)
507
+ df.fillna(0, inplace=True)
431
508
  df = df.astype({
432
509
  '商品id': str,
433
510
  '花费': float,
@@ -439,7 +516,6 @@ class GroupBy:
439
516
  '直接成交笔数': int,
440
517
  '直接成交金额': float,
441
518
  }, errors='raise')
442
- df.fillna(0, inplace=True)
443
519
  if is_maximize:
444
520
  df = df.groupby(['日期', '营销场景', '商品id', '花费', '展现量', '点击量', '人群名字'], as_index=False).agg(
445
521
  **{'加购量': ('加购量', np.max),
@@ -469,6 +545,7 @@ class GroupBy:
469
545
  '总成交笔数': '成交笔数',
470
546
  '总成交金额': '成交金额'
471
547
  }, inplace=True)
548
+ df.fillna(0, inplace=True)
472
549
  df = df.astype({
473
550
  '商品id': str,
474
551
  '花费': float,
@@ -480,7 +557,6 @@ class GroupBy:
480
557
  '直接成交笔数': int,
481
558
  '直接成交金额': float,
482
559
  }, errors='raise')
483
- df.fillna(0, inplace=True)
484
560
  if is_maximize:
485
561
  df = df.groupby(['日期', '营销场景', '商品id', '词类型', '词名字/词包名字', '花费', '展现量', '点击量'], as_index=False).agg(
486
562
  **{'加购量': ('加购量', np.max),
@@ -502,6 +578,55 @@ class GroupBy:
502
578
  )
503
579
  df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
504
580
  return df
581
+ elif '超级直播' in table_name:
582
+ df.rename(columns={
583
+ '观看次数': '观看次数',
584
+ '总购物车数': '加购量',
585
+ '总成交笔数': '成交笔数',
586
+ '总成交金额': '成交金额',
587
+ '场景名字': '营销场景',
588
+ }, inplace=True)
589
+ df.fillna(0, inplace=True)
590
+ df = df.astype({
591
+ '花费': float,
592
+ # '点击量': int,
593
+ '加购量': int,
594
+ '成交笔数': int,
595
+ '成交金额': float,
596
+ '进店量': int,
597
+ '粉丝关注量': int,
598
+ '观看次数': int,
599
+ }, errors='raise')
600
+ if is_maximize:
601
+ df = df.groupby(['日期', '营销场景', '人群名字', '计划名字', '花费', '观看次数', '展现量'],
602
+ as_index=False).agg(
603
+ **{
604
+ '进店量': ('进店量', np.max),
605
+ '粉丝关注量': ('粉丝关注量', np.max),
606
+ '加购量': ('加购量', np.max),
607
+ '成交笔数': ('成交笔数', np.max),
608
+ '成交金额': ('成交金额', np.max),
609
+ '直接成交笔数': ('直接成交笔数', np.max),
610
+ '直接成交金额': ('直接成交金额', np.max),
611
+ }
612
+ )
613
+ else:
614
+ df = df.groupby(['日期', '营销场景', '人群名字', '计划名字', '花费', '观看次数', '展现量'],
615
+ as_index=False).agg(
616
+ **{
617
+ '进店量': ('进店量', np.min),
618
+ '粉丝关注量': ('粉丝关注量', np.min),
619
+ '加购量': ('加购量', np.min),
620
+ '成交笔数': ('成交笔数', np.min),
621
+ '成交金额': ('成交金额', np.min),
622
+ '直接成交笔数': ('直接成交笔数', np.min),
623
+ '直接成交金额': ('直接成交金额', np.min),
624
+ }
625
+ )
626
+ df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
627
+ # df.insert(loc=2, column='营销场景', value='超级直播') # df中插入新列
628
+ # df = df.loc[df['日期'].between(start_day, today)]
629
+ return df
505
630
  elif '宝贝指标' in table_name:
506
631
  """ 聚合时不可以加商家编码,编码有些是空白,有些是 0 """
507
632
  df['宝贝id'] = df['宝贝id'].astype(str)
@@ -639,7 +764,7 @@ class GroupBy:
639
764
  }
640
765
  )
641
766
  return df
642
- elif '京准通' in table_name:
767
+ elif '京东_京准通' in table_name and '全站营销' not in table_name:
643
768
  df = df.groupby(['日期', '产品线', '触发sku id', '跟单sku id', 'spu id', '花费', '展现数', '点击数'], as_index=False).agg(
644
769
  **{'直接订单行': ('直接订单行', np.max),
645
770
  '直接订单金额': ('直接订单金额', np.max),
@@ -656,6 +781,19 @@ class GroupBy:
656
781
  }
657
782
  )
658
783
  return df
784
+ elif '京东_京准通_全站营销' in table_name:
785
+ df = df.groupby(['日期', '产品线', '花费'], as_index=False).agg(
786
+ **{'全站roi': ('全站roi', np.max),
787
+ '全站交易额': ('全站交易额', np.max),
788
+ '全站订单行': ('全站订单行', np.max),
789
+ '全站订单成本': ('全站订单成本', np.max),
790
+ '全站费比': ('全站费比', np.max),
791
+ '核心位置展现量': ('核心位置展现量', np.max),
792
+ '核心位置点击量': ('核心位置点击量', np.max),
793
+ }
794
+ )
795
+ df = df[df['花费'] > 0]
796
+ return df
659
797
  elif '京东_sku_商品明细' in table_name:
660
798
  df = df[df['商品id'] != '合计']
661
799
  df = df.groupby(['日期', '商品id', '货号', '访客数', '成交客户数', '加购商品件数', '加购人数'],
@@ -849,9 +987,9 @@ def data_aggregation_one(service_databases=[{}], months=1):
849
987
  data_dict = [
850
988
  {
851
989
  '数据库名': '聚合数据',
852
- '集合名': '京东_sku_商品明细',
853
- '唯一主键': ['日期', '商品id', '成交单量'],
854
- '数据主体': sdq.sku_sales(),
990
+ '集合名': '天猫_超级直播',
991
+ '唯一主键': ['日期', '推广渠道', '营销场景', '花费'],
992
+ '数据主体': sdq.tg_cjzb(),
855
993
  },
856
994
  ]
857
995
  ######################################################
@@ -938,6 +1076,12 @@ def data_aggregation(service_databases=[{}], months=1):
938
1076
  '唯一主键': ['日期', '产品线', '触发sku id', '跟单sku id', '花费', ],
939
1077
  '数据主体': sdq.jdjzt(),
940
1078
  },
1079
+ {
1080
+ '数据库名': '聚合数据',
1081
+ '集合名': '京东_京准通_全站营销',
1082
+ '唯一主键': ['日期', '产品线', '花费'],
1083
+ '数据主体': sdq.jdqzyx(),
1084
+ },
941
1085
  {
942
1086
  '数据库名': '聚合数据',
943
1087
  '集合名': '京东_sku_商品明细',
@@ -956,10 +1100,27 @@ def data_aggregation(service_databases=[{}], months=1):
956
1100
  '唯一主键': ['日期', '推广渠道', '营销场景', '商品id', '花费', '词类型', '词名字/词包名字',],
957
1101
  '数据主体': sdq.tg_gjc(),
958
1102
  },
1103
+ {
1104
+ '数据库名': '聚合数据',
1105
+ '集合名': '天猫_超级直播',
1106
+ '唯一主键': ['日期', '推广渠道', '营销场景', '花费'],
1107
+ '数据主体': sdq.tg_cjzb(),
1108
+ },
959
1109
  ]
960
1110
  for items in data_dict: # 遍历返回结果
961
1111
  db_name, table_name, unique_key_list, df = items['数据库名'], items['集合名'], items['唯一主键'], items['数据主体']
962
1112
  df = g.groupby(df=df, table_name=table_name, is_maximize=True) # 2. 聚合数据
1113
+ if len(g.sp_index_datas) != 0:
1114
+ # 由推广主体报表,写入一个商品索引表,索引规则:从上月 1 号至今花费从高到低排序
1115
+ m.df_to_mysql(
1116
+ df=g.sp_index_datas,
1117
+ db_name='属性设置2',
1118
+ table_name='商品索引表',
1119
+ drop_duplicates=False,
1120
+ icm_update=['商品id'],
1121
+ service_database=service_database,
1122
+ )
1123
+ g.sp_index_datas = pd.DataFrame() # 重置,不然下个循环会继续刷入数据库
963
1124
  # g.as_csv(df=df, filename=table_name + '.csv') # 导出 csv
964
1125
  m.df_to_mysql(
965
1126
  df=df,
@@ -1002,7 +1163,7 @@ def data_aggregation(service_databases=[{}], months=1):
1002
1163
 
1003
1164
 
1004
1165
  if __name__ == '__main__':
1005
- data_aggregation(service_databases=[{'home_lx': 'mysql'}], months=1) # 正常的聚合所有数据
1006
- # data_aggregation_one(service_databases=[{'company': 'mysql'}], months=1) # 单独聚合某一个数据库,具体库进函数编辑
1166
+ # data_aggregation(service_databases=[{'home_lx': 'mysql'}], months=1) # 正常的聚合所有数据
1167
+ data_aggregation_one(service_databases=[{'home_lx': 'mysql'}], months=1) # 单独聚合某一个数据库,具体库进函数编辑
1007
1168
  # optimize_data.op_data(service_databases=[{'company': 'mysql'}], days=3650) # 立即启动对聚合数据的清理工作
1008
1169
 
mdbq/clean/data_clean.py CHANGED
@@ -135,6 +135,9 @@ class DataClean:
135
135
  tm_s_name = pattern[0] + shop_name + date_min + date_max
136
136
  new_root_p = pathlib.Path(self.source_path, '推广报表', tg_name) # 文件夹,未包括文件名
137
137
  df['日期'] = pd.to_datetime(df['日期'], format='%Y-%m-%d', errors='ignore')
138
+ if '省' in df.columns.tolist() and '场景名字' in df.columns.tolist():
139
+ new_root_p = pathlib.Path(self.source_path, '推广报表', f'完整_{tg_name}')
140
+ tm_s_name = f'完整_{tm_s_name}'
138
141
  self.save_to_csv(df, new_root_p, tm_s_name)
139
142
  if self.set_up_to_mogo:
140
143
  d.df_to_mongo(df=df, db_name='天猫数据1', collection_name=f'天猫_推广_{tg_name}')
@@ -662,6 +665,16 @@ class DataClean:
662
665
  m.df_to_mysql(df=df, db_name='天猫数据1', tabel_name='万相台_人群洞察')
663
666
 
664
667
  # ----------------------- 京东数据处理分界线 -----------------------
668
+ elif name.endswith('.csv') and '营销概况_全站营销' in name:
669
+ df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=1, na_filter=False)
670
+ df = df[(df['日期'] != '日期') & (df['日期'] != '汇总') & (df['日期'] != '0') & (df['花费'] != '0') & (df['花费'] != '0.00')]
671
+ df['日期'] = df['日期'].apply(lambda x: f'{str(x)[:4]}-{str(x)[4:6]}-{str(x)[6:8]}')
672
+ df.drop("'当前时间'", axis=1, inplace=True)
673
+ df.rename(columns={'全站ROI': '全站roi'}, inplace=True)
674
+ df.insert(loc=1, column='产品线', value='全站营销')
675
+ new_name = re.sub('至', '_', name)
676
+ self.save_to_csv(df, root, new_name)
677
+ os.remove(os.path.join(root, name))
665
678
  elif name.endswith('.xlsx') and '店铺来源_流量来源' in name:
666
679
  # 京东店铺来源
667
680
  if '按天' not in name:
@@ -1150,6 +1163,9 @@ class DataClean:
1150
1163
  elif name.endswith('.csv') and '付费广告_行业分析_行业大盘' in name:
1151
1164
  t_path = str(pathlib.Path(self.source_path, '京东报表/行业大盘_流量排行'))
1152
1165
  bib(t_path, _as_month=False)
1166
+ elif name.endswith('.csv') and '营销概况_全站营销' in name:
1167
+ t_path = str(pathlib.Path(self.source_path, '京东报表/JD推广_全站营销报表'))
1168
+ bib(t_path, _as_month=True)
1153
1169
  # 京东分界线 ------- 结束标记
1154
1170
 
1155
1171
  def attribute(self, path=None, _str='商品素材导出', ):
mdbq/mysql/mysql.py CHANGED
@@ -9,7 +9,7 @@ import warnings
9
9
  import pymysql
10
10
  import numpy as np
11
11
  import pandas as pd
12
- # from sqlalchemy import create_engine
12
+ from sqlalchemy import create_engine
13
13
  import os
14
14
  import calendar
15
15
  from mdbq.config import get_myconf
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 1.5.9
3
+ Version: 1.6.1
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=gvfaRx-LnzUKlp_kynSsvAnFGEccMKRxS5zPT6UReiw,60536
4
+ mdbq/aggregation/aggregation.py,sha256=Fb74FW6EgYGlFiTqcITgBEWeHUAv13A2VN5EIKojOxQ,61703
5
5
  mdbq/aggregation/df_types.py,sha256=oQJS2IBU3_IO6GMgbssHuC2yCjNnbta0QPGrFOwNLnU,7591
6
6
  mdbq/aggregation/mysql_types.py,sha256=DQYROALDiwjJzjhaJfIIdnsrNs11i5BORlj_v6bp67Y,11062
7
7
  mdbq/aggregation/optimize_data.py,sha256=u2Kl_MFtZueXJ57ycy4H2OhXD431RctUYJYCl637uT0,4176
8
- mdbq/aggregation/query_data.py,sha256=axYyNQPfKy3n4ztU4LwOhosdCKVfTxJc2Jgt6VU9_KM,48406
8
+ mdbq/aggregation/query_data.py,sha256=ChYHLlj8vaTg39bPP8IHETnNUHi4alo-BD2RPdmTqX8,56214
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/data_clean.py,sha256=BIzc1XCJjJaZyPT6DCRXRCCRwBaeC5_lER0aqYF1P3M,87778
12
+ mdbq/clean/data_clean.py,sha256=qJqM73cAsd1Kz7KlpCUMBPNfRrbfHeT05zRAH55B54g,89162
13
13
  mdbq/company/__init__.py,sha256=qz8F_GsP_pMB5PblgJAUAMjasuZbOEp3qQOCB39E8f0,21
14
14
  mdbq/company/copysh.py,sha256=WCZ92vCJAy6_ZFeOxWL-U9gArIpyga4xts-s1wKsspY,17268
15
15
  mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
@@ -24,7 +24,7 @@ mdbq/log/mylogger.py,sha256=oaT7Bp-Hb9jZt52seP3ISUuxVcI19s4UiqTeouScBO0,3258
24
24
  mdbq/mongo/__init__.py,sha256=SILt7xMtQIQl_m-ik9WLtJSXIVf424iYgCfE_tnQFbw,13
25
25
  mdbq/mongo/mongo.py,sha256=v9qvrp6p1ZRWuPpbSilqveiE0FEcZF7U5xUPI0RN4xs,31880
26
26
  mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
27
- mdbq/mysql/mysql.py,sha256=6hILGosp2fwTp9qgc9IMFTmNzAz0ZG8rznmPxXHY-eA,43331
27
+ mdbq/mysql/mysql.py,sha256=Fiha5MUqac36UUhLfOoRybhwbRftub9qUBi63wVz1Pc,43329
28
28
  mdbq/mysql/s_query.py,sha256=WD_pwgUA9pSQMvNKUxQoHKQf2LgkV8PyQV9Te3AJYs4,8175
29
29
  mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
30
30
  mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
@@ -35,7 +35,7 @@ mdbq/pbix/__init__.py,sha256=Trtfaynu9RjoTyLLYBN2xdRxTvm_zhCniUkVTAYwcjo,24
35
35
  mdbq/pbix/pbix_refresh.py,sha256=JUjKW3bNEyoMVfVfo77UhguvS5AWkixvVhDbw4_MHco,2396
36
36
  mdbq/pbix/refresh_all.py,sha256=tgy762608HMaXWynbOURIf2UVMuSPybzrDXQnOOcnZU,6102
37
37
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
38
- mdbq-1.5.9.dist-info/METADATA,sha256=q-5RlbPJbC9qZtR2VcJiASCXGEAaKkc6yIm7JSqZVCY,245
39
- mdbq-1.5.9.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
40
- mdbq-1.5.9.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
41
- mdbq-1.5.9.dist-info/RECORD,,
38
+ mdbq-1.6.1.dist-info/METADATA,sha256=RR3orjSkMDrCZdR_zDVwG-w2wz7Rn3ZTV38QktQcGbE,245
39
+ mdbq-1.6.1.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
40
+ mdbq-1.6.1.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
41
+ mdbq-1.6.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.1.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5