xbackend/utils/func.py
李伟 51d899c9d1 1.新增分布分析下载功能
2.优化新增付费人数计算公式
2022-04-28 15:44:44 +08:00

152 lines
4.4 KiB
Python

import random
import time
import datetime
import pandas as pd
def get_uid():
return hex(int(time.time() * 10 ** 7) + random.randint(0, 10000))[2:]
# 获取筛选条件的包含关系
def get_bijiao(bijiao):
if bijiao == '==' or bijiao == 'in' or bijiao == 'like' or bijiao == 'is not null':
return "IN"
elif bijiao == '!=' or bijiao == 'not like' or bijiao == 'is null':
return 'NOT LIKE'
# 判断传入的数据类型
def estimate_data(data_type):
if data_type == 'int':
return "Nullable(Int64)"
elif data_type == 'ip':
return "Nullable(DateTime('UTC'))"
else:
return "Nullable(String)"
#将字典变成字符串
def dict_to_str(dic):
c = str()
b = 0
for k, v in dic.items():
b += 1
if b == 1:
c += "{\"%s\":\"%s\"," % (k, v)
elif b != len(dic):
c += "\"%s\":\"%s\"," % (k, v)
else:
c += "\"%s\":\"%s\"}" % (k, v)
return c
def getEveryDay(begin_date,end_date):
# 前闭后闭
date_list = []
begin_date = datetime.datetime.strptime(begin_date, "%Y-%m-%d")
end_date = datetime.datetime.strptime(end_date,"%Y-%m-%d")
while begin_date <= end_date:
date_str = begin_date.strftime("%Y-%m-%d")
date_list.append(date_str)
begin_date += datetime.timedelta(days=1)
return date_list
#print(getEveryDay('2016-01-01','2017-05-11'))
def Download_xlsx(df,name):
"""
下载功能
name为文件名
"""
from urllib.parse import quote
import mimetypes
from utils import DfToStream
from fastapi.responses import StreamingResponse
file_name=quote(f'{name}.xlsx')
mime = mimetypes.guess_type(file_name)[0]
df_to_stream = DfToStream((df, name))
with df_to_stream as d:
export = d.to_stream()
Download=StreamingResponse(export, media_type=mime, headers={'Content-Disposition': f'filename="{file_name}"'})
return Download
def jiange_insert(list_date):
"""
间隔1条插入一条数据插入数据
:param day: list数据
:return: list
"""
i = 1
while i <= len(list_date):
list_date.insert(i, '-')
i += 2
return list_date
def create_df(resp):
"""
分布分析外部下载功能的df数据
"""
columns = resp['label']
day = list(resp['list'].keys())
jiange_insert(day)
date = []
day_nu = 0
for i in day:
if i == '-':
av = day[day_nu - 1]
day_date = resp['list'][av]['总体']
else:
day_date = resp['list'][i]['总体']
date_dict = {}
n = 0
p = 0
if i == '-':
date_dict['事件发生时间'] = '-'
date_dict['总人数'] = '-'
for nu in range(len(columns)):
date_dict[columns[nu]] = day_date['p'][p]
p += 1
date.append(date_dict)
else:
date_dict['事件发生时间'] = i
date_dict['总人数'] = day_date['total']
for nu in range(len(columns)):
date_dict[columns[nu]] = day_date['n'][n]
n += 1
date.append(date_dict)
day_nu += 1
columns.insert(0, '总人数')
columns.insert(0, '事件发生时间')
df = pd.DataFrame(data=date, columns=columns)
return df
def create_neidf(resp,columnName):
"""
分布分析内部下载功能的df数据
"""
columns = resp['label']
day = list(resp['list'].keys())
jiange_insert(day)
date = []
day_nu = 0
for i in day:
if i == '-':
av = day[day_nu - 1]
day_date = resp['list'][av]
else:
day_date = resp['list'][i]
date_dict = {}
n = 0
p = 0
if i == '-':
date_dict[columnName] = '-'
date_dict['全部用户数'] = '-'
for nu in range(len(columns)):
date_dict[columns[nu]] = day_date['p'][p]
p += 1
date.append(date_dict)
else:
date_dict[columnName] = i
date_dict['全部用户数'] = day_date['total']
for nu in range(len(columns)):
date_dict[columns[nu]] = day_date['n'][n]
n += 1
date.append(date_dict)
day_nu += 1
columns.insert(0, '全部用户数')
columns.insert(0, columnName)
df = pd.DataFrame(data=date, columns=columns)
return df