HDFStore を作成しました。HDFStore には、df
2 つの列を持つテーブルであるグループが含まれています。最初の列は astring
で、2 番目の列はDateTime
(ソート順になります) です。ストアは、次の方法を使用して作成されています。
from numpy import ndarray
import random
import datetime
from pandas import DataFrame, HDFStore
def create(n):
mylist = ['A' * 4, 'B' * 4, 'C' * 4, 'D' * 4]
data = []
for i in range(n):
data.append((random.choice(mylist),
datetime.datetime.now() - datetime.timedelta(minutes=i)))
data_np = ndarray(len(data), dtype=[
('fac', 'U6'), ('ts', 'datetime64[us]')])
data_np[:] = data
df = DataFrame(data_np)
return df
def create_patches(n, nn):
for i in range(n):
yield create(nn)
df = create_patches(100, 1000000)
store = HDFStore('check.hd5')
for each in df:
store.append('df', each, index=False, data_columns=True, format = 'table')
store.close()
HDF5 ファイルが作成されたら、次の方法を使用してテーブルをクエリします。
In [1]: %timeit store.select('df', ['ts>Timestamp("2016-07-12 10:00:00")'])
1 loops, best of 3: 13.2 s per loop
したがって、基本的にこれには13.2秒かかります。次に、次を使用してこの列にインデックスを追加しました
In [2]: store.create_table_index('df', columns=['ts'], kind='full')
そして、もう一度同じクエリを実行しましたが、今回は次の結果が得られました:-
In [3]: %timeit store.select('df', ['ts>Timestamp("2016-07-12 10:00:00")'])
1 loops, best of 3: 12 s per loop
以上のことから、パフォーマンスに大きな改善は見られないように思えます。それで、私の質問は、クエリを高速化するためにここで他に何ができるか、または何か間違っていることがありますか?