2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

シリアライズをpickleで行って高速化

Posted at

はじめに

シリアライズをpickleで行って高速化に関しての備忘録です。
コードを書き始めて1年以内の若輩者です😅
もし間違いがあれば、ご指摘いただけると助かります🙇

🦁結論🦁

データの蓄積や膨大なデータの読込を早くするためにシリアライズすることで読込、書込を早くすることができる。
Pythonでは標準ライブラリで「pickle」がある。
データが大きくなった場合には非常に便利なライブラリ。
また文字列もそのまま保管できる。

押さえておくべき点

  • シリアライズとはデータ一つのバイト列(バイナリデータ)に変換するプロセスのことを指す(他の形式もある)
  • pickleファイルはバイナリモードで読み書きする必要がある。
  • バイナリデータでの読み書きは処理が早くなる。
  • 数行のコードでデータを保存・読み込みできる。
  • 大量のデータも素早く保存・読み込みができる。
  • テキストだけでなく、リストや辞書なども扱える。
  • 自動的にデータを圧縮して小さくできることがある。

利用シーン

  • 大量のデータを一時保存したいとき
  • データ分析の中間結果を保存したいとき
  • 機械学習モデルを保存したいとき
  • 設定情報の保存したいとき
  • セッション情報の保存したいとき

注意点

  • 異なるPythonバージョン間でpickleファイルを交換すると、問題が起こることがある。
  • テキストよりもバイナリデータの方が大きくなることがある。
  • 人間が直接読むことができないバイナリ形式で保存される。
  • pickleで保存されたデータは、Python以外では読み込めない。

基本コード

膨大な数値データリストも一次保存としておいて置くデータとしても非常に簡単に操作でき、様々なデータをそのままの型を維持して保管できる。リストはもちろん、辞書も可能。

.pickleというファイルに保存される(.pkl)

import pickle

# 保存したいデータ
my_data = {'key': 'value', 'number’: 42}

# データをバイナリ形式でファイルに保存する
with open(‘data.pickle’, ‘wb’) as file:
pickle.dump(my_data, file)

#ファイルからデータを読み込む
with open(‘data.pickle’, ‘rb’) as file:
loaded_data = pickle.load(file)

print(loaded_data)  
# {‘key’: ‘value’, ‘number’: 42} と表示される

文字

import pickle

# 文字列データ
greeting = "こんにちは、世界!"

# 文字列をバイナリ形式でファイルに保存
with open('greeting.pickle', 'wb') as file:
    pickle.dump(greeting, file)

# ファイルから文字列を読み込む
with open('greeting.pickle', 'rb') as file:
    loaded_greeting = pickle.load(file)
    print(loaded_greeting)  # "こんにちは、世界!" と表示されます

辞書データ

辞書データもそのまま保存可能。

import pickle

# 辞書を作成
my_friends = {
    'Alice': '123-456-7890',
    'Bob': '987-654-3210',
    'Charlie': '555-555-5555'
}

# 辞書をファイルに保存
with open('friends.pickle', 'wb') as f:
    pickle.dump(my_friends, f)

# ファイルから辞書を読み込む
with open('friends.pickle', 'rb') as f:
    loaded_friends = pickle.load(f)
    print(loaded_friends)  # 保存した辞書が表示されます

クラスのオブジェクト

import pickle

# ペットを表すクラスを定義
class Pet:
    def __init__(self, name, animal_type):
        self.name = name
        self.animal_type = animal_type

# ペットのインスタンスを作成
my_pet = Pet('Fido', 'dog')

# インスタンスをファイルに保存
with open('pet.pickle', 'wb') as f:
    pickle.dump(my_pet, f)

# ファイルからインスタンスを読み込む
with open('pet.pickle', 'rb') as f:
    loaded_pet = pickle.load(f)
    print(loaded_pet.name, loaded_pet.animal_type)  # 'Fido dog' と表示されます

まとめ✍️

機械語に直すだけで処理が早くなるとはすごいなと思った。速度も全然違うこともビックリした。
これからどんどん使っていきたい。


参考にした記事📕

pickleでデータ保存をもっと便利に!~Pythonプログラミング入門~初心者にも分かりやすく解説!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?