8.2.7 日付、時間および整数データ
OML4Pyには、日付、時間および整数を操作するためのデータ型が用意されています。
oml.Datetime
oml.Timezone
oml.Timedelta
oml.Integer
oml.Datetime
、oml.Timezone
、oml.Timedelta
およびoml.Integer
の属性およびメソッドの詳細は、Oracle Machine Learning for Python APIリファレンスを参照してください。
oml.Datetime
日付を作成するには、OML4Pyに含まれている日時モジュールの日時クラスを使用します。
日時クラスには、year
、month
およびday
の3つのパラメータが必要です。また、hour
、minute
、second
、microsecond
およびtzone
を含む時間とタイムゾーンのオプション・パラメータも含まれます。
例8-13 oml.Datetime関数の使用
この例では、DATE列がある表からプロキシ・オブジェクトを作成します。
import oml
import pandas as pd
import numpy as np
import datetime
from datetime import datetime, timezone, timedelta
SALES = oml.sync(schema="SH", table="SALES")
z.show(SALES.head())
# Use the following command to compute the statistics on table columns:
pd.set_option('display.max_columns', 50)
pd.set_option('display.width', 1000)
SALES.describe(include='all')
# Use the following command to compute statistics on DATE column TIME_ID:
SALES['TIME_ID'].describe()
# Use the following command to extract date-related features:
date = SALES['TIME_ID']
SALES2 = SALES.concat({'YEAR': date.year, 'MONTH': date.month})
SALES2.head()
この例のリスト
>>> import oml
>>> import pandas as pd
>>> import numpy as np
>>> import datetime
>>> from datetime import datetime, timezone, timedelta
>>> SALES = oml.sync(schema="SH", table="SALES")
>>> z.show(SALES.head())
>>> PROD_ID CUST_ID TIME_ID CHANNEL_ID PROMO_ID QUANTITY_SOLD AMOUNT_SOLD
13 524 1998-01-20 00:00:00 2 999 1.0 1205.99
13 2128 1998-04-05 00:00:00 2 999 1.0 1250.25
13 3212 1998-04-05 00:00:00 2 999 1.0 1250.25
13 3375 1998-04-05 00:00:00 2 999 1.0 1250.25
13 5204 1998-04-05 00:00:00 2 999 1.0 1250.25
>>> pd.set_option('display.max_columns', 50)
>>> pd.set_option('display.width', 1000)
>>> SALES.describe(include='all')
>>> PROD_ID CUST_ID TIME_ID CHANNEL_ID PROMO_ID QUANTITY_SOLD AMOUNT_SOLD
count 918843.000000 918843.000000 918843 918843.000000 918843.000000 918843.0 918843.000000
unique NaN NaN 1460 NaN NaN NaN NaN
top NaN NaN 2001-10-18 00:00:00 NaN NaN NaN NaN
freq NaN NaN 2940 NaN NaN NaN NaN
mean 78.183945 7289.807720 NaN 2.861603 976.396093 1.0 106.879882
std 49.008014 8948.653221 NaN 0.686874 121.829887 0.0 259.780490
min 13.000000 2.000000 NaN 2.000000 33.000000 1.0 6.400000
25% 31.000000 2383.000000 NaN 2.000000 999.000000 1.0 17.380000
50% 48.000000 4927.000000 NaN 3.000000 999.000000 1.0 34.240000
75% 127.000000 9163.000000 NaN 3.000000 999.000000 1.0 53.890000
max 148.000000 101000.000000 NaN 9.000000 999.000000 1.0 1782.720000
>>> SALES['TIME_ID'].describe()
>>> count 918843
unique 1460
top 2001-10-18 00:00:00
freq 2940
Name: TIME_ID, dtype: object
>>> date = SALES['TIME_ID']
>>> SALES2 = SALES.concat({'YEAR': date.year, 'MONTH': date.month})
>>> SALES2.head()
>>> PROD_ID CUST_ID TIME_ID CHANNEL_ID PROMO_ID QUANTITY_SOLD AMOUNT_SOLD YEAR MONTH
0 13 524 1998-01-20 2 999 1.0 1205.99 1998 1
1 13 2128 1998-04-05 2 999 1.0 1250.25 1998 4
2 13 3212 1998-04-05 2 999 1.0 1250.25 1998 4
3 13 3375 1998-04-05 2 999 1.0 1250.25 1998 4
4 13 5204 1998-04-05 2 999 1.0 1250.25 1998 4
例8-14 oml.Datetime関数の使用
この例では、年、月、日を含む日時オブジェクトを作成してから、oml.push
を使用して一時プロキシ・オブジェクトを作成します。oml.push
関数には入力としてデータ・フレームまたはリストが必要なため、日付オブジェクトはリストに変換されます。その結果生成されるオブジェクトは、クラスoml.Datetime
のオブジェクトです。
import oml
import pandas as pd
import numpy as np
import datetime
from datetime import datetime, timezone, timedelta
d1 = datetime(year=2004, month=7, day=24)
print ('d1:', d1)
print('d1 year:', d1.year)
print('d1 month:', d1.month)
d1_lst = [d1]
D1 = oml.push(d1_lst)
print ('type', type(D1))
print ('D1:', D1)
print ('year:', D1.year)
print ('month:', D1.month)
print ('day:', D1.day)
d2 = datetime.fromisoformat('2004-07-24 00:05:23+04:00')
d2_lst=[d2]
D2 = oml.push(d2_lst)
print('D2', D2)
print('type', type(D2))
D2.strftime()
D2.strftime()
d3 = "14-Jul-05 20:01:01"
d3_lst = [d3]
D3 = oml.push(d3_lst)
oml.Datetime.strptime(D3, "DD-Mon-RR HH24:MI:SS")
この例のリスト
>>> import oml
>>> import pandas as pd
>>> import numpy as np
>>> import datetime
>>> from datetime import datetime, timezone, timedelta
>>> d1 = datetime(year=2004, month=7, day=24)
>>> print ('d1:', d1)
>>> d1: 2004-07-24 00:00:00
>>> print('d1 year:', d1.year)
>>> d1 year: 2004
>>> print('d1 month:', d1.month)
>>> d1 month: 7
>>> d1_lst = [d1]
>>> D1 = oml.push(d1_lst)
>>> print ('type', type(D1))
>>> type <class 'oml.core.datetime.Datetime'>
>>> print ('D1:', D1)
>>> D1: [datetime.datetime(2004, 7, 24, 0, 0)]
>>> print ('year:', D1.year)
>>> year: [2004]
>>> print ('month:', D1.month)
>>> month: [7]
>>> print ('day:', D1.day)
>>> day: [24]
>>> d2 = datetime.fromisoformat('2004-07-24 00:05:23+04:00')
>>> d2_lst=[d2]
>>> D2 = oml.push(d2_lst)
>>> print('D2', D2)
>>> D2 [datetime.datetime(2004, 7, 24, 0, 5, 23, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))]
>>> print('type', type(D2))
>>> type <class 'oml.core.datetime.Datetime'>
>>> D2.strftime()
>>> ['2004-07-24 00:05:23+04:00']
>>> d3 = "14-Jul-05 20:01:01"
>>> d3_lst = [d3]
>>> D3 = oml.push(d3_lst)
>>> oml.Datetime.strptime(D3, "DD-Mon-RR HH24:MI:SS")
>>> [datetime.datetime(2005, 7, 14, 20, 1, 1)]
oml.Timedelta
oml.Timedelta
オブジェクトは、oml.Datetime
オブジェクトに対して単純な算術演算を実行するために使用できる期間を表します。oml.Timedelta
オブジェクトは、整数値または浮動小数点値で乗算できます。日付を減算するとoml.Timedelta
オブジェクトが作成され、これをoml.Timedate
オブジェクトによって加算、減算、乗算することで別の日付を生成できます。
例8-15 oml.Timedelta関数の使用
この例では、現在の日付と時間を使用して時間ベースの参照を作成し、過去および将来の日付を決定するためのDELT1という名前のoml.Timedelta
オブジェクトを作成します。
import oml
import pandas as pd
import numpy as np
import datetime
from datetime import datetime, timezone, timedelta
today = datetime.now()
print('today:', today)
delt1 = timedelta(days=1, hours=2, seconds=5)
print('delt1:', delt1)
dat = pd.DataFrame({'datetime': [today], 'timedelta': [delt1]})
DAT = oml.push(dat, dbtypes = ['TIMESTAMP', 'INTERVAL DAY TO SECOND'])
TODAY = DAT['datetime']
DELT1 = DAT['timedelta']
print('TODAY:', today)
print('DELT1:', DELT1)
past_date1 = TODAY - DELT1
print('past date 1:', past_date1)
past_date2 = TODAY - (DELT1 *3)
print('past date 2:', past_date2)
future_date1 = TODAY + DELT1
print('future date 1:', future_date1)
future_date2 = TODAY + (DELT1 *3)
print('future date 2:', future_date2)
この例のリスト
>>> import oml
>>> import pandas as pd
>>> import numpy as np
>>> import datetime
>>> from datetime import datetime, timezone, timedelta
>>> today = datetime.now()
>>> print('today:', today)
>>> today: 2022-12-27 06:00:14.555899
>>> delt1 = timedelta(days=1, hours=2, seconds=5)
>>> print('delt1:', delt1)
>>> delt1: 1 day, 2:00:05
>>> dat = pd.DataFrame({'datetime': [today], 'timedelta': [delt1]})
>>> DAT = oml.push(dat, dbtypes = ['TIMESTAMP', 'INTERVAL DAY TO SECOND'])
>>> TODAY = DAT['datetime']
>>> DELT1 = DAT['timedelta']
>>> print('TODAY:', today)
>>> TODAY: 2022-12-27 06:00:14.555899
>>> print('DELT1:', DELT1)
>>> DELT1: [datetime.timedelta(days=1, seconds=7205)]
>>> past_date1 = TODAY - DELT1
>>> print('past date 1:', past_date1)
>>> past date 1: [datetime.datetime(2022, 12, 26, 4, 0, 9, 555899)]
>>> past_date2 = TODAY - (DELT1 *3)
>>> print('past date 2:', past_date2)
>>> past date 2: [datetime.datetime(2022, 12, 23, 23, 59, 59, 555899)]
>>> future_date1 = TODAY + DELT1
>>> print('future date 1:', future_date1)
>>> future date 1: [datetime.datetime(2022, 12, 28, 8, 0, 19, 555899)]
>>> future_date2 = TODAY + (DELT1 *3)
>>> print('future date 2:', future_date2)
>>> future date 2: [datetime.datetime(2022, 12, 30, 12, 0, 29, 555899)]
oml.Integer
oml.Integer
クラスは整数データ型を表します。
例8-16 oml.Integer関数の使用
この例では、整数データ型を表すINTEGER1という名前のoml.Integerオブジェクトを作成します。
import oml
import pandas as pd
integer1 = oml.push(pd.DataFrame({'INTEGER': [0, -12, 1234, 40, 95]}), dbtypes = "NUMBER(*, 0)")
integer1
この例のリスト
>>> import oml
>>> import pandas as pd
>>> integer1 = oml.push(pd.DataFrame({'INTEGER': [0, -12, 1234, 40, 95]}), dbtypes = "NUMBER(*, 0)")
>>> integer1
INTEGER
0 0
1 -12
2 1234
3 40
4 95
標準の算術比較演算子を使用して、プロキシ・オブジェクトの2つのoml.Datetime
列を比較します。
例8-17 値比較関数の使用
この例では、標準の算術比較演算子を使用して、プロキシ・オブジェクトの2つのoml.Datetime
列を比較します。
d1 = datetime(2005, 7, 14, 5, 10, 30)
d2 = datetime(2004, 6, 30, 1, 22, 46)
d3 = datetime(2003, 12, 10, 12, 50, 25)
d4 = datetime(2002, 3, 20, 20, 42, 59)
d3 = pd.DataFrame({'X': [d1, d2], 'Y': [d3, d4]})
D3 = oml.push(d3, dbtypes = ['TIMESTAMP', 'TIMESTAMP'])
print(D3)
D4 = D3['X']
D5 = D3['Y']
print("D4:", D4)
print("D4 type:", type(D4))
print("D5:", D5)
print("D5 type:", type(D5))
print(D4 == D5)
print(D4 != D5)
print(D4 > D5)
print(D4 >= D5)
print(D4 < D5)
print(D4 <= D5)
print("max:", D3['X'].max())
print("min:", D3['Y'].min())
この例のリスト
>>> d1 = datetime(2005, 7, 14, 5, 10, 30)
>>> d2 = datetime(2004, 6, 30, 1, 22, 46)
>>> d3 = datetime(2003, 12, 10, 12, 50, 25)
>>> d4 = datetime(2002, 3, 20, 20, 42, 59)
>>> d3 = pd.DataFrame({'X': [d1, d2], 'Y': [d3, d4]})
>>> D3 = oml.push(d3, dbtypes = ['TIMESTAMP', 'TIMESTAMP'])
>>> print(D3)
>>> X Y
>>> 0 2005-07-14 05:10:30 2003-12-10 12:50:25
>>> 1 2004-06-30 01:22:46 2002-03-20 20:42:59
>>> D4 = D3['X']
>>> D5 = D3['Y']
>>> print("D4:", D4)
>>> print("D4 type:", type(D4))
>>> D4: [datetime.datetime(2005, 7, 14, 5, 10, 30), datetime.datetime(2004, 6, 30, 1, 22, 46)]
>>> D4 type: <class 'oml.core.datetime.Datetime'>
>>> print("D5:", D5)
>>> print("D5 type:", type(D5))
>>> D5: [datetime.datetime(2003, 12, 10, 12, 50, 25), datetime.datetime(2002, 3, 20, 20, 42, 59)]
>>> D5 type: <class 'oml.core.datetime.Datetime'>
>>> print(D4 == D5)
>>> [False, False]
>>> print(D4 != D5)
>>> [True, True]
>>> print(D4 > D5)
>>> [True, True]
>>> print(D4 >= D5)
>>> [True, True]
>>> print(D4 < D5)
>>> [False, False]
>>> print(D4 <= D5)
>>> [False, False] >>> [True, True] [True, True] [True, True] [False, False] [False,
>>> print("max:", D3['X'].max())
>>> max: 2005-07-14 05:10:30
>>> print("min:", D3['Y'].min())
>>> min: 2002-03-20 20:42:59
値の置換
この関数は、年、月、日などのoml.Datetime
オブジェクトの要素を更新します。
例8-18 値置換関数の使用
D4 = D3['X'].replace(year=2000)
print("D4:", D4)
D5 = D3['X'].replace(month=11)
print("D5:", D5)
D6 = D3['X'].replace(day=6)
print("D6:", D6)
この例のリスト
>>> D4 = D3['X'].replace(year=2000)
>>> print("D4:", D4)
>>> D4: [datetime.datetime(2000, 7, 14, 5, 10, 30), datetime.datetime(2000, 6, 30, 1, 22, 46)]
>>> D5 = D3['X'].replace(month=11)
>>> print("D5:", D5)
>>> D5: [datetime.datetime(2005, 11, 14, 5, 10, 30), datetime.datetime(2004, 11, 30, 1, 22, 46)]
>>> D6 = D3['X'].replace(day=6)
>>> print("D6:", D6)
>>> D6: [datetime.datetime(2005, 7, 6, 5, 10, 30), datetime.datetime(2004, 6, 6, 1, 22, 46)]
親トピック: データの探索