сохранение B-деревьев к дисковому файлу и считало его

Вам нужно изменить форму DataFrame на stack для Series, затем преобразовать первый уровень MultiIndex в строки формата YYYY-MM-DD и перейти к словарю:

output_file("bars.html")

dates = pd.date_range('20190101', periods=100)

dfr = pd.DataFrame(np.random.randn(100, 6), index=dates, columns=list('ABCDEF'))

s = dfr.resample('M').sum().stack()
s.index = [s.index.get_level_values(0).strftime('%Y-%m-%d'),
           s.index.get_level_values(1)]

x = s.index.values
print (x)
[('2019-01-31', 'A') ('2019-01-31', 'B') ('2019-01-31', 'C')
 ('2019-01-31', 'D') ('2019-01-31', 'E') ('2019-01-31', 'F')
 ('2019-02-28', 'A') ('2019-02-28', 'B') ('2019-02-28', 'C')
 ('2019-02-28', 'D') ('2019-02-28', 'E') ('2019-02-28', 'F')
 ('2019-03-31', 'A') ('2019-03-31', 'B') ('2019-03-31', 'C')
 ('2019-03-31', 'D') ('2019-03-31', 'E') ('2019-03-31', 'F')
 ('2019-04-30', 'A') ('2019-04-30', 'B') ('2019-04-30', 'C')
 ('2019-04-30', 'D') ('2019-04-30', 'E') ('2019-04-30', 'F')]

counts = s.values
print (counts)
[ 5.8759305  -7.52857928  2.74794675  9.91942791  1.49860961  0.16046735
  0.15459667  3.86407105  0.79097565 -2.65899131  1.86548175  1.41251127
 -3.67053891 13.90439142  2.80744458  2.51583516 -2.37587758  4.49826959
 -0.7661524  -6.22533991  5.90391326  4.40654035  1.93598738  2.49407506]

source = ColumnDataSource(data=dict(x=x, counts=counts))

p = figure(x_range=FactorRange(*x), plot_height=250, title="Sums by Months",
       toolbar_location=None, tools="")

p.vbar(x='x', top='counts', width=0.9, source=source)

p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xaxis.major_label_orientation = 1
p.xgrid.grid_line_color = None

show(p)        

6
задан Matthieu M. 27 June 2010 в 14:39
поделиться

4 ответа

Если вы действительно хотите сделать что-то подобное, вы можете просто назначить каждому узлу идентификатор и сохранить узлы в этом формате:

[значение идентификатора узла, идентификатор левого узла, идентификатор правого узла]

, а затем посещение дерева с помощью поиска в ширину.

Если вы хотите восстановить дерево, создайте узел карты id->, а затем прочтите назад файл: поэтому, когда вы читаете запись, создайте узел, зарегистрируйте его на карте и назначьте левый и правый узел выбирают узлы с карты.

5
ответ дан 17 December 2019 в 04:51
поделиться

Обычный метод для B-деревьев - убедиться, что размер узла равен размеру блока на диске, и разложить файл диска. Вы не указываете, на каком языке программирования вы работаете, поэтому это может быть так же просто, как приведение в C, или что-то более сложное, например создание легковесных объектов для обертывания java.nio.IntBuffer. В любом случае, большая часть преимуществ B-дерева заключается в том, что вам не нужно загружать его все сразу, но вы можете довольно эффективно обходить его.

5
ответ дан 17 December 2019 в 04:51
поделиться

Для каждого узла определите некоторую структуру данных, которая сохранит для вас ту же информацию, что и узел, и добавьте к этой структуре дополнительное поле, которое будет отмечать смещение в файле для следующего сына. И сделайте верхнее поле этой структуры фактического размера, поскольку вы не знаете, какое дерево вы сейчас смотрите. Теперь, перепрыгивая через файл, вы сможете восстановить свое дерево. Я уверен, что мое решение не окончательное, но надеюсь, что это может быть хорошей точкой для вас.

0
ответ дан 17 December 2019 в 04:51
поделиться

You might want to check out Protocol Buffers. They're compact, binary, extensible, easy to read and write, and available in C++, Java and Python (as well as third party implementations in other languages).

You can define a protocol buffer message for a BTree node, with file offsets for child nodes, and simply serialize it to disk in the obvious manner.

-5
ответ дан 17 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: