01.6
特殊なデータ
まとめ
この章では、CSV や RDB の表としては手に入らないデータを、Python で取得して表形式に変える手順を 2 つ扱います。DeepL で論文を翻訳 では、
arxiv パッケージで論文 PDF をダウンロードし、PyMuPDF(fitz)で 1 ページ目のテキストから Abstract だけを切り出して、deepl.Translator で日本語に翻訳します。EDGAR のデータを取得 では、sec_edgar_downloader で Microsoft の 10-K を取得し、pandas.read_html で HTML 内の表をすべて DataFrame にしてキャッシュフロー計算書だけを選び、NaN 列・記号を取り除いて 3 年分の推移をプロットします。どちらも「取得 → 必要な部分の切り出し → 型の整形」という流れが共通で、画像・音声・時系列など別の非構造データでも同じ順序で前処理を組みます。直感 #
現実のプロジェクトでは、CSV や RDB に収まらないデータを扱う場面が増えています。論文は PDF、財務諸表は HTML、画像は数百万ピクセルの数値配列、テキストは可変長のトークン列で、どれもそのままでは fit(X, y) に渡せません。この章の 2 ページは、PDF と HTML という身近な非構造データを例に、fitz.open や pd.read_html で中身を取り出し、文字列の find や replace で必要な部分だけを残して、数値の列に整えるまでを 1 行ずつ追います。
詳細な解説 #
このチャプターで学べること #
arxiv.Search(id_list=[...])とdownload_pdf()で論文 PDF を取得し、PyMuPDF で本文テキストを抽出する流れdeepl.Translator.translate_text(source_lang="EN", target_lang="JA")による API 翻訳と、os.getenvで認証キーを扱う作法sec_edgar_downloaderで 10-K を取得し、pandas.read_htmlで HTML の表を一括で DataFrame 化する方法replace(regex=True)・isna().sum()で記号と NaN を掃除し、文字列の表を数値の時系列に変えてmatplotlibで描く手順
これがわかるとできること #
- PDF や HTML のような非構造データを、表形式の特徴量に変換して既存のワークフローに組み込める
- 外部 API(DeepL など)や公的データベース(EDGAR)を Python から呼び出し、再実行しても同じ結果が得られる取得コードを書ける
- 「取得 → 切り出し → 型の整形」の順序で前処理を設計し、情報損失や文字列のままの列といった落とし穴を避けられる
学習の進め方 #
まず DeepL で論文を翻訳 で、PDF からテキストを切り出して API に渡すまでの 5 つのコードブロックを順に動かし、text.find("Abstract") のような位置指定がどこで効いているかを確かめます。次に EDGAR のデータを取得 で、pd.read_html が返す数十個の表から 1 つを選び、NaN が 8 割を超える列を落として数値に変換する掃除の手順を追います。最後に、自分の手元にある PDF や HTML で同じ 3 段階(取得・切り出し・整形)を組んでみると、画像や音声など別の非構造データにも同じ設計が使えることが見えてきます。