研一下半学期参加的比赛,失败原因如下:

第一,pandas几乎是从零开始,对于某些数据的清洗如果使用pandas封装的函数可能只需要很短的时间,但是使用python的判断语句会很慢,而且可能做不出来。

okay  2019/06/05 已学习

第二,因为赛题中需要自己构造训练数据和标签,对题目理解的不是很好,导致构造数据集的目标一直再修改,

第三,比赛之前虽然实现了和题目相关代码,以及可能用到的算法,但是仅仅关注的是代码中的含义和数据的变化,但是对于代码的作者对于这个问题的整体构架是不清楚的。

但是幸运的是最后在参考两个大佬的写的Idea之后也成功的构造出了训练的集,以及搭建了一个xgboost模型,作为一个三流学生也是唯一值得高兴的事吧!!!!!!!!!构建训练集参考的是小凤仙分享的idea, 对于模型的搭建参考的是鱼佬在知乎上分享的idea, 大家可以关注一下。。。。。。。。。。。

下面分享一下自己如何构造训练集和最后搭建的模型相关源码吧,感觉那个地方不好,大佬们可以指导一下,不胜感激!!!毕竟比赛不重要能有进步才重要。

首先是对静态广告数据中脏数据的清洗,静态广告数据中脏数据包括三种情况,

第一:  创建时间为0 , 将数据进行split()之后判断第二项数据是否是 '0', 是0的话就跳过

第二:  广告行业ID中出现多值的情况,  判断该列属性中是否存在(,)逗号  存在即跳过

第三: 某项数据记录中存在缺失,   判断标准是判断该条静态广告记录的长度是否为7   不是的话即跳过该记录

最后保存的结果形式为:

然后是对广告操作数据进行清洗,广告操作数据集中脏数据包括两种情况

第一: 广告创建修改时间是0230的记录,

第二: 该条广告操作记录中广告ID不存在于静态广告数据集中,之所以有这个判断是因为在构造训练集的时候,需要广告操作数据中的出价、人群定向以及投放时间这三个属性,也需要广告静态数据中的广告大小、广告行业ID一类的属性,如果广告ID只存在某一个文件中则无法构造数据集,

在保存广告操作数据时,最后做了两项工作,

第一:  当该条记录表示的为创建操作时,将该条记录中的创建时间中的‘0’,修改成对应的静态广告数据中的创建时间。

第二:  为了简化处理,暂且不考虑广告操作数据集中的修改操作,注意这样处理会存在缺失一些训练数据的

最后广告操作数据集的保存结果如下:

最后是对用户数据集进行清洗操作,用户数据并不存在异常数据,所以只需要正常保存即可。

最后在构造训练集的时候,当广告操作数据集中的人群定向中的属性是'ALL'时,这个时候就需要对每一列属性进行去重操作,并保留唯一值,赋值给广告操作中的人群定向。

下一节介绍我如何清洗曝光广告日志以及如何构建标签的。

1、清洗静态广告和动态广告中的脏数据的代码

# -*- coding: utf-8 -*-
# @Time    : 2019/4/30 14:49
# @Author  : YYLin
# @Email   : 854280599@qq.com
# @File    : Dataload_Ad_Data.py
import pandas as pd
import time# 当load_ad值为 Static_Ad 表示清洗的是静态数据集
load_ad = 'Static_Ad'if load_ad == 'Static_Ad':# 将静态广告(ad_static_feature)转化成csv格式 对于创建时间这一列的数据集没有转化时间 待做 未完成# 19-04-19 已经将静态广告数据中的时间戳转化成对应的时间Ad_Static_Feature_Data = []# 定义曝光日志中的相关列Ad_Static_Feature_Data_columns = ['ad_id', 'Creation_time', 'Ad_account_id', 'Commodity_id', 'Commodity_type','Ad_Industry_Id', 'Ad_material_size']# 为数据集增加列名称Ad_Static_Feature_Data.append(Ad_Static_Feature_Data_columns)with open('../Dataset/tencent-dataset-19/ad_static_feature.out', 'r') as f:for i, line in enumerate(f):# print(i, ':', line,'\n', len(line), type(line))line = line.strip().split('\t')# print(i, ':', line,  '\n', type(line), len(line))# print('每一个元素的取值类型: ', type(line[1]), type(line[2]), type(line[3]), type(line[4]))# 测试数据集的时候使用# if i > 1000:# break# 分别用于判断该条广告数据是否存在记录缺失 是否创建时间为0 广告行业是否存在多值if line[1] == '0':# print("数据集中创建时间为0的数据集是: ", line)continueif ',' in line[5]:# print("数据集中广告行业ID存在多值记录是: ", line)continueif len(line) != 7:# print("广告数据集中出现缺失数据: ", line)continue# 4-19新加该功能 静态广告时间的格式是2018/6/26 4:35:50# print(line[1], type(line[1]), line)loacl_time = int(line[1])time_local = time.localtime(loacl_time)line[1] = time.strftime("%Y-%m-%d %H:%M:%S", time_local)Ad_Static_Feature_Data.append(line)print("***********userFeature_data[0]:\n", Ad_Static_Feature_Data[1])print("***********userFeature_data[0][1]:\n", Ad_Static_Feature_Data[1][0])user_feature = pd.DataFrame(Ad_Static_Feature_Data)user_feature.to_csv('../Dataset/tencent-dataset-19/dataset-for-train/Ad_Static_Feature_Data.csv', index=False, header=False)'''# 使用pandas删除不需要的列元素 测试完成 暂时不使用remove_data = pd.read_csv('../Dataset/tencent-dataset-19/dataset-for-train/Ad_Static_Feature_Data_redo.csv')print(remove_data.info())remove_data = remove_data.drop(['Ad_account_id'], axis=1)remove_data = remove_data.drop(['Commodity_id'], axis=1)remove_data.to_csv('../Dataset/tencent-dataset-19/dataset-for-train/Ad_Static_Feature_Data_redo.csv', index=False)'''
else:import linecacheimport sys# 用于将二维数组转化成一维数组import operatorfrom functools import reducedef get_next_line(i_row):line = linecache.getline('../Dataset/tencent-dataset-19/ad_operation.dat', (i_row))line = line.strip().split('\t')# print("当前数据行的值是:", line)line_next = linecache.getline('../Dataset/tencent-dataset-19/ad_operation.dat', (i_row + 1))line_next = line_next.strip().split('\t')return line_next# 读取静态广告数据集中的广告ID将其转化成list数据Exposure_Log_Data = pd.read_csv('data/Ad_Static_Feature_Data.csv')Ad_id_in_static = Exposure_Log_Data['ad_id']Ad_time_in_static = Exposure_Log_Data['Creation_time']# print("静态广告数据集中的广告id和时间分别是:\n", Ad_id_in_static.head(5), '\n', Ad_time_in_static.head(5))# 保存静态广告中广告ID和对应的时间  注意时间类型是str()list_Ad_id_in_static = list(Ad_id_in_static)# print('静态广告数据集中广告ID的取值和数据类型分别是:',# len(list_Ad_id_in_static), list_Ad_id_in_static[0:5], type(list_Ad_id_in_static[0]))list_Ad_time_in_static = list(Ad_time_in_static)# print('静态广告数据集中创建时间的取值和数据类型分别是:', len(list_Ad_time_in_static), list_Ad_time_in_static[0:5],# type(list_Ad_time_in_static[0]))# 将广告操作对应的数据集(ad_operation.dat)进行清洗 清洗的内容包括一下几个部分Ad_Operation_Data = []# 定义操作数据对应的序列Ad_Operation_Data_columns = ['ad_id', 'Create_modify_time', 'ad_bid', 'Chose_People', 'Delivery_time']# 为数据集增加列名称Ad_Operation_Data.append(Ad_Operation_Data_columns)All_kind_ad = []with open('../Dataset/tencent-dataset-19/ad_operation.dat', 'r') as f:for i, line in enumerate(f):# print(i, ':', line, '\n', len(line), type(line))line = line.strip().split('\t')# print(i, ':', line, '\n', len(line), type(line[2]))if (i % 10000) == 0:print("***********我已经执行了%d行"%(i))# 首先需要判断该条数据是否在静态数据集之中 不存在则删除if int(line[0]) not in list_Ad_id_in_static:# print("*******该条数据不存在于静态数据集之中,需要删除*******", line)continue# 使用line[2]修改广告操作数据集中的时间选项 并进行保存 验证成功if '20190230' in line[1]:# print('数据集中出现2月30号的数据已删除', line)continue# 首先需要广告操作数据集中的训练时间if len(line[1]) == 14:data_list = list(line[1])data_list.insert(4, '-')data_list.insert(7, '-')data_list.insert(10, ' ')data_list.insert(13, ':')data_list.insert(16, ':')line[1] = ''.join(data_list)# print(line[1])if line[2] == '2':# 修改广告的操作时间ad_id_index = list_Ad_id_in_static.index(int(line[0]))line[1] = list_Ad_time_in_static[ad_id_index]# 修改曝光广告位置的值All_kind_ad.append(line[4])list_next_data = get_next_line(i + 1)if list_next_data[2] == '1':tmp_value_ad_list = '?'.join(All_kind_ad)tmp_value_ad_list = tmp_value_ad_list.strip().split('?')# print("tmp_value_ad_list中的值是:\n", tmp_value_ad_list)line = line[0:2]line.append(tmp_value_ad_list[0])line.append(tmp_value_ad_list[1])line.append(tmp_value_ad_list[2])All_kind_ad = []elif list_next_data[2] == '2' and list_next_data[0] != line[0]:tmp_value_ad_list = '?'.join(All_kind_ad)tmp_value_ad_list = tmp_value_ad_list.strip().split('?')line = line[0:2]line.append(tmp_value_ad_list[0])line.append(tmp_value_ad_list[1])line.append(tmp_value_ad_list[2])All_kind_ad = []else:continueelif line[2] == '1':continueelse:print("广告操作类型既不是新建,也不是修改,:\n", line)sys.exit()Ad_Operation_Data.append(line)# if i >= 100:# break# sys.exit()# print("***********use Feature_data[0]:\n", Ad_Operation_Data[9])# print("***********userFeature_data[0][1]:\n", Ad_Operation_Data[9][1])Ad_Operation_Data = pd.DataFrame(Ad_Operation_Data)Ad_Operation_Data.to_csv('data/Ad_Operation_Data.csv', index=False, header=False)

2、清洗用户数据集的代码

# -*- coding: utf-8 -*-
# @Time    : 2019/4/30 14:40
# @Author  : YYLin
# @Email   : 854280599@qq.com
# @File    : Dataload_User.py
import pandas as pd
userFeature_data = []user_Feature_columns = ['user_id', 'Age', 'Gender', 'Area', 'Marriage_Status', 'Education', 'Consuption_Ability', 'Device','Work_Status', 'Connection_Type', 'Behavior']# 为数据集增加列名称 对于userFeature_data不需要对某一列的数据进行处理
userFeature_data.append(user_Feature_columns)
with open('../Dataset/tencent-dataset-19/user_data', 'r') as f:for i, line in enumerate(f):# print(i, ':', line,'\n', len(line), type(line))line = line.strip().split('\t')# print(i, ':', line, type(line),'\n', len(line))# if i > 1000:# breakuserFeature_data.append(line)print("***********userFeature_data[0]:\n", userFeature_data[1])
print("***********userFeature_data[0][1]:\n", userFeature_data[1][0])
user_feature = pd.DataFrame(userFeature_data)
print("***********正在保存数据集************")
user_feature.to_csv('data/userFeature.csv', index=False, header=False)

2019腾讯广告算法大赛之清洗广告数据集和用户数据集相关推荐

  1. 2019腾讯广告算法大赛之清洗曝光广告数据集以及构造标签

    首先是对清洗曝光广告日志中的脏数据进行清洗,脏数据主要包括三种情况, 第一: 该条广告记录中的广告ID不存在于静态广告数据和操作广告数据中,因为不存的话则该条数据无法构造训练集. 第二: 广告请求时间 ...

  2. 算法“视”界杯来袭,2021腾讯广告算法大赛正式开启

    全球算法达人注意啦,2021腾讯广告算法大赛强势归来!本届赛事围绕视频广告议题开设两大赛道--"视频广告秒级语义解析"与"多模态视频广告标签"两大前沿命题等你来 ...

  3. 一文梳理2019年腾讯广告算法大赛冠军方案

    ‍‍ 点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 作为从本次比赛共157队伍中脱颖而出的冠军方案,评分达到87.9683,从数据清 ...

  4. 2019腾讯广告算法大赛-冠军之路

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 写在前面 历时三个月腾讯广告算法大赛已经告一段落,在前两届成功经验的基础上,今年大赛在 ...

  5. 2019腾讯广告算法大赛方案分享(冠军)

    写在前面 队伍介绍:哈尔滨工业大学二年级硕士生刘育源.中山大学微软亚洲研究院联合培养博士生郭达雅和京东算法工程师王贺. 本文将给出冠军完整方案,全文内容架构将依托于答辩PPT,具体细节也会结合代码进行 ...

  6. 2019腾讯广告算法大赛完美收官,算法达人鹅厂“出道”

    7月8日,2019腾讯广告算法大赛"终极之战"在深圳腾讯滨海大厦顺利举行.在前两届成功经验的基础上,今年大赛在赛题专业性和赛事体验上都有了更大的提升,进而吸引了更多海内外优秀选手参 ...

  7. 2019腾讯广告算法大赛 决赛 Rank16解决方案

    2019腾讯广告算法大赛 决赛 Rank16解决方案 参考文章: (1)2019腾讯广告算法大赛 决赛 Rank16解决方案 (2)https://www.cnblogs.com/xianbin7/p ...

  8. 腾讯广告算法大赛2019

    大赛地址 https://algo.qq.com/application/home/information/info.html 大赛介绍 作为国内领先的大数据营销平台,全新升级的腾讯广告,以更强大的全 ...

  9. 备战2020腾讯广告算法大赛:(2017-2019比赛开源和数据等)

    期待与各位在2020腾讯社交广告算法大赛中相遇!!! 写在前面 最近突然之间讨论腾讯广告赛的人多了不少,也有很多人加我微信讨论19年腾讯赛的方案和代码.虽然2020腾讯赛还未开始,不过大家已经提前进入 ...

  10. 2020腾讯广告算法大赛:赛题理解与解题思路

    写在前面 期待已久的2020腾讯广告算法大赛终于开始了,本届赛题"广告受众基础属性预估".本文将给出解题思路,以及最完备的竞赛资料,助力各位取得优异成绩!!! 报名链接:https ...

最新文章

  1. php 注册回调函数,PHP回调函数
  2. 使用UML描述需求都实现的过程
  3. C#教程8:面向对象编程【01】
  4. IDE之VS:Visual Studio2017版本安装图文教程之详细攻略
  5. 关于CI的服务器与最佳实践,这里有一些思考 1
  6. 读取配置文件工程src目录下配置文件封装,如sms_format.properties
  7. Tomcat漏洞修复方法【补丁下载及安装详细流程】
  8. 异常mongodb:Invalid BSON field name XXXXXX:YYYYY.zz
  9. 在线钢琴html5,HTML5 迷你电子钢琴 | 在线作曲
  10. Linux mii-tool命令
  11. yolov3 指定gpu_干货|手把手教你在NCS2上部署yolov3-tiny检测模型
  12. Teamviewer远程黑屏
  13. Android Binder机制浅析
  14. java商品详情查询_商品详情页面的显示
  15. php验证码一直错误,yii2.0验证码总是错误
  16. 计算机改硬盘格式,硬盘格式转换,详细教您如何将硬盘mbr格式转换为gpt格式
  17. 加载java ie停止工作_IE报错“Internet Explorer 已停止工作”解决方案
  18. Eclipse创建java Web项目工程
  19. 站长如何打造个人品牌
  20. 替换加密(恺撒加密法)

热门文章

  1. Linux版phpstudy搭建
  2. Ubuntu18.04 wifi不稳定
  3. MacBook 与 AirPods 连接不稳定处理方案
  4. 关注点分离(Separation of concerns, SoC)
  5. 2016年中国的SaaS服务商企业研究
  6. wakeonlangui 下载_远程开机软件(Wake On Lan)下载 v2.11.18 官方中文版 - 比克尔下载
  7. unity3D实现小游戏案例--弹开小球
  8. Echarts制作动态K线图和分时图
  9. 面试时会问到的项目中的问题总汇
  10. oracle中查找执行效率低下的SQL