私は、多数のアイテムのイベント発生の履歴記録を保存して照会するソリューションを検討しています。何千もの番号付きイベントの毎日の出現を格納および検索するPythonのアルゴリズムですか?
これは簡単なシナリオです:私はランプがその日に稼動していたかどうかを示す200,000の街灯(sl1からsl200000までのラベルがついています)を毎日ログに記録しています。ランプがどれだけ長く稼動していたかは問題ありません。情報の
他のビットも同様に各ランプのために保存され、Pythonのクラスの先頭には、次のようになりますされています
class Streetlamp(object):
"""Class for streetlamp record"""
def __init__(self, **args):
self.location = args['location']
self.power = args['power']
self.inservice = ???
マイPY-fooが大きすぎではないと私は解決策を避けたいですこれはディスク/メモリストレージではあまりにも貪欲です。だから、(年、月、日)タプルのディクテーションを持つソリューションが1つの解決策になるかもしれませんが、私はより効率的な解決策の指針を得ることを望んでいます。
:レコードは、ランプ2010の最初の3日間の動作であった場合、記録が可能であり、したがって月1から始まる年の日を表す各ビットを持つビットストリームとして格納することができます
sl1000_up = dict('2010': '11100000000000...', '2011':'11111100100...')
年の境界を越えて検索すると、マージが必要になりますが、うるう年は特別なケースです。さらに、この自宅で解決したソリューションでコードをデコードする必要があります。それは静かではないようです。 speed-up-bitstring-bit-operations、how-do-i-find-missing-dates-in-a-list、finding-data-gaps-with-bit-masking興味深い記事が出てきました。私はまたpython-bitstringを調査し、いくつかのグーグルを行ったが、何も本当にフィットしないようです。
さらに、「ギャップ」の検索も可能です。 「3日以上の行動から外れた」ということであり、フラグされた1日を実際のカレンダーの日付に変換することが不可欠です。
私は可能な解決策のアイデアや指針をいただきたいと思います。詳細を追加するには、使用されるバックエンドDBがZODBであり、ピクルされる純粋なPythonオブジェクトが優先されることが重要です。
scikits.timeseriesを指摘してくれてありがとうございます。私がしなければならない分析の大部分を支えているようです。インスタンス化されたオブジェクトに1つのランプのレコードを格納するので、すべてのランプを1つの配列に1年間格納することは可能ではありません。しかし、これは適応が容易でなければならず、私はホイールを再構成するトップを持っていません。 Pythonのnoobだけがこのパッケージを見落とす可能性があります;-) – Axial
numpyのブールがバイト全体として格納されていることは分かりますので、これはメモリのように効率的ではないかもしれません。 –