Что я могу сделать, чтобы построить 3D-гистограмму на своем компьютере с помощью Mayavi? - PullRequest
0 голосов
/ 07 октября 2019

Хочу построить трехмерную гистограмму с помощью Mayavi (на моем ноутбуке Asus Intel CoreTM i7-4510U с тактовой частотой 2,00 ГГц с 8 ГБ оперативной памяти, Windows 10) с использованием ноутбука Jupyter (на Python virtualenv), но я получаюсерый экран.

Как только данные были импортированы , я щелкнул в New> Python 3 и написал:

Mayavi build 3D bar chart

Использовал быстрый CSV-парсер pandas, pandas.read_csv () , и, как только я запустил строку 4, я увидел, что использование памяти увеличилось до 88% от способности при использовании CleanMem Mini Monitor, и получил меньше результатовчем 1 минута.

Затем, чтобы построить гистограмму

df1=df[[0]]
df2=df[[1]]
df3=df[[2]]
mlab.barchart(df1,df2,df3)

К сожалению, я получил эту MemoryError

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-6-9736b00b5abc> in <module>
      2 df2=df[[1]]
      3 df3=df[[2]]
----> 4 mlab.barchart(df1,df2,df3)

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\helper_functions.py in the_function(*args, **kwargs)
     35 
     36     def the_function(*args, **kwargs):
---> 37         return pipeline(*args, **kwargs)
     38 
     39     if hasattr(pipeline, 'doc'):

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\helper_functions.py in __call__(self, *args, **kwargs)
     80             scene.disable_render = True
     81         # Then call the real logic
---> 82         output = self.__call_internal__(*args, **kwargs)
     83         # And re-enable the rendering, if needed.
     84         if scene is not None:

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\helper_functions.py in __call_internal__(self, *args, **kwargs)
   1093         """ Override the call to be able to scale automatically the axis.
   1094         """
-> 1095         g = Pipeline.__call_internal__(self, *args, **kwargs)
   1096         gs = g.glyph.glyph_source
   1097         # Use a cube source for glyphs.

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\helper_functions.py in __call_internal__(self, *args, **kwargs)
     90         the last object created by the pipeline."""
     91         self.store_kwargs(kwargs)
---> 92         self.source = self._source_function(*args, **kwargs)
     93         # Copy the pipeline so as not to modify it for the next call
     94         self.pipeline = self._pipeline[:]

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\sources.py in vertical_vectors_source(*args, **kwargs)
   1356 
   1357     data_source = MVerticalGlyphSource()
-> 1358     data_source.reset(x=x, y=y, z=z, scalars=s)
   1359 
   1360     name = kwargs.pop('name', 'VerticalVectorsSource')

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\sources.py in reset(self, **traits)
    306                 traits['u'] = traits['v'] = np.ones_like(s),
    307                 traits['w'] = s
--> 308         super(MVerticalGlyphSource, self).reset(**traits)
    309 
    310     def _scalars_changed(self, s):

c:\infovis\virtualenvs\dev\lib\site-packages\mayavi\tools\sources.py in reset(self, **traits)
    172 
    173         else:
--> 174             points = np.c_[x.ravel(), y.ravel(), z.ravel()].ravel()
    175             points.shape = (-1, 3)
    176             self.trait_set(points=points, trait_change_notify=False)

c:\infovis\virtualenvs\dev\lib\site-packages\numpy\lib\index_tricks.py in __getitem__(self, key)
    404                 objs[k] = objs[k].astype(final_dtype)
    405 
--> 406         res = self.concatenate(tuple(objs), axis=axis)
    407 
    408         if matrix:

<__array_function__ internals> in concatenate(*args, **kwargs)

MemoryError: Unable to allocate array with shape (153543233, 3) and data type int64

И результатбыло это

Result

1 Ответ

1 голос
/ 04 ноября 2019

Из-за постоянного нехватки памяти мне пришлось придумать способ уменьшить объем данных.

Вдохновленный в Trifacta , я решил пойти с семплинг (создать семпл из файла CSV). Ниже приведены некоторые из возможных выборок, которые я мог бы получить

Sampling

По соображениям упрощения решил использовать случайные выборки. Использование Git Bash в Windows 10 Я просто запустил аналогичную команду (количество строк может не совпадать с используемой), как

shuf -n 10000 BIGFILE.csv > SAMPLEFILE.csv

Затем процедура для создания визуализациибыло точно таким же, за исключением имени файла, и результат был следующим:

Mayavi 3D Bar Chart

Mayavi 3D Bar Chart

Mayavi 3D Bar Chart

...