mdbq 2.7.0__py3-none-any.whl → 2.7.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mdbq/aggregation/aggregation.py +27 -33
- mdbq/aggregation/mysql_types.py +83 -90
- mdbq/aggregation/optimize_data.py +30 -52
- mdbq/aggregation/query_data.py +257 -296
- mdbq/clean/clean_upload.py +126 -201
- mdbq/company/copysh.py +1 -2
- mdbq/config/myconfig.py +30 -0
- mdbq/config/products.py +31 -34
- mdbq/mysql/mysql.py +12 -42
- mdbq/mysql/s_query.py +4 -3
- {mdbq-2.7.0.dist-info → mdbq-2.7.2.dist-info}/METADATA +2 -2
- {mdbq-2.7.0.dist-info → mdbq-2.7.2.dist-info}/RECORD +14 -13
- {mdbq-2.7.0.dist-info → mdbq-2.7.2.dist-info}/WHEEL +1 -1
- {mdbq-2.7.0.dist-info → mdbq-2.7.2.dist-info}/top_level.txt +0 -0
mdbq/aggregation/query_data.py
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
# -*- coding: UTF-8 –*-
|
2
2
|
import re
|
3
|
-
|
4
|
-
|
3
|
+
import socket
|
5
4
|
from mdbq.mongo import mongo
|
6
5
|
from mdbq.mysql import mysql
|
7
6
|
from mdbq.mysql import s_query
|
8
7
|
from mdbq.aggregation import optimize_data
|
9
|
-
from mdbq.config import
|
8
|
+
from mdbq.config import myconfig
|
10
9
|
import datetime
|
11
10
|
from dateutil.relativedelta import relativedelta
|
12
11
|
import pandas as pd
|
@@ -27,6 +26,21 @@ import os
|
|
27
26
|
|
28
27
|
"""
|
29
28
|
|
29
|
+
if socket.gethostname().lower() in ['xigua_lx', 'xigua1', 'macbook pro']:
|
30
|
+
conf = myconfig.main()
|
31
|
+
conf_data = conf['Windows']['xigua_lx']['mysql']['local']
|
32
|
+
username, password, host, port = conf_data['username'], conf_data['password'], conf_data['host'], conf_data['port']
|
33
|
+
service_database = {'xigua_lx': 'mysql'}
|
34
|
+
elif socket.gethostname().lower() in ['company', 'Mac2.local']:
|
35
|
+
conf = myconfig.main()
|
36
|
+
conf_data = conf['Windows']['company']['mysql']['local']
|
37
|
+
username, password, host, port = conf_data['username'], conf_data['password'], conf_data['host'], conf_data['port']
|
38
|
+
service_database = {'company': 'mysql'}
|
39
|
+
if not username:
|
40
|
+
print(f'找不到主机:')
|
41
|
+
|
42
|
+
|
43
|
+
|
30
44
|
|
31
45
|
class MongoDatasQuery:
|
32
46
|
"""
|
@@ -38,7 +52,6 @@ class MongoDatasQuery:
|
|
38
52
|
# target_service 从哪个服务器下载数据
|
39
53
|
self.months = 0 # 下载几个月数据, 0 表示当月, 1 是上月 1 号至今
|
40
54
|
# 实例化一个下载类
|
41
|
-
username, password, host, port = get_myconf.select_config_values(target_service=target_service, database='mongodb')
|
42
55
|
self.download = mongo.DownMongo(username=username, password=password, host=host, port=port, save_path=None)
|
43
56
|
|
44
57
|
def tg_wxt(self):
|
@@ -86,11 +99,10 @@ class MysqlDatasQuery:
|
|
86
99
|
"""
|
87
100
|
从数据库中下载数据
|
88
101
|
"""
|
89
|
-
def __init__(self
|
102
|
+
def __init__(self):
|
90
103
|
# target_service 从哪个服务器下载数据
|
91
104
|
self.months = 0 # 下载几个月数据, 0 表示当月, 1 是上月 1 号至今
|
92
105
|
# 实例化一个下载类
|
93
|
-
username, password, host, port = get_myconf.select_config_values(target_service=target_service, database='mysql')
|
94
106
|
self.download = s_query.QueryDatas(username=username, password=password, host=host, port=port)
|
95
107
|
|
96
108
|
@staticmethod
|
@@ -355,8 +367,8 @@ class MysqlDatasQuery:
|
|
355
367
|
projection = {
|
356
368
|
'日期': 1,
|
357
369
|
'产品线': 1,
|
358
|
-
'触发
|
359
|
-
'跟单
|
370
|
+
'触发sku_id': 1,
|
371
|
+
'跟单sku_id': 1,
|
360
372
|
'花费': 1,
|
361
373
|
'展现数': 1,
|
362
374
|
'点击数': 1,
|
@@ -366,7 +378,7 @@ class MysqlDatasQuery:
|
|
366
378
|
'总订单金额': 1,
|
367
379
|
'直接加购数': 1,
|
368
380
|
'总加购数': 1,
|
369
|
-
'
|
381
|
+
'spu_id': 1,
|
370
382
|
'店铺名称':1,
|
371
383
|
}
|
372
384
|
df = self.download.data_to_df(
|
@@ -385,7 +397,7 @@ class MysqlDatasQuery:
|
|
385
397
|
'日期': 1,
|
386
398
|
'产品线': 1,
|
387
399
|
'花费': 1,
|
388
|
-
'
|
400
|
+
'全站投产比': 1,
|
389
401
|
'全站交易额': 1,
|
390
402
|
'全站订单行': 1,
|
391
403
|
'全站订单成本': 1,
|
@@ -660,8 +672,8 @@ class MysqlDatasQuery:
|
|
660
672
|
projection = {
|
661
673
|
'日期': 1,
|
662
674
|
'产品线': 1,
|
663
|
-
'触发
|
664
|
-
'跟单
|
675
|
+
'触发sku_id': 1,
|
676
|
+
'跟单sku_id': 1,
|
665
677
|
'花费': 1,
|
666
678
|
'展现数': 1,
|
667
679
|
'点击数': 1,
|
@@ -671,7 +683,7 @@ class MysqlDatasQuery:
|
|
671
683
|
'总订单金额': 1,
|
672
684
|
'直接加购数': 1,
|
673
685
|
'总加购数': 1,
|
674
|
-
'
|
686
|
+
'spu_id': 1,
|
675
687
|
'店铺名称': 1,
|
676
688
|
}
|
677
689
|
df_jd = self.download.data_to_df(
|
@@ -681,7 +693,7 @@ class MysqlDatasQuery:
|
|
681
693
|
end_date=end_date,
|
682
694
|
projection=projection,
|
683
695
|
)
|
684
|
-
df_jd = df_jd.groupby(['日期', '店铺名称', '产品线', '触发
|
696
|
+
df_jd = df_jd.groupby(['日期', '店铺名称', '产品线', '触发sku_id', '跟单sku_id', 'spu_id', '花费', '展现数', '点击数'],
|
685
697
|
as_index=False).agg(
|
686
698
|
**{'直接订单行': ('直接订单行', np.max),
|
687
699
|
'直接订单金额': ('直接订单金额', np.max),
|
@@ -699,7 +711,7 @@ class MysqlDatasQuery:
|
|
699
711
|
'日期': 1,
|
700
712
|
'产品线': 1,
|
701
713
|
'花费': 1,
|
702
|
-
'
|
714
|
+
'全站投产比': 1,
|
703
715
|
'全站交易额': 1,
|
704
716
|
'全站订单行': 1,
|
705
717
|
'全站订单成本': 1,
|
@@ -716,7 +728,7 @@ class MysqlDatasQuery:
|
|
716
728
|
projection=projection,
|
717
729
|
)
|
718
730
|
df_jd_qzyx = df_jd_qzyx.groupby(['日期', '店铺名称', '产品线', '花费'], as_index=False).agg(
|
719
|
-
**{'
|
731
|
+
**{'全站投产比': ('全站投产比', np.max),
|
720
732
|
'成交金额': ('全站交易额', np.max),
|
721
733
|
'成交笔数': ('全站订单行', np.max),
|
722
734
|
'全站订单成本': ('全站订单成本', np.max),
|
@@ -1395,7 +1407,7 @@ class GroupBy:
|
|
1395
1407
|
)
|
1396
1408
|
return df
|
1397
1409
|
elif '京东_京准通' in table_name and '全站营销' not in table_name:
|
1398
|
-
df = df.groupby(['日期', '店铺名称', '产品线', '触发
|
1410
|
+
df = df.groupby(['日期', '店铺名称', '产品线', '触发sku_id', '跟单sku_id', 'spu_id', '花费', '展现数', '点击数'], as_index=False).agg(
|
1399
1411
|
**{'直接订单行': ('直接订单行', np.max),
|
1400
1412
|
'直接订单金额': ('直接订单金额', np.max),
|
1401
1413
|
'总订单行': ('总订单行', np.max),
|
@@ -1407,13 +1419,13 @@ class GroupBy:
|
|
1407
1419
|
df = df[df['花费'] > 0]
|
1408
1420
|
self.data_jdtg.update(
|
1409
1421
|
{
|
1410
|
-
table_name: df[['日期', '产品线', '触发
|
1422
|
+
table_name: df[['日期', '产品线', '触发sku_id', '跟单sku_id', '花费']],
|
1411
1423
|
}
|
1412
1424
|
)
|
1413
1425
|
return df
|
1414
1426
|
elif '京东_京准通_全站营销' in table_name:
|
1415
1427
|
df = df.groupby(['日期', '产品线', '花费'], as_index=False).agg(
|
1416
|
-
**{'
|
1428
|
+
**{'全站投产比': ('全站投产比', np.max),
|
1417
1429
|
'全站交易额': ('全站交易额', np.max),
|
1418
1430
|
'全站订单行': ('全站订单行', np.max),
|
1419
1431
|
'全站订单成本': ('全站订单成本', np.max),
|
@@ -1908,7 +1920,7 @@ class GroupBy:
|
|
1908
1920
|
@try_except
|
1909
1921
|
def performance_jd(self, jd_tg=True):
|
1910
1922
|
jdtg, sku_sales = self.data_jdtg['京东_京准通'], self.data_jdtg['京东_sku_商品明细']
|
1911
|
-
jdtg = jdtg.groupby(['日期', '跟单
|
1923
|
+
jdtg = jdtg.groupby(['日期', '跟单sku_id'],
|
1912
1924
|
as_index=False).agg(
|
1913
1925
|
**{
|
1914
1926
|
'花费': ('花费', np.sum)
|
@@ -1918,13 +1930,13 @@ class GroupBy:
|
|
1918
1930
|
df = pd.merge(sku_sales, cost, how='left', left_on='货号', right_on='款号')
|
1919
1931
|
df = df[['日期', '商品id', '货号', '成交单量', '成交金额', '成本价']]
|
1920
1932
|
df['商品id'] = df['商品id'].astype(str)
|
1921
|
-
jdtg['跟单
|
1933
|
+
jdtg['跟单sku_id'] = jdtg['跟单sku_id'].astype(str)
|
1922
1934
|
if jd_tg is True:
|
1923
1935
|
# 完整的数据表,包含全店所有推广、销售数据
|
1924
|
-
df = pd.merge(df, jdtg, how='left', left_on=['日期', '商品id'], right_on=['日期', '跟单
|
1936
|
+
df = pd.merge(df, jdtg, how='left', left_on=['日期', '商品id'], right_on=['日期', '跟单sku_id']) # df 合并推广表
|
1925
1937
|
else:
|
1926
|
-
df = pd.merge(jdtg, df, how='left', left_on=['日期', '跟单
|
1927
|
-
df = df[['日期', '跟单
|
1938
|
+
df = pd.merge(jdtg, df, how='left', left_on=['日期', '跟单sku_id'], right_on=['日期', '商品id']) # 推广表合并 df
|
1939
|
+
df = df[['日期', '跟单sku_id', '花费', '货号', '成交单量', '成交金额', '成本价']]
|
1928
1940
|
df.fillna(0, inplace=True)
|
1929
1941
|
df['成本价'] = df['成本价'].astype('float64')
|
1930
1942
|
df['成交金额'] = df['成交金额'].astype('float64')
|
@@ -2026,53 +2038,7 @@ def g_group():
|
|
2026
2038
|
pass
|
2027
2039
|
|
2028
2040
|
|
2029
|
-
def
|
2030
|
-
"""
|
2031
|
-
# 单独处理某一个聚合数据库,修改添加 data_dict 的值
|
2032
|
-
"""
|
2033
|
-
for service_database in service_databases:
|
2034
|
-
for service_name, database in service_database.items():
|
2035
|
-
sdq = MysqlDatasQuery(target_service=service_name) # 实例化数据处理类
|
2036
|
-
sdq.months = months # 设置数据周期, 1 表示近 2 个月
|
2037
|
-
g = GroupBy() # 实例化数据聚合类
|
2038
|
-
# 实例化数据库连接
|
2039
|
-
username, password, host, port = get_myconf.select_config_values(target_service=service_name, database=database)
|
2040
|
-
m = mysql.MysqlUpload(username=username, password=password, host=host, port=port)
|
2041
|
-
|
2042
|
-
# 从数据库中获取数据, 返回包含 df 数据的字典
|
2043
|
-
# 单独处理某一个聚合数据库,在这里修改添加 data_dict 的值
|
2044
|
-
######################################################
|
2045
|
-
################# 修改这里 ##########################
|
2046
|
-
######################################################
|
2047
|
-
data_dict = [
|
2048
|
-
{
|
2049
|
-
'数据库名': '聚合数据', # 清洗完回传的目的地数据库
|
2050
|
-
'集合名': '天猫_推广汇总', # 清洗完回传的数据表名
|
2051
|
-
'唯一主键': ['日期', '商品id'],
|
2052
|
-
'数据主体': sdq.jd_gjc(),
|
2053
|
-
},
|
2054
|
-
]
|
2055
|
-
######################################################
|
2056
|
-
################# 修改这里 ##########################
|
2057
|
-
######################################################
|
2058
|
-
|
2059
|
-
for items in data_dict: # 遍历返回结果
|
2060
|
-
db_name, table_name, unique_key_list, df = items['数据库名'], items['集合名'], items['唯一主键'], items['数据主体']
|
2061
|
-
df = g.groupby(df=df, table_name=table_name, is_maximize=True) # 2. 聚合数据
|
2062
|
-
# g.as_csv(df=df, filename=table_name + '.csv') # 导出 csv
|
2063
|
-
m.df_to_mysql(
|
2064
|
-
df=df,
|
2065
|
-
db_name=db_name,
|
2066
|
-
table_name=table_name,
|
2067
|
-
move_insert=False, # 先删除,再插入
|
2068
|
-
df_sql=True,
|
2069
|
-
drop_duplicates=False,
|
2070
|
-
# icm_update=unique_key_list,
|
2071
|
-
service_database=service_database,
|
2072
|
-
) # 3. 回传数据库
|
2073
|
-
|
2074
|
-
|
2075
|
-
def data_aggregation(service_databases=[{}], months=1, is_juhe=True, less_dict=[]):
|
2041
|
+
def data_aggregation(months=1, is_juhe=True, less_dict=[]):
|
2076
2042
|
"""
|
2077
2043
|
1. 从数据库中读取数据
|
2078
2044
|
2. 数据聚合清洗
|
@@ -2085,228 +2051,224 @@ def data_aggregation(service_databases=[{}], months=1, is_juhe=True, less_dict=[
|
|
2085
2051
|
if months == 0:
|
2086
2052
|
print(f'months 不建议为 0 ')
|
2087
2053
|
return
|
2088
|
-
for service_database in service_databases:
|
2089
|
-
for service_name, database in service_database.items():
|
2090
|
-
sdq = MysqlDatasQuery(target_service=service_name) # 实例化数据处理类
|
2091
|
-
sdq.months = months # 设置数据周期, 1 表示近 2 个月
|
2092
|
-
g = GroupBy() # 实例化数据聚合类
|
2093
|
-
# 实例化数据库连接
|
2094
|
-
username, password, host, port = get_myconf.select_config_values(target_service=service_name, database=database)
|
2095
|
-
m = mysql.MysqlUpload(username=username, password=password, host=host, port=port)
|
2096
|
-
|
2097
|
-
# 从数据库中获取数据, 返回包含 df 数据的字典
|
2098
|
-
data_dict = [
|
2099
|
-
{
|
2100
|
-
'数据库名': '聚合数据', # 清洗完回传的目的地数据库
|
2101
|
-
'集合名': '天猫_主体报表', # 清洗完回传的数据表名
|
2102
|
-
'唯一主键': ['日期', '推广渠道', '营销场景', '商品id', '花费'],
|
2103
|
-
'数据主体': sdq.tg_wxt(),
|
2104
|
-
},
|
2105
|
-
{
|
2106
|
-
'数据库名': '聚合数据',
|
2107
|
-
'集合名': '天猫生意经_宝贝指标',
|
2108
|
-
'唯一主键': ['日期', '宝贝id'], # 不能加其他字段做主键,比如销售额,是变动的,不是唯一的
|
2109
|
-
'数据主体': sdq.syj(),
|
2110
|
-
},
|
2111
|
-
{
|
2112
|
-
'数据库名': '聚合数据',
|
2113
|
-
'集合名': '店铺流量来源构成',
|
2114
|
-
'唯一主键': ['日期', '一级来源', '二级来源', '三级来源', '访客数'],
|
2115
|
-
'数据主体': sdq.dplyd(),
|
2116
|
-
},
|
2117
|
-
{
|
2118
|
-
'数据库名': '聚合数据',
|
2119
|
-
'集合名': '商品id编码表',
|
2120
|
-
'唯一主键': ['宝贝id'],
|
2121
|
-
'数据主体': sdq.idbm(),
|
2122
|
-
},
|
2123
|
-
{
|
2124
|
-
'数据库名': '聚合数据',
|
2125
|
-
'集合名': '商品id图片对照表',
|
2126
|
-
'唯一主键': ['商品id'],
|
2127
|
-
'数据主体': sdq.sp_picture(),
|
2128
|
-
},
|
2129
|
-
{
|
2130
|
-
'数据库名': '聚合数据',
|
2131
|
-
'集合名': '商品成本', # 暂缺 10.31
|
2132
|
-
'唯一主键': ['款号'],
|
2133
|
-
'数据主体': sdq.sp_cost(),
|
2134
|
-
},
|
2135
|
-
{
|
2136
|
-
'数据库名': '聚合数据',
|
2137
|
-
'集合名': '京东_京准通',
|
2138
|
-
'唯一主键': ['日期', '产品线', '触发sku id', '跟单sku id', '花费', ],
|
2139
|
-
'数据主体': sdq.jdjzt(),
|
2140
|
-
},
|
2141
|
-
{
|
2142
|
-
'数据库名': '聚合数据',
|
2143
|
-
'集合名': '京东_京准通_全站营销', # 暂缺
|
2144
|
-
'唯一主键': ['日期', '产品线', '花费'],
|
2145
|
-
'数据主体': sdq.jdqzyx(),
|
2146
|
-
},
|
2147
|
-
{
|
2148
|
-
'数据库名': '聚合数据',
|
2149
|
-
'集合名': '京东_sku_商品明细',
|
2150
|
-
'唯一主键': ['日期', '商品id', '成交单量'],
|
2151
|
-
'数据主体': sdq.sku_sales(),
|
2152
|
-
},
|
2153
|
-
{
|
2154
|
-
'数据库名': '聚合数据',
|
2155
|
-
'集合名': '京东_spu_商品明细',
|
2156
|
-
'唯一主键': ['日期', '商品id', '成交单量'],
|
2157
|
-
'数据主体': sdq.spu_sales(),
|
2158
|
-
},
|
2159
|
-
{
|
2160
|
-
'数据库名': '聚合数据',
|
2161
|
-
'集合名': '天猫_人群报表',
|
2162
|
-
'唯一主键': ['日期', '推广渠道', '营销场景', '商品id', '花费', '人群名字'],
|
2163
|
-
'数据主体': sdq.tg_rqbb(),
|
2164
|
-
},
|
2165
|
-
{
|
2166
|
-
'数据库名': '聚合数据',
|
2167
|
-
'集合名': '天猫_关键词报表',
|
2168
|
-
'唯一主键': ['日期', '推广渠道', '营销场景', '商品id', '花费', '词类型', '词名字/词包名字',],
|
2169
|
-
'数据主体': sdq.tg_gjc(),
|
2170
|
-
},
|
2171
|
-
{
|
2172
|
-
'数据库名': '聚合数据',
|
2173
|
-
'集合名': '天猫_超级直播',
|
2174
|
-
'唯一主键': ['日期', '推广渠道', '营销场景', '花费'],
|
2175
|
-
'数据主体': sdq.tg_cjzb(),
|
2176
|
-
},
|
2177
|
-
{
|
2178
|
-
'数据库名': '聚合数据',
|
2179
|
-
'集合名': '京东_关键词报表',
|
2180
|
-
'唯一主键': ['日期', '产品线', '搜索词', '关键词', '展现数', '花费'],
|
2181
|
-
'数据主体': sdq.jd_gjc(),
|
2182
|
-
},
|
2183
|
-
{
|
2184
|
-
'数据库名': '聚合数据',
|
2185
|
-
'集合名': '天猫_品销宝账户报表',
|
2186
|
-
'唯一主键': ['日期', '报表类型', '推广渠道', '营销场景', '花费'],
|
2187
|
-
'数据主体': sdq.pxb_zh(),
|
2188
|
-
},
|
2189
|
-
{
|
2190
|
-
'数据库名': '聚合数据',
|
2191
|
-
'集合名': '天猫店铺来源_手淘搜索', # 暂缺
|
2192
|
-
'唯一主键': ['日期', '关键词', '访客数'],
|
2193
|
-
'数据主体': sdq.se_search(),
|
2194
|
-
},
|
2195
|
-
{
|
2196
|
-
'数据库名': '聚合数据',
|
2197
|
-
'集合名': '生意参谋_直播场次分析', # 暂缺
|
2198
|
-
'唯一主键': ['场次id'],
|
2199
|
-
'数据主体': sdq.zb_ccfx(),
|
2200
|
-
},
|
2201
|
-
{
|
2202
|
-
'数据库名': '聚合数据',
|
2203
|
-
'集合名': '多店推广场景_按日聚合',
|
2204
|
-
'唯一主键': [],
|
2205
|
-
'数据主体': sdq.tg_by_day(),
|
2206
|
-
},
|
2207
|
-
{
|
2208
|
-
'数据库名': '聚合数据',
|
2209
|
-
'集合名': '爱库存_商品spu榜单',
|
2210
|
-
'唯一主键': [],
|
2211
|
-
'数据主体': sdq.aikucun_bd_spu(),
|
2212
|
-
},
|
2213
|
-
{
|
2214
|
-
'数据库名': '聚合数据',
|
2215
|
-
'集合名': '达摩盘_人群报表',
|
2216
|
-
'唯一主键': [],
|
2217
|
-
'数据主体': sdq.dmp_crowd(),
|
2218
|
-
},
|
2219
|
-
]
|
2220
|
-
|
2221
|
-
if less_dict:
|
2222
|
-
data_dict = [item for item in data_dict if item['集合名'] in less_dict]
|
2223
|
-
for items in data_dict: # 遍历返回结果
|
2224
|
-
db_name, table_name, unique_key_list, df = items['数据库名'], items['集合名'], items['唯一主键'], items['数据主体']
|
2225
|
-
df = g.groupby(df=df, table_name=table_name, is_maximize=True) # 2. 聚合数据
|
2226
|
-
if len(g.sp_index_datas) != 0:
|
2227
|
-
# 由推广主体报表,写入一个商品索引表,索引规则:从上月 1 号至今花费从高到低排序
|
2228
|
-
m.df_to_mysql(
|
2229
|
-
df=g.sp_index_datas,
|
2230
|
-
db_name='属性设置3',
|
2231
|
-
table_name='商品索引表_主推排序调用',
|
2232
|
-
move_insert=False, # 先删除,再插入
|
2233
|
-
# df_sql=True,
|
2234
|
-
drop_duplicates=False,
|
2235
|
-
icm_update=['商品id'],
|
2236
|
-
service_database=service_database,
|
2237
|
-
)
|
2238
|
-
g.sp_index_datas = pd.DataFrame() # 重置,不然下个循环会继续刷入数据库
|
2239
|
-
# g.as_csv(df=df, filename=table_name + '.csv') # 导出 csv
|
2240
|
-
if '日期' in df.columns.tolist():
|
2241
|
-
m.df_to_mysql(
|
2242
|
-
df=df,
|
2243
|
-
db_name=db_name,
|
2244
|
-
table_name=table_name,
|
2245
|
-
move_insert=True, # 先删除,再插入
|
2246
|
-
# df_sql=True,
|
2247
|
-
# drop_duplicates=False,
|
2248
|
-
# icm_update=unique_key_list,
|
2249
|
-
service_database=service_database,
|
2250
|
-
) # 3. 回传数据库
|
2251
|
-
else: # 没有日期列的就用主键排重
|
2252
|
-
m.df_to_mysql(
|
2253
|
-
df=df,
|
2254
|
-
db_name=db_name,
|
2255
|
-
table_name=table_name,
|
2256
|
-
move_insert=False, # 先删除,再插入
|
2257
|
-
# df_sql=True,
|
2258
|
-
drop_duplicates=False,
|
2259
|
-
icm_update=unique_key_list,
|
2260
|
-
service_database=service_database,
|
2261
|
-
) # 3. 回传数据库
|
2262
|
-
if is_juhe:
|
2263
|
-
res = g.performance(bb_tg=True) # 盈亏表,依赖其他表,单独做
|
2264
|
-
m.df_to_mysql(
|
2265
|
-
df=res,
|
2266
|
-
db_name='聚合数据',
|
2267
|
-
table_name='_全店商品销售',
|
2268
|
-
move_insert=True, # 先删除,再插入
|
2269
|
-
# df_sql=True,
|
2270
|
-
# drop_duplicates=False,
|
2271
|
-
# icm_update=['日期', '商品id'], # 设置唯一主键
|
2272
|
-
service_database=service_database,
|
2273
|
-
)
|
2274
|
-
res = g.performance(bb_tg=False) # 盈亏表,依赖其他表,单独做
|
2275
|
-
m.df_to_mysql(
|
2276
|
-
df=res,
|
2277
|
-
db_name='聚合数据',
|
2278
|
-
table_name='_推广商品销售',
|
2279
|
-
move_insert=True, # 先删除,再插入
|
2280
|
-
# df_sql=True,
|
2281
|
-
# drop_duplicates=False,
|
2282
|
-
# icm_update=['日期', '商品id'], # 设置唯一主键
|
2283
|
-
service_database=service_database,
|
2284
|
-
)
|
2285
|
-
res = g.performance_concat(bb_tg=False) # 推广主体合并直播表,依赖其他表,单独做
|
2286
|
-
m.df_to_mysql(
|
2287
|
-
df=res,
|
2288
|
-
db_name='聚合数据',
|
2289
|
-
table_name='天猫_推广汇总',
|
2290
|
-
move_insert=True, # 先删除,再插入
|
2291
|
-
# df_sql=True,
|
2292
|
-
# drop_duplicates=False,
|
2293
|
-
# icm_update=['日期', '推广渠道', '营销场景', '商品id', '花费', '展现量', '点击量'], # 设置唯一主键
|
2294
|
-
service_database=service_database,
|
2295
|
-
)
|
2296
|
-
res = g.performance_jd(jd_tg=False) # 盈亏表,依赖其他表,单独做
|
2297
|
-
m.df_to_mysql(
|
2298
|
-
df=res,
|
2299
|
-
db_name='聚合数据',
|
2300
|
-
table_name='_京东_推广商品销售',
|
2301
|
-
move_insert=True, # 先删除,再插入
|
2302
|
-
# df_sql=True,
|
2303
|
-
# drop_duplicates=False,
|
2304
|
-
# icm_update=['日期', '跟单sku id', '货号', '花费'], # 设置唯一主键
|
2305
|
-
service_database=service_database,
|
2306
|
-
)
|
2307
2054
|
|
2308
|
-
|
2309
|
-
|
2055
|
+
sdq = MysqlDatasQuery() # 实例化数据处理类
|
2056
|
+
sdq.months = months # 设置数据周期, 1 表示近 2 个月
|
2057
|
+
g = GroupBy() # 实例化数据聚合类
|
2058
|
+
# 实例化数据库连接
|
2059
|
+
|
2060
|
+
m = mysql.MysqlUpload(username=username, password=password, host=host, port=port)
|
2061
|
+
|
2062
|
+
# 从数据库中获取数据, 返回包含 df 数据的字典
|
2063
|
+
data_dict = [
|
2064
|
+
{
|
2065
|
+
'数据库名': '聚合数据', # 清洗完回传的目的地数据库
|
2066
|
+
'集合名': '天猫_主体报表', # 清洗完回传的数据表名
|
2067
|
+
'唯一主键': ['日期', '推广渠道', '营销场景', '商品id', '花费'],
|
2068
|
+
'数据主体': sdq.tg_wxt(),
|
2069
|
+
},
|
2070
|
+
{
|
2071
|
+
'数据库名': '聚合数据',
|
2072
|
+
'集合名': '天猫生意经_宝贝指标',
|
2073
|
+
'唯一主键': ['日期', '宝贝id'], # 不能加其他字段做主键,比如销售额,是变动的,不是唯一的
|
2074
|
+
'数据主体': sdq.syj(),
|
2075
|
+
},
|
2076
|
+
{
|
2077
|
+
'数据库名': '聚合数据',
|
2078
|
+
'集合名': '店铺流量来源构成',
|
2079
|
+
'唯一主键': ['日期', '一级来源', '二级来源', '三级来源', '访客数'],
|
2080
|
+
'数据主体': sdq.dplyd(),
|
2081
|
+
},
|
2082
|
+
{
|
2083
|
+
'数据库名': '聚合数据',
|
2084
|
+
'集合名': '商品id编码表',
|
2085
|
+
'唯一主键': ['宝贝id'],
|
2086
|
+
'数据主体': sdq.idbm(),
|
2087
|
+
},
|
2088
|
+
{
|
2089
|
+
'数据库名': '聚合数据',
|
2090
|
+
'集合名': '商品id图片对照表',
|
2091
|
+
'唯一主键': ['商品id'],
|
2092
|
+
'数据主体': sdq.sp_picture(),
|
2093
|
+
},
|
2094
|
+
{
|
2095
|
+
'数据库名': '聚合数据',
|
2096
|
+
'集合名': '商品成本', # 暂缺 10.31
|
2097
|
+
'唯一主键': ['款号'],
|
2098
|
+
'数据主体': sdq.sp_cost(),
|
2099
|
+
},
|
2100
|
+
{
|
2101
|
+
'数据库名': '聚合数据',
|
2102
|
+
'集合名': '京东_京准通',
|
2103
|
+
'唯一主键': ['日期', '产品线', '触发sku_id', '跟单sku_id', '花费', ],
|
2104
|
+
'数据主体': sdq.jdjzt(),
|
2105
|
+
},
|
2106
|
+
{
|
2107
|
+
'数据库名': '聚合数据',
|
2108
|
+
'集合名': '京东_京准通_全站营销', # 暂缺
|
2109
|
+
'唯一主键': ['日期', '产品线', '花费'],
|
2110
|
+
'数据主体': sdq.jdqzyx(),
|
2111
|
+
},
|
2112
|
+
{
|
2113
|
+
'数据库名': '聚合数据',
|
2114
|
+
'集合名': '京东_sku_商品明细',
|
2115
|
+
'唯一主键': ['日期', '商品id', '成交单量'],
|
2116
|
+
'数据主体': sdq.sku_sales(),
|
2117
|
+
},
|
2118
|
+
{
|
2119
|
+
'数据库名': '聚合数据',
|
2120
|
+
'集合名': '京东_spu_商品明细',
|
2121
|
+
'唯一主键': ['日期', '商品id', '成交单量'],
|
2122
|
+
'数据主体': sdq.spu_sales(),
|
2123
|
+
},
|
2124
|
+
{
|
2125
|
+
'数据库名': '聚合数据',
|
2126
|
+
'集合名': '天猫_人群报表',
|
2127
|
+
'唯一主键': ['日期', '推广渠道', '营销场景', '商品id', '花费', '人群名字'],
|
2128
|
+
'数据主体': sdq.tg_rqbb(),
|
2129
|
+
},
|
2130
|
+
{
|
2131
|
+
'数据库名': '聚合数据',
|
2132
|
+
'集合名': '天猫_关键词报表',
|
2133
|
+
'唯一主键': ['日期', '推广渠道', '营销场景', '商品id', '花费', '词类型', '词名字/词包名字',],
|
2134
|
+
'数据主体': sdq.tg_gjc(),
|
2135
|
+
},
|
2136
|
+
{
|
2137
|
+
'数据库名': '聚合数据',
|
2138
|
+
'集合名': '天猫_超级直播',
|
2139
|
+
'唯一主键': ['日期', '推广渠道', '营销场景', '花费'],
|
2140
|
+
'数据主体': sdq.tg_cjzb(),
|
2141
|
+
},
|
2142
|
+
{
|
2143
|
+
'数据库名': '聚合数据',
|
2144
|
+
'集合名': '京东_关键词报表',
|
2145
|
+
'唯一主键': ['日期', '产品线', '搜索词', '关键词', '展现数', '花费'],
|
2146
|
+
'数据主体': sdq.jd_gjc(),
|
2147
|
+
},
|
2148
|
+
{
|
2149
|
+
'数据库名': '聚合数据',
|
2150
|
+
'集合名': '天猫_品销宝账户报表',
|
2151
|
+
'唯一主键': ['日期', '报表类型', '推广渠道', '营销场景', '花费'],
|
2152
|
+
'数据主体': sdq.pxb_zh(),
|
2153
|
+
},
|
2154
|
+
{
|
2155
|
+
'数据库名': '聚合数据',
|
2156
|
+
'集合名': '天猫店铺来源_手淘搜索', # 暂缺
|
2157
|
+
'唯一主键': ['日期', '关键词', '访客数'],
|
2158
|
+
'数据主体': sdq.se_search(),
|
2159
|
+
},
|
2160
|
+
{
|
2161
|
+
'数据库名': '聚合数据',
|
2162
|
+
'集合名': '生意参谋_直播场次分析', # 暂缺
|
2163
|
+
'唯一主键': ['场次id'],
|
2164
|
+
'数据主体': sdq.zb_ccfx(),
|
2165
|
+
},
|
2166
|
+
{
|
2167
|
+
'数据库名': '聚合数据',
|
2168
|
+
'集合名': '多店推广场景_按日聚合',
|
2169
|
+
'唯一主键': [],
|
2170
|
+
'数据主体': sdq.tg_by_day(),
|
2171
|
+
},
|
2172
|
+
{
|
2173
|
+
'数据库名': '聚合数据',
|
2174
|
+
'集合名': '爱库存_商品spu榜单',
|
2175
|
+
'唯一主键': [],
|
2176
|
+
'数据主体': sdq.aikucun_bd_spu(),
|
2177
|
+
},
|
2178
|
+
{
|
2179
|
+
'数据库名': '聚合数据',
|
2180
|
+
'集合名': '达摩盘_人群报表',
|
2181
|
+
'唯一主键': [],
|
2182
|
+
'数据主体': sdq.dmp_crowd(),
|
2183
|
+
},
|
2184
|
+
]
|
2185
|
+
|
2186
|
+
if less_dict:
|
2187
|
+
data_dict = [item for item in data_dict if item['集合名'] in less_dict]
|
2188
|
+
for items in data_dict: # 遍历返回结果
|
2189
|
+
db_name, table_name, unique_key_list, df = items['数据库名'], items['集合名'], items['唯一主键'], items['数据主体']
|
2190
|
+
df = g.groupby(df=df, table_name=table_name, is_maximize=True) # 2. 聚合数据
|
2191
|
+
if len(g.sp_index_datas) != 0:
|
2192
|
+
# 由推广主体报表,写入一个商品索引表,索引规则:从上月 1 号至今花费从高到低排序
|
2193
|
+
m.df_to_mysql(
|
2194
|
+
df=g.sp_index_datas,
|
2195
|
+
db_name='属性设置3',
|
2196
|
+
table_name='商品索引表_主推排序调用',
|
2197
|
+
move_insert=False, # 先删除,再插入
|
2198
|
+
# df_sql=True,
|
2199
|
+
drop_duplicates=False,
|
2200
|
+
icm_update=['商品id'],
|
2201
|
+
service_database=service_database,
|
2202
|
+
)
|
2203
|
+
g.sp_index_datas = pd.DataFrame() # 重置,不然下个循环会继续刷入数据库
|
2204
|
+
# g.as_csv(df=df, filename=table_name + '.csv') # 导出 csv
|
2205
|
+
if '日期' in df.columns.tolist():
|
2206
|
+
m.df_to_mysql(
|
2207
|
+
df=df,
|
2208
|
+
db_name=db_name,
|
2209
|
+
table_name=table_name,
|
2210
|
+
move_insert=True, # 先删除,再插入
|
2211
|
+
# df_sql=True,
|
2212
|
+
# drop_duplicates=False,
|
2213
|
+
# icm_update=unique_key_list,
|
2214
|
+
service_database=service_database,
|
2215
|
+
) # 3. 回传数据库
|
2216
|
+
else: # 没有日期列的就用主键排重
|
2217
|
+
m.df_to_mysql(
|
2218
|
+
df=df,
|
2219
|
+
db_name=db_name,
|
2220
|
+
table_name=table_name,
|
2221
|
+
move_insert=False, # 先删除,再插入
|
2222
|
+
# df_sql=True,
|
2223
|
+
drop_duplicates=False,
|
2224
|
+
icm_update=unique_key_list,
|
2225
|
+
service_database=service_database,
|
2226
|
+
) # 3. 回传数据库
|
2227
|
+
if is_juhe:
|
2228
|
+
res = g.performance(bb_tg=True) # 盈亏表,依赖其他表,单独做
|
2229
|
+
m.df_to_mysql(
|
2230
|
+
df=res,
|
2231
|
+
db_name='聚合数据',
|
2232
|
+
table_name='_全店商品销售',
|
2233
|
+
move_insert=True, # 先删除,再插入
|
2234
|
+
# df_sql=True,
|
2235
|
+
# drop_duplicates=False,
|
2236
|
+
# icm_update=['日期', '商品id'], # 设置唯一主键
|
2237
|
+
service_database=service_database,
|
2238
|
+
)
|
2239
|
+
res = g.performance(bb_tg=False) # 盈亏表,依赖其他表,单独做
|
2240
|
+
m.df_to_mysql(
|
2241
|
+
df=res,
|
2242
|
+
db_name='聚合数据',
|
2243
|
+
table_name='_推广商品销售',
|
2244
|
+
move_insert=True, # 先删除,再插入
|
2245
|
+
# df_sql=True,
|
2246
|
+
# drop_duplicates=False,
|
2247
|
+
# icm_update=['日期', '商品id'], # 设置唯一主键
|
2248
|
+
service_database=service_database,
|
2249
|
+
)
|
2250
|
+
res = g.performance_concat(bb_tg=False) # 推广主体合并直播表,依赖其他表,单独做
|
2251
|
+
m.df_to_mysql(
|
2252
|
+
df=res,
|
2253
|
+
db_name='聚合数据',
|
2254
|
+
table_name='天猫_推广汇总',
|
2255
|
+
move_insert=True, # 先删除,再插入
|
2256
|
+
# df_sql=True,
|
2257
|
+
# drop_duplicates=False,
|
2258
|
+
# icm_update=['日期', '推广渠道', '营销场景', '商品id', '花费', '展现量', '点击量'], # 设置唯一主键
|
2259
|
+
service_database=service_database,
|
2260
|
+
)
|
2261
|
+
res = g.performance_jd(jd_tg=False) # 盈亏表,依赖其他表,单独做
|
2262
|
+
m.df_to_mysql(
|
2263
|
+
df=res,
|
2264
|
+
db_name='聚合数据',
|
2265
|
+
table_name='_京东_推广商品销售',
|
2266
|
+
move_insert=True, # 先删除,再插入
|
2267
|
+
# df_sql=True,
|
2268
|
+
# drop_duplicates=False,
|
2269
|
+
# icm_update=['日期', '跟单sku_id', '货号', '花费'], # 设置唯一主键
|
2270
|
+
service_database=service_database,
|
2271
|
+
)
|
2310
2272
|
|
2311
2273
|
|
2312
2274
|
def main():
|
@@ -2315,8 +2277,7 @@ def main():
|
|
2315
2277
|
|
2316
2278
|
if __name__ == '__main__':
|
2317
2279
|
data_aggregation(
|
2318
|
-
|
2319
|
-
|
2320
|
-
|
2321
|
-
# less_dict=['营销场景报表'], # 单独聚合某一个数据库
|
2280
|
+
months=1,
|
2281
|
+
is_juhe=True, # 生成聚合表
|
2282
|
+
# less_dict=['天猫_品销宝账户报表'], # 单独聚合某一个数据库
|
2322
2283
|
)
|