WordPressタグ分析チュートリアル(Pythonで始めるデータ可視化)

チュートリアル

はじめに

WordPressでブログを運営している方にとって、タグは記事の整理や読者のナビゲーションに欠かせない要素です。しかし、どのタグが最も使用されているか、またその分布はどうなっているかを把握するのは簡単ではありません。本チュートリアルでは、Pythonを使用してWordPressのタグデータを分析し、視覚化する方法を初心者にもわかりやすく解説します。

環境設定

まず、必要なライブラリをインストールします。

pip install python-dotenv matplotlib japanize-matplotlib

必要なライブラリのインポート

次に、必要なライブラリをインポートします。

import os
from dotenv import load_dotenv
import requests
from requests.auth import HTTPBasicAuth
import matplotlib.pyplot as plt
import japanize_matplotlib
from datetime import datetime
import numpy as np

# .envファイルから環境変数を読み込む
load_dotenv()

各ライブラリの役割を簡単に説明します:

  • os: ファイルやディレクトリの操作に使用
  • dotenv: 環境変数の管理に使用
  • requests: HTTP通信を行うためのライブラリ
  • matplotlib: データの可視化に使用
  • japanize_matplotlib: 日本語の文字化けを防ぐためのライブラリ
  • datetime: 日付と時刻の操作に使用
  • numpy: 数値計算や配列操作に使用

WordPressのAPI設定

WordPressのREST APIにアクセスするための設定を行います。

# 環境変数から設定を読み込む
AUTH_USER = os.getenv('AUTH_USER')
AUTH_PASS = os.getenv('AUTH_PASS')
BASE_URL = os.getenv('BASE_URL')

# WordPressのREST APIエンドポイントを構築
WP_API_BASE = f"{BASE_URL}/wp-json/wp/v2"
TAGS_URL = f"{WP_API_BASE}/tags"

# 認証情報の設定
auth = HTTPBasicAuth(AUTH_USER, AUTH_PASS)

ここでは、環境変数から認証情報とベースURLを読み込んでいます。セキュリティの観点から、これらの情報は直接コードに書かずに環境変数として管理することをおすすめします。

タグデータの取得

WordPressのAPIを使用してタグデータを取得します。

# パラメータの設定(100件ずつ取得)
params = {
    'per_page': 100,
    'page': 1
}

all_tags = []

while True:
    # タグ情報の取得
    response = requests.get(TAGS_URL, auth=auth, params=params)

    if response.status_code != 200:
        print(f"エラー: ステータスコード {response.status_code}")
        break

    tags = response.json()

    if not tags:
        break

    all_tags.extend(tags)
    params['page'] += 1

このコードでは、ページネーションを使用して全てのタグを取得しています。whileループを使用して、1ページあたり100件のタグを取得し、全てのタグを取得するまで繰り返します。

データの整理と準備

取得したタグデータを整理し、可視化のための準備を行います。

# タグ名と使用カウント数を取得
tag_names = [tag['name'] for tag in all_tags]
tag_counts = [tag['count'] for tag in all_tags]

# タグの使用回数でソート
sorted_indices = sorted(range(len(tag_counts)), key=lambda k: tag_counts[k], reverse=True)
tag_names = [tag_names[i] for i in sorted_indices]
tag_counts = [tag_counts[i] for i in sorted_indices]

ここでは、タグ名とその使用回数を別々のリストに格納し、使用回数の多い順にソートしています。

データの可視化

棒グラフの作成

タグの使用頻度を棒グラフで可視化します。

plt.figure(figsize=(30, 10))
colors = plt.cm.viridis(np.linspace(0, 1, len(tag_names)))
plt.bar(tag_names, tag_counts, color=colors)
plt.title('WordPressタグの使用頻度 (全タグ)', fontsize=20)
plt.xlabel('タグ名', fontsize=16)
plt.ylabel('使用回数', fontsize=16)
plt.xticks(rotation=90, ha='right', fontsize=8)
plt.tight_layout()

このコードでは、matplotlibを使用して棒グラフを作成しています。viridisカラーマップを使用して、各バーに異なる色を割り当てています。

ヒストグラムの作成

タグの使用頻度分布をヒストグラムで可視化します。

plt.figure(figsize=(12, 6))
n, bins, patches = plt.hist(tag_counts, bins=20, edgecolor='black')
bin_centers = 0.5 * (bins[:-1] + bins[1:])
col = bin_centers - min(bin_centers)
col /= max(col)
for c, p in zip(col, patches):
    plt.setp(p, 'facecolor', plt.cm.viridis(c))
plt.title('WordPressタグの使用頻度分布', fontsize=20)
plt.xlabel('使用回数', fontsize=16)
plt.ylabel('タグの数', fontsize=16)
plt.tight_layout()

このコードでは、タグの使用回数の分布をヒストグラムで表現しています。ビンの色をグラデーションにすることで、視覚的に理解しやすくなっています。

結果の保存

分析結果をファイルとして保存します。

# 結果保存用フォルダの設定
RESULTS_FOLDER = "analysis/wordpress_tag_analysis_results"
current_date = datetime.now().strftime("%Y%m%d")
CURRENT_RESULTS_FOLDER = os.path.join(RESULTS_FOLDER, current_date)

# フォルダが存在しない場合は作成
os.makedirs(CURRENT_RESULTS_FOLDER, exist_ok=True)

# 棒グラフの保存
bar_graph_path = os.path.join(CURRENT_RESULTS_FOLDER, 'wordpress_tags_bar_graph_colorful.png')
plt.savefig(bar_graph_path, dpi=300, bbox_inches='tight')
plt.close()

# ヒストグラムの保存
histogram_path = os.path.join(CURRENT_RESULTS_FOLDER, 'wordpress_tags_histogram_colorful.png')
plt.savefig(histogram_path, dpi=300, bbox_inches='tight')
plt.close()

# タグ情報をCSVファイルとして保存
csv_path = os.path.join(CURRENT_RESULTS_FOLDER, 'tag_data.csv')
with open(csv_path, 'w', encoding='utf-8') as f:
    f.write("タグ名,使用回数\n")
    for name, count in zip(tag_names, tag_counts):
        f.write(f"{name},{count}\n")

print(f"\n合計タグ数: {len(all_tags)}")

このコードでは、生成したグラフをPNGファイルとして、タグデータをCSVファイルとして保存しています。結果は日付ごとのフォルダに保存されるため、時系列での分析も可能です。

まとめ

このチュートリアルでは、WordPressのタグデータを分析し、可視化する方法を学びました。Pythonを使用することで、簡単にデータ分析を始められます。この分析結果を基に、タグの整理やコンテンツ戦略の見直しなど、ブログ運営の改善に役立てることができるでしょう。

全体コード

import os
from dotenv import load_dotenv
import requests
from requests.auth import HTTPBasicAuth
import matplotlib.pyplot as plt
import japanize_matplotlib
from datetime import datetime
import numpy as np

# .envファイルから環境変数を読み込む
load_dotenv()

# 環境変数から設定を読み込む
AUTH_USER = os.getenv('AUTH_USER')
AUTH_PASS = os.getenv('AUTH_PASS')
BASE_URL = os.getenv('BASE_URL')

# WordPressのREST APIエンドポイントを構築
WP_API_BASE = f"{BASE_URL}/wp-json/wp/v2"
TAGS_URL = f"{WP_API_BASE}/tags"

# 認証情報の設定
auth = HTTPBasicAuth(AUTH_USER, AUTH_PASS)

# 結果保存用フォルダの設定
RESULTS_FOLDER = "analysis/wordpress_tag_analysis_results"
current_date = datetime.now().strftime("%Y%m%d")
CURRENT_RESULTS_FOLDER = os.path.join(RESULTS_FOLDER, current_date)

# フォルダが存在しない場合は作成
os.makedirs(CURRENT_RESULTS_FOLDER, exist_ok=True)

# パラメータの設定(100件ずつ取得)
params = {
    'per_page': 100,
    'page': 1
}

all_tags = []

while True:
    # タグ情報の取得
    response = requests.get(TAGS_URL, auth=auth, params=params)

    if response.status_code != 200:
        print(f"エラー: ステータスコード {response.status_code}")
        break

    tags = response.json()

    if not tags:
        break

    all_tags.extend(tags)
    params['page'] += 1

# タグ名と使用カウント数を取得
tag_names = [tag['name'] for tag in all_tags]
tag_counts = [tag['count'] for tag in all_tags]

# タグの使用回数でソート
sorted_indices = sorted(range(len(tag_counts)), key=lambda k: tag_counts[k], reverse=True)
tag_names = [tag_names[i] for i in sorted_indices]
tag_counts = [tag_counts[i] for i in sorted_indices]

# 棒グラフの作成
plt.figure(figsize=(30, 10))
colors = plt.cm.viridis(np.linspace(0, 1, len(tag_names)))
plt.bar(tag_names, tag_counts, color=colors)
plt.title('WordPressタグの使用頻度 (全タグ)', fontsize=20)
plt.xlabel('タグ名', fontsize=16)
plt.ylabel('使用回数', fontsize=16)
plt.xticks(rotation=90, ha='right', fontsize=8)
# plt.colorbar(plt.cm.ScalarMappable(cmap="viridis"), label="タグのインデックス")
plt.tight_layout()

# 棒グラフの保存
bar_graph_path = os.path.join(CURRENT_RESULTS_FOLDER, 'wordpress_tags_bar_graph_colorful.png')
plt.savefig(bar_graph_path, dpi=300, bbox_inches='tight')
plt.close()

print(f"カラフルな棒グラフを '{bar_graph_path}' として保存しました。")

# ヒストグラムの作成
plt.figure(figsize=(12, 6))
n, bins, patches = plt.hist(tag_counts, bins=20, edgecolor='black')
bin_centers = 0.5 * (bins[:-1] + bins[1:])
col = bin_centers - min(bin_centers)
col /= max(col)
for c, p in zip(col, patches):
    plt.setp(p, 'facecolor', plt.cm.viridis(c))
plt.title('WordPressタグの使用頻度分布', fontsize=20)
plt.xlabel('使用回数', fontsize=16)
plt.ylabel('タグの数', fontsize=16)
# plt.colorbar(plt.cm.ScalarMappable(cmap="viridis"), label="使用回数の範囲")
plt.tight_layout()

# ヒストグラムの保存
histogram_path = os.path.join(CURRENT_RESULTS_FOLDER, 'wordpress_tags_histogram_colorful.png')
plt.savefig(histogram_path, dpi=300, bbox_inches='tight')
plt.close()

print(f"カラフルなヒストグラムを '{histogram_path}' として保存しました。")

# タグ情報をCSVファイルとして保存
csv_path = os.path.join(CURRENT_RESULTS_FOLDER, 'tag_data.csv')
with open(csv_path, 'w', encoding='utf-8') as f:
    f.write("タグ名,使用回数\n")
    for name, count in zip(tag_names, tag_counts):
        f.write(f"{name},{count}\n")

print(f"タグデータを '{csv_path}' として保存しました。")

print(f"\n合計タグ数: {len(all_tags)}")

コメント

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