python数据预处理实战2.0


前言

最近在之前的数据基本预处理工作之上,增加了两个新的工作。

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])

到这里位置,毕业设计的数据预处理工作已经完成了
撒花!★,°:.☆( ̄▽ ̄)/$:.°★

你可能感兴趣的:(python数据预处理实战2.0)