Pythonで.dataファイルを読み込み、保存をする方法を解説する

スポンサーリンク

学習用モデルのデータ入力やデータ収集をしていると、.data ファイルに出くわすことがあります。

これはデータを保存するためにいくつかのソフトウェアで使用されるファイル拡張子で、そのような例としては、統計解析とデータマイニングに特化したAnalysis Studioが挙げられます。

.dataファイル拡張子の扱いは非常に簡単で、データのソート方法を特定し、それに応じてPythonコマンドを使用してファイルにアクセスします。

スポンサーリンク

.dataファイルとは何ですか?

.dataファイルは、データを保存するための手段として開発されました。

多くの場合、この形式のデータは、カンマ区切りの値形式かタブ区切りの値形式で置かれます。

また、そのバリエーションとともに、テキストファイル形式やバイナリ形式である場合もあります。

その場合、別の方法でアクセスする必要があります。

今回は.csvファイルを扱いますが、まずファイルの内容がテキストなのか、バイナリなのかを確認しましょう。

.dataファイル内のデータを特定する

.dataファイルには2種類のバリエーションがあり、ファイル自体もテキスト形式かバイナリ形式かのどちらかです。

どちらに属するかを調べるには、それをロードして自分でテストする必要があります。

さぁ、はじめましょう

1. テスト中です。テキストファイル

.dataファイルのほとんどはテキストファイルとして存在し、Pythonでファイルにアクセスすることは非常に簡単です。

Pythonに含まれる機能としてあらかじめ組み込まれているため、ファイル処理を行うためにモジュールをインポートする必要はありません。

とはいえ、Pythonでファイルを開いたり、読み込んだり、書き込んだりする方法は以下の通りです。

# reading from the file
file = open("biscuits.data", "r")
file.read()
file.close()
 
# writing to the file
file = open("biscuits.data", "w")
file.write("Chocolate Chip")
file.close()

2. テスト中です。バイナリファイル

.dataファイルは、バイナリファイルの形式である可能性もあります。

つまり、ファイルにアクセスしなければならない方法も変更する必要があります。

この場合、モードはrb、つまりバイナリ読み込みとなります。

# reading from the file
file = open("biscuits.data", "rb")
file.read()
file.close()
 
# writing to the file
file = open("biscuits.data", "wb")
file.write("Oreos")
file.close()

ファイル操作はPythonでは比較的理解しやすく、異なるファイルアクセスモードとそれらにアクセスする方法を見たいのであれば、調べる価値があります。

これらのアプローチのいずれかが動作し、.dataファイル内に格納されているコンテンツに関する情報を取得する方法を提供するはずです。

さて、ファイルがどのような形式で存在するかがわかったので、pandasを使用してcsvファイルのDataFrameを作成することができます

3. .dataファイルを読むためのPandasの使用

Pandasが提供するread_csv()関数を使用することで、ファイルの種類を確認した上で、情報を抽出することができます

import pandas as pd
# reading csv files
data =  pd.read_csv('file.data', sep=",")
print(data)
 
# reading tsv files
data = pd.read_csv('otherfile.data', sep=" ")
print(data)

このメソッドは、データフレームへの変換も自動的に行います。

以下は、csvファイルを.dataファイルにフォーマットし、上記と同じコードでアクセスした場合のサンプルです。

   Series reference                                        Description   Period  Previously published  Revised
0    PPIQ.SQU900000                 PPI output index - All industries   2020.06                  1183     1184
1    PPIQ.SQU900001         PPI output index - All industries excl OOD  2020.06                  1180     1181
2    PPIQ.SQUC76745  PPI published output commodity - Transport sup...  2020.06                  1400     1603
3    PPIQ.SQUCC3100  PPI output index level 3 - Wood product manufa...  2020.06                  1169     1170
4    PPIQ.SQUCC3110  PPI output index level 4 - Wood product manufa...  2020.06                  1169     1170
..              ...                                                ...      ...                   ...      ...
73   PPIQ.SQNMN2100  PPI input index level 3 - Administrative and s...  2020.06                  1194     1195
74   PPIQ.SQNRS211X     PPI input index level 4 - Repair & maintenance  2020.06                  1126     1127
75       FPIQ.SEC14  Farm expenses price index - Dairy farms - Freight  2020.06                  1102     1120
76       FPIQ.SEC99  Farm expenses price index - Dairy farms - All ...  2020.06                  1067     1068
77       FPIQ.SEH14    Farm expenses price index - All farms - Freight  2020.06                  1102     1110
 
[78 rows x 5 columns]

見ての通り、確かにDataFrameが出力されました。

データを保存するためのフォーマットには、他にどんな種類があるのでしょうか?

データを保存するためのデフォルトの方法では、どうしてもうまくいかないことがあります。

では、ファイルストレージを使った作業には、どのような選択肢があるのでしょうか。

1. JSONファイル

情報を保存する方法として、JSONは扱うのに素晴らしいデータ構造です。

PythonのJSONモジュールの膨大なサポートにより、統合は一見完璧なように感じられます。

しかし、Pythonでこれを扱うには、スクリプトの中で json モジュールをインポートする必要があります。

import json

さて、JSON互換の構造を構築した後、それを保存する方法は、json dumpsを使った簡単なファイル操作です。

# dumping the structure in the form of a JSON object in the file.
with open("file.json", "w") as f:
    json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}], f)
# you can also sort the keys, and pretty print the input using this module
with open("file.json", "w") as f:
    json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}], f, indent=4,  sort_keys=True)

変数fを使ってファイルにダンプしていることに注意してください。

JSON ファイルから情報を取得するための同等の関数は load と呼ばれる。

with open('file.json') as f:
    data = json.load(f)

これは、ファイル内のJSONオブジェクトの構造と情報を提供します。

2. ピクル

通常、情報を保存する場合、情報は生の文字列形式で保存されるため、オブジェクトのプロパティが失われ、Pythonを通じて文字列からオブジェクトを再構築する必要があります。

Pickleモジュールはこの問題に対処するために使用され、Pythonのオブジェクト構造をシリアライズおよびデシリアライズしてファイルに保存できるようにするために作られました。

つまり、リストをpickleで保存しておけば、次にpickleモジュールで読み込んだときにリストオブジェクトのプロパティが失われることはありません。

この機能を使うには、 pickle モジュールをインポートする必要があります。

このモジュールは標準の Python ライブラリの一部なので、インストールする必要はありません。

import pickle

これまでのファイル操作で使用する辞書を作成しましょう。

apple = {"name": "Apple", "price": 40}
banana = {"name": "Banana", "price": 60}
orange = {"name": "Orange", "price": 30}
 
fruitShop = {}
fruitShop["apple"] = apple
fruitShop["banana"] = banana
fruitShop["orange"] = orange

pickleモジュールの操作は、JSONの操作と同じぐらい簡単です。

file = open('fruitPickles', 'ab')
# the 'ab' mode allows for us to append to the file 
# in a binary format
 
# the dump method appends to the file
# in a secure serialized format.
pickle.dump(fruitShop, file)                     
file.close()
 
file = open('fruitPickles', 'rb')
# now, we can read from the file through the loads function.
fruitShop = pickle.load(file)
file.close()

まとめ

これで、.data ファイルとは何か、そしてそれをどのように扱うかについて知ることができました。

また、データを保存したり取得したりするために、他のオプションも試すことができます。

ファイルハンドリング、Pickle、JSONの各モジュールの詳細なチュートリアルについては、他の記事を参照してください。

タイトルとURLをコピーしました