python數(shù)據(jù)預(yù)處理實(shí)戰(zhàn)2.0


前言

最近在之前的數(shù)據(jù)基本預(yù)處理工作之上功蜓,增加了兩個(gè)新的工作宠蚂。

1.數(shù)據(jù)擴(kuò)容,將數(shù)據(jù)的維度由3列擴(kuò)容到13列

2.對(duì)于數(shù)據(jù)擴(kuò)容后的數(shù)據(jù)求厕,進(jìn)行兩方面的條件篩選:
a.通過(guò)pid呀癣、起止時(shí)間查詢(xún) getInfoBypidtime(方法名)
b.通過(guò)pid、星期项栏、規(guī)定時(shí)段查詢(xún) getInfoBypid_wk_trange(方法名)


數(shù)據(jù)擴(kuò)容

之前規(guī)整后的數(shù)據(jù)有三列
數(shù)據(jù)格式如下:

2017-08-28 23:37:00,14,84742aa602e4

現(xiàn)在想對(duì)數(shù)據(jù)進(jìn)行擴(kuò)容處理沼沈,增加列數(shù),以便于后續(xù)更加復(fù)雜的數(shù)據(jù)處理

設(shè)定各個(gè)列的屬性為:

[原數(shù)據(jù),時(shí)間戳,年,月,日,時(shí),分,秒,星期,分秒,pid,mac,是否為節(jié)假日]

擬得到的數(shù)據(jù)形式為:

2017-08-28 23:37:00,1503934620,2017,8,28,23,37,0,0,2337,14,84742aa602e4,N

數(shù)據(jù)擴(kuò)容 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'

"""
增加打散數(shù)據(jù)的維度
原數(shù)據(jù),時(shí)間戳,年,月,日,時(shí),分,秒,星期,分秒,pid,mac,是否為節(jié)假日
"""


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']
#節(jié)假日數(shù)組芽腾,字符串類(lèi)型

rs = open('./macdata/normalinfo_add.txt', 'w')
#輸出文件為:normalinfo_add.txt

with open('./macdata/normal_origin_info.txt') as file:
#打開(kāi)文件

    for line in file:

        new_line = []
        #將每行對(duì)應(yīng)的原始數(shù)據(jù)擴(kuò)容后的數(shù)據(jù)页衙,每項(xiàng)寫(xiě)入新列表
        line = line.split(',')
        new_line.append(line[0])
        #保留源數(shù)據(jù)(第一列)

        timeArray = time.strptime(line[0], "%Y-%m-%d %H:%M:%S")
        #生成時(shí)間數(shù)組

        hr_min = str(timeArray.tm_hour) + str(timeArray.tm_min)

        new_line.append(int(time.mktime(timeArray)))
        #添加時(shí)間戳
        new_line.append(timeArray.tm_year)
        #年份
        new_line.append(timeArray.tm_mon)
        #月份
        new_line.append(timeArray.tm_mday)
        #日期
        new_line.append(timeArray.tm_hour)
        #小時(shí)
        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)
        #小時(shí)+分鐘  format:2337

        new_line.append(line[1])
        #地點(diǎn)id
        new_line.append(line[2])
        #mac info

        if  line[0][:10] in holiday:
            new_line.append('Y')
        else:
            new_line.append('N')
        #是否是節(jié)假日

        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

數(shù)據(jù)篩選

好了,數(shù)據(jù)擴(kuò)容(數(shù)據(jù)進(jìn)一步規(guī)整化了)之后描滔,要對(duì)得到的數(shù)據(jù)進(jìn)行進(jìn)一步的篩選
這里得自己寫(xiě)篩選條件
方法1:getInfoBypidtime(pid,start_time,end_time)
參數(shù)說(shuō)明:

pid:地點(diǎn)id
start_time:查詢(xún)開(kāi)始時(shí)間踪古,格式為:'2017-08-28'
end_time:查詢(xún)結(jié)束時(shí)間,格式為:'2017-08-28'

方法2:getInfoBypid_wk_trange(idplaces,weekday,timeranges)
參數(shù)說(shuō)明:

pid:地點(diǎn)集合拘泞,格式為:[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'

"""
查詢(xún)數(shù)據(jù)
1.通過(guò)pid、起止時(shí)間查詢(xún)
2.通過(guò)pid、星期染簇、規(guī)定時(shí)段查詢(xún)
"""

# 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')
#字符串轉(zhuǎn)時(shí)間
while sdate<edate:
    weekdaylist.append(sdate.strftime('%Y-%m-%d'))
    sdate += datetime.timedelta(days=1)
#得到起止日期中的所有日期
wlist=[]
#目標(biāo)工作日
for i in xrange(len(weekdaylist)):
    if  datetime.datetime.strptime(weekdaylist[i],'%Y-%m-%d').weekday() == weekday-1:
        wlist.append(weekdaylist[i])
        i = i+7
#將符合weekday參數(shù)的工作日篩選出來(lái)
#其實(shí)上面weekday的代碼沒(méi)什么用锻弓,但蝌箍,代表了筆者的一段心路歷程w



def getInfoBypidtime(idplace,sdatetime,edatetime):

    records = pd.read_csv('./macdata/normalinfo_add.txt', names=['time','ts','year','month','day','hour','min','sec','weekday','min_hr','pid','mac','isholiday'],usecols=[0,10,11])
    #usecols選取指定列(這里選了三列,源數(shù)據(jù)時(shí)間列妓盲,pid列,mac列),若選取全部列則會(huì)出現(xiàn)memoryerror(說(shuō)多了都是淚)

    s = sdatetime[5:7]+sdatetime[8:10]
    e = edatetime[5:7]+edatetime[8:10]
    #輸出文件名規(guī)范
    idplace_time_info = records[ (records['pid'] == idplace) & (records['time'] > sdatetime) & (records['time'] < edatetime) ]
    #篩選符合條件的數(shù)據(jù)
    outputpath = './macdata/selectinfo/' + 'pid_' + str(idplace) + '_' + s + '-' + e + '.csv'
    idplace_time_info.to_csv(outputpath, header=False, index=False)


"""
規(guī)整前的數(shù)據(jù):
2017-08-28 23:37:00,14,84742aa602e4
規(guī)整后的數(shù)據(jù):
2017-08-28 23:37:00,ts,2017,08,28,23,37,00,1,2337,14,84742aa602e4,N
帶入的參數(shù):
[1,2], [4,5],[[830,900],[1400,1600]]
"""
#以上是方法二的輸入?yún)?shù)規(guī)范

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])
    #方法二輸出文件名規(guī)范

    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])<timeranges[i][1]:
                    if int(line[8]) in weekdays and int(line[10]) in idplaces:
                    #兩層篩選甚亭,第一層篩時(shí)間數(shù)組击胜,第二層篩pid
                        line[-2] = line[-2].strip('\n')
                        line[-1] = line[-1].strip('\n')
                        line2 = str(line)
                        line2 = line2.strip('[').strip(']').replace("'", "").replace(" ","")
                        #去空格偶摔,去單引號(hào)
                        line2 = line2[:10]+' '+line2[10:]
                        #時(shí)間重新拼接

                        rs.write(str(line2)+'\n')
    rs.close()

getInfoBypid_wk_trange(idplaces,weekday,timeranges)
# getInfoBypidtime(pid,start_time,end_time)

到這里位置,畢業(yè)設(shè)計(jì)的數(shù)據(jù)預(yù)處理工作已經(jīng)完成了
撒花辰斋!★,°:.☆( ̄▽?zhuān)?/$:.°★

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末够挂,一起剝皮案震驚了整個(gè)濱河市藕夫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌办悟,老刑警劉巖滩褥,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異铡恕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)探熔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)诀艰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人其垄,你說(shuō)我怎么就攤上這事”弁猓” “怎么了喇颁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蔫浆。 經(jīng)常有香客問(wèn)我姐叁,道長(zhǎng),這世上最難降的妖魔是什么外潜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任处窥,我火速辦了婚禮,結(jié)果婚禮上碧库,老公的妹妹穿的比我還像新娘。我一直安慰自己弄匕,他們只是感情好沽瞭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著城丧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亡哄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天愿卸,我揣著相機(jī)與錄音截型,去河邊找鬼。 笑死发钝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酝豪。 我是一名探鬼主播舔痪,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锌唾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了滋捶?” 一聲冷哼從身側(cè)響起余黎,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巡扇,沒(méi)想到半個(gè)月后垮衷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刀闷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顽分。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片施蜜。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖悬秉,靈堂內(nèi)的尸體忽然破棺而出冰蘑,到底是詐尸還是另有隱情和泌,我是刑警寧澤祠肥,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布仇箱,位于F島的核電站,受9級(jí)特大地震影響剂桥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜权逗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一斟薇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堪滨,春花似錦、人聲如沸遏乔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)筐咧。三九已至噪矛,卻和暖如春铺罢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缩滨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工泉瞻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袖牙。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓鞭达,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親畴蹭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容