では、先ほどのCSV出力スクリプトをさらに pandasで分析・集計・件数カウント・重複削除 まで対応する実務向けスクリプトに拡張します。
# =============================================
# 実務向け:抽出→CSV出力→pandasで集計・件数カウント
# =============================================
import re
import os
import csv
import pandas as pd
# -----------------------------
# 1. 抽出するパターン(正規表現)
# -----------------------------
email_pattern = r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}"
phone_pattern = r"\b0\d{1,4}-\d{1,4}-\d{4}\b"
date_pattern = r"\b\d{4}-\d{2}-\d{2}\b"
# -----------------------------
# 2. 対象フォルダと出力CSV
# -----------------------------
input_folder = "./texts" # テキストファイルが入っているフォルダ
output_csv = "extracted_data_rows.csv"
# -----------------------------
# 3. ファイルを読み込み抽出
# -----------------------------
results = []
for filename in os.listdir(input_folder):
if filename.endswith(".txt"):
file_path = os.path.join(input_folder, filename)
with open(file_path, "r", encoding="utf-8") as f:
text = f.read()
emails = re.findall(email_pattern, text)
phones = re.findall(phone_pattern, text)
dates = re.findall(date_pattern, text)
for e in emails:
results.append({"ファイル名": filename, "タイプ": "メール", "値": e})
for p in phones:
results.append({"ファイル名": filename, "タイプ": "電話", "値": p})
for d in dates:
results.append({"ファイル名": filename, "タイプ": "日付", "値": d})
# -----------------------------
# 4. CSV に出力
# -----------------------------
fieldnames = ["ファイル名", "タイプ", "値"]
with open(output_csv, "w", newline="", encoding="utf-8") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for row in results:
writer.writerow(row)
print(f"抽出結果を {output_csv} に出力しました。")
# -----------------------------
# 5. pandasで集計・分析
# -----------------------------
df = pd.read_csv(output_csv)
# (1) 件数カウント
count_summary = df.groupby("タイプ").size().reset_index(name="件数")
print("\n--- 件数カウント ---")
print(count_summary)
# (2) ファイルごとの件数
file_summary = df.groupby(["ファイル名", "タイプ"]).size().reset_index(name="件数")
print("\n--- ファイルごとの件数 ---")
print(file_summary)
# (3) 重複削除
df_unique = df.drop_duplicates(subset=["タイプ", "値"])
print("\n--- 重複削除後のデータ ---")
print(df_unique)
# (4) 集計結果をCSV保存(必要なら)
df_unique.to_csv("extracted_data_unique.csv", index=False, encoding="utf-8")
print("\n重複削除後のデータを 'extracted_data_unique.csv' に保存しました。")
Pythonこのスクリプトの特徴
- 1件ごとに1行で抽出 →
タイプ列で種類が明確 - pandasで件数カウント → タイプ別・ファイル別に集計
- 重複削除 → 同じメール・電話・日付が複数あっても1件に整理
- 集計結果CSV出力 → 分析や報告書作成に便利
- 初心者でも理解しやすいコメントつき
💡 応用例
- メールドメインごとの件数集計
- 日付ごとの件数推移グラフ(
matplotlibで可視化) - 電話番号の市外局番ごとの集計
