見出し画像

【Data analytics】片対数グラフを使う


1. 対数を取るグラフとは

軸のスケールに対数をとること(片対数グラフや両対数グラフを使うこと)で、指数関数的に増減するデータに対して可視性を高めることができ、
示唆を出しやすく(例:増加率が上下したなど)なります。

その参考となる資料(サイトやYoutube)を3つ紹介します。

  • ”片対数グラフ・両対数グラフとは?ー分かりやすく解説”(Youtube

    • そもそもデータをグラフ化する目的って何だっけからスタートし、仮想だがの売上データを使った具体例にも触れてくれています。


  • ”Ontario Tech University”サイト

    • 動画にある左側の(対数をとってない)グラフはxが1〜4付近の変化が捉えにくくなっている一方、右側の(片対数をとっている)グラフは1〜4付近の変化も捉えられていることが確認できます。


  • ”片対数グラフでウイルス感染データを読み取ろう!じっくり解説!対数グラフの読み方、メリット、特徴を数学的に解説!わからない人必見!【COVID-19】”Youtube

    • 動画後半の1日に2倍、3日で2倍、7日で2倍とか「示唆出しのための考え方」がためになる(👉今回このあとのワークで取り入れたかったんですがPython Skill 不足断念)

これらの資料より、対数グラフは片対数グラフと両対数グラフに分けられ、方対数グラフの中でも、x軸で対数を取るか、y軸で対数を取るかに分けられることがわかりました。
今回は、片対数グラフのy軸で対数を取るグラフを作り、
データから示唆を出すことにチャレンジしてみます。

2. Amazonの2008〜2021年の売上を分析

Statistaで公開されているAmazonの2008〜2021年の売上データを参考に確認していきます。(サイト

やることとしては以下です。

やること1:売上を棒グラフ/時系列グラフで可視化

やること2:ログを取って、線で繋ぐ(仮説:線形になる)

やること3:示唆出しにトライ

やること1: 売上の棒グラフ/時系列グラフで可視化

Figure1 : Amazon売上推移(2008-2021)筆者作成
Figure2 : Amazon売上推移(2008-2021)筆者作成

実際に、棒グラフと時系列グラフを可視化してみました。

このグラフから、
「Amazonの売上は毎年増えていること」と「増え方が指数関数的に増えていること」が事実として読み取れます。

一方、2004年から2010年あたりに着目した時、売上があまり増加していないように感じます。
ここで、片対数グラフの出番です。

やること2: 片対数グラフを可視化

Figure3 : y軸の片対数グラフ 筆者作成

ここで、y軸に対数をとって、可視化してみました。
グラフからは、線形になってることがわかります。

y軸に対数をとっていないグラフ(Figure2)においては、2004〜2010年あたりまで、増加の程度が理解しづらかったですが、
片対数のグラフ(Figure3)においては、2004年〜2010の成長比が2020年付近とほぼ同じであることがわかります。

最後の示唆出しに入る前に一点前置きを共有させてください。
Figure3をご覧の通り、
yのログをとると、綺麗な線形になり、複数の特徴を読み取ることはむずがしそうです。
その上で、わずかに傾きが大きくなっていると思う時期を
3つ着目し、示唆出しにトライしてみます。

やること3:示唆出しにトライ

示唆1:【2009-2012年】スマホの普及がAmazonの売上高増加率の向上に寄与!?

2009〜2012年において、若干傾き(増加率)が大きくなっています。
この要因として考えられるのがスマホの普及です(Figure4)。

Amazonは、言わずと知れたECのKingであり、
2010年ごろの爆発的なスマホ普及が、EC利用を促進させ、
その結果Amazonの売上の増加率を高めたのかもしれません。


(Figure3再掲)
Figure4 : 総務省「通信利用動向調査」から引用

示唆2:【2016-2018年】クラウド事業がAmazonの売上高増加率の向上に寄与!?

2016〜2018年において、若干傾き(増加率)が大きくなっています。
この要因として考えられるのがクラウド事業の指数関数的な利益の増加です(Figure5)。

AWS(Amazon Web Service)というクラウドサービスに対して、エンタープライズ中心に投資が進んだため、Amazonの売上増加率向上につながったのかもしれません。

(Figure5のグラフの本質としては、Figure1と共通ですね。指数関数的に増えていること主張するために有用かと思いました。)

(Figure3再掲)
Figure5 : 2013年から2019年までのAWSの年間収益成長率(Statistaより引用)

示唆3:【2020年】Covid-19によるステイホーム増加がAmazonの売上高増加率の向上に寄与!?

2020年でも売上高増加率がわずかに向上しています。
こちらはCovidの影響によるステイホームの増加が起因しているのだと推察されます。

FIgure6(2020年4月1日)とFIgure7(2022年4月1日)は、
世界のステイホームに関する規制の程度を表しています。
2020年4月は2022年4月よりもステイしていた人が多く、巣篭もり需要の増大が、Amazonの売上増加率向上につながったのかもしれません。

(Figure3再掲)
Figure6 : Our world in data より2020年4月1日のデータを引用
Figure7 : Our world in data より2022年4月1日のデータを引用

3. まとめ

今回は対数グラフの中でも片対数グラフを使って、分析を試みました。
扱ったAmazonのデータは綺麗な指数関数的増加を見せていて、
ログ変換後、綺麗に線形化されました。

今回、利益に着眼していないため、もっと深く分析できる余地はあるものの、単純に売上を毎年同じ率で向上させることは並大抵のことではないかと思います。GAFAMを中心に比較してみても面白いかもしれませんね。

今回は片対数グラフ(yを対数でスケール)だったので、次回以降は片対数グラフ(xを対数でスケール)や両対数グラフにチャレンジできたらと思っています。

4. 参考資料

  1. Amazonの売上データ👉Statista

  2. 片対数グラフの参考動画

    1. ”片対数グラフ・両対数グラフとは?ー分かりやすく解説”(Youtube

    2. ”Ontario Tech University”サイト

    3. ”片対数グラフでウイルス感染データを読み取ろう!じっくり解説!対数グラフの読み方、メリット、特徴を数学的に解説!わからない人必見!【COVID-19】”Youtube

  3. GitHub👉https://github.com/Yuichiro3/YuichiroKobayashi/tree/main/path/log%20graph

5. コード

import pandas as pd
import matplotlib.pyplot as plt


df_all = pd.read_csv("Annual net sales revenue of Amazon from 2004 to 2021.csv")
df_all["year"] = df_all["year"].astype(str)


#売上棒グラフ
fig = plt.figure(dpi=150)
ax = fig.add_subplot(1, 1, 1)
ax.bar(df_all["year"], df_all["sales_revenue"])
ax.set_xlabel('year')
ax.set_ylabel('Sales revenue(billion US dollars)')
plt.xticks(rotation=60)
plt.title('Sales from 2004 to 2021')
fig.show()
fig.savefig('normal graph.png')

# 対数化なしグラフ
fig = plt.figure(dpi=150)
ax = fig.add_subplot(1, 1, 1)
ax.set_xlabel('year')
ax.set_ylabel('Sales revenue(billion US dollars)')
ax.plot(df_all['year'], df_all['sales_revenue'])
plt.title('Sales from 2004 to 2021')
plt.xticks(rotation=60)
plt.show()
#fig.savefig('normal graph_2.png')

#y軸の対数化グラフ(片対数グラフ)
fig = plt.figure(dpi=150)
ax = fig.add_subplot(1, 1, 1)
ax.set_xlabel('year')
ax.set_ylabel('log Sales revenue(billion US dollars)')
ax.plot(df_all['year'], df_all['sales_revenue'])
plt.yscale('log')
plt.title('Log Sales')
plt.xticks(rotation=60)
plt.show()
fig.savefig('log graph.png')

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