Преобразование из CSV в двоичный формат ненормально уменьшает размер файла - PullRequest
0 голосов
/ 12 мая 2018

У меня есть csv набор данных размером 5.2 ГБ (взято с здесь ).В нем около 7M строк измерения = 29. Значения имеют тип float64.Я хочу преобразовать этот набор данных в двоичный файл.Для этого я делаю следующие простые строки:

import numpy as np
import pandas as pd

df = pd.read_csv('data.csv', sep=',')
np.asarray(df.values).tofile('data_binary.dat')

Снимок данных выглядит следующим образом:

0.000000000000000000e+00,9.439358860254287720e-02,1.275558676570653915e-02,9.119330644607543945e-01,-9.083136916160583496e-02,-2.335745543241500854e-01,-1.054220795631408691e+00,-9.759366512298583984e-01,-1.067278265953063965e+00,-6.138502955436706543e-01,7.542607188224792480e-01,-9.256605505943298340e-01,-5.289512276649475098e-01,1.235263347625732422e+00,8.606486320495605469e-01,-2.320102453231811523e-01,-4.043335020542144775e-01,-1.559396624565124512e+00,-8.154401183128356934e-01,-1.376865267753601074e+00,6.759096682071685791e-02,1.372575879096984863e+00,-5.736824870109558105e-01,-1.368692040443420410e+00,-4.793794453144073486e-01,1.529256343841552734e+00,-5.757816433906555176e-01,-1.290232419967651367e+00,4.999999694824218750e+02
1.000000000000000000e+00,3.272003531455993652e-01,-2.395536154508590698e-01,-1.592038273811340332e+00,-2.324983835220336914e+00,-5.070934891700744629e-01,1.574625492095947266e+00,-1.050106048583984375e+00,9.686639308929443359e-01,1.312386870384216309e+00,7.542607188224792480e-01,-9.113077521324157715e-01,-1.718587398529052734e+00,3.751282095909118652e-01,8.606486320495605469e-01,-3.711451292037963867e-01,-5.625200271606445312e-01,-2.721544206142425537e-01,-8.154401183128356934e-01,-3.339428007602691650e-01,1.058411240577697754e+00,4.364815354347229004e-01,-5.736824870109558105e-01,-2.172690257430076599e-02,-5.791836977005004883e-01,-3.260441124439239502e-01,-2.024624943733215332e-01,-4.585579931735992432e-01,7.500000000000000000e+02

Новый двоичный файл data_binary.dat сокращен до 1.5 GB.Это огромное сокращение, которое заставило меня задуматься, если что-то пошло не так, как я использую для преобразования csv в двоичный формат.Ожидается ли это сокращение?По крайней мере, так много?Спасибо

1 Ответ

0 голосов
/ 12 мая 2018

Хорошо, я пошел и скачал образец данных.Каждая строка выглядит примерно так:

0.000000000000000000e+00,9.439358860254287720e-02,1.275558676570653915e-02 ...

Кажется, что каждое отдельное число имеет в общей сложности 25 символов, а на самом деле, 26 или около того, если включить запятую.Так что это один байт на символ, то есть около 25 байтов.Использование двоичного представления 64-битных чисел с плавающей запятой потребует ... 64 бит, т.е. 8 байтов на число.Таким образом, вы должны ожидать, что двоичный файл будет меньше, чем 1/3 размера, так что это кажется правильным:

5.2 / 3 = 1.73 ...

Лучшая оценка будет около 26 символовза число (включая запятые и переносы строк), поэтому:

In [2]: (8/26)*5.2
Out[2]: 1.6

Кажется законным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...