🗜️

10万行のCSVをソートすると、圧縮率が6倍になった。

2022/08/15に公開

ソートされたデータに最適な圧縮方法ってあるかも

CSV(例はカラム一つなんでCSVとは言い難いですが)をソートすると圧縮率が高くなります。

次のコードを実行して、7zip にすると

import pandas as pd
import numpy as np
import random
n = 10000  * 10
f = open('random_100k.txt','w')
for i in range(n):
   f.write(str(random.randint(1,n)) + '\n')
f.close()

df=pd.read_csv('random_100k.txt',header=None)
df.set_axis(['Value'], 
                   axis='columns', inplace=True)
df.sort_values('Value').to_csv('random_100k_sorted.txt',header=None,index=False)
ファイル名 元のファイルサイズ 圧縮
random_100k.txt 689KB 253KB
random_100k_sorted.txt 689KB 43KB

ソートした場合は圧縮が大きいです。ソートすると順番がかわるので意味がないというという意見もあるでしょう。時系列データだったらどうでしょうか? 時系列でソートして、もとの順番が保持されていなくても良いかもしれません。

画像ファイルも、ファイルサイズ順にソートして圧縮するアルゴリズムがあってもいいかも

Discussion