mdbq 4.0.48__py3-none-any.whl → 4.0.50__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
mdbq/__version__.py CHANGED
@@ -1 +1 @@
1
- VERSION = '4.0.48'
1
+ VERSION = '4.0.50'
@@ -220,6 +220,163 @@ class MysqlDatasQuery:
220
220
  self.download_manager = download_manager
221
221
  self.pf_datas = []
222
222
 
223
+ @upload_data_decorator()
224
+ def shops_concat(self, db_name='聚合数据', table_name='多店聚合_日报'):
225
+ shop_list = {
226
+ 'DS-WLM天猫旗舰店': '天猫', # e3
227
+ 'DS-WLM淘宝商城C店': 'c店',
228
+ 'DS-SJ天猫旗舰店': '圣积',
229
+ 'wanlima万里马箱包outlet店': '奥莱',
230
+ 'DS-WLM京东旗舰店': '京东pop',
231
+ '拼多多万里马箱包官方旗舰店': '拼多多_丹宁',
232
+ 'WLM-拼多多TOGO牛皮官方旗舰店': '拼多多_togo',
233
+ '万里马官方旗舰店': '天猫', # 平台
234
+ '万里马官方企业店': 'c店',
235
+ 'saintjack旗舰店': '圣积',
236
+ 'wanlima万里马箱包outlet店': '奥莱',
237
+ '万里马京东旗舰店': '京东pop',
238
+ '万里马箱包官方旗舰店': '拼多多_丹宁',
239
+ '万里马箱包皮具官方旗舰店': '拼多多_togo',
240
+ '万里马箱包outlet店': '奥莱', # 推广
241
+ '京东箱包旗舰店': '京东pop',
242
+ '京东自营旗舰店女包': '京东自营',
243
+ }
244
+ df_real_sales = self._get_real_sales(shop_list=shop_list)
245
+ df_shop_gmv = self._get_shop_gmv(shop_list=shop_list)
246
+ df_tg_data = self._get_tg_data(shop_list=shop_list)
247
+ df = df_shop_gmv.merge(df_real_sales, on=['日期', '店铺名称'], how='outer') # 平台数据合并销售数据
248
+ df = df.merge(df_tg_data, on=['日期', '店铺名称'], how='outer') # 合并推广数据
249
+ df.fillna(0, inplace=True)
250
+ set_typ = SET_TYP_DICT[f'{db_name}_{table_name}']
251
+ return df, {
252
+ 'db_name': db_name,
253
+ 'table_name': table_name,
254
+ 'set_typ': set_typ,
255
+ 'primary_keys': [], # 创建唯一主键
256
+ 'check_duplicate': False, # 检查重复数据
257
+ 'duplicate_columns': [], # 指定排重的组合键
258
+ 'update_on_duplicate': True, # 更新旧数据
259
+ 'allow_null': False, # 允许插入空值
260
+ 'partition_by': None, # 分表方式
261
+ 'partition_date_column': '日期', # 用于分表的日期列名,默认为'日期'
262
+ 'indexes': [], # 普通索引列
263
+ 'transaction_mode': 'batch', # 事务模式
264
+ 'unique_keys': [['日期', '店铺名称']], # 唯一约束列表
265
+ }
266
+
267
+ def _get_tg_data(self, db_name='聚合数据', table_name='多店推广场景_按日聚合', shop_list:dict=None):
268
+ start_date, end_date = self.months_data(num=self.months)
269
+ projection = ['日期', '店铺名称', '营销场景', '花费']
270
+ df = self.download_manager.data_to_df(
271
+ db_name=db_name,
272
+ table_name=table_name,
273
+ start_date=start_date,
274
+ end_date=end_date,
275
+ projection=projection,
276
+ )
277
+ if df.empty:
278
+ return pd.DataFrame(columns=['日期', '店铺名称', '实际消耗'])
279
+ df = df[(df['店铺名称'].isin(shop_list.keys()))]
280
+ df = df.astype({
281
+ '日期': 'datetime64[ns]',
282
+ '花费': 'float64',
283
+ })
284
+ df = df.groupby(['日期', '店铺名称'], as_index=False).agg({'花费': 'sum'}).rename(columns={'花费': '实际消耗'})
285
+ df['店铺名称'] = df['店铺名称'].map(shop_list)
286
+ return df
287
+
288
+ def _get_shop_gmv(self, db_name='生意参谋3', table_name='取数_店铺_整体流量', shop_list:dict=None):
289
+ """获取平台数据"""
290
+ start_date, end_date = self.months_data(num=self.months)
291
+ projection = ['日期', '店铺名称', '粒度', '维度', '数据周期', '访客数', '浏览量', '支付金额', '支付买家数', '支付件数']
292
+ df = self.download_manager.data_to_df(
293
+ db_name=db_name,
294
+ table_name=table_name,
295
+ start_date=start_date,
296
+ end_date=end_date,
297
+ projection=projection,
298
+ )
299
+ if len(df) == 0:
300
+ return pd.DataFrame(columns=['日期', '店铺名称', '访客数', '浏览量', '支付金额', '支付买家数', '支付件数'])
301
+ df = df[(df['店铺名称'].isin(shop_list.keys())) & (df['粒度'] == '店铺') & (df['维度'] == '整体流量') & (df['数据周期'] == '分日')]
302
+ df = df.astype({
303
+ '日期': 'datetime64[ns]',
304
+ '访客数': 'int64',
305
+ '浏览量': 'int64',
306
+ '支付金额': 'float64',
307
+ '支付买家数': 'int64',
308
+ '支付件数': 'int64'
309
+ })
310
+ df = df.groupby(['日期', '店铺名称'], as_index=False).agg({
311
+ '访客数': 'sum',
312
+ '浏览量': 'sum',
313
+ '支付金额': 'sum',
314
+ '支付买家数': 'sum',
315
+ '支付件数': 'sum'
316
+ })
317
+ df['店铺名称'] = df['店铺名称'].map(shop_list)
318
+ return df
319
+
320
+ def _get_real_sales(self, db_name='生意经3', table_name='零售明细统计', shop_list:dict=None):
321
+ """获取e3销售"""
322
+ start_date, end_date = self.months_data(num=self.months)
323
+ projection = ['验收日期', '商店名称', '商品代码', '金额']
324
+ __res = []
325
+ for year in range(2025, datetime.datetime.today().year+1):
326
+ df = self.download_manager.data_to_df(
327
+ db_name=db_name,
328
+ table_name=f'{table_name}_{year}',
329
+ start_date=start_date,
330
+ end_date=end_date,
331
+ projection=projection,
332
+ )
333
+ __res.append(df)
334
+ df_default = pd.DataFrame(columns=['日期', '店铺名称', '实际营收'])
335
+ if len(__res) == 0:
336
+ return df_default
337
+ df = pd.concat(__res, ignore_index=True)
338
+ if df.empty:
339
+ return df_default
340
+ df = df[(df['商品代码'] != '20160222') & (df['商店名称'].isin(shop_list.keys()))] # 剔除补单数据
341
+ if df.empty:
342
+ return df_default
343
+ df['商店名称'] = df['商店名称'].map(shop_list)
344
+ df = df.astype({
345
+ '验收日期': 'datetime64[ns]', '金额': 'float64'
346
+ }).groupby(
347
+ ['验收日期', '商店名称'], as_index=False
348
+ ).agg({
349
+ '金额': 'sum'
350
+ }).rename(
351
+ columns={'商店名称': '店铺名称', '验收日期': '日期', '金额': '实际营收'}
352
+ )
353
+ df_ziying_sales = self._get_ziying_sales(shop_list=shop_list)
354
+ df = pd.concat([df, df_ziying_sales], ignore_index=True) # e3 合并京东自营业绩
355
+ return df
356
+
357
+ def _get_ziying_sales(self, db_name='京东数据3', table_name='京东自营_vc品牌业绩', shop_list:dict=None):
358
+ """获取京东自营业绩"""
359
+ start_date, end_date = self.months_data(num=self.months)
360
+ projection = ['日期', '店铺名称', '收入']
361
+ df = self.download_manager.data_to_df(
362
+ db_name=db_name,
363
+ table_name=table_name,
364
+ start_date=start_date,
365
+ end_date=end_date,
366
+ projection=projection,
367
+ )
368
+ if df.empty:
369
+ return pd.DataFrame(columns=['日期', '店铺名称', '收入'])
370
+ df = df[(df['店铺名称'].isin(shop_list.keys()))]
371
+ df = df.astype({
372
+ '日期': 'datetime64[ns]',
373
+ '收入': 'float64'
374
+ })
375
+ df = df.groupby(['日期', '店铺名称'], as_index=False).agg({'收入': 'sum'}).rename(columns={'收入': '实际营收'})
376
+ df['店铺名称'] = df['店铺名称'].map(shop_list)
377
+ return df
378
+
379
+
223
380
  # @error_handler.log_on_exception(logger=logger)
224
381
  def tg_wxt(self, db_name='聚合数据', table_name='天猫_主体报表', is_maximize=True):
225
382
  start_date, end_date = self.months_data(num=self.months)
@@ -3237,5 +3394,5 @@ if __name__ == '__main__':
3237
3394
  pool_size=10,
3238
3395
  )
3239
3396
  sdq = MysqlDatasQuery(download_manager=download_manager)
3240
- sdq.months = 3
3241
- sdq.item_up(db_name='聚合数据', table_name='淘宝店铺货品')
3397
+ sdq.months = 1
3398
+ sdq.shops_concat(db_name='聚合数据', table_name='多店聚合_日报')
@@ -569,7 +569,19 @@ SET_TYP_DICT = {
569
569
  'weekname': 'varchar(50)',
570
570
  '索引': 'int',
571
571
  '月索引': 'int',
572
- }
572
+ },
573
+ '聚合数据_多店聚合_日报': {
574
+ '日期': 'date',
575
+ '店铺名称': 'varchar(255)',
576
+ '实际营收': 'decimal(12,2)',
577
+ '支付金额': 'decimal(12,2)',
578
+ '访客数': 'int',
579
+ '浏览量': 'int',
580
+ '支付买家数': 'int',
581
+ '支付件数': 'int',
582
+ '实际消耗': 'decimal(10,2)',
583
+ '推广成交金额': 'decimal(12,2)',
584
+ },
573
585
  }
574
586
 
575
587
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.0.48
3
+ Version: 4.0.50
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,8 +1,8 @@
1
1
  mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
2
- mdbq/__version__.py,sha256=YtPpTN35IlgIZmXk24wjyoda_hVvM76IxursUi5y0aA,18
2
+ mdbq/__version__.py,sha256=OHIJ4KFvV5c7uJSJYHg-7BX1PWBg2YHeYGePH4I_gaA,18
3
3
  mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
4
- mdbq/aggregation/query_data.py,sha256=3PMbQxuzXsC6F7OrRpgQbUw0zqkiunfa_oms8_eqRnQ,149451
5
- mdbq/aggregation/set_typ_dict.py,sha256=hyNPWd_deTCLTCI7M5KcqxMfEw42lLNX0uTZuggc5EA,20671
4
+ mdbq/aggregation/query_data.py,sha256=Y9R5TF-C6B7cEoJzIhOTrjg01yrxk4IT_51_hn6eCwE,157224
5
+ mdbq/aggregation/set_typ_dict.py,sha256=Cax8i6My6xuTC8l-eB0AJ-kOZQwPRcZj-P9dhiiaTj0,21078
6
6
  mdbq/log/__init__.py,sha256=Mpbrav0s0ifLL7lVDAuePEi1hJKiSHhxcv1byBKDl5E,15
7
7
  mdbq/log/mylogger.py,sha256=kPe3wsQNaB1slfX-Z7VMqzZoMoqPfc7ylYXZDBeFzzI,24945
8
8
  mdbq/myconf/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
@@ -26,7 +26,7 @@ mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
26
26
  mdbq/redis/getredis.py,sha256=vpBuNc22uj9Vr-_Dh25_wpwWM1e-072EAAIBdB_IpL0,23494
27
27
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
28
28
  mdbq/spider/aikucun.py,sha256=XptHjGzbout9IYzWAOQUpMMV5qEgLTU8pL1ZGt8oNEA,21868
29
- mdbq-4.0.48.dist-info/METADATA,sha256=deUcIRfhCtouE8evBSJ3fOO8n068KGItchm_pJaAxGs,364
30
- mdbq-4.0.48.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
31
- mdbq-4.0.48.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
32
- mdbq-4.0.48.dist-info/RECORD,,
29
+ mdbq-4.0.50.dist-info/METADATA,sha256=79q02qCKgU3VUp9FDPHtYGk5uIpgZY5_CNL1q5hTqhU,364
30
+ mdbq-4.0.50.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
31
+ mdbq-4.0.50.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
32
+ mdbq-4.0.50.dist-info/RECORD,,
File without changes