Python:写了一个简易的同/环比分析器

  • Post author:
  • Post category:python


前言:数据分析中,传统描述性统计(即没有用到machine learning)还是在日常工作中占了很大一部分比重(或者说99%。。。),而同/环比分析更是占了绝大多数。

而传统处理中,一般都是用excel的vlookup先处理好数据并合并表,再用数据透视表进行分析,这样的操作虽然也很快,但是感觉很无脑;虽然现在可以用power query对上述工作也进行模板化,但是具体的分析还是稍显薄弱(比如要筛选出到底哪些影响占比较高等,如果条件约束一多可能就比较无力)。

所以由上,想到了用pandas做一个简易版的同/环比分析器,后续的优化空间很大,具体还在思考中,先把70行写完的代码抛出来,供大家参考,也希望能有人给我一些优化思路。

7月21日更新:考虑到有一个月当中做环比的需要,所以加入了日均的环比代码


一、数据准备


在这里插入图片描述

我是用平时工作的清单做的环比分析(同比也是类似),两份清单的格式是一模一样的,里面的字段如下:

print(old_file.columns)

Index(['行号', '统计日期', '产品名称', '促销员工工号', '发展渠道小类', '发展部门名称', '受理员工工号', '套餐名称',
       '客户标识', '新客户类型(1家庭、2政企、3个人、4其他)', '用户标识', '订单号', '销售区局', '销售策略描述',
       '发展渠道销售管理责任部门', '渠道管理细分', '是否实名补录标志', '补录资料受理工号', '资料补录部门',
       'Unnamed: 19'],
      dtype='object')

其中,大部分字段都是无用的,“渠道管理细分”有点小问题,需要修改一下;“销售区局”需要提前做好筛选;还要通过“发展部门名称”和“渠道细分”匹配出“所属部门”和“所属代理商”,通过“套餐名称”匹配出“套餐归类(日报)”。

在这里,我考虑了一下代码的延展性,我常用的清单有3种,每种清单中有些字段含义类似,但是字段名称却不同,所以也需要初始化/标准化,使得即使我换了一种清单,这个分析程序也能继续使用

def get_file(orignal_file):
    '''获得处理完毕的清单'''
    orignal_file_columns = orignal_file.columns.tolist()
    temp_file = orignal_file
    #销售/发展区局名字判断和处理
    for key, value in councilName_dict.items():
        if key in orignal_file_columns:
            temp_file = temp_file[temp_file[key] == value]
            # print(temp_file[key].unique())
            break
    #渠道管理细分名字判断和处理
    if '渠道统计归类' in orignal_file_columns:
        if '渠道管理细分' in orignal_file_columns:
            temp_file.drop('渠道管理细分', axis=1, inplace=True)
        temp_file.rename(columns={'渠道统计归类': '渠道管理细分'}, inplace=True)
    elif '渠道管理细分' not in orignal_file_columns:
        for qdxl in qdxl_list:
            if qdxl in orignal_file_columns:
                temp_file = pd.merge(temp_file, qd_match_table[['渠道小类', '渠道管理细分']], how='left',
                             left_on=qdxl, right_on='渠道小类')
                break
    elif '渠道管理细分' in orignal_file_columns:
        for qdxl in qdxl_list:
            if qdxl in orignal_file_columns:
                temp_file.loc[temp_file[qdxl] == '终端零售店(开放)', '渠道管理细分'] = '中小渠道'
                break
    #发展/促销部门名字判断和处理
    for storeName in storeName_list:
        if storeName in orignal_file_columns:
            temp_file = pd.merge(temp_file, store_match_table[['发展部门名称', '渠道管理细分', '所属部门', '所属代理商', '所属分局']], how='left',
                                 left_on=[storeName, '渠道管理细分'], right_on=['发展部门名称', '渠道管理细分'])
            temp_file.rename(columns={'所属部门': '部门', '所属代理商': '代理商', '所属分局': '分局'}, inplace=True)
            break
    #套餐分类处理
    for key, value in tcName_dict.items():
        if key in orignal_file_columns:
            if value == 'cdma':
                temp_file = pd.merge(temp_file, tc_match_table[['套餐名称(移动)', '套餐归类1']], how='left', left_on=key, right_on='套餐名称(移动)')
                temp_file.rename(columns={'套餐归类1': '套餐归类'}, inplace=True)
            elif value == 'kd':
                temp_file = pd.merge(temp_file, tc_match_table[['套餐名称(宽带)', '套餐归类']], how='left', left_on=key,
                                     right_on='套餐名称(宽带)')
            temp_file.rename(columns={key: '套餐全称'}, inplace=True)
            break
    #日期标准化
    for dateName in dateName_list:
        if dateName in orignal_file_columns:
            temp_file.loc[:, dateName] = pd.to_datetime(temp_file[dateName], format="%Y" + '-' + "%m" + '-' + "%d")  # 把统计日期进行标准化(2019-04-25)
            # temp_file[dateName] = pd.to_datetime(temp_file[dateName]).dt.normalize()  # 另一种日期标准化的方法
            # print(temp_file[dateName].dt.day)  # 显示天
            break
    origin_dict = {'渠道管理细分': '未匹配渠道', '部门': '未匹配部门', '代理商': '未匹配代理商', '分局': '未匹配分局', '套餐归类': '未匹配套餐归类', '套餐全称': '未匹配套餐全称'}
    temp_file_columns = temp_file.columns.tolist()
    for key in origin_dict.keys():
        if key not in temp_file_columns: origin_dict.pop(key)
    temp_file = temp_file.fillna(origin_dict)
    return temp_file


二、获得总体提升率


我们要先了解一下总体的提升率是怎么样,可以将该数据作为参数传到后面函数中(这里我没用)。

def get_total_upgrade(old_file, new_file):
    '''获得总体提升率'''
    old_total = old_file.shape[0]
    new_total = new_file.shape[0]
    total_upgrade = new_total - old_total
    total_upgrade_rate = new_total / old_total - 1 #总体提升率
    day_upgrade = new_total/new_days - old_total/old_days
    day_upgrade_rate = day_upgrade / (old_total/old_days) #日均提升率
    print('本月提升{},提升百分比为:{:.1%}'.format(total_upgrade, total_upgrade_rate))
    print('日均提升{:.1f},提升百分比为:{:.1%}'.format(day_upgrade, day_upgrade_rate))


三、获得新旧两个渠道的销量对比


1、我先要建立一个我想要的分析顺序,比如“渠道管理细分”是我主要分析的对象,就把它作为字典的key,另外再传入几个需要具体分析的元素作为value:

analyze_dict = {'渠道管理细分': ['所属代理商', '套餐归类1', '套餐名称']}

2、对同/环比的分析,如果单纯地只是把所有数据展现出来,用excel或power query就可以了,但是我们要知道在当前分类中,哪些部门/套餐等对我的提升率影响是比较大的呢?这里就需要自己建立一套规则:

1)、先把当前分类的新老两份数据通过value_counts()进行数量展现,再通过concat把两份series进行合并;

2)、计算出“原销量占比”、“新销量占比”、“销量提升数”、“销量提升占比”、“销量提升率”这些字段;

3)、根据我传入的min_increase_percent(最小提升占比)参数(在所有销量变化程度中,该项的变化幅度,低于该值的认定为不重要因素,默认10%),再配合1/当前分类中元素数量,求2者较小值,作为最终的min_increase_percent;

4)、同理,计算出min_percent(最小销量占比);

5)、求出good和bad清单,good是指:“销量提升占比”大于等于“最小提升占比”



(“原销量占比”大于等于“最小销量占比”



“新销量占比”大于等于“最小销量占比”);

6)、把“分类中的元素名称”、“销量提升数”和“销量提升率”组合成一个新的column,并通过tolist()转变成list,最后导出/打印出来。

打印出来的结果如下:

C:\ProgramData\Anaconda3\python.exe C:/Users/Administrator/Desktop/销量同比环比自动分析/销量同比环比自动分析.py
本月提升-17398,提升百分比为:-35.9%
日均提升110.3,提升百分比为:6.8%
在渠道管理细分中,提升幅度较大的包括:['营维渠道,162.2,168.4%', '开放渠道,33.3,16.5%'];下降幅度较大的包括:['专营渠道,-107.4,-9.4%']
1、在营维渠道中:
(1)、在分局中,日均提升幅度较大的包括:['三林,44.8,355.5%', '外金,40.6,172.4%', '川祝,32.1,157.4%', '惠南,13.8,129.9%', '张江,13.1,196.0%', '周康,9.0,159.9%'];日均下降幅度较大的包括:[]
(2)、在代理商中,日均提升幅度较大的包括:['仲诚,75.4,142.0%', '华为,44.8,355.5%', '老南汇,28.9,120.6%', '伟琳,13.1,196.0%'];日均下降幅度较大的包括:[]
(3)、在套餐归类中,日均提升幅度较大的包括:['其他,151.7,622.5%', '未匹配套餐归类,9.0,46.6%'];日均下降幅度较大的包括:[]
(4)、在套餐全称中,日均提升幅度较大的包括:['201901-新全家享固话老用户专享融合套餐,158.0,876.3%'];日均下降幅度较大的包括:[]
2、在开放渠道中:
(1)、在分局中,日均提升幅度较大的包括:['周康,12.8,20.4%', '外金,8.4,30.5%', '川祝,8.4,28.1%', '陆家嘴,6.0,49.3%', '三林,4.3,37.1%'];日均下降幅度较大的包括:['临港,-8.9,-66.4%']
(2)、在代理商中,日均提升幅度较大的包括:['苏宁,14.9,666.2%', '柠维,11.8,47.6%', '茗神,10.2,48.6%', '筠翌,5.6,59.1%'];日均下降幅度较大的包括:['骈叠,-7.0,-51.9%']
(3)、在套餐归类中,日均提升幅度较大的包括:['其他,12.6,490.9%', '新魔都,12.0,9.9%', '易通/大众/日租卡,10.8,808.3%'];日均下降幅度较大的包括:['不限量,-5.0,-7.2%']
(4)、在套餐全称中,日均提升幅度较大的包括:['2019年新移动30大流量套餐,13.4,12.1%', '201802-上海大流量50元套餐2018版,12.6,490.9%', '201706-流量日租卡套餐,10.8,808.3%'];日均下降幅度较大的包括:['201802-天翼畅享99元套餐201802,-4.0,-5.8%']
3、在专营渠道中:
(1)、在分局中,日均提升幅度较大的包括:[];日均下降幅度较大的包括:['三林,-22.9,-11.9%', '临港,-22.7,-32.5%', '川祝,-18.2,-9.0%', '周康,-16.1,-10.8%', '外金,-15.8,-9.6%', '张江,-7.9,-8.7%', '惠南,-6.5,-4.0%']
(2)、在代理商中,日均提升幅度较大的包括:['自营,11.7,3.5%'];日均下降幅度较大的包括:['千秋,-38.1,-11.3%', '汉启,-28.4,-28.4%', '易贝,-25.9,-26.3%']
(3)、在套餐归类中,日均提升幅度较大的包括:['新魔都,83.6,73.0%'];日均下降幅度较大的包括:['副卡,-188.4,-23.6%']
(4)、在套餐全称中,日均提升幅度较大的包括:['201812-新魔都30元套餐,168.7,10120.0%', '201802-十全十美99元套餐2018版(专营),15.9,18.5%'];日均下降幅度较大的包括:['201706-畅享(十全十美)5元副卡(乐享家),-158.7,-42.4%', '201812-新移动30元套餐,-79.0,-100.0%', '201812-新移动48元套餐,-25.6,-100.0%', '201802-畅享5元副卡加装包201802,-22.6,-5.6%']

Process finished with exit code 0

全部代码如下:

import pandas as pd
import warnings

def get_file(orignal_file):
    '''获得处理完毕的清单'''
    orignal_file_columns = orignal_file.columns.tolist()
    temp_file = orignal_file
    #销售/发展区局名字判断和处理
    for key, value in councilName_dict.items():
        if key in orignal_file_columns:
            temp_file = temp_file[temp_file[key] == value]
            # print(temp_file[key].unique())
            break
    #渠道管理细分名字判断和处理
    if '渠道统计归类' in orignal_file_columns:
        if '渠道管理细分' in orignal_file_columns:
            temp_file.drop('渠道管理细分', axis=1, inplace=True)
        temp_file.rename(columns={'渠道统计归类': '渠道管理细分'}, inplace=True)
    elif '渠道管理细分' not in orignal_file_columns:
        for qdxl in qdxl_list:
            if qdxl in orignal_file_columns:
                temp_file = pd.merge(temp_file, qd_match_table[['渠道小类', '渠道管理细分']], how='left',
                             left_on=qdxl, right_on='渠道小类')
                break
    elif '渠道管理细分' in orignal_file_columns:
        for qdxl in qdxl_list:
            if qdxl in orignal_file_columns:
                temp_file.loc[temp_file[qdxl] == '终端零售店(开放)', '渠道管理细分'] = '中小渠道'
                break
    #发展/促销部门名字判断和处理
    for storeName in storeName_list:
        if storeName in orignal_file_columns:
            temp_file = pd.merge(temp_file, store_match_table[['发展部门名称', '渠道管理细分', '所属部门', '所属代理商', '所属分局']], how='left',
                                 left_on=[storeName, '渠道管理细分'], right_on=['发展部门名称', '渠道管理细分'])
            temp_file.rename(columns={'所属部门': '部门', '所属代理商': '代理商', '所属分局': '分局'}, inplace=True)
            break
    #套餐分类处理
    for key, value in tcName_dict.items():
        if key in orignal_file_columns:
            if value == 'cdma':
                temp_file = pd.merge(temp_file, tc_match_table[['套餐名称(移动)', '套餐归类1']], how='left', left_on=key,
                                     right_on='套餐名称(移动)')
                temp_file.rename(columns={'套餐归类1': '套餐归类'}, inplace=True)
            elif value == 'kd':
                temp_file = pd.merge(temp_file, tc_match_table[['套餐名称(宽带)', '套餐归类']], how='left', left_on=key,
                                     right_on='套餐名称(宽带)')
            temp_file.rename(columns={key: '套餐全称'}, inplace=True)
            break
    #无效套餐剔除
    for useless_tc in useless_tcs:
        temp_file = temp_file[temp_file['套餐全称'] != useless_tc]
    #日期标准化
    for dateName in dateName_list:
        if dateName in orignal_file_columns:
            temp_file.loc[:, dateName] = pd.to_datetime(temp_file[dateName], format="%Y" + '-' + "%m" + '-' + "%d")  # 把统计日期进行标准化(2019-04-25)
            # temp_file[dateName] = pd.to_datetime(temp_file[dateName]).dt.normalize()  # 另一种日期标准化的方法
            # print(temp_file[dateName].dt.day)  # 显示天
            break
    origin_dict = {'渠道管理细分': '未匹配渠道', '部门': '未匹配部门', '代理商': '未匹配代理商', '分局': '未匹配分局', '套餐归类': '未匹配套餐归类', '套餐全称': '未匹配套餐全称'}
    temp_file_columns = temp_file.columns.tolist()
    for key in origin_dict.keys():
        if key not in temp_file_columns: origin_dict.pop(key)
    temp_file = temp_file.fillna(origin_dict)
    return temp_file

def get_total_upgrade(old_file, new_file):
    '''获得总体提升率'''
    old_total = old_file.shape[0]
    new_total = new_file.shape[0]
    total_upgrade = new_total - old_total
    total_upgrade_rate = new_total / old_total - 1 #总体提升率
    day_upgrade = new_total/new_days - old_total/old_days
    day_upgrade_rate = day_upgrade / (old_total/old_days) #日均提升率
    print('本月提升{},提升百分比为:{:.1%}'.format(total_upgrade, total_upgrade_rate))
    print('日均提升{:.1f},提升百分比为:{:.1%}'.format(day_upgrade, day_upgrade_rate))

def get_days(file_name):
    '''获得清单的统计天数,为日环比/同比增长做准备'''
    for dateName in dateName_list:
        orignal_file_columns = file_name.columns.tolist()
        if dateName in orignal_file_columns:
            return len(file_name[dateName].unique())

def compare(compare_column_name, old_file, new_file, min_percent=0.05, min_increase_percent=0.05):
    '''
    获得新旧两个渠道的销量对比
    :param compare_column_name: 需要对比的列名,比如“渠道细分”
    :param min_percent: 在所有销量中的占比,低于该值的认定为不重要因素,默认5%
    :param min_increase_percent: 在所有销量变化程度中,该项的变化幅度,低于该值的认定为不重要因素,默认5%
    :param old_file: 旧数据内容
    :param new_file: 新数据内容
    :return: increase_list, decrease_list
    '''
    old_sum = old_file[compare_column_name].value_counts().rename('原销量合计')
    new_sum = new_file[compare_column_name].value_counts().rename('新销量合计')
    sum_compare = pd.concat([old_sum, new_sum], axis=1).fillna(0)
    sum_compare.reset_index(level=0, inplace=True) #把索引变成一列
    sum_compare.rename(columns={'index': compare_column_name}, inplace=True) #把索引重命名
    sum_compare['原销量占比'] = sum_compare['原销量合计'] / sum_compare['原销量合计'].sum() #旧数据中每个元素的占比
    sum_compare['新销量占比'] = sum_compare['新销量合计'] / sum_compare['新销量合计'].sum() #新数据中每个元素的占比
    sum_compare_columns = sum_compare.shape[0]
    min_percent = min(1/sum_compare_columns, min_percent)
    min_increase_percent = min(1/sum_compare_columns, min_increase_percent)

    #如果是月环比/同比:
    # sum_compare['销量提升数'] = sum_compare['新销量合计'] - sum_compare['原销量合计'] #涨跌幅数量
    # sum_compare['销量提升数'] = sum_compare['销量提升数'].astype(int)
    # sum_compare['销量提升占比'] = sum_compare['销量提升数'] / abs(sum_compare['销量提升数']).sum() #涨跌幅占比
    # sum_compare['销量提升率'] = sum_compare['销量提升数'] / sum_compare['原销量合计'] #相对于旧数据来说的同/环比提升率
    # increase = sum_compare[(sum_compare['销量提升占比'] >= min_increase_percent) & ((sum_compare['原销量占比'] >= min_percent) | (sum_compare['新销量占比'] >= min_percent))]
    # decrease = sum_compare[(sum_compare['销量提升占比'] <= -min_increase_percent) & ((sum_compare['原销量占比'] >= min_percent) | (sum_compare['新销量占比'] >= min_percent))]
    # increase.loc[:, '销量提升率'] = increase.loc[:, '销量提升率'].apply(lambda x: format(x, '.1%')) #转化成百分比形式
    # decrease.loc[:, '销量提升率'] = decrease.loc[:, '销量提升率'].apply(lambda x: format(x, '.1%'))  # 转化成百分比形式
    # increase.loc[:, '销量提升占比'] = increase.loc[:, '销量提升占比'].apply(lambda x: format(x, '.1%')) #转化成百分比形式
    # decrease.loc[:, '销量提升占比'] = decrease.loc[:, '销量提升占比'].apply(lambda x: format(x, '-.1%'))  # 转化成百分比形式
    # increase.loc[:, '结果'] = increase.loc[:, compare_column_name] + ',' + increase.loc[:, '销量提升数'].map(str) + ',' \
    #                         + increase.loc[:, '销量提升率'].map(str) + ',' + increase.loc[:, '销量提升占比'].map(str)
    # decrease.loc[:, '结果'] = decrease.loc[:, compare_column_name] + ',' + decrease.loc[:, '销量提升数'].map(str) + ',' \
    #                         + decrease.loc[:, '销量提升率'].map(str) + ',' + decrease.loc[:, '销量提升占比'].map(str)
    # increase.sort_values(by='销量提升数', ascending=False, inplace=True)
    # decrease.sort_values(by='销量提升数', ascending=True, inplace=True)

    #如果是日均环比/同比:
    sum_compare['日均销量提升数'] = sum_compare['新销量合计']/new_days - sum_compare['原销量合计']/old_days
    sum_compare['日均销量提升占比'] = sum_compare['日均销量提升数'] / abs(sum_compare['日均销量提升数']).sum()  # 涨跌幅占比
    sum_compare['日均销量提升率'] = sum_compare['日均销量提升数']/(sum_compare['原销量合计']/old_days)
    sum_compare['日均销量提升数'] = sum_compare['日均销量提升数'].round(1)
    increase = sum_compare[(sum_compare['日均销量提升占比'] >= min_increase_percent) & ((sum_compare['原销量占比'] >= min_percent) | (sum_compare['新销量占比'] >= min_percent))]
    decrease = sum_compare[(sum_compare['日均销量提升占比'] <= -min_increase_percent) & ((sum_compare['原销量占比'] >= min_percent) | (sum_compare['新销量占比'] >= min_percent))]
    increase.loc[:, '日均销量提升率'] = increase.loc[:, '日均销量提升率'].apply(lambda x: format(x, '.1%')) #转化成百分比形式
    decrease.loc[:, '日均销量提升率'] = decrease.loc[:, '日均销量提升率'].apply(lambda x: format(x, '.1%'))  # 转化成百分比形式
    increase.loc[:, '日均销量提升占比'] = increase.loc[:, '日均销量提升占比'].apply(lambda x: format(x, '.1%')) #转化成百分比形式
    decrease.loc[:, '日均销量提升占比'] = decrease.loc[:, '日均销量提升占比'].apply(lambda x: format(x, '-.1%'))  # 转化成百分比形式
    increase.loc[:, '结果'] = increase.loc[:, compare_column_name] + ',' + increase.loc[:, '日均销量提升数'].map(str) + ',' \
                            + increase.loc[:, '日均销量提升率'].map(str) + ',' + increase.loc[:, '日均销量提升占比'].map(str)
    decrease.loc[:, '结果'] = decrease.loc[:, compare_column_name] + ',' + decrease.loc[:, '日均销量提升数'].map(str) + ',' \
                            + decrease.loc[:, '日均销量提升率'].map(str) + ',' + decrease.loc[:, '日均销量提升占比'].map(str)
    increase.sort_values(by='日均销量提升数', ascending=False, inplace=True)
    decrease.sort_values(by='日均销量提升数', ascending=True, inplace=True)

    #最后返回结果
    increase_list = increase['结果'].tolist()
    decrease_list = decrease['结果'].tolist()
    if not increase_list: increase_list = []
    if not decrease_list: decrease_list = []
    return increase_list, decrease_list

def get_deep_reason(list, value, old_file, new_file):
    '''根据传入的参数,获得进一步分析'''
    for i in range(len(list)):
        temp_answer = list[i]
        name = temp_answer.split(',')[0]
        print('{}、在{}中:'.format(i+1, name))
        old_file_temp = old_file[old_file.loc[:, key] == name]
        new_file_temp = new_file[new_file.loc[:, key] == name]
        for j in range(len(value)):
            element = value[j]
            increase_list, decrease_list = compare(element, old_file=old_file_temp, new_file=new_file_temp)
            if increase_list == []: increase_list = '无'
            if decrease_list == []: decrease_list = '无'
            # if increase_list and decrease_list:
            print('({})、在{}中,日均提升幅度较大的包括:{};日均下降幅度较大的包括:{}'.format(j+1, element, increase_list, decrease_list))
            # elif increase_list and not decrease_list:
            #     print('({})、在{}中,日均提升幅度较大的包括:{};无{}日均下降幅度较大'.format(j + 1, element, increase_list, element))
            # elif not increase_list and decrease_list:
            #     print('({})、在{}中,无{}日均提升幅度较大;日均下降幅度较大的包括:{}'.format(j + 1, element, element, decrease_list))

if __name__ == "__main__":
    warnings.filterwarnings("ignore")
    # 第一步:导入文件
    orignal_old_file = pd.read_table('old_file.xls', engine='python')
    orignal_new_file = pd.read_table('new_file.xls', engine='python')
    store_match_table = pd.read_excel(r"C:\Users\Administrator\Desktop\报表\数据\数据说明与匹配公式.xlsx", '部门匹配表')
    tc_match_table = pd.read_excel(r"C:\Users\Administrator\Desktop\报表\数据\数据说明与匹配公式.xlsx", '套餐匹配表')
    qd_match_table = pd.read_excel(r"C:\Users\Administrator\Desktop\报表\数据\数据说明与匹配公式.xlsx", '渠道大小类对应表')
    # print(old_file.columns)

    #第二步:初始化条件列表
    councilName_dict = {'销售区局': '浦东电信局', '促销区局': '浦东电信局', '(初始)发展区局': '浦东', '区局': '浦东'}
    tcName_dict = {'套餐名称': 'cdma', '统计月营销活动名称': 'kd', '营销活动名称': 'kd'}
    storeName_list = ['发展部门名称', '促销部门', '(初始)发展部门名称', '发展部门统计门店名称']
    dateName_list = ['统计日期', '完工日期', '安装日期']
    qdxl_list = ['发展渠道小类', '(初始)发展渠道小类描述', '发展渠道小类描述']
    useless_tcs = ['2014校园积木宽带体验套餐,0元/月']
    number_dict = {1: '一、', 2: '二、', 3: '三、', 4: '四、', 5: '五、', 6: '六、'}

    #第三步:设定需要分析的主字段(key)和辅助字段(value)
    analyze_dict = {'渠道管理细分': ['代理商', '部门', '套餐归类', '套餐全称'], '代理商': ['部门', '套餐归类']}
    # analyze_dict = {'渠道管理细分': []}
    #第三步:获得整理好的清单
    old_file = get_file(orignal_old_file)
    new_file = get_file(orignal_new_file)
    global old_days
    old_days = get_days(old_file) #旧数据中的统计天数
    global new_days
    new_days = get_days(new_file) #新数据中的统计天数
    get_total_upgrade(old_file, new_file)

    # print('下列展现的列表中,第一个是对象名,第二个是提升/下降量,第三个是提升/下降比,第四个是提升/下降在这一层因素中的占比')
    #第四步:进行分析(分析目的:获知不同渠道的提升/下降中,哪个渠道为主要因素,且获知在这个渠道中各项子主要因素是什么)
    n = 1
    for key, value in analyze_dict.items():
        increase_list, decrease_list = compare(key, old_file=old_file, new_file=new_file)
        fact_list = increase_list + decrease_list
        if increase_list == []: increase_list = '无'
        if decrease_list == []: decrease_list = '无'
        number = number_dict[n]
        print('{}在{}中,日均提升幅度较大的包括:{};日均下降幅度较大的包括:{}'.format(number, key, increase_list, decrease_list))
        get_deep_reason(fact_list, value, old_file, new_file)
        n += 1
        print('-'*200)



版权声明:本文为weixin_42029733原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。