前言:
本节主要介绍两个部分,第一个部分是介绍如何使用python将时间戳转化成我们需要的时间格式,第二个部分讲解在csv文件中如何根据已有时间信息,统计每天内每个广告数据出现的次数。
相关函数讲解
1: 如何使用python将时间戳转化成我们需要的时间格式, 直接使用封装好的time.localtime()即可,
time.localtime()输入的为整数类型的数据,输出的是一个包含 年、月、日 时、分、秒 的str类型数据。
2: datetime.datetime() 表示的是时间类、本程序中首先把原始的数据转化成datetime()类,用于后面提取出常用的属性有年月日
3:pandas中自带的去重函数drop_duplicates(),合并操作merge() 以及groupby() 见下一节。
# -*- coding: utf-8 -*-
# @Time : 2019/5/24 10:30
# @Author : YYLin
# @Email : GXY4250
# @File : timestamp_conversion.py
# 首先定义一列时间戳数据, 注意时间戳信息为int的数据
import time
list_timestamp = [1529958950, 1538221936, 1550731020, 1550439402, 1551920796, 1552467888]
for i, timestamp in enumerate(list_timestamp):
# 使用localtime将数据整数型的时间戳转化成对应的时间
time_local = time.localtime(timestamp)
# 第一种数据的保存格式是: 2019-03-13 17:04:48
# timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
# 第二种数据的保存格式是: 2018-06-26 如果不需要 - 只要去掉即可
time_local = time_local[0:9]
timestamp = time.strftime("%Y-%m-%d", time_local)
list_timestamp[i] = timestamp
print("将时间戳转化为时间之后的表达式是:", list_timestamp)
2、在csv文件中知道年月日,并且统计每个广告ID每天的出现次数。可以分成三步走。
1、 第一步将数据中时间信息中的年 月 日提取出来并单独新建一个属性列,
2、 按照年 月 日 以及广告ID进行groupby()操作,并统计其出现次数,得到新的series数据
3、 将原始数据和新的series数据进行拼接操作,即可得到统计量,最后使用to_csv()保存数据即可
![](https://i-blog.csdnimg.cn/blog_migrate/26051a74b997a73e1f4673a7c873593c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a5e77a6e9abb4941100a0bc5e5c4199.png)
相关代码:
# -*- coding: utf-8 -*-
# @Time : 2019/5/24 10:19
# @Author : YYLin
# @Email : GXY4250
# @File : count_ad_id_in_same_day.py
import pandas as pd
import datetime
import numpy as np
pd.set_option('display.max_columns', 1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth', 1000)
pd.set_option('display.max_rows', None)
# 生成点击数并且暂时删除测试集中没有的属性
Total_Exposure_Log_Data = pd.read_csv('data/ad_static_feature_top10000.csv')
print("原始数据集中的样式是:\n", Total_Exposure_Log_Data.info())
tfa = Total_Exposure_Log_Data.Creation_time.astype(str).apply(lambda x: datetime.datetime(int(x[:4]),
int(x[5:7]),
int(x[8:10])
))
Total_Exposure_Log_Data['tfa_year'] = np.array([x.year for x in tfa])
Total_Exposure_Log_Data['tfa_month'] = np.array([x.month for x in tfa])
Total_Exposure_Log_Data['tfa_day'] = np.array([x.day for x in tfa])
print("增加单独的年月日之后的数据形状是:\n", Total_Exposure_Log_Data.info())
# 得到分组之后的数据
Group_Exposure_Data = Total_Exposure_Log_Data.groupby(['tfa_year', 'tfa_month', 'tfa_day', 'ad_id']).size().reset_index()
Group_Exposure_Data = Group_Exposure_Data.rename(columns={0: 'Exposure_data'})
# 对得到的两组数据进行拼接操作
Total_Exposure_Log_Data_one = Total_Exposure_Log_Data.drop_duplicates(
subset=['tfa_year', 'tfa_month', 'tfa_day', 'ad_id'], keep="first").reset_index(drop=True)
Clicks_of_Exposure_Data = pd.merge(Total_Exposure_Log_Data_one, Group_Exposure_Data,
on=['tfa_year', 'tfa_month', 'tfa_day', 'ad_id'])
print("按照年月日 广告id和广告竞价进行分组之后的数据是:\n", Clicks_of_Exposure_Data.head(5))
Clicks_of_Exposure_Data.to_csv('data/count_the_number_of_ad_id.csv', index=False)