python 및 머신러닝 교육, 슬로우캠퍼스



timedelta값을 실수(real, float) 또는 정수(integer)로 변환(convert)하는 함수 구현.


timedeltas는 시,초,microseonds를 나타내는 attribute를 갖고 있다. 

이들 값에서 구하여야 한다.

초단위 이하의 값에 대해 반올림(반내림)을 하기 위해 round() 함수를 사용한다.




import time

import datetime


def timedelta2float(td):

        res = td.microseconds/float(1000000) + (td.seconds + td.days * 24 * 3600)

        return res


def timedelta2int(td):

        res = round(td.microseconds/float(1000000)) + (td.seconds + td.days * 24 * 3600)

        return res


dateval1 = datetime.datetime.strptime("25-01-2013 00:00:03:238", "%d-%m-%Y %H:%M:%S:%f")

dateval2 = datetime.datetime.strptime("25-01-2013 00:00:03:950", "%d-%m-%Y %H:%M:%S:%f")

dateval3 = datetime.datetime.strptime("25-01-2013 00:01:04:614", "%d-%m-%Y %H:%M:%S:%f")


diff1 = dateval2 - dateval1

diff2 = dateval3 - dateval1

print "datetime:", diff1

print timedelta2float(diff1)

print timedelta2int(diff1)

print


print "datetime:", diff2

print timedelta2float(diff2)

print timedelta2int(diff2)

print




결과:

datetime: 0:00:00.712000
0.712
1.0

datetime: 0:01:01.376000
61.376
61.0


WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스


리스트내의 element끼리 더하는 연산 만들기:
즉, 아래와 같이 연산이 되게 만들고 싶다. vector의 더하기 연산과 같다.
[1,2,3] + [10,20,30] --> [11,22,33]

operator 모듈과 map() 함수를 이용한다.

import operator

A=[1,2,3]

B=[10,20,30]

C = map(operator.add, A, B)

print C


결과: [11, 22, 33]


Vector sum 구하기: vector addition을 loop를 돌면서 수행.
import operator


a=[ [1,2,3] , [10,20,30], [100,200,300] ]

s=[0, 0, 0] # 합계 결과 저장용 변수

for i in a:

        s = map(operator.add, s, i)

        print s


결과:
[1,2,3]
[11,22,33]
[111,222,333]


주의: python 자체의 list끼리 더하기 연산은 append 연산이다.
# python
>> [1,2] + [3,4]
[1,2,3,4]



WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스


python으로 로그 파일의 시간값 처리할 때 milli-second까지 처리하고 싶다면?



strptime() 을 이용하여 문자열을 시간값으로 변환할 수 있다.

문자열에 포함된  milli second까지 해석하고 싶다면

time 패키지가 아니라 datetime 패키지를 이용하여야 한다.


 "%d-%m-%Y %H:%M:%S:%f" 에서 "%f"가 milli second 에 해당한다.


dateval1 = datetime.datetime.strptime("25-01-2013 00:00:03:238", "%d-%m-%Y %H:%M:%S:%f")
dateval2 = datetime.datetime.strptime("25-01-2013 00:00:03:938", "%d-%m-%Y %H:%M:%S:%f")


아래의 time.strptime()는 second 단위까지만 해석해 준다.

dateval1 = time.strptime("25-01-2013 00:00:03:238", "%d-%m-%Y %H:%M:%S:%f")

dateval2 = time.strptime("25-01-2013 00:00:03:938", "%d-%m-%Y %H:%M:%S:%f")



WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스

기능:
며칠전부터 오늘까지 일자별로 처리하기.
며칠전부터 오늘까지 시간별로 처리하기. 

* datetime  패키지에서 제공하는 timedelta 클래스를 잘 활용하여 구현


소스: 

import time

import datetime


# refer: http://docs.python.org/library/datetime.html


# step = 1 day. use 'date' object

oneday = datetime.timedelta(days=1)

startday = datetime.date(2011, 10, 6)

today = datetime.date.today()

#today = datetime.date.fromtimestamp(time.time())


while startday < today:

        print startday, startday.isoformat()

        startday += oneday



# step = 1 hour. use 'datetime' object

onehour = datetime.timedelta(hours=1)

startday = datetime.datetime(2011, 10, 6, hour=11)

#today = datetime.datetime.fromtimestamp(time.time())

today = datetime.datetime.today()


while startday < today:

        print startday, startday.isoformat(' '), startday.strftime('%Y-%m-%d-%H')

        startday += onehour 


실행결과:

2011-10-06 2011-10-06

2011-10-07 2011-10-07

2011-10-08 2011-10-08

2011-10-09 2011-10-09

2011-10-10 2011-10-10
 

2011-10-06 11:00:00 2011-10-06 11:00:00 2011-10-06-11

2011-10-06 12:00:00 2011-10-06 12:00:00 2011-10-06-12

2011-10-06 13:00:00 2011-10-06 13:00:00 2011-10-06-13

2011-10-06 14:00:00 2011-10-06 14:00:00 2011-10-06-14






WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,