最近写了一个自动化脚本,用来从网站上和mysql数据库中获取数据,进行处理之后将其插入到excel表格之中,但是速度很慢,之后换了一种思路,速度提高了75%,现在记载一下,以顾后期回顾:
思路一:1、爬虫下载邮政和寄件的数据(表格形式)将其储存在文件夹中。
2、然后分别从文件夹中将三个总对总数表格和邮政以及寄件的excel表格插入到excel中并利用excel的公式处理表格中的数据。
3、用Python从mysql中提取数据并将其插入到excel中去。
代码如下:
# coding=gbk
import time
import warnings
import json
import requests
from bs4 import BeautifulSoup
from pythonds.basic.queue import Queue
warnings.filterwarnings("ignore")
from datetime import datetime, date, timedelta
from openpyxl import load_workbook #openpyxl 版本必须是2.4.2,否则出错
from sqlalchemy import create_engine
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
import pandas as pd
pd.set_option('display.max_columns',None)
pd.set_option('display.width',1500)
pd.set_option('display.max_columns', 100)
pd.set_option('display.colheader_justify','left')
'''爬虫下载邮政和寄件的数据(表格形式)将其储存在文件夹中
然后分别从文件夹中将三个总对总数表格和邮政以及寄件的excel表格插入到excel中并利用excel的公式处理表格中的数据
用Python从mysql中提取数据并将其插入到excel中去'''
#投件收入(总对总)
class cost():
def __init__(self,d):
self.d = d # 提前1天
self.yesterday = (date.today() + timedelta(days=-self.d)).strftime("%Y-%m-%d") # 昨日的日期
self.today = (date.today() + timedelta(days=-(self.d-1))).strftime("%Y-%m-%d") # 今日的日期
self.con = create_engine('mysql+pymysql://dingdingdangdang:aiwujiwu145.245.1.10:3306/001ribao')
self.headers_youzheng = 'dream'
self.headers_jijian = "what is up"
self.cookies_youzheng = {'梦幻花'}
self.cookies_jijian = {'井中月'}
self.today_model1 = r'E:\新报日报_自动化报表\营业日报.xlsx'
self.youzheng = r'E:\邮政\{}_{}.xlsx'.format(self.yesterday,self.yesterday)
self.jingdong = r'E:\zongduizong\jingdong\{}.csv'.format(self.yesterday)
self.jijian = r'E:\寄件总对总的数据\{}.xlsx'.format(self.yesterday)
self.debang = r'E:\zongduizong\debang\{}.csv'.format(self.yesterday)
self.dhl = r'E:\zongduizong\DHL\{}.csv'.format(self.yesterday)
self.youzheng_export()
self.jijian_export()
def youzheng_export(self):
print('数据爬取下载......')
print('1、邮政数据开始下载......')
'''下载邮政数据详情'''
# 第一步 先将邮政数据信息下载下来
data = {'id': 124, 'time_type': 1, 'from_date': self.yesterday, 'to_date': self.yesterday}
r = requests.post('https://bass.sudiyi.cn/api/v2/data/warehouses/124/export', data, cookies=self.cookies_youzheng,
verify=False)
# 再找到参数
html = '数据准备中' # 刚开始数据尚未准备好
while html != '已完成':
time.sleep(6)
try:
r1 = requests.get(url='https://bass.sudiyi.cn/api/v2/data/export/tasks?per=20&date_type=1',
headers=self.headers_youzheng, cookies=self.cookies_youzheng, verify=False)
except Exception as e:
print('youzheng_data 刷新网页时出错:%s' % e)
else:
html = r1.text # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
html1 = json.loads(html)['data']['list'][0]
html = html1['status']
print(html + '...')
canshu = html1['file'].split('_')[-1][:-5]
try:
target_url = 'https://bass.sudiyi.cn/api/v2/data/export/download?file=%E5%8D%95%E6%97%A5_%E9%82%AE%E6%94%BFEMS%E6%95%B0%E6%8D%AE_{0}_{1}_{2}.xlsx'.format(
self.yesterday, self.yesterday, int(canshu))
req = requests.get(url=target_url, headers=self.headers_youzheng, cookies=self.cookies_youzheng, verify=False)
except Exception as e:
print('youzheng_data 导出下载链接出现问题:', e)
else:
html = req.text # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
html = json.loads(html)
target_url2 = html['data']['name']
try:
req = requests.get(url=target_url2, headers=self.headers_youzheng, cookies=self.cookies_youzheng, verify=False)
except Exception as e:
print('邮政下载数据出现问题', e)
else:
html = req.content # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
daily_machine_data_lujin = r'C:\Users\lenovo\Desktop\邮政数据\%s_%s.xlsx' % (self.yesterday, self.yesterday)
with open(daily_machine_data_lujin, 'wb') as e:
e.write(html)
# 将邮政数据和自营城市进行匹配
df = pd.read_excel(daily_machine_data_lujin)
df1 = pd.read_excel(r'C:\Users\lenovo\Desktop\2018年中邮速递易年度数据分析报告\派件事业部-城市匹配表.xlsx')[['运营城市']].rename(
columns={'运营城市': '运营城市名'})
df2 = pd.merge(df, df1, on='运营城市名').set_index('设备ID')
df2.to_excel(r'E:\邮政\%s_%s.xlsx' % (self.yesterday, self.yesterday))
print('邮政数据下载成功')
def jijian_export(self):
print('2、寄件数据开始下载......')
s = Queue()
target_url1 = 'https://tderp.biyoshop.com/a/sudiyi/app/mailing/list?startTime=&endTime=&beginTime={}+00%3A00%3A00&endingTime={}+00%3A00%3A00&orderNo=&userPhone=&beginSignTime=&endSignTime=&parcelType=-1&status=&receiverMobile=&userProvince=&sendProvinceCode=&userCity=&userDistrict=&bagCode=&cancelReason=%E5%85%A8%E9%83%A8&device=&receiverProvince=&receiverProvinceCode=&receiverCity=&receiverDistrict=&deviceCode=&boxNo=&expressNo=&merchantCode=&outOrderNo=&page.orderBy='.format(
self.yesterday, self.today)
try:
req = requests.get(url=target_url1, headers=self.headers_jijian, cookies=self.cookies_jijian, verify=False)
except Exception as e:
print('寄件数据爬取出现问题', e)
else:
html = req.text
soup = BeautifulSoup(html)
a = soup.find_all('td')
for i in a:
a = s.dequeue()
w = i.string.strip() if isinstance(i.string, str) else i.string
a.append(w)
s.enqueue(a)
q = ['操作', '寄件订单号', '商家名称', '快递单号', '下单时间', '投递时间', '订单类型', '订单状态', '寄件人姓名', '寄件区域', '收件人姓名', '收件区域', '应支付金额',
'实付金额', '快递员', '快递网点', '物流公司', '平台订单号']
data_ = {i: s.dequeue() for i in q}
pd.DataFrame(data=data_).to_excel(r'E:\寄件总对总的数据\{}.xlsx'.format(self.yesterday))
print('寄件数据下载完成')
print('数据下载完成')
def sql(self):
print('数据插入开始')
wb = load_workbook(filename=self.today_model1)
ws = wb['Sheet2']
#2019年数据
yuju = "(SELECT `设备类型`,(sum(`收入总额(元)`)/10000)金额 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜','信报箱') GROUP BY `设备类型`) UNION ALL (SELECT `设备类型`,(sum(`收入总额(元)`)/10000) from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜','信报箱') GROUP BY `设备类型`) UNION ALL (SELECT '派件收入',(sum(`派件收入`)/10000)投件收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '预约收入',(sum(`预约收入`)/10000)预约收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '超期收入',(sum(`取件收入`)/10000)超期收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '投件收入月',(sum(`派件收入`)/10000)投件收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '预约收入月',(sum(`预约收入`)/10000)预约收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '超期收入月',(sum(`取件收入`)/10000)超期收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '派件收入_无总对总',(sum(`收入总额(元)`)/10000) from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))".format(self.d,self.d,self.d,self.d,self.d,self.d,self.d,self.d,self.d)
data_sql1 = pd.read_sql_query(yuju, self.con)
data_sql1['类型'] =['一代柜1','二代柜1','信报箱1','易邮柜1','一代柜2','二代柜2','信报箱2','易邮柜2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总']
data_sql1 = data_sql1.set_index('类型').reindex(['一代柜1','二代柜1','易邮柜1','信报箱1','一代柜2','二代柜2','易邮柜2','信报箱2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总'])
data_sql1 = data_sql1.pivot_table(columns = '类型',fill_value = '金额' )[['一代柜1','二代柜1','易邮柜1','信报箱1','一代柜2','二代柜2','易邮柜2','信报箱2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总']]
#2018年同比数据
yuju1 = "( SELECT `设备类型`,(sum( `收入总额(元)` )/10000) 金额 FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜', '信报箱' ) GROUP BY `设备类型`) UNION ALL (SELECT `设备类型`, (sum( `收入总额(元)` )/10000) FROM `经分-设备大表` WHERE `时间` BETWEEN date_sub(date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),INTERVAL 1 YEAR) AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜', '信报箱' )GROUP BY `设备类型` ) UNION ALL (SELECT '派件收入', (sum( `派件收入` )/10000) 投件收入 FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '预约收入', (sum( `预约收入` )/10000) 预约收入 FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '超期收入', (sum( `取件收入` )/10000) 超期收入 FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '投件收入月', (sum( `派件收入` )/10000) 投件收入 FROM `经分-设备大表` WHERE `时间` BETWEEN date_sub( date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ), INTERVAL 1 YEAR ) AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '预约收入月', (sum( `预约收入` )/10000) 预约收入 FROM `经分-设备大表` WHERE `时间` BETWEEN date_sub( date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ), INTERVAL 1 YEAR ) AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '超期收入月', (sum( `取件收入` )/10000) 超期收入 FROM `经分-设备大表` WHERE `时间` BETWEEN date_sub( date_sub( date_format( now(), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ), INTERVAL 1 YEAR ) AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '派件收入_无总对总',(sum( `收入总额(元)` )/10000) FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ))".format(self.d,self.d,self.d,self.d,self.d,self.d,self.d,self.d,self.d)
data_sql2 = pd.read_sql_query(yuju1, self.con)
data_sql2['类型'] =['一代柜1','二代柜1','易邮柜1','一代柜2','二代柜2','易邮柜3','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总']
data_sql2 = data_sql2.set_index('类型').reindex(['一代柜1','二代柜1','易邮柜1','信报箱1','一代柜2','二代柜2','易邮柜2','信报箱2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总'],fill_value= 0)
data_sql2 = data_sql2.pivot_table(columns = '类型',fill_value = '金额' )[['一代柜1','二代柜1','易邮柜1','信报箱1','一代柜2','二代柜2','易邮柜2','信报箱2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总']]
for i in range(17,32):
ws.cell(row=2, column=i, value="{}".format(data_sql1.iloc[0, i-17]))
ws.cell(row=3, column=i, value="{}".format(data_sql2.iloc[0, i-17]))
wb.save(filename=self.today_model1)
print('sql数据导入成功')
def youzheng_(self):
df = pd.read_excel(self.youzheng).set_index('设备ID')
df.columns = df.columns.map(lambda x:''.join(x.split('-')))
df['网点名'] = '网点名'
book = load_workbook(self.today_model1)
writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
writer.book = book
book.remove(book['邮政总对总']) # 删除已经存在的sheet
df.to_excel(excel_writer=writer, sheet_name="邮政总对总")
writer.save()
writer.close()
print('邮政总对总数据保存成功')
def jingdong_(self):
df = pd.read_csv(self.jingdong).set_index('运营城市')
book = load_workbook(self.today_model1)
writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
writer.book = book
book.remove(book['京东总对总']) # 删除已经存在的sheet
df.to_excel(excel_writer=writer, sheet_name="京东总对总")
writer.save()
writer.close()
print('京东总对总数据保存成功')
def jijian_(self):
df = pd.read_excel(self.jijian).set_index('寄件订单号')
book = load_workbook(self.today_model1)
writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
writer.book = book
book.remove(book['寄件']) # 删除已经存在的sheet
df.to_excel(excel_writer=writer, sheet_name="寄件")
writer.save()
writer.close()
print('寄件数据保存成功')
def debang_(self):
df = pd.read_csv(self.debang).set_index('运营城市')
book = load_workbook(self.today_model1)
writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
writer.book = book
book.remove(book['德邦']) # 删除已经存在的sheet
df.to_excel(excel_writer=writer, sheet_name="德邦")
writer.save()
writer.close()
print('德邦数据保存成功')
def DHL_(self):
df = pd.read_csv(self.dhl).set_index('运营城市')
book = load_workbook(self.today_model1)
writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
writer.book = book
book.remove(book['DHL总对总']) # 删除已经存在的sheet
df.to_excel(excel_writer=writer, sheet_name="DHL总对总")
writer.save()
writer.close()
print('DHL数据保存成功')
print('数据插入完成')
def do(self):
self.sql()
self.youzheng_()
self.jingdong_()
self.jijian_()
self.debang_()
self.DHL_()
a = time.time()
ag = cost(1) #往前推一天
ag.do()
b = time.time()
print(f"此程序共耗时{b-a}s")
这个程序耗时5分钟.....主要耗时的地方在于将excel数据插入到excel中耗时比较长。
思路二:1、爬虫下载邮政和寄件的数据(表格形式)将其储存在文件夹中。
2、然后用Python处理表格对数据进行处理和提取sql中的数据。
3、将处理好的数据和提取出来的sql数据插入到excel表格之中。
相比第一种思路,取消了将爬取的excel表格插入到excel中步骤,取而代之的是用pandas读取爬取的表格进行处理之后直接插入到excel中去,并且相同的步骤尽量放在一起,比如提取数据步骤(从mysql数据库中提取数据和从excel提取并处理数据),将处理好的数据和sql中数据插入到excel时也放到一个方法中去执行~这样显的整齐且美观~
代码如下:
# 投件收入(总对总)
class cost():
def __init__(self, d):
self.d = d # 提前1天
self.yesterday = (date.today() + timedelta(days=-self.d)).strftime("%Y-%m-%d") # 昨日的日期
self.today = (date.today() + timedelta(days=-(self.d - 1))).strftime("%Y-%m-%d") # 今日的日期
self.con = create_engine('mysql+pymysql://dingdingdangdang:aiwujiwu145.245.1.10:3306/001ribao')
self.headers_youzheng = 'dream'
self.headers_jijian = "what is up"
self.cookies_youzheng = {'梦幻花'}
self.cookies_jijian = {'井中月'}
self.today_model1 = r'E:\新报日报_自动化报表\营业日报.xlsx'
self.youzheng = r'E:\邮政\{}_{}.xlsx'.format(self.yesterday, self.yesterday)
self.jingdong = r'E:\zongduizong\jingdong\{}.csv'.format(self.yesterday)
self.jijian = r'E:\寄件总对总的数据\{}.xlsx'.format(self.yesterday)
self.debang = r'E:\zongduizong\debang\{}.csv'.format(self.yesterday)
self.dhl = r'E:\zongduizong\DHL\{}.csv'.format(self.yesterday)
self.DHL_data = 0
def youzheng_export(self):
print('数据爬取下载......')
print('1、邮政数据开始下载')
'''下载邮政数据详情'''
# 第一步 先将邮政数据信息下载下来
data = {'id': 124, 'time_type': 1, 'from_date': self.yesterday, 'to_date': self.yesterday}
r = requests.post('https://bass.sudiyi.cn/api/v2/data/warehouses/124/export', data,
cookies=self.cookies_youzheng,
verify=False)
# 再找到参数
html = '数据准备中' # 刚开始数据尚未准备好
while html != '已完成':
time.sleep(6)
try:
r1 = requests.get(url='https://bass.sudiyi.cn/api/v2/data/export/tasks?per=20&date_type=1',
headers=self.headers_youzheng, cookies=self.cookies_youzheng, verify=False)
except Exception as e:
print('youzheng_data 刷新网页时出错:%s' % e)
else:
html = r1.text # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
html1 = json.loads(html)['data']['list'][0]
html = html1['status']
print(html + '...')
canshu = html1['file'].split('_')[-1][:-5]
try:
target_url = 'https://bass.sudiyi.cn/api/v2/data/export/download?file=%E5%8D%95%E6%97%A5_%E9%82%AE%E6%94%BFEMS%E6%95%B0%E6%8D%AE_{0}_{1}_{2}.xlsx'.format(
self.yesterday, self.yesterday, int(canshu))
req = requests.get(url=target_url, headers=self.headers_youzheng, cookies=self.cookies_youzheng,
verify=False)
except Exception as e:
print('youzheng_data 导出下载链接出现问题:', e)
else:
html = req.text # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
html = json.loads(html)
target_url2 = html['data']['name']
try:
req = requests.get(url=target_url2, headers=self.headers_youzheng, cookies=self.cookies_youzheng,
verify=False)
except Exception as e:
print('邮政下载数据出现问题', e)
else:
html = req.content # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
daily_machine_data_lujin = r'C:\Users\lenovo\Desktop\邮政数据\%s_%s.xlsx' % (self.yesterday, self.yesterday)
with open(daily_machine_data_lujin, 'wb') as e:
e.write(html)
# 将邮政数据和自营城市进行匹配
df = pd.read_excel(daily_machine_data_lujin)
df1 = pd.read_excel(r'C:\Users\lenovo\Desktop\2018年中邮速递易年度数据分析报告\派件事业部-城市匹配表.xlsx')[['运营城市']].rename(
columns={'运营城市': '运营城市名'})
df2 = pd.merge(df, df1, on='运营城市名').set_index('设备ID')
df2.to_excel(self.youzheng)
print('邮政数据下载成功......')
def jijian_export(self):
print('2、寄件数据开始下载')
s = Queue()
for i in range(18):
s.enqueue([])
target_url1 = 'https://tderp.biyoshop.com/a/sudiyi/app/mailing/list?page.pageNo=1&page.pageSize=10000&startTime=&endTime=&beginTime={}+00%3A00%3A00&endingTime={}+00%3A00%3A00&orderNo=&userPhone=&beginSignTime=&endSignTime=&parcelType=-1&status=&receiverMobile=&userProvince=&sendProvinceCode=&userCity=&userDistrict=&bagCode=&cancelReason=%E5%85%A8%E9%83%A8&device=&receiverProvince=&receiverProvinceCode=&receiverCity=&receiverDistrict=&deviceCode=&boxNo=&expressNo=&merchantCode=&outOrderNo=&page.orderBy='.format(
self.yesterday, self.today)
try:
req = requests.get(url=target_url1, headers=self.headers_jijian, cookies=self.cookies_jijian, verify=False)
except Exception as e:
print('寄件数据爬取出现问题', e)
else:
html = req.text
soup = BeautifulSoup(html)
a = soup.find_all('td')
for i in a:
a = s.dequeue()
w = i.string.strip() if isinstance(i.string, str) else i.string
a.append(w)
s.enqueue(a)
q = ['操作', '寄件订单号', '商家名称', '快递单号', '下单时间', '投递时间', '订单类型', '订单状态', '寄件人姓名', '寄件区域', '收件人姓名', '收件区域', '应支付金额',
'实付金额', '快递员', '快递网点', '物流公司', '平台订单号']
data_ = {i: s.dequeue() for i in q}
pd.DataFrame(data=data_).to_excel(self.jijian)
print('寄件数据下载完成')
print('数据爬取下载完成......')
def sql(self):
# 2019年数据
yuju = "(SELECT `设备类型`,(sum(`收入总额(元)`)/10000)金额 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜','信报箱') GROUP BY `设备类型`) UNION ALL (SELECT `设备类型`,(sum(`收入总额(元)`)/10000) from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜','信报箱') GROUP BY `设备类型`) UNION ALL (SELECT '派件收入',(sum(`派件收入`)/10000)投件收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '预约收入',(sum(`预约收入`)/10000)预约收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '超期收入',(sum(`取件收入`)/10000)超期收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '投件收入月',(sum(`派件收入`)/10000)投件收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '预约收入月',(sum(`预约收入`)/10000)预约收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '超期收入月',(sum(`取件收入`)/10000)超期收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '派件收入_无总对总',(sum(`收入总额(元)`)/10000) from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))".format(
self.d, self.d, self.d, self.d, self.d, self.d, self.d, self.d, self.d)
data_sql1 = pd.read_sql_query(yuju, self.con)
data_sql1['类型'] = ['一代柜1', '二代柜1', '信报箱1', '易邮柜1', '一代柜2', '二代柜2', '信报箱2', '易邮柜2', '派件收入', '预约收入', '超期收入',
'投件收入月', '预约收入月', '超期收入月', '派件收入_无总对总']
data_sql1 = data_sql1.set_index('类型').reindex(
['一代柜1', '二代柜1', '易邮柜1', '信报箱1', '一代柜2', '二代柜2', '易邮柜2', '信报箱2', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
'超期收入月', '派件收入_无总对总'])
data_sql1 = data_sql1.pivot_table(columns='类型', fill_value='金额')[
['一代柜1', '二代柜1', '易邮柜1', '信报箱1', '一代柜2', '二代柜2', '易邮柜2', '信报箱2', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
'超期收入月', '派件收入_无总对总']]
# 2018年同比数据
yuju1 = "( SELECT `设备类型`,(sum( `收入总额(元)` )/10000) 金额 FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜', '信报箱' ) GROUP BY `设备类型`) UNION ALL (SELECT `设备类型`, (sum( `收入总额(元)` )/10000) FROM `经分-设备大表` WHERE `时间` BETWEEN date_sub(date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),INTERVAL 1 YEAR) AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜', '信报箱' )GROUP BY `设备类型` ) UNION ALL (SELECT '派件收入', (sum( `派件收入` )/10000) 投件收入 FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '预约收入', (sum( `预约收入` )/10000) 预约收入 FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '超期收入', (sum( `取件收入` )/10000) 超期收入 FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '投件收入月', (sum( `派件收入` )/10000) 投件收入 FROM `经分-设备大表` WHERE `时间` BETWEEN date_sub( date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ), INTERVAL 1 YEAR ) AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '预约收入月', (sum( `预约收入` )/10000) 预约收入 FROM `经分-设备大表` WHERE `时间` BETWEEN date_sub( date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ), INTERVAL 1 YEAR ) AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '超期收入月', (sum( `取件收入` )/10000) 超期收入 FROM `经分-设备大表` WHERE `时间` BETWEEN date_sub( date_sub( date_format( now(), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ), INTERVAL 1 YEAR ) AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '派件收入_无总对总',(sum( `收入总额(元)` )/10000) FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ))".format(
self.d, self.d, self.d, self.d, self.d, self.d, self.d, self.d, self.d)
data_sql2 = pd.read_sql_query(yuju1, self.con)
data_sql2['类型'] = ['一代柜1', '二代柜1', '易邮柜1', '一代柜2', '二代柜2', '易邮柜3', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
'超期收入月', '派件收入_无总对总']
self.data_sql2 = data_sql2.set_index('类型').reindex(
['一代柜1', '二代柜1', '易邮柜1', '信报箱1', '一代柜2', '二代柜2', '易邮柜2', '信报箱2', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
'超期收入月', '派件收入_无总对总'], fill_value=0)
self.data_sql2 = data_sql2.pivot_table(columns='类型', fill_value='金额')[
['一代柜1', '二代柜1', '易邮柜1', '信报箱1', '一代柜2', '二代柜2', '易邮柜2', '信报箱2', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
'超期收入月', '派件收入_无总对总']]
def youzheng_(self):
df = pd.read_excel(self.youzheng).set_index('设备ID')
self.youzheng_data = ((df['预留使用量-EMS'].sum() + df['预留使用量-邮政'].sum())*0.4 + (df['预约使用量-EMS'].sum() + df['预约使用量-邮政'].sum())*0.35 + (df['其他使用量-EMS'].sum() + df['其他使用量-邮政'].sum())*0.25)/10000
def jingdong_(self):
df = pd.read_csv(self.jingdong).set_index('运营城市')
self.jingdong_data = (df['投件时间'].count())*0.4/10000
def jijian_(self):
df = pd.read_excel(self.jijian).set_index('寄件订单号')
self.jijian_data = df['投递时间'].count()*0.2/10000
def debang_(self):
df = pd.read_csv(self.debang).set_index('运营城市')
df.dropna(subset=['投件时间'],inplace= True)
self.debang_data = (df.loc[df['箱格类型'] == 0,'箱格类型'].count()*0.3 + df.loc[df['箱格类型'] == 1,'箱格类型'].count()*0.4 + df.loc[df['箱格类型'] == 2,'箱格类型'].count()*0.5)/10000
def DHL_(self):
df = pd.read_csv(self.dhl).set_index('运营城市')
df.dropna(subset=['投件时间'],inplace= True)
self.DHL_data = (df.loc[df['箱格类型'] == 0,'箱格类型'].count()*0.3 + df.loc[df['箱格类型'] == 1,'箱格类型'].count()*0.4 + df.loc[df['箱格类型'] == 2,'箱格类型'].count()*0.5)/10000
def zongduizong(self):
wb = load_workbook(filename=self.today_model1)
ws = wb['Sheet2']
print('总对总数据插入开始---')
for i in range(17, 32):
ws.cell(row=2, column=i, value="{}".format(self.data_sql1.iloc[0, i - 17]))
ws.cell(row=3, column=i, value="{}".format(self.data_sql2.iloc[0, i - 17]))
for i,j in enumerate([self.jingdong_data,self.DHL_data,self.debang_data,self.youzheng_data,self.jijian_data]):
ws.cell(row=2, column=i+32, value="{}".format(j))
wb.save(filename=self.today_model1)
print('总对总数据插入成功---')
def do(self):
# 邮政和寄件数据下载并保存
self.youzheng_export()
self.jijian_export()
#sql和5个总对总的数据进行提取
self.sql()
self.youzheng_()
self.jingdong_()
self.jijian_()
self.debang_()
self.DHL_()
#将sql和5个总对总的数据插入到excel表格中
self.zongduizong()
# time_()
a = time.time()
ag = cost(1) # 往前推一天
ag.do()
b = time.time()
print(f"此程序共耗时{b-a}s")
用到的知识点不多,只是一次编程思想的想法,如果在编程中引用相同的常量的话,尽量用变量代替,这样的话变动相应值就会很方便。