棒グラフの作成までの詳細(コードを含む)
前回作成した棒グラフデータのダウンロードから、データの整形、棒グラフ作成までの詳細です。
これまでの解説では、必須の部分のみの紹介にとどめ、全体のコードは省略していました。有料記事となりますが、この記事の最後に、まとめたコードをダウンロードできるようにしています。
R 言語を使ったプログラムの練習に使えるかと思います。練習用データとして、スプラトゥーン3の対戦データ (stat.ink のデータ) を使用しています。 ゲームとプログラミングに興味のあるかたは身近なデータで学んでみてはどうでしょうか?
1. 作業環境
実際に使用した作業環境は、下記のようになっています。フォントの設定は、 Mac を想定していますので、 Windows の方はご注意ください。
macOS 10.15.7 以上
R version 4.2.1
tidyverse 1.3.2
また、一部、ターミナルを利用したコマンドで解説しています。
2. データのダウンロード
使用するデータは、 stat.ink のサイトからダウンロードできます。1日ごとに集計された対戦結果が公開されています。「統計情報ダウンロード」と書かれているリンクから、こちらのダウンロードのページに進めます。さらに、「バトルのリザルト情報(CSV)」と書かれたリンクに進むと、 CSV 形式のファイルをダウンロードできるようになっています。
1つ1つダウンロードするのは大変なので、現在までのデータを1つにまとめた zip ファイル (battle-results-csv.zip) をダウンロードするのが簡単です。2024年3月時点で、500MB ほどのサイズになっています。
適当なフォルダにダウンロードした後、Zip を展開してください。展開後の battle-results-csv というフォルダを見ると、1日ごとの結果が、1つの CSV ファイルとして保存されています。(展開後は、4GB ほどのサイズになるので空き容量に注意してください。)
3. データの整形
読み込んだ後の作業がしやすいよう、ダウンロードしたデータを整形しておきます。この部分は、 R ではなく、ターミナル(シェル)のコマンドを使った方法で紹介します。
ターミナルで下記のコマンドを実行します。展開後の csv ファイルは、1日単位に分かれているため、 cat コマンドで連結したのち、ソート (sort) して、重複行を除外 (uniq) しています。ファイルごとに含まれているヘッダーを1行にできます。
また、一部に時間帯から使用ブキや試合結果まで完全に一致するデータが含まれているので、これを除外する目的もあります。(何らの影響で重複して登録されているのだと思います。)
cat battle-results-csv/2022-{09,10,11}-*.csv | sort | uniq > battle_results_drizzle2022.csv
この処理を必要なシーズンごとに行います。また、連結後、そのままの csv ファイルではサイズが大きくなるため、 gzip コマンドで圧縮しておくと良いでしょう。(必須な処理ではありません。)
cat battle-results-csv/{2022-12,2023-01,2023-02}-*.csv | sort | uniq > battle_results_chill2022.csv
cat battle-results-csv/2023-{03,04,05}-*.csv | sort | uniq > battle_results_fresh2023.csv
cat battle-results-csv/2023-{06,07,08}-*.csv | sort | uniq > battle_results_sizzle2023.csv
cat battle-results-csv/2023-{09,10,11}-*.csv | sort | uniq > battle_results_drizzle2023.csv
gzip *.csv
4. データ読み込み用の関数を定義する
シーズンごとに分けた結果を読み込みますが、毎回同じ処理を行うのは面倒です。このようなときは、同じ処理になるコードをオリジナルの関数として、先に定義しておくと便利です。
read_battle_results という関数を定義します。引数に前述の整形した csv ファイルと、シーズンを指定します。シーズンごとに分けていますが、一部、前シーズンの結果が含まれるため、それを除外するためです。(新シーズンは午前9時開始のため、0時から9時までは前シーズン)
また、ヘッダーにハイフン "-" が含まれていると、変数名として使用しづらいので、アンダースコア "_" に置換するという処理も必要になります。
読み込み用関数 read_battle_results のコードは、下記のようになります。
ここから先は
¥ 300
この記事が気に入ったらチップで応援してみませんか?