mdbq 3.8.7__py3-none-any.whl → 3.8.9__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 +1 -1
- mdbq/aggregation/query_data.py +11 -0
- mdbq/other/otk.py +81 -0
- {mdbq-3.8.7.dist-info → mdbq-3.8.9.dist-info}/METADATA +1 -1
- {mdbq-3.8.7.dist-info → mdbq-3.8.9.dist-info}/RECORD +7 -6
- {mdbq-3.8.7.dist-info → mdbq-3.8.9.dist-info}/WHEEL +0 -0
- {mdbq-3.8.7.dist-info → mdbq-3.8.9.dist-info}/top_level.txt +0 -0
mdbq/__version__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
VERSION = '3.8.
|
1
|
+
VERSION = '3.8.9'
|
mdbq/aggregation/query_data.py
CHANGED
@@ -1909,6 +1909,17 @@ class MysqlDatasQuery:
|
|
1909
1909
|
projection=projection,
|
1910
1910
|
)
|
1911
1911
|
__res.append(df)
|
1912
|
+
# 新增加自营店数据 2025-03-19
|
1913
|
+
for year in range(2025, datetime.datetime.today().year + 1):
|
1914
|
+
df = self.download.data_to_df(
|
1915
|
+
db_name='京东数据3',
|
1916
|
+
table_name=f'推广数据_京准通_自营店_{year}',
|
1917
|
+
start_date=start_date,
|
1918
|
+
end_date=end_date,
|
1919
|
+
projection=projection,
|
1920
|
+
)
|
1921
|
+
__res.append(df)
|
1922
|
+
|
1912
1923
|
df = pd.concat(__res, ignore_index=True)
|
1913
1924
|
df = df.groupby(
|
1914
1925
|
['日期', '店铺名称', '产品线', '触发sku_id', '跟单sku_id', 'spu_id', '花费', '展现数', '点击数'],
|
mdbq/other/otk.py
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
import re
|
2
|
+
import calendar
|
3
|
+
import datetime
|
4
|
+
from dateutil.relativedelta import relativedelta
|
5
|
+
import pandas as pd
|
6
|
+
import numpy as np
|
7
|
+
|
8
|
+
|
9
|
+
def first_and_last_day(date):
|
10
|
+
"""
|
11
|
+
返回指定日期当月的第一天和最后一天
|
12
|
+
"""
|
13
|
+
date = pd.to_datetime(date) # n 月以前的今天
|
14
|
+
_, _lastDay = calendar.monthrange(date.year, date.month) # 返回月的第一天的星期和当月总天数
|
15
|
+
_firstDay = datetime.date(date.year, date.month, day=1)
|
16
|
+
_lastDay = datetime.date(date.year, date.month, day=_lastDay)
|
17
|
+
return _firstDay, _lastDay
|
18
|
+
|
19
|
+
|
20
|
+
def get_day_of_month(num: int, fm=None):
|
21
|
+
"""
|
22
|
+
num: 获取n月以前的第一天和最后一天, num=0时, 返回当月第一天和最后一天
|
23
|
+
fm: 日期输出格式
|
24
|
+
"""
|
25
|
+
if not fm:
|
26
|
+
fm ='%Y%m%d'
|
27
|
+
_today = datetime.date.today()
|
28
|
+
months_ago = _today - relativedelta(months=num) # n 月以前的今天
|
29
|
+
_, _lastDay = calendar.monthrange(months_ago.year, months_ago.month) # 返回月的第一天的星期和当月总天数
|
30
|
+
_firstDay = datetime.date(months_ago.year, months_ago.month, day=1).strftime(fm)
|
31
|
+
_lastDay = datetime.date(months_ago.year, months_ago.month, day=_lastDay).strftime(fm)
|
32
|
+
return _firstDay, _lastDay
|
33
|
+
|
34
|
+
|
35
|
+
def dates_between(start_date, end_date, fm=None) -> list:
|
36
|
+
"""
|
37
|
+
获取两个日期之间的所有日期, 返回 list
|
38
|
+
fm: 日期输出格式
|
39
|
+
"""
|
40
|
+
if not fm:
|
41
|
+
fm ='%Y%m%d'
|
42
|
+
start_date = pd.to_datetime(start_date)
|
43
|
+
end_date = pd.to_datetime(end_date)
|
44
|
+
dates = []
|
45
|
+
current_date = start_date
|
46
|
+
while current_date <= end_date:
|
47
|
+
dates.append(current_date.strftime(fm))
|
48
|
+
current_date += datetime.timedelta(days=1)
|
49
|
+
return dates
|
50
|
+
|
51
|
+
|
52
|
+
def cover_df(df):
|
53
|
+
df.replace([np.inf, -np.inf], '0', inplace=True) # 清理一些非法值
|
54
|
+
df.replace(to_replace=['\\N', '-', '--', '', 'nan', 'NAN'], value='0', regex=False, inplace=True) # 替换掉特殊字符
|
55
|
+
df.replace(to_replace=[','], value='', regex=True, inplace=True)
|
56
|
+
df.replace(to_replace=['="'], value='', regex=True, inplace=True) # ="和"不可以放在一起清洗, 因为有: id=86785565
|
57
|
+
df.replace(to_replace=['"'], value='', regex=True, inplace=True)
|
58
|
+
cols = df.columns.tolist()
|
59
|
+
for col in cols:
|
60
|
+
df[col] = df[col].apply(
|
61
|
+
lambda x: float(float((str(x).rstrip("%"))) / 100) if re.findall(r'^\d+\.?\d*%$', str(x)) else x)
|
62
|
+
|
63
|
+
new_col = col.lower()
|
64
|
+
new_col = re.sub(r'[()\-,,&~^、 ()\"\'“”=·/。》《><!!`]', '_', new_col, re.IGNORECASE)
|
65
|
+
new_col = new_col.replace(')', '')
|
66
|
+
new_col = re.sub(r'_{2,}', '_', new_col)
|
67
|
+
new_col = re.sub(r'_+$', '', new_col)
|
68
|
+
df.rename(columns={col: new_col}, inplace=True)
|
69
|
+
df.fillna(0, inplace=True)
|
70
|
+
return df
|
71
|
+
|
72
|
+
|
73
|
+
def translate_keys(original_dict:dict, translation_dict:dict) -> dict:
|
74
|
+
"""
|
75
|
+
original_dict键名翻译, 若键存在则返回翻译值,否则返回原键
|
76
|
+
"""
|
77
|
+
return {translation_dict.get(k, k): v for k, v in original_dict.items()}
|
78
|
+
|
79
|
+
|
80
|
+
if __name__ == '__main__':
|
81
|
+
pass
|
@@ -1,7 +1,7 @@
|
|
1
1
|
mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
|
2
|
-
mdbq/__version__.py,sha256=
|
2
|
+
mdbq/__version__.py,sha256=E8rRFwMQu5_V1MLnewKHH2bjyE5z26xpE7uPdYE9lKA,17
|
3
3
|
mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
|
4
|
-
mdbq/aggregation/query_data.py,sha256
|
4
|
+
mdbq/aggregation/query_data.py,sha256=-4HWC1HZmgqUAuvcRiHZU4FLtI70nRq_Hp3eXVZTyH8,185843
|
5
5
|
mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
|
6
6
|
mdbq/bdup/bdup.py,sha256=hJs815hGFwm_X5bP2i9XugG2w2ZY_F0n3-Q0hVpIPPw,4892
|
7
7
|
mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
@@ -19,6 +19,7 @@ mdbq/mysql/s_query.py,sha256=09Dp7DrVXui6dAI6zFDfrsUOdjPblF_oYUpgqbZMhXg,8757
|
|
19
19
|
mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
|
20
20
|
mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
21
21
|
mdbq/other/download_sku_picture.py,sha256=YU8DxKMXbdeE1OOKEA848WVp62jYHw5O4tXTjUdq9H0,44832
|
22
|
+
mdbq/other/otk.py,sha256=yU02wmuCtsy4tndlJ8YSaQPxa05ZtNnhc6-dcepFFkQ,3064
|
22
23
|
mdbq/other/porxy.py,sha256=UHfgEyXugogvXgsG68a7QouUCKaohTKKkI4RN-kYSdQ,4961
|
23
24
|
mdbq/other/pov_city.py,sha256=AEOmCOzOwyjHi9LLZWPKi6DUuSC-_M163664I52u9qw,21050
|
24
25
|
mdbq/other/ua_sj.py,sha256=JuVYzc_5QZ9s_oQSrTHVKkQv4S_7-CWx4oIKOARn_9U,22178
|
@@ -29,7 +30,7 @@ mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
|
|
29
30
|
mdbq/redis/getredis.py,sha256=Uk8-cOWT0JU1qRyIVqdbYokSLvkDIAfcokmYj1ebw8k,24104
|
30
31
|
mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
|
31
32
|
mdbq/spider/aikucun.py,sha256=bUjjPjNoW3EL6H89nnBdFEwnWgGuEB2CENuBxcvx0Kw,20284
|
32
|
-
mdbq-3.8.
|
33
|
-
mdbq-3.8.
|
34
|
-
mdbq-3.8.
|
35
|
-
mdbq-3.8.
|
33
|
+
mdbq-3.8.9.dist-info/METADATA,sha256=dt6p97jqoVL81l6Jh4uh8dizVPxsNfnV-y5Tl04GZtA,363
|
34
|
+
mdbq-3.8.9.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
35
|
+
mdbq-3.8.9.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
|
36
|
+
mdbq-3.8.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|