def write_renew_report(file_name, nick_list): """收集nick_list的报表""" print_keys = ['nick', 'campaign', 'multi_cost', 'multi_cpc', 'multi_roi', \ 'multi_cvr', 'multi_ctr', 'count_days'] header_keys = ['店铺昵称', '计划名称', '多天花费', '多天cpc', '多天roi', '多天转化率',\ '多天点击率', '统计天数'] write_obj = file(CURRENT_DIR+'data/renew_report.csv', 'w') write_obj.write(','.join(header_keys)+'\n') for line in file(file_name): campaign = Report.parser_report(line) if not campaign: continue if campaign['nick'] in nick_list: report_str = [] for key in print_keys: if key in ['multi_cost', 'multi_cpc']: campaign[key] /= 100.0 elif key in ['multi_cvr', 'multi_ctr', 'multi_roi']: campaign[key] = '%.3f' % campaign[key] report_str.append(str(campaign[key])) write_obj.write(','.join(report_str)+'\n') write_obj.close()
def analysis_campaign_horizontal(file_name): """ 多个计划的 横向对比分析 """ NICK = None CAMPAIGN_LIST = [] NUMBER_DICT = {} content = '' for key in SOFT_LIST[1:]: NUMBER_DICT[key] = Compare() for line in file(file_name): campaign = Report.parser_report(line) if not campaign: continue if not NICK or campaign['nick'] == NICK: if campaign['campaign'].find('省油宝长尾计划') != -1: CAMPAIGN_LIST.insert(0, campaign) else: CAMPAIGN_LIST.append(campaign) if not NICK: NICK = campaign['nick'] else: NICK = campaign['nick'] analysis(CAMPAIGN_LIST, NUMBER_DICT) CAMPAIGN_LIST = [] content += '下面为相应指标好的个数\n' for key in NUMBER_DICT: _compare_result = NUMBER_DICT[key] content += '省油宝长尾计划 与 ' + key + ': ' + str(_compare_result.total) _result = _compare_result.result content += '\n多天ROI: %d %d\n' % (_result[0][0], _result[0][2]) content += '多天成交额: %d %d\n' % (_result[1][0], _result[1][2]) content += '单天ROI: %d %d\n' % (_result[2][0], _result[2][2]) return content
def write_renew_report(file_name, nick_list): """收集nick_list的报表""" print_keys = ['nick', 'campaign', 'multi_cost', 'multi_cpc', 'multi_roi', \ 'multi_cvr', 'multi_ctr', 'count_days'] header_keys = ['店铺昵称', '计划名称', '多天花费', '多天cpc', '多天roi', '多天转化率',\ '多天点击率', '统计天数'] write_obj = file(CURRENT_DIR + 'data/renew_report.csv', 'w') write_obj.write(','.join(header_keys) + '\n') for line in file(file_name): campaign = Report.parser_report(line) if not campaign: continue if campaign['nick'] in nick_list: report_str = [] for key in print_keys: if key in ['multi_cost', 'multi_cpc']: campaign[key] /= 100.0 elif key in ['multi_cvr', 'multi_ctr', 'multi_roi']: campaign[key] = '%.3f' % campaign[key] report_str.append(str(campaign[key])) write_obj.write(','.join(report_str) + '\n') write_obj.close()
def analysis_campaign_simple(file_name): """ get simple report """ soft_list = ['省油宝长尾计划', '省油宝加力计划', '广撒网计划', '喜宝计划', '极品飞车', '懒人开车', '疯狂车手', '大麦'] soft_statistics_dict = {} for key in soft_list: soft_statistics_dict[key] = Statistics() for line in file(file_name): report = Report.parser_report(line) if not report: continue for campaign_name in soft_list: if report['campaign'].find(campaign_name) != -1: soft_statistics_dict[campaign_name].statistics(report) content = '' for key in soft_list: result = soft_statistics_dict[key] content += key + '\n' content += '有效数(多天花费不为0):%d, 多天花费为0数:%d\n' % (result.count, result.unnormal_count) content += '昨天 有效用户的平均花费:%.1f, 平均成交额:%.1f, 平均ROI:%.1f, 平均CPC:%.1f\n' % \ (result.sum_cost / result.count, result.sum_pay / result.count, \ result.sum_pay / result.sum_cost, result.sum_cost / result.sum_click) content += '昨天 有效用户中ROI为0数:%d, 占比:%.2f\n' % (result.low_roi_count, \ result.low_roi_count / (result.count + 0.001)) content += '多天 有效用户的平均花费:%.1f, 平均成交额:%.1f\n' % \ (result.sum_multi_cost / result.count, result.sum_multi_pay / result.count) content += '多天 有效用户的日均花费:%.1f, 日均成交额:%.1f, 日均ROI:%.1f\n\n' % \ (result.sum_day_cost / result.count, result.sum_day_pay / result.count, \ result.sum_day_pay / result.sum_day_cost) return content
def analysis_campaign_simple(file_name): """ get simple report """ soft_list = ['广撒网计划', '喜宝计划', '极品飞车', '懒人开车', '疯狂车手', '大麦'] soft_statistics_dict = {} for key in soft_list: soft_statistics_dict[key] = Statistics() for line in file(file_name): report = Report.parser_report(line) if not report: continue for campaign_name in soft_list: if report['campaign'].find(campaign_name) != -1: soft_statistics_dict[campaign_name].statistics(report) content = '' for key in soft_list: result = soft_statistics_dict[key] if result.count <= 0: continue content += key + '如下所有指标都是针对计划的\n' content += '有效数(多天花费不为0):%d, 无效数(多天花费为0数):%d\n' % ( result.count, result.unnormal_count) content += '有效用户的昨日 平均花费:%.1f, 平均成交额:%.1f, 平均ROI:%.1f, 平均CPC:%.1f\n' % \ (result.sum_cost / result.count, result.sum_pay / result.count, \ result.sum_pay / result.sum_cost, result.sum_cost / result.sum_click) content += '有效用户中昨日 ROI为0数:%d, 占比:%.2f\n' % (result.low_roi_count, \ float(result.low_roi_count) / result.count) content += '有效用户多天花费的平均值:%.1f, 多天成交额平均值:%.1f\n' % \ (result.sum_multi_cost / result.count, result.sum_multi_pay / result.count) content += '有效用户的日均花费的平均值:%.1f, 日均成交额的平均值:%.1f, 日均ROI:%.1f\n\n' % \ (result.sum_day_cost / result.count, result.sum_day_pay / result.count, \ result.sum_day_pay / result.sum_day_cost) return content
def collect_all_shop(file_name, campaign_name): """收集所有店铺""" campaign_list = [] for line in file(file_name): campaign = Report.parser_report(line) if not campaign: continue if campaign['campaign'] == '账户整体情况': shop = campaign continue if campaign['campaign'].find(campaign_name) != -1: if campaign['nick'] != shop['nick']: print '出现不一致:',shop['nick'] Report.add_shop(campaign, shop) #排除非正常 数据 if campaign['count_days'] <= 0: continue if campaign['multi_cost'] > campaign['shop_multi_cost'] or \ campaign['multi_pay'] > campaign['shop_multi_pay']: continue campaign_list.append(campaign) return campaign_list
def collect_all_shop(file_name, campaign_name): """收集所有店铺""" campaign_list = [] for line in file(file_name): campaign = Report.parser_report(line) if not campaign: continue if campaign['campaign'] == '账户整体情况': shop = campaign continue if campaign['campaign'].find(campaign_name) != -1: if campaign['nick'] != shop['nick']: print '出现不一致:', shop['nick'] Report.add_shop(campaign, shop) #排除非正常 数据 if campaign['count_days'] <= 0: continue if campaign['multi_cost'] > campaign['shop_multi_cost'] or \ campaign['multi_pay'] > campaign['shop_multi_pay']: continue campaign_list.append(campaign) return campaign_list
def analysis_campaign_complex(file_name, campaign_name): """详细分析 某个计划""" campaign_list = [] for line in file(file_name): campaign = Report.parser_report(line) if not campaign: continue if campaign['campaign'] == '账户整体情况': shop = campaign continue if campaign['campaign'].find(campaign_name) != -1: if campaign['nick'] != shop['nick']: print '出现不一致:', shop['nick'] Report.add_shop(campaign, shop) #排除非正常 数据 if campaign['count_days'] <= 0: continue if campaign['multi_cost'] > campaign['shop_multi_cost'] or \ campaign['multi_pay'] > campaign['shop_multi_pay']: continue campaign_list.append(campaign) zero_cost = 0 multi_roi_zero = 0 multi_roi_unzero = 0 multi_roi_bigger_2 = 0 sum_key_dict = {} main_keys = [] daily_keys = [ 'multi_pv', 'multi_click', 'multi_cost', 'multi_pay', 'multi_pay_count' ] for key in MAIN_KEYS: main_keys.append(key) main_keys.append('shop_' + key) main_keys.extend(['multi_cost_percent', 'multi_pay_percent']) for key in main_keys: sum_key_dict[key] = 0 for key in daily_keys: sum_key_dict['daily_' + key] = 0 multi_cost_percent_bigger_9 = 0 multi_cost_percent_bigger_5 = 0 for campaign in campaign_list: if campaign['multi_cost'] <= 0: zero_cost += 1 continue for key in main_keys: sum_key_dict[key] += campaign[key] for key in daily_keys: sum_key_dict['daily_' + key] += campaign[key] / campaign['count_days'] if campaign['multi_cost_percent'] >= 0.9: multi_cost_percent_bigger_9 += 1 if campaign['multi_cost_percent'] >= 0.5: multi_cost_percent_bigger_5 += 1 if campaign['multi_roi'] <= 0: multi_roi_zero += 1 else: multi_roi_unzero += 1 if campaign['multi_roi'] >= 2: multi_roi_bigger_2 += 1 unzero_cost = len(campaign_list) - zero_cost content = campaign_name + '的分析\n' content += '用户数:%d, 花费为0数:%d,花费不为0数:%d, 如下统计针对多天花费不为0的用户\n' % ( len(campaign_list), zero_cost, unzero_cost) content += '单天报表分析:\n' content += '昨日 平均花费:%.1f, 平均成交额:%.1f, 平均ROI:%.1f, 平均CPC:%.1f\n' % (\ sum_key_dict['cost'] / unzero_cost / 100, sum_key_dict['pay'] / unzero_cost / 100, \ sum_key_dict['pay'] / sum_key_dict['cost'], sum_key_dict['cost'] / sum_key_dict['click'] / 100) content += '昨日 平均展现:%d, 平均点击:%d, 平均点击率:%.3f, 平均转化率:%.3f\n' % (\ sum_key_dict['pv'] / unzero_cost, sum_key_dict['click'] / unzero_cost, \ sum_key_dict['click'] / (sum_key_dict['pv']+0.01), \ sum_key_dict['pay_count'] / (sum_key_dict['click']+0.01)) content += '多天报表分析:\n' content += '日均花费:%.1f, 日均成交额:%.1f, 日均ROI:%.1f, 日均CPC:%.1f\n' % (\ sum_key_dict['daily_multi_cost'] / unzero_cost / 100, \ sum_key_dict['daily_multi_pay'] / unzero_cost / 100, \ sum_key_dict['daily_multi_pay'] / sum_key_dict['daily_multi_cost'],\ sum_key_dict['daily_multi_cost'] / sum_key_dict['daily_multi_click'] / 100) content += '日均展现:%d, 日均点击:%d, 日均点击率:%.3f, 日均转化率:%.3f\n' % (\ sum_key_dict['daily_multi_pv'] / unzero_cost, \ sum_key_dict['daily_multi_click'] / unzero_cost, \ sum_key_dict['daily_multi_click'] / (sum_key_dict['daily_multi_pv']+0.01),\ sum_key_dict['daily_multi_pay_count'] / (sum_key_dict['daily_multi_click']+0.01)) content += '多天ROI大于0数:%d,占比:%.1f,多天ROI大于2数:%d,占比:%.1f\n' %(multi_roi_unzero,\ float(multi_roi_unzero) / unzero_cost, multi_roi_bigger_2, float(multi_roi_bigger_2) / unzero_cost) content += '其中该计划多天花费占全店花费比 不小于0.9的 比例:%.2f, 不小于0.5的 比例:%.2f\n' % (\ float(multi_cost_percent_bigger_9)/unzero_cost , float(multi_cost_percent_bigger_5)/unzero_cost) content += '所有计划多天花费占所有全店多天 花费的比例:%.2f,所有计划多天成交占所有全店多天成交的比例:%.2f\n\n' % ( sum_key_dict['multi_cost'] / sum_key_dict['shop_multi_cost'], sum_key_dict['multi_pay'] / sum_key_dict['shop_multi_pay']) return content
def analysis_campaign_complex(file_name, campaign_name): """详细分析 某个计划""" campaign_list = [] for line in file(file_name): campaign = Report.parser_report(line) if not campaign: continue if campaign['campaign'] == '账户整体情况': shop = campaign continue if campaign['campaign'].find(campaign_name) != -1: if campaign['nick'] != shop['nick']: print '出现不一致:',shop['nick'] Report.add_shop(campaign, shop) campaign_list.append(campaign) zero_cost = 0 multi_roi_zero = 0 multi_roi_unzero = 0 multi_roi_bigger_2 = 0 sum_multi_roi = 0 sum_multi_pay = 0 sum_shop_multi_pay = 0 sum_multi_cost = 0 sum_shop_multi_cost = 0 sum_multi_cost_percent = 0 sum_multi_pay_percent = 0 multi_cost_percent_bigger_9 = 0 multi_cost_percent_bigger_5 = 0 for syb in campaign_list: if syb['multi_cost'] <= 0: zero_cost += 1 continue sum_multi_cost += syb['multi_cost'] sum_shop_multi_cost += syb['shop_multi_cost'] sum_multi_pay += syb['multi_pay'] sum_shop_multi_pay += syb['shop_multi_pay'] sum_multi_cost_percent += syb['multi_cost_percent'] sum_multi_pay_percent += syb['multi_pay_percent'] if syb['multi_cost_percent'] >= 0.9: multi_cost_percent_bigger_9 += 1 if syb['multi_cost_percent'] >= 0.5: multi_cost_percent_bigger_5 += 1 if syb['multi_roi'] <= 0: multi_roi_zero += 1 else: multi_roi_unzero += 1 sum_multi_roi += syb['multi_roi'] if syb['multi_roi'] >= 2: multi_roi_bigger_2 += 1 unzero_cost = len(campaign_list) - zero_cost content = campaign_name + '的简单分析' content += '用户数:%d,花费为0数:%d,花费不为0数:%d\n' % (len(campaign_list), zero_cost, unzero_cost) content += '多天ROI大于0数:%d,占比:%.1f,多天ROI大于2数:%d,占比:%.1f\n' %(multi_roi_unzero,\ float(multi_roi_unzero) / unzero_cost, multi_roi_bigger_2, float(multi_roi_bigger_2) / unzero_cost) content += '花费不为0的用户中\n' content += '多天花费占全店多天花费比例 的平均值:%.2f,多天成交占全店多天成交比例的平均值:%.2f\n' %(sum_multi_cost_percent / unzero_cost, sum_multi_pay_percent / unzero_cost) content += '其中多天花费占比 不小于0.9的 比例:%.2f, 不小于0.5的 比例:%.2f\n' % (\ float(multi_cost_percent_bigger_9)/unzero_cost , float(multi_cost_percent_bigger_5)/unzero_cost) content += '所有多天花费占所有全店多天花费的比例:%.2f,所有多天成交占所有全店多天成交的比例:%.2f\n' %(sum_multi_cost / sum_shop_multi_cost, sum_multi_pay / sum_shop_multi_pay) #content += '多天ROI大于0的用户的平均多天ROI:%.1f\n' % (sum_multi_roi / multi_roi_unzero) return content
def analysis_campaign_complex(file_name, campaign_name): """详细分析 某个计划""" campaign_list = [] for line in file(file_name): campaign = Report.parser_report(line) if not campaign: continue if campaign['campaign'] == '账户整体情况': shop = campaign continue if campaign['campaign'].find(campaign_name) != -1: if campaign['nick'] != shop['nick']: print '出现不一致:',shop['nick'] Report.add_shop(campaign, shop) #排除非正常 数据 if campaign['count_days'] <= 0: continue if campaign['multi_cost'] > campaign['shop_multi_cost'] or \ campaign['multi_pay'] > campaign['shop_multi_pay']: continue campaign_list.append(campaign) zero_cost = 0 multi_roi_zero = 0 multi_roi_unzero = 0 multi_roi_bigger_2 = 0 sum_key_dict = {} main_keys = [] daily_keys = ['multi_pv', 'multi_click', 'multi_cost', 'multi_pay', 'multi_pay_count'] for key in MAIN_KEYS: main_keys.append(key) main_keys.append('shop_'+key) main_keys.extend(['multi_cost_percent', 'multi_pay_percent']) for key in main_keys: sum_key_dict[key] = 0 for key in daily_keys: sum_key_dict['daily_'+key] = 0 multi_cost_percent_bigger_9 = 0 multi_cost_percent_bigger_5 = 0 for campaign in campaign_list: if campaign['multi_cost'] <= 0: zero_cost += 1 continue for key in main_keys: sum_key_dict[key] += campaign[key] for key in daily_keys: sum_key_dict['daily_'+key] += campaign[key] / campaign['count_days'] if campaign['multi_cost_percent'] >= 0.9: multi_cost_percent_bigger_9 += 1 if campaign['multi_cost_percent'] >= 0.5: multi_cost_percent_bigger_5 += 1 if campaign['multi_roi'] <= 0: multi_roi_zero += 1 else: multi_roi_unzero += 1 if campaign['multi_roi'] >= 2: multi_roi_bigger_2 += 1 unzero_cost = len(campaign_list) - zero_cost content = campaign_name + '的分析\n' content += '用户数:%d, 花费为0数:%d,花费不为0数:%d, 如下统计针对多天花费不为0的用户\n' % (len(campaign_list), zero_cost, unzero_cost) content += '单天报表分析:\n' content += '昨日 平均花费:%.1f, 平均成交额:%.1f, 平均ROI:%.1f, 平均CPC:%.1f\n' % (\ sum_key_dict['cost'] / unzero_cost / 100, sum_key_dict['pay'] / unzero_cost / 100, \ sum_key_dict['pay'] / sum_key_dict['cost'], sum_key_dict['cost'] / sum_key_dict['click'] / 100) content += '昨日 平均展现:%d, 平均点击:%d, 平均点击率:%.3f, 平均转化率:%.3f\n' % (\ sum_key_dict['pv'] / unzero_cost, sum_key_dict['click'] / unzero_cost, \ sum_key_dict['click'] / (sum_key_dict['pv']+0.01), \ sum_key_dict['pay_count'] / (sum_key_dict['click']+0.01)) content += '多天报表分析:\n' content += '日均花费:%.1f, 日均成交额:%.1f, 日均ROI:%.1f, 日均CPC:%.1f\n' % (\ sum_key_dict['daily_multi_cost'] / unzero_cost / 100, \ sum_key_dict['daily_multi_pay'] / unzero_cost / 100, \ sum_key_dict['daily_multi_pay'] / sum_key_dict['daily_multi_cost'],\ sum_key_dict['daily_multi_cost'] / sum_key_dict['daily_multi_click'] / 100) content += '日均展现:%d, 日均点击:%d, 日均点击率:%.3f, 日均转化率:%.3f\n' % (\ sum_key_dict['daily_multi_pv'] / unzero_cost, \ sum_key_dict['daily_multi_click'] / unzero_cost, \ sum_key_dict['daily_multi_click'] / (sum_key_dict['daily_multi_pv']+0.01),\ sum_key_dict['daily_multi_pay_count'] / (sum_key_dict['daily_multi_click']+0.01)) content += '多天ROI大于0数:%d,占比:%.1f,多天ROI大于2数:%d,占比:%.1f\n' %(multi_roi_unzero,\ float(multi_roi_unzero) / unzero_cost, multi_roi_bigger_2, float(multi_roi_bigger_2) / unzero_cost) content += '其中该计划多天花费占全店花费比 不小于0.9的 比例:%.2f, 不小于0.5的 比例:%.2f\n' % (\ float(multi_cost_percent_bigger_9)/unzero_cost , float(multi_cost_percent_bigger_5)/unzero_cost) content += '所有计划多天花费占所有全店多天 花费的比例:%.2f,所有计划多天成交占所有全店多天成交的比例:%.2f\n\n' %(sum_key_dict['multi_cost'] / sum_key_dict['shop_multi_cost'], sum_key_dict['multi_pay'] / sum_key_dict['shop_multi_pay']) return content