見出し画像

参院選の結果を示す神エクセルをtidyにするRのコード

総務省がウェブサイトで開示している神エクセル(たとえばこれ)を、分析しやすいtidyな形式に変換するためのRのコードです。参院選比例区の各候補者が各市区町村でどれだけ得票したのかを示すもので、とりあえずは直近2022年選挙のデータをやってみました。

library(readxl)
library(tidyverse)

# Excelファイルのパスを指定
file_path <- "エクセルファイルのディレクトリとファイル名をここに入力"

# Excelファイルの全シート名を取得
sheet_names <- excel_sheets(file_path)

# 各シートを処理して結合する関数
process_sheets <- function(file_path, sheet_names) {
  all_data <- lapply(sheet_names, function(sheet) {
    # シートからデータを読み込み、9行目以降を選択
    df <- read_excel(file_path, sheet = sheet, skip = 8)
    
    # シート名を1列目に挿入
    df <- mutate(df, SheetName = sheet)
    df <- mutate_all(df, as.character)
    df <- df %>% 
      pivot_longer(cols=c(-`開票区名/名簿登載者名`,
                          -SheetName),
                  names_to = "候補者名",
                  values_to = "得票数") %>% 
      mutate(得票数=as.double(得票数)) %>% 
      rename(政党名=SheetName,市区町村名=`開票区名/名簿登載者名`)
    
    return(df)
  })
  
  # 全てのデータフレームを結合
  combined_df <- bind_rows(all_data)
  return(combined_df)
}

# 処理を実行
combined_data <- process_sheets(file_path, sheet_names)

combined_data %>% write_excel_csv("保存先のディレクトリ名とファイル名をここに入力")

もとはChatGPTにこの作業をやってもらったわけですが、その作業に使ったPythonのコードをRに書き換えさせて、でもそのRのコードには不備がいろいろあるので、最後は私が自力で修正しました。

総務省のデータは神エクセルというだけでなく、都道府県ごとにファイルが分かれているし(上記コードは一つの県のファイルだけを処理するもの)、別の年に行われた参院選の結果はもちろん別ファイルになっているし、さらに古いものだとPDFだったりして、いろいろいろいろアレなんですが、とりあえずこれをとっかかりにすれば、まとめてスクレーピングしてガッチャンコしたりすることも可能ではありそう。

あと当然、似たようなことが衆院選のデータでもできるはずだし、ほかのお役所神エクセルにも応用できるはず。なので、そのための備忘メモです。ご参考にできる方はご参考にされたし。

この記事が気に入ったらサポートをしてみませんか?