Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

都道府県別の交通事故発生件数のデータの分析3 - R でデータラングリング 基本的な関数

Bing Image Creator で生成: Close up of Armeniaca mume tree flowers, background is great desert and blue sky, photo

www.crosshyou.info

の続きです。前回は、 The 5NG(names graphs)ということで、データのビジュアライゼーションをしました。今回は、Data Wrangling(データラングリング)の基本的なことをしてみたいと思います。

参考にしたウェブサイトは、

Chapter 3 Data Wrangling | Statistical Inference via Data Science

です。

この ModernDive のサイトでは、

filter() 関数でデータフレームの中から条件に合致したものだけをフィルターする。

summarize() 関数で変数のサマリー統計値を算出する。

group_by() 関数でデータフレームをグループ化する。

mutate() 関数で既存の変数を変換したり、新しい変数を作成する。

arrange() 関数でデータフレームを並び替える。

inner_join() 関数で2つのデータフレームを結合する。

という6つのデータラングリングの手法が解説されています。

それでは早速ラングリングしてみます。

group_by(), summarise(), arrange() を利用して、全部の年度を平均して交通事故の少ないところはどこか調べます。

沖縄県が一番、人口10万人当たりの交通事故発生件数が少ないです。

arrange() の中で desc() を使うと大きい順に並び替えします。

静岡県が一番交通事故の多い県です。

filter() をつかって、沖縄県と静岡県だけのグラフを描いてみます。

人口密度の一番低いところはどこでしょうか?

北海道が一番人口密度のが低いです。
人口密度の高いところはどこでしょうか?

東京都が一番の人口密度です。
北海道と東京都の人口密度の推移のグラフを描いてみます。

違いが大きすぎて、北海道の人口密度の推移が真っ直ぐな線になってしまいました。

次は、老齢化指数の一番小さいところ、つまり一番若いところはどこかみてみましょう。

沖縄県が一番若いです。

一番老年のところはどこでしょうか?

秋田県が一番老年のところです。

沖縄県と秋田県の老年化指数の推移をみてみましょう。

秋田県の老年化指数の推移がグングン進行していることがわかります。

ここまでで、まだ使っていない関数は、mutate() とinner_join() ですね。

この2つを使っていきましょう。

まず、都道府県別の交通事故発生件数の平均値と標準偏差のデータのデータフレームを作ります。

こうして作成したデータフレームを inner_join() でもとのデータフレームにくっつけます。

そして、mutate() 関数で、(jiko - avg) / std を算出して、jiko を標準化します。

標準化できているか確認します。

このように、どの都道府県の normalized も平均値はゼロ、標準偏差は1となっています。

今回は以上です。

次回は、

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# 平均して一番交通事故の少ないところはどこか?
df |> 
  group_by(pref) |> 
  summarize(average = mean(jiko)) |> 
  arrange(average)
#
# 平均して一番交通事故の多いところはどこか?
df |> 
  group_by(pref) |> 
  summarize(average = mean(jiko)) |> 
  arrange(desc(average))
#
# 沖縄県と静岡県の交通事故のグラフ
df |> 
  filter(pref == "沖縄県" | pref == "静岡県") |> 
  ggplot(aes(x = year, y = jiko)) +
  geom_line(aes(color = pref, group = pref),
            linewidth = 2)
#
# 平均して一番人口密度の低いところはどこか?
df |> 
  group_by(pref) |> 
  summarize(average = mean(mitsudo)) |> 
  arrange(average)
#
# 平均して一番人口密度の高いところはどこか?
df |> 
  group_by(pref) |> 
  summarize(average = mean(mitsudo)) |> 
  arrange(desc(average))
#
# 北海道と東京都の人口密度の推移
df |> 
  filter(pref == "北海道" | pref == "東京都") |> 
  ggplot(aes(x = year, y = mitsudo)) +
  geom_line(aes(group = pref, color = pref),
            linewidth = 2)
#
# 平均して一番若いところはどこか?
df |> 
  group_by(pref) |> 
  summarize(average = mean(elder)) |> 
  arrange(average)
#
# 平均して一番老年のところはどこか?
df |> 
  group_by(pref) |> 
  summarize(average = mean(elder)) |> 
  arrange(desc(average))
#
# 沖縄県と秋田県の老年化指数の推移
df |> 
  filter(pref == "沖縄県" | pref == "秋田県") |> 
  ggplot(aes(x = year, y = elder)) +
  geom_line(aes(group = pref, color = pref),
            linewidth = 2)
#
# 都道府県別の交通事故発生件数の
# 平均値と標準偏差のデータフレームを作成
df2 <- df |> 
  group_by(pref) |> 
  summarize(avg = mean(jiko),
            std = sd(jiko))
df2
#
# df に df2 をくっつくける。
df <- df |> 
  inner_join(df2, by = "pref")
df
#
# jiko を標準化
df <- df |> 
  mutate(normalized = (jiko - avg) / std)
df
#
# 都道府県別のnormalizedの平均値と標準偏差
df |> 
  group_by(pref) |> 
  summarize(avg = round(mean(normalized),3),
            std = sd(normalized))
#