mdbq 1.7.2__py3-none-any.whl → 1.7.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.
@@ -912,7 +912,7 @@ def upload_dir(path, db_name, collection_name, dbs={'mysql': True, 'mongodb': Tr
912
912
 
913
913
  if dbs['mysql']:
914
914
  username, password, host, port = get_myconf.select_config_values(
915
- target_service='home_lx',
915
+ target_service='company',
916
916
  database='mysql',
917
917
  )
918
918
  m = mysql.MysqlUpload(
@@ -1082,10 +1082,10 @@ if __name__ == '__main__':
1082
1082
  # database='mysql'
1083
1083
  # )
1084
1084
 
1085
- db_name = '京东数据2'
1086
- table_name = '推广数据_关键词报表'
1085
+ db_name = '推广数据2'
1086
+ table_name = '超级直播'
1087
1087
  upload_dir(
1088
- path='/Users/xigua/数据中心/原始文件2/京东报表/JD推广_关键词报表',
1088
+ path='/Users/xigua/数据中心/原始文件2/推广报表/超级直播',
1089
1089
  db_name=db_name,
1090
1090
  collection_name=table_name,
1091
1091
  dbs={'mysql': True, 'mongodb': False},
@@ -219,6 +219,31 @@ class MysqlDatasQuery:
219
219
  )
220
220
  return df
221
221
 
222
+ def pxb_zh(self):
223
+ start_date, end_date = self.months_data(num=self.months)
224
+ projection = {
225
+ '日期': 1,
226
+ '报表类型': 1,
227
+ '搜索量': 1,
228
+ '搜索访客数': 1,
229
+ '展现量': 1,
230
+ # '自然流量增量曝光': 1,
231
+ '消耗': 1,
232
+ '点击量': 1,
233
+ '宝贝加购数': 1,
234
+ '成交笔数': 1,
235
+ '成交金额': 1,
236
+ # '成交访客数': 1
237
+ }
238
+ df = self.download.data_to_df(
239
+ db_name='推广数据2',
240
+ table_name='品销宝',
241
+ start_date=start_date,
242
+ end_date=end_date,
243
+ projection=projection,
244
+ )
245
+ return df
246
+
222
247
  def idbm(self):
223
248
  """ 用生意经日数据制作商品 id 和编码对照表 """
224
249
  data_values = self.download.columns_to_list(
@@ -342,6 +367,39 @@ class MysqlDatasQuery:
342
367
  projection=projection,
343
368
  )
344
369
  return df
370
+ def jd_gjc(self):
371
+ start_date, end_date = self.months_data(num=self.months)
372
+ projection = {
373
+ '日期': 1,
374
+ '产品线': 1,
375
+ '计划类型': 1,
376
+ '计划id': 1,
377
+ '推广计划': 1,
378
+ '搜索词': 1,
379
+ '关键词': 1,
380
+ '关键词购买类型': 1,
381
+ '广告定向类型': 1,
382
+ '花费': 1,
383
+ '展现数': 1,
384
+ '点击数': 1,
385
+ '直接订单行': 1,
386
+ '直接订单金额': 1,
387
+ '总订单行': 1,
388
+ '总订单金额': 1,
389
+ '总加购数': 1,
390
+ '下单新客数_去重': 1,
391
+ '领券数': 1,
392
+ '商品关注数': 1,
393
+ '店铺关注数': 1
394
+ }
395
+ df = self.download.data_to_df(
396
+ db_name='京东数据2',
397
+ table_name='推广数据_关键词报表',
398
+ start_date=start_date,
399
+ end_date=end_date,
400
+ projection=projection,
401
+ )
402
+ return df
345
403
  def sku_sales(self):
346
404
  start_date, end_date = self.months_data(num=self.months)
347
405
  projection = {
@@ -409,7 +467,12 @@ class GroupBy:
409
467
  """
410
468
  if isinstance(df, pd.DataFrame):
411
469
  if len(df) == 0:
412
- print(f' query_data.groupby函数中 {table_name} 传入的 df 数据长度为0')
470
+ print(f' query_data.groupby 函数中 {table_name} 传入的 df 数据长度为0')
471
+ self.data_tgyj.update(
472
+ {
473
+ table_name: pd.DataFrame(),
474
+ }
475
+ )
413
476
  return pd.DataFrame()
414
477
  else:
415
478
  print(f'query_data.groupby函数中 {table_name} 传入的 df 不是 dataframe 结构')
@@ -541,7 +604,7 @@ class GroupBy:
541
604
  )
542
605
  df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
543
606
  return df
544
- elif '关键词报表' in table_name:
607
+ elif '天猫_关键词报表' in table_name:
545
608
  df.rename(columns={
546
609
  '场景名字': '营销场景',
547
610
  '宝贝id': '商品id',
@@ -581,6 +644,8 @@ class GroupBy:
581
644
  }
582
645
  )
583
646
  df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
647
+ df['是否品牌词'] = df['词名字/词包名字'].str.contains('万里马|wanlima', regex=True)
648
+ df['是否品牌词'] = df['是否品牌词'].apply(lambda x: '品牌词' if x else '')
584
649
  return df
585
650
  elif '天猫_超级直播' in table_name:
586
651
  df.rename(columns={
@@ -590,6 +655,7 @@ class GroupBy:
590
655
  '总成交金额': '成交金额',
591
656
  '场景名字': '营销场景',
592
657
  }, inplace=True)
658
+ df['营销场景'] = '超级直播'
593
659
  df.fillna(0, inplace=True)
594
660
  df = df.astype({
595
661
  '花费': float,
@@ -648,6 +714,63 @@ class GroupBy:
648
714
  }
649
715
  )
650
716
  return df
717
+ elif '天猫_品销宝账户报表' in table_name:
718
+ df = df[df['报表类型'] == '账户']
719
+ df.fillna(value=0, inplace=True)
720
+ df.rename(columns={
721
+ '消耗': '花费',
722
+ '宝贝加购数': '加购量',
723
+ '搜索量': '品牌搜索量',
724
+ '搜索访客数': '品牌搜索人数'
725
+ }, inplace=True)
726
+ df = df.astype({
727
+ '花费': float,
728
+ '展现量': int,
729
+ '点击量': int,
730
+ '加购量': int,
731
+ '成交笔数': int,
732
+ '成交金额': float,
733
+ '品牌搜索量': int,
734
+ '品牌搜索人数': int,
735
+ }, errors='raise')
736
+ if is_maximize:
737
+ df = df.groupby(['日期', '报表类型', '花费', '展现量', '点击量'], as_index=False).agg(
738
+ **{
739
+ '加购量': ('加购量', np.max),
740
+ '成交笔数': ('成交笔数', np.max),
741
+ '成交金额': ('成交金额', np.max),
742
+ '品牌搜索量': ('品牌搜索量', np.max),
743
+ '品牌搜索人数': ('品牌搜索人数', np.max),
744
+ }
745
+ )
746
+ else:
747
+ df = df.groupby(['日期', '报表类型', '花费', '展现量', '点击量'], as_index=False).agg(
748
+ **{
749
+ '加购量': ('加购量', np.min),
750
+ '成交笔数': ('成交笔数', np.min),
751
+ '成交金额': ('成交金额', np.min),
752
+ '品牌搜索量': ('品牌搜索量', np.min),
753
+ '品牌搜索人数': ('品牌搜索人数', np.min),
754
+ }
755
+ )
756
+ df.insert(loc=1, column='推广渠道', value='品销宝') # df中插入新列
757
+ df.insert(loc=2, column='营销场景', value='品销宝') # df中插入新列
758
+ df_new = df.groupby(['日期', '推广渠道', '营销场景'], as_index=False).agg(
759
+ **{
760
+ '花费': ('花费', np.sum),
761
+ '展现量': ('展现量', np.sum),
762
+ '点击量': ('点击量', np.sum),
763
+ '加购量': ('加购量', np.sum),
764
+ '成交笔数': ('成交笔数', np.sum),
765
+ '成交金额': ('成交金额', np.sum)
766
+ }
767
+ )
768
+ self.data_tgyj.update(
769
+ {
770
+ table_name: df_new,
771
+ }
772
+ )
773
+ return df
651
774
  elif '宝贝指标' in table_name:
652
775
  """ 聚合时不可以加商家编码,编码有些是空白,有些是 0 """
653
776
  df['宝贝id'] = df['宝贝id'].astype(str)
@@ -832,6 +955,29 @@ class GroupBy:
832
955
  }
833
956
  )
834
957
  return df
958
+ elif '京东_关键词报表' in table_name:
959
+ df_lin = df[['计划id', '推广计划']]
960
+ df_lin.drop_duplicates(subset=['计划id'], keep='last', inplace=True, ignore_index=True)
961
+ df = df.groupby(['日期', '产品线', '计划类型', '计划id', '搜索词', '关键词', '关键词购买类型', '广告定向类型', '展现数', '点击数', '花费'],
962
+ as_index=False).agg(
963
+ **{
964
+ '直接订单行': ('直接订单行', np.max),
965
+ '直接订单金额': ('直接订单金额', np.max),
966
+ '总订单行': ('总订单行', np.max),
967
+ '总订单金额': ('总订单金额', np.max),
968
+ '总加购数': ('总加购数', np.max),
969
+ '下单新客数': ('下单新客数_去重', np.max),
970
+ '领券数': ('领券数', np.max),
971
+ '商品关注数': ('商品关注数', np.max),
972
+ '店铺关注数': ('店铺关注数', np.max)
973
+ }
974
+ )
975
+ df = pd.merge(df, df_lin, how='left', left_on='计划id', right_on='计划id')
976
+ df['k_是否品牌词'] = df['关键词'].str.contains('万里马|wanlima', regex=True)
977
+ df['k_是否品牌词'] = df['k_是否品牌词'].apply(lambda x: '品牌词' if x else '')
978
+ df['s_是否品牌词'] = df['搜索词'].str.contains('万里马|wanlima', regex=True)
979
+ df['s_是否品牌词'] = df['s_是否品牌词'].apply(lambda x: '品牌词' if x else '')
980
+ return df
835
981
  else:
836
982
  print(f'<{table_name}>: Groupby 类尚未配置,数据为空')
837
983
  return pd.DataFrame({})
@@ -874,7 +1020,7 @@ class GroupBy:
874
1020
  return df
875
1021
 
876
1022
  def performance_concat(self, bb_tg=True):
877
- tg, zb = self.data_tgyj['天猫汇总表调用'], self.data_tgyj['天猫_超级直播']
1023
+ tg, zb, pxb = self.data_tgyj['天猫汇总表调用'], self.data_tgyj['天猫_超级直播'], self.data_tgyj['天猫_品销宝账户报表']
878
1024
  zb.rename(columns={
879
1025
  '观看次数': '点击量',
880
1026
  }, inplace=True)
@@ -902,7 +1048,7 @@ class GroupBy:
902
1048
  '直接成交金额': float,
903
1049
  '自然流量曝光量': int,
904
1050
  }, errors='raise')
905
- df = pd.concat([tg, zb], axis=0, ignore_index=True)
1051
+ df = pd.concat([tg, zb, pxb], axis=0, ignore_index=True)
906
1052
  df.fillna(0, inplace=True) # concat 之后要填充空值
907
1053
  df = df.astype(
908
1054
  {
@@ -1051,10 +1197,10 @@ def data_aggregation_one(service_databases=[{}], months=1):
1051
1197
  ######################################################
1052
1198
  data_dict = [
1053
1199
  {
1054
- '数据库名': '聚合数据',
1055
- '集合名': '天猫_超级直播',
1056
- '唯一主键': ['日期', '推广渠道', '营销场景', '花费'],
1057
- '数据主体': sdq.tg_cjzb(),
1200
+ '数据库名': '聚合数据', # 清洗完回传的目的地数据库
1201
+ '集合名': '天猫_推广汇总', # 清洗完回传的数据表名
1202
+ '唯一主键': ['日期', '商品id'],
1203
+ '数据主体': sdq.jd_gjc(),
1058
1204
  },
1059
1205
  ]
1060
1206
  ######################################################
@@ -1069,8 +1215,9 @@ def data_aggregation_one(service_databases=[{}], months=1):
1069
1215
  df=df,
1070
1216
  db_name=db_name,
1071
1217
  table_name=table_name,
1218
+ df_sql=True,
1072
1219
  drop_duplicates=False,
1073
- icm_update=unique_key_list,
1220
+ # icm_update=unique_key_list,
1074
1221
  service_database=service_database,
1075
1222
  ) # 3. 回传数据库
1076
1223
 
@@ -1094,8 +1241,8 @@ def data_aggregation(service_databases=[{}], months=1):
1094
1241
  # 从数据库中获取数据, 返回包含 df 数据的字典
1095
1242
  data_dict = [
1096
1243
  {
1097
- '数据库名': '聚合数据',
1098
- '集合名': '天猫_主体报表',
1244
+ '数据库名': '聚合数据', # 清洗完回传的目的地数据库
1245
+ '集合名': '天猫_主体报表', # 清洗完回传的数据表名
1099
1246
  '唯一主键': ['日期', '推广渠道', '营销场景', '商品id', '花费'],
1100
1247
  '数据主体': sdq.tg_wxt(),
1101
1248
  },
@@ -1171,6 +1318,18 @@ def data_aggregation(service_databases=[{}], months=1):
1171
1318
  '唯一主键': ['日期', '推广渠道', '营销场景', '花费'],
1172
1319
  '数据主体': sdq.tg_cjzb(),
1173
1320
  },
1321
+ {
1322
+ '数据库名': '聚合数据',
1323
+ '集合名': '京东_关键词报表',
1324
+ '唯一主键': ['日期', '产品线', '搜索词', '关键词', '展现数', '花费'],
1325
+ '数据主体': sdq.jd_gjc(),
1326
+ },
1327
+ {
1328
+ '数据库名': '聚合数据',
1329
+ '集合名': '天猫_品销宝账户报表',
1330
+ '唯一主键': ['日期', '报表类型'],
1331
+ '数据主体': sdq.pxb_zh(),
1332
+ },
1174
1333
  ]
1175
1334
  for items in data_dict: # 遍历返回结果
1176
1335
  db_name, table_name, unique_key_list, df = items['数据库名'], items['集合名'], items['唯一主键'], items['数据主体']
@@ -1181,6 +1340,7 @@ def data_aggregation(service_databases=[{}], months=1):
1181
1340
  df=g.sp_index_datas,
1182
1341
  db_name='属性设置2',
1183
1342
  table_name='商品索引表',
1343
+ # df_sql=True,
1184
1344
  drop_duplicates=False,
1185
1345
  icm_update=['商品id'],
1186
1346
  service_database=service_database,
@@ -1191,8 +1351,9 @@ def data_aggregation(service_databases=[{}], months=1):
1191
1351
  df=df,
1192
1352
  db_name=db_name,
1193
1353
  table_name=table_name,
1354
+ df_sql=True,
1194
1355
  drop_duplicates=False,
1195
- icm_update=unique_key_list,
1356
+ # icm_update=unique_key_list,
1196
1357
  service_database=service_database,
1197
1358
  ) # 3. 回传数据库
1198
1359
  res = g.performance(bb_tg=True) # 盈亏表,依赖其他表,单独做
@@ -1200,6 +1361,7 @@ def data_aggregation(service_databases=[{}], months=1):
1200
1361
  df=res,
1201
1362
  db_name='聚合数据',
1202
1363
  table_name='_全店商品销售',
1364
+ # df_sql=True,
1203
1365
  drop_duplicates=False,
1204
1366
  icm_update=['日期', '商品id'], # 设置唯一主键
1205
1367
  service_database=service_database,
@@ -1209,6 +1371,7 @@ def data_aggregation(service_databases=[{}], months=1):
1209
1371
  df=res,
1210
1372
  db_name='聚合数据',
1211
1373
  table_name='_推广商品销售',
1374
+ # df_sql=True,
1212
1375
  drop_duplicates=False,
1213
1376
  icm_update=['日期', '商品id'], # 设置唯一主键
1214
1377
  service_database=service_database,
@@ -1219,6 +1382,7 @@ def data_aggregation(service_databases=[{}], months=1):
1219
1382
  df=res,
1220
1383
  db_name='聚合数据',
1221
1384
  table_name='天猫_推广汇总',
1385
+ # df_sql=True,
1222
1386
  drop_duplicates=False,
1223
1387
  icm_update=['日期', '商品id'], # 设置唯一主键
1224
1388
  service_database=service_database,
@@ -1230,6 +1394,7 @@ def data_aggregation(service_databases=[{}], months=1):
1230
1394
  df=res,
1231
1395
  db_name='聚合数据',
1232
1396
  table_name='_京东_推广商品销售',
1397
+ # df_sql=True,
1233
1398
  drop_duplicates=False,
1234
1399
  icm_update=['日期', '跟单sku id', '货号', '花费'], # 设置唯一主键
1235
1400
  service_database=service_database,
@@ -1245,7 +1410,7 @@ def main():
1245
1410
 
1246
1411
 
1247
1412
  if __name__ == '__main__':
1248
- data_aggregation(service_databases=[{'company': 'mysql'}], months=24) # 正常的聚合所有数据
1413
+ data_aggregation(service_databases=[{'home_lx': 'mysql'}], months=1) # 正常的聚合所有数据
1249
1414
  # data_aggregation_one(service_databases=[{'company': 'mysql'}], months=1) # 单独聚合某一个数据库,具体库进函数编辑
1250
1415
  # optimize_data.op_data(service_databases=[{'company': 'mysql'}], days=3650) # 立即启动对聚合数据的清理工作
1251
1416
 
mdbq/mysql/mysql.py CHANGED
@@ -209,7 +209,7 @@ class MysqlUpload:
209
209
  cols_exist = [col['COLUMN_NAME'] for col in columns] # 数据表的所有列, 返回 list
210
210
  update_col = [item for item in cols_exist if item not in icm_update and item != 'id'] # 除了主键外的其他列
211
211
 
212
- # unique_keys 示例: `日期`, `推广费余额`
212
+ # unique_keys 示例: `日期`, `余额`
213
213
  unique_keys = ', '.join(f"`{item}`" for item in update_col) # 列名需要转义
214
214
  condition = []
215
215
  for up_col in icm_update:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 1.7.2
3
+ Version: 1.7.4
4
4
  Home-page: https://pypi.org/project/mdbsql
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,11 +1,11 @@
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=cydwGivXyoLzvDrbhn8BR-rBRLnY8VjJK9R16pVkR4s,62979
4
+ mdbq/aggregation/aggregation.py,sha256=65nMN39uj3eyWjN3WviOi_8MDrT22Of-mnSE8dcCkuU,62951
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=N7y9bzmoK3hnurpA2hbYSJ6IMznj3D7NzmrlQo5gGg0,59148
8
+ mdbq/aggregation/query_data.py,sha256=Nh4NVeVaq9mS1su3IIyet59HVHLMY10peSlvpbyimx4,66792
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
@@ -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=Fiha5MUqac36UUhLfOoRybhwbRftub9qUBi63wVz1Pc,43329
27
+ mdbq/mysql/mysql.py,sha256=cIK_GI6Ggb9LsxsvVUv0AviD7kdyCumk_eQ9MSOwsms,43320
28
28
  mdbq/mysql/s_query.py,sha256=fIQvQKPyV7rvSUuxVWXv9S5FmCnIM4GHKconE1Zn5BA,8378
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.7.2.dist-info/METADATA,sha256=oY3Kodabng2WfHmpryLIpCIry7d6w4Bt-F5KwwIzNfs,245
39
- mdbq-1.7.2.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
40
- mdbq-1.7.2.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
41
- mdbq-1.7.2.dist-info/RECORD,,
38
+ mdbq-1.7.4.dist-info/METADATA,sha256=pkkDPmLG_aKCdRwFy_gK33iGW5Dy-lAo21AU8VaziMs,245
39
+ mdbq-1.7.4.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
40
+ mdbq-1.7.4.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
41
+ mdbq-1.7.4.dist-info/RECORD,,
File without changes