データのお砂場(157) R言語、米国の自動車の燃費データ再び、{ggplot2}

Joseph Halfmoon

かなり前の過去回で米国の自動車の燃費データを扱った記憶。振り返ってみると50年前のデータ。今回のgglot2パッケージ内のサンプルデータセットmpgは約25年前から15年ほど前までのデータです。やや新しいだけでなく、これ以後になるとEV車などが広まってくるので、内燃機関だけを考えていればよかった最後の時期のデータかと。

※「データのお砂場」投稿順Indexはこちら

※使用させていただいている Rのversionは 4.3.1。RStudioは 2024.04.2+764 “Chocolate Cosmos” です。

mpgデータセット

mpgと聞いて、MPEG?と反応するのは電気、電子、コンピュータ系のサガでしょう。mpg = Miles Per Gallon、ガソリン1ガロンあたりの走行マイル数です。ggplot2パッケージ内に、mpg というそのものズバリのお名前でサンプルデータセットが準備されてます。参照ページが以下に。

Fuel economy data from 1999 to 2008 for 38 popular models of cars

上記の時期であると既にプリウスとかハイブリッド車は登場していたハズの時期ですが場所はアメリカです。ハイブリッド車はおろか、EVの影もありませぬ。

元データは米国政府の以下のサイトから切り出されたものみたいです。

https://fueleconomy.gov/

上記サイトへ行って最近のデータを見てみるとEV満載、燃費を測る基準も単純な mpg ではなくなってます。内燃機関車は肩身が狭いよ。。。

なお、同じく米国の自動車の燃費を扱った過去回は以下です。

データのお砂場(65) R言語、mtcars、50年前の自動車「ロードテスト」の結果

データがとられた時期や、データセットの変数は異なりますが、どちらも燃費を扱っています。なお、Miles Per Gallon 単位は日本では実感が湧きにくいという理由で、Km Per Liter に換算した上でグラフを描くようにしたのは上記過去回と同じです。

11変数のほとんどは「見れば分かる」変数ばかりですが、Fuelの種別を示すfl変数だけは解釈が不明でした。燃料の種類を一文字で表してます。

“p” “r” “e” “d” “c”

pってなんだ、Petrolか?などと逡巡しつつ、結局以下のような勝手解釈に落ち着きました。

    • p、Premiumなガソリン
    • r、Regularなガソリン
    • e、Ethanol混ざった何か?
    • d、Diesel
    • c、CNG(Compressed Natural Gas)

最初、e は Electricityかよ、と思いましたが、時期的にはまだちょっと時期尚早かと。実際に e 分類の車種を見てみると、結構大排気量のアメ車で、いかにも内燃機関のスペックなので Electricity は却下。エタノール系を混ぜた燃料を使うものの何かじゃないかと想像してます。米国における当時の常識が分からないので判断つきませぬ。

年寄の繰り言を書くと、お惚け老人が米国で運転免許を取得した古代、ガス・ステーションで、レギュラーというと「鉛入ったやつ」でした。「無鉛ガソリン」はアンレーデットと呼ばれてました。それがいつ頃からかプレミアムなやつ(日本のハイオク?)とフツーのレギュラー、あともう一種類中間グレードがあるみたいだけれどもなどと名称は変更されて今にいたっているみたい。

まずは生データ

まずはサンプルデータセットのロードから。mpgRawData

11変数、234車種のデータです。データのサマリをとってみるとこんな感じ。mpgSummary

cylはシリンダ(気筒数)、displは排気量です。前の時代のデータではキュビック・インチみたいな単位で困りましたが、今回の排気量はリットル単位みたいです。それにしても米国らしいのう。最小排気量が1.6リッターです。最大は7リッターとな。燃費が良いわけないな。なお肝心の燃費は cty が街乗りでのマイルズ・パー・ガロン、hwyが高速でのマイルズ・パー・ガロンです。

文字データが格納されているフィールドのうち、manufacturer、classなどを確認してみます。mpgUnique

メーカでは、日本車を探すとHonda、Nissan、Subaru、Toyotaの4社が入っとりますな。

単位を変換

そのままの、Miles Per Gallonではイマイチ実感が湧きずらいので、例によって単位変換をかけちまいました。1 mpg ≒ 0.43 km/L です。

kpg <- mpg;
kpg$cty <- mpg$cty * 0.43;
kpg$hwy <- mpg$hwy * 0.43;
BoxPlot例

結構大量にある mpg 使った処理例から、以下適当に見繕って実施してます。なお mpg を km/Lに換算して kpg データについて処理していることにご注意を。まずは、対象期間の最初のころと後の頃での高速での燃費が 13km / L 以下の燃費の悪いやつらをプロットして比較する例です。

ggplot(kpg, aes(factor(year), displ)) + geom_boxplot(aes(colour = hwy < 13))

結果が以下に。kpgBoxplot0

緑の箱ヒゲの方が燃費の悪い奴らです。赤が燃費のいい奴らね。後の時代の方が、より排気量が大きい車でも燃費が良くなっている気がします。

一方、コンパクトとかミニバンとか、車のクラス毎に燃費を箱ヒゲ図化するものが以下に。

ggplot(kpg, aes(class, hwy)) + geom_boxplot(colour = "grey50") + geom_jitter()

この例では、geom_jitter()により、各車種の点をバラまいてます。こんな感じ。

kpgBoxplot1

ううむ、ピックアップ(トラック)とか、SUVの燃費が悪いのは予想どおりだけれども、コンパクト、ミッドサイズ、サブコンパクトの差あんまりないじゃん。特にサブコンパクトで燃費悪いやつらはなんなん?

散布図例

排気量(displ)に対して高速での燃費をプロットしたものが以下に。新しい車種ほど色の濃いポッチになってます。

ggplot(kpg, aes(displ, hwy)) + geom_point(aes(alpha = year))

やはり新しい方が燃費は良いのか。例外もあるみたいだが。
kpgPoint0

上記のプロットに geom_smooth()で回帰分析を重ねたもの。

ggplot(kpg, aes(displ, hwy)) + geom_point() + geom_smooth()

結果が以下に。kpgPoint1

排気量が5リッターを超えるとかえって燃費が良くなるように見えるのは何故?

自動車メーカ毎の散布図を描くものが以下に。

ggplot(kpg, aes(manufacturer, cty)) + geom_point()

結果は以下です。kpgPoint2

HondaやToyotaの燃費が良いのは分かるけれども、やけにフォルクスワーゲン、良い数字を叩き出しているんでないかい?

geom_density()プロット

「連続」したヒストグラム的プロットみたい。解析対象は気筒数毎の街乗り燃費ね。

ggplot(kpg, aes(cty, colour = factor(cyl))) + geom_density()

結果がこちら。

kpgDensity0

気筒数が少ないほど右に(燃費のいい方に)よっている感じだけれども5気筒が妙にピークが高いっす。何故?

それにしても日本じゃ燃費の良い小型車などで一般的な3気筒エンジンが見当たりませぬ。米国じゃのう。。。

データのお砂場(156) R言語、白地図に色づけ、midwest、{ggplot2} へ戻る

データのお砂場(158) R言語、哺乳類の睡眠時間データ、{ggplot2} へ進む