前言
最近在之前的数据基本预处理工作之上,增加了两个新的工作。
1.数据扩容,将数据的维度由3列扩容到13列
2.对于数据扩容后的数据,进行两方面的条件筛选:
a.通过pid、起止时间查询 getInfoBypidtime(方法名)
b.通过pid、星期、规定时段查询 getInfoBypid_wk_trange(方法名)
数据扩容
之前规整后的数据有三列
数据格式如下:
2017-08-28 23:37:00,14,84742aa602e4
现在想对数据进行扩容处理,增加列数,以便于后续更加复杂的数据处理
设定各个列的属性为:
[原数据,时间戳,年,月,日,时,分,秒,星期,分秒,pid,mac,是否为节假日]
拟得到的数据形式为:
2017-08-28 23:37:00,1503934620,2017,8,28,23,37,0,0,2337,14,84742aa602e4,N
数据扩容 python 代码如下:
# -*- coding: UTF-8 -*-
import csv
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from dateutil.parser import parse
import datetime
import time
__author__ = 'SuZibo'
"""
增加打散数据的维度
原数据,时间戳,年,月,日,时,分,秒,星期,分秒,pid,mac,是否为节假日
"""
holiday =['2017-09-02','2017-09-03','2017-09-09','2017-09-10','2017-09-16','2017-09-17','2017-09-23','2017-09-24','2017-10-01','2017-10-02','2017-10-03','2017-10-04','2017-10-05','2017-10-06','2017-10-07','2017-10-08','2017-10-14','2017-10-15','2017-10-21','2017-10-22','2017-10-28','2017-10-29','2017-11-04','2017-11-05','2017-11-11','2017-11-12']
#节假日数组,字符串类型
rs = open('./macdata/normalinfo_add.txt', 'w')
#输出文件为:normalinfo_add.txt
with open('./macdata/normal_origin_info.txt') as file:
#打开文件
for line in file:
new_line = []
#将每行对应的原始数据扩容后的数据,每项写入新列表
line = line.split(',')
new_line.append(line[0])
#保留源数据(第一列)
timeArray = time.strptime(line[0], "%Y-%m-%d %H:%M:%S")
#生成时间数组
hr_min = str(timeArray.tm_hour) + str(timeArray.tm_min)
new_line.append(int(time.mktime(timeArray)))
#添加时间戳
new_line.append(timeArray.tm_year)
#年份
new_line.append(timeArray.tm_mon)
#月份
new_line.append(timeArray.tm_mday)
#日期
new_line.append(timeArray.tm_hour)
#小时
new_line.append(timeArray.tm_min)
#分钟
new_line.append(timeArray.tm_sec)
#seconds
new_line.append(timeArray.tm_wday)
#星期几 0-6 0是周一
new_line.append(hr_min)
#小时+分钟 format:2337
new_line.append(line[1])
#地点id
new_line.append(line[2])
#mac info
if line[0][:10] in holiday:
new_line.append('Y')
else:
new_line.append('N')
#是否是节假日
rs.write(str(new_line[0])+','+str(new_line[1])+','+str(new_line[2])+','+str(new_line[3])+','+str(new_line[4])+','+str(new_line[5])+','+str(new_line[6])+','+str(new_line[7])+','+str(new_line[8])+','+str(new_line[9])+','+str(new_line[10])+','+str(new_line[11].strip('\n'))+','+str(new_line[12])+'\n')
#第12位mac地址后面自带换行符,要去掉
#最后+'\n'是为了文件换行
rs.close()
# 2017-08-28 23:37:00,14,84742aa602e4
# 2017-08-28 23:37:00,ts,2017,08,28,23,37,00,1,2337,14,84742aa602e4
数据筛选
好了,数据扩容(数据进一步规整化了)之后,要对得到的数据进行进一步的筛选
这里得自己写筛选条件
方法1:getInfoBypidtime(pid,start_time,end_time)
参数说明:
pid:地点id
start_time:查询开始时间,格式为:'2017-08-28'
end_time:查询结束时间,格式为:'2017-08-28'
方法2:getInfoBypid_wk_trange(idplaces,weekday,timeranges)
参数说明:
pid:地点集合,格式为:[151,152,153]
weekday:星期几的集合,格式为:[2,3,4]
timeranges:[[830,1200],[1400,1830],......]
python代码如下:
# -*- coding: UTF-8 -*-
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from dateutil.parser import parse
import datetime
__author__ = 'SuZibo'
"""
查询数据
1.通过pid、起止时间查询
2.通过pid、星期、规定时段查询
"""
# records = pd.read_csv('./macdata/normal_origin_info.txt',names=['time','idplace','mac'])
pid = 153
#place id
start_time = '2017-08-28 00:00:00'
end_time = '2017-09-28 00:00:00'
#自定 需要符合上述格式
start_date = '2017-08-28'
end_date = '2017-11-16'
weekdaylist =[]
sdate = datetime.datetime.strptime(start_date,'%Y-%m-%d')
edate = datetime.datetime.strptime(end_date,'%Y-%m-%d')
#字符串转时间
while sdate sdatetime) & (records['time'] < edatetime) ]
#筛选符合条件的数据
outputpath = './macdata/selectinfo/' + 'pid_' + str(idplace) + '_' + s + '-' + e + '.csv'
idplace_time_info.to_csv(outputpath, header=False, index=False)
"""
规整前的数据:
2017-08-28 23:37:00,14,84742aa602e4
规整后的数据:
2017-08-28 23:37:00,ts,2017,08,28,23,37,00,1,2337,14,84742aa602e4,N
带入的参数:
[1,2], [4,5],[[830,900],[1400,1600]]
"""
#以上是方法二的输入参数规范
idplaces = [151,152,153]
weekday = [2,3,4]
#0是周一
timeranges = [[830,1200],[1400,1830]]
def getInfoBypid_wk_trange(idplaces,weekdays,timeranges):
p = ''
w = ''
for i in xrange(len(idplaces)):
p += str(idplaces[i]) + '_'
for i in xrange(len(weekday)):
w += '_' + str(weekday[i])
#方法二输出文件名规范
outputpath2 = './macdata/selectinfo/' + 'pids_' + p + 'wkdays' + w + '.csv'
rs = open(outputpath2, 'w')
with open('./macdata/normalinfo_add.txt') as file:
# new_line =[]
for line in file:
line = line.split(',')
for i in xrange(len(timeranges)):
if int(line[9])>timeranges[i][0] and int(line[9])
到这里位置,毕业设计的数据预处理工作已经完成了
撒花!★,°:.☆( ̄▽ ̄)/$:.°★ 。