1. データ保存の準備
前回の講義で、BeautifulSoupを使ってウェブページからデータを取得する方法を学びました。今回は、取得したデータを分析に便利な形で保存する方法を学びます。たとえデータがスクリプト内にあっても、それだけではあまり役に立ちません。プログラマーの人生においても、猫の人生と同じく、重要なのは「食べ物を見つける」…いや、つまり「保存する」ことです。
データを楽しい表形式に変換する前に、エクスポートの準備としてデータを適切な形式にする必要があります。通常、ウェブページから取得したデータはリストや辞書の形で提供されます。それらを表形式にエクスポートできる形にフォーマットしておくことが望ましいです。
データの例
たとえば、以下のような本に関するデータを取得したとします:
books = [
{"title": "ハリー・ポッターと賢者の石", "author": "J.K.ローリング", "price": "350.00"},
{"title": "指輪物語", "author": "J.R.R.トールキン", "price": "500.00"},
{"title": "巨匠とマルガリータ", "author": "M.A.ブルガーコフ", "price": "450.00"}
]
2. CSV形式で保存
CSV(カンマ区切り値)は、テーブルデータを保存するためのシンプルなテキスト形式です。CSVの各行はレコードを表し、各列はコンマで区切られます。この形式でデータを保存する方法を学びましょう。
csvライブラリの使用
Pythonにはcsvという便利なモジュールがあり、CSVファイルの操作が簡単になります。以下は本に関するデータをCSVにエクスポートする方法です:
import csv
with open('books.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=["title", "author", "price"])
writer.writeheader()
writer.writerows(books)
print("データがbooks.csvに正常に保存されました。")
注意: newline=''をwモードでファイルを開くときには必ず指定してください。これにより、Windowsで余分な空行が挿入されるのを防げます。
CSVからデータを読み込む
完全性を保つために、CSVからデータを読み戻す方法も確認しておきましょう:
with open('books.csv', mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
print(row)
3. Excel形式で保存
PythonでExcelを操作するためにpandasライブラリを使用します。Pandasを使えば、データを簡単にDataFrameに変換し、Excelを含むさまざまな形式にエクスポートできます。
pandasのインストール
pandasがまだインストールされていない場合は、pipを使ってインストールできます:
pip install pandas openpyxl
pandasを使ったExcelへのエクスポート
次に、本に関するデータをExcelに保存します:
import pandas as pd
df = pd.DataFrame(books)
df.to_excel('books.xlsx', index=False, engine='openpyxl')
print("データがbooks.xlsxに正常に保存されました。")
Excelからデータを読み込む
データの作成だけでなく、作成したデータを再利用できる喜びも大事です。Excelからデータを読み取る方法を学びましょう:
df = pd.read_excel('books.xlsx')
print(df)
4. エラーとその処理
プログラミングの他の側面と同様に、データのエクスポート中にもエラーが発生する可能性があります。最も一般的なエラーは、ファイルパスが間違っているか、必要なライブラリがインストールされていないことに関連しています。たとえば、openpyxlをインストールしないと、Excelへのエクスポートは失敗します。
ファイルの存在を確認する
ファイルを保存または読み込む前に、ファイルが存在するかどうかを確認するのは良い習慣です。これはosモジュールを使って行うことができます:
import os
if os.path.exists('books.csv'):
print("ファイルbooks.csvは存在します。")
else:
print("ファイルbooks.csvは見つかりませんでした。")
信じられないかもしれませんが、初心者がよくやるミスは古いデータを新しいデータで上書きしてしまうことです。ファイル履歴の自動保存は一種のアートです。
また、try-except構文を使ってエラー処理を追加することで、スクリプトが最初の問題でクラッシュしないようにするのも重要です。
GO TO FULL VERSION