高度試験(プロジェクトマネージャ試験)の統計情報を可視化

2024年12月26日,応用情報技術者試験,高度試験,情報処理安全確保支援士試験の統計情報が公開された。

統計情報の Excel を Python で読み込み,chart.js に適したフォーマットに変換する。

今回は例として,プロジェクトマネージャ試験の都道府県別 一覧表を用いる。

ライブラリの読み込み

Python の openpyxl のライブラリを読み込む。

from openpyxl import load_workbook

データ抽出

for ループでデータを読み込む関数を作成する。start_raw から end_row まで step ごとに値を取得していく。

def extract_data(sheet, start_row, end_row, step, col, is_label=False):
    data = []
    for i in range(start_row, end_row + 1, step):
        cell_value = sheet.cell(row=i, column=col).value
        if is_label:
            data.append(f"'{cell_value}'")
        else:
            data.append(cell_value)
    return data

メイン関数

メイン関数を作成する。今回は都道府県別 一覧表 (Excel : 63 kB) を読み込む。プロジェクトマネージャ試験の統計情報は,2 つ目のシートにあるため,2 つ目のシートを開く。そして,5 行目 (start_raw) から 143 行目 (end_row) まで 3 行 (step_row) ごとに都道府県別の情報が記載されているので,変数として設定する(保守しやすいコードを目指しました)。

また,プロジェクトマネージャ試験の応募者,受験者,合格者は 4 列目 (col_num) に記載されている。

def main():
    excel_path = './02_kenbetsu_r06a.xlsx'
    workbook = load_workbook(filename=excel_path, read_only=True)

    sheet = workbook[workbook.sheetnames[1]]
    
    start_row = 5
    step_row = 3
    end_row = 143
    col_num = 4
    
    # ラベル
    labels = extract_data(sheet, start_row, end_row, step_row, 1, is_label=True)
    print(f"const kenbetsu_labels = [{', '.join(labels)}];")

    print("const kenbetsuData = {")
    ## 応募者
    spring_oubosya = extract_data(sheet, start_row - 1, end_row - 1, step_row, col_num)
    print(f"    oubosya : [{', '.join(map(str, spring_oubosya))}],")
    ## 受験者
    spring_zyukensya = extract_data(sheet, start_row , end_row, step_row, col_num)
    print(f"    zyukensya : [{', '.join(map(str, spring_zyukensya))}],")
    ## 合格者
    spring_gokakusya = extract_data(sheet, start_row + 1, end_row + 1, step_row, col_num)
    print(f"    gokakusya : [{', '.join(map(str, spring_gokakusya))}],")
    print("};")
    
    # 年度受験率,合格率
    print("const kenbetsuNendoRate = {")
    ## 受験率
    zyukenritsu = extract_data(sheet, start_row, end_row, step_row, col_num + 1)
    print(f"    zyukenritsu : [{', '.join(map(str, zyukenritsu))}],")
    ## 合格者
    gokakuritsu = extract_data(sheet, start_row + 1, end_row + 1, step_row, col_num + 1)
    print(f"    gokakuritsu : [{', '.join(map(str, gokakuritsu))}],")
    print("};")
    
    workbook.close()

メイン関数の実行

メイン関数を実行する。

if __name__ == "__main__":
    main()

出力結果

上記のコードを実行した結果は以下のとおり。chart.js でグラフ化するコードに貼り付ければ完成です。

const keikennensubetsuData = {
    oubosya : [5, 45, 98, 373, 558, 596, 683, 824, 628, 836, 733, 666, 913, 809, 2280, 3352],
    zyukensya : [2, 31, 64, 236, 352, 350, 416, 517, 399, 534, 466, 428, 596, 543, 1556, 2091],
    gokakusya : [1, 2, 17, 43, 77, 69, 77, 81, 59, 80, 78, 64, 65, 55, 124, 298],
};
図 県別応募者,受験者,合格者

参考文献

更新履歴

  • 2024年12月30日 新規作成
  • 2026年5月23日 出力結果を更新

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です