こんにちは、entershareの大森です。
大学の時に本当に少しだけPythonを触ったりしていましたが、最近ではRubyとPHPしか触っていない気がします。
今回は少しだけmatplotlibを使ってグラフを描画してみたいと思います。
単にデータをプロットしているだけなので入門と考えてください。
また今回Jupyter Notebookを使用しています。
下記のInstallを見るとAnacondaとpipでのインストールが可能なようですが、Anacondaを使うのが簡単で公式サイトもおすすめしているようです。
https://jupyter.org/
それではやっていきましょう。
必要なモジュールをインストール
まずは必要なモジュールをインポートしていきます。
今回はグラフを描画するために必要なmatplotlibと数値計算を簡単にしてくれるnumpyをインポートしています。
# こう書くことでjupyter notebookの中でmatplotlibをいい感じに描画してくれる
%matplotlib inline
# matplotlibはグラフなどの描画モジュール
import matplotlib.pyplot as plt
# numpyは数値計算を効率的に行うためのモジュール
import numpy as np
ひたすら数値を入れる
後はプロットする前にひたすら数値をいれていきます。
numpyの配列を使うことでmatplotlibで簡単に描画ができます。
世代(generations)をX軸、全世代(average_data)、中学卒業後就職(junior_high)、高校卒業後就職(high_school)、短大・高専卒業後就職(short_university)、大学卒業後就職(univercity)のそれぞれの平均収入をY軸に描画する予定です。
なお使用したデータは厚生労働省の平成30年賃金構造基本統計調査になります。
generations = np.array([ 
  '20-24',
  '25-29',
  '30-34',
  '35-39',
  '40-44',
  '45-49',
  '50-54',
  '55-59',
  '60-64',
  '65-69',
  '70-'
])
average_data = np.array([
  209.7,
  240.3,
  273.5,
  301.7,
  327.4,
  352.4,
  373.8,
  370.3,
  278.4,
  245.3,
  243.3
])
junior_high = np.array([
  197.1,
  217.4,
  237.0,
  256.9,
  271.4,
  285.7,
  288.8,
  292.1,
  227.2,
  206.6,
  199.8
])
high_school = np.array([
  195.5,
  217.9,
  240.0,
  260.2,
  281.3,
  296.4,
  309.2,
  310.8,
  237.1,
  214.4,
  209.3
])
short_university = np.array([
  207.0,
  229.5,
  252.8,
  273.5,
  296.0,
  320.4,
  330.5,
  325.8,
  267.8,
  250.0,
  261.0
])
university = np.array([
  226.9,
  257.2,
  306.8,
  355.1,
  405.3,
  462.2,
  513.2,
  505.0,
  375.2,
  372.0,
  443.0
])
グラフをプロット
最後にグラフをプロットします。
最初の3行はタイトル、X軸のラベル、Y軸のラベルを設定しています。
次にplt.plot()を使ってグラフを描画しています。
第1引数はX軸のデータ、第2引数はY軸のデータ、第3引数はグラフのラベルです。
plt.grid()を使うことで、グリットを表示させることもできます。
またplt.legend()で凡例(グラフのラベル)を表示させるともできます。
引数にloc = 'upper left'のように渡すことで位置の指定も可能です。
plt.title('education and income')
plt.xlabel('age')
plt.ylabel('income')
plt.plot(generations, average_data, label='all')
plt.plot(generations, university, label='univercity')
plt.plot(generations, junior_high, label='junior_highschool')
plt.plot(generations, short_university, label='short_university')
plt.plot(generations, high_school, label='high_school')
plt.grid()
plt.legend(loc = 'upper left')
以上のコードを実行すると以下のようにプロットされます。
予想通りの結果ではあると思いますが、簡単に傾向を読み解いてみましょう。
やはり大学卒業後就職の場合の収入は、平均で飛び抜けて高いようです。
全体的な傾向としては50-54歳までは賃金は上昇傾向にあり、55を過ぎると横ばいに近づきます。
そして定年後はガクッと落ちるパターンがどの場合にも見受けられます。
また目立つのが大学卒業後就職した人の収入が60~69で落ち込み、その後70歳をすぎると跳ね上がることです。
短大・高専卒業後就職の場合でもこのような傾向は多少ありますが、この2つ以外ではそのような傾向は見られません。
こちらは賃金の調査なので年金などは含まれていないはずです。
それでもこのような結果が出るのは70歳を超えても、現役時に働いていた知識や経験を生かして価値を生み出せている可能性が1つ。
もしくはそもそも働いている人が少ないので、高い役職についていた人が引き続き働き、平均賃金を押し上げているというのが1つ。
どちらなのか、もしくは他の答えがあるのかはこの表からだけではわかりません。
ただ雇用されて働く場合には、平均的にこのグラフのように賃金が変化することを頭にいれて人生設計をする必要はあるでしょう。
それではまた!
全体のコード
最後に全体のコードを載せておきます。
# こう書くことでjupyter notebookの中でmatplotlibをいい感じに描画してくれる
%matplotlib inline
# matplotlibはグラフなどの描画モジュール
import matplotlib.pyplot as plt
# numpyは数値計算を効率的に行うためのモジュール
import numpy as np
generations = np.array([ 
  '20-24',
  '25-29',
  '30-34',
  '35-39',
  '40-44',
  '45-49',
  '50-54',
  '55-59',
  '60-64',
  '65-69',
  '70-'
])
average_data = np.array([
  209.7,
  240.3,
  273.5,
  301.7,
  327.4,
  352.4,
  373.8,
  370.3,
  278.4,
  245.3,
  243.3
])
university = np.array([
  226.9,
  257.2,
  306.8,
  355.1,
  405.3,
  462.2,
  513.2,
  505.0,
  375.2,
  372.0,
  443.0
])
junior_high = np.array([
  197.1,
  217.4,
  237.0,
  256.9,
  271.4,
  285.7,
  288.8,
  292.1,
  227.2,
  206.6,
  199.8
])
short_university = np.array([
  207.0,
  229.5,
  252.8,
  273.5,
  296.0,
  320.4,
  330.5,
  325.8,
  267.8,
  250.0,
  261.0
])
high_school = np.array([
  195.5,
  217.9,
  240.0,
  260.2,
  281.3,
  296.4,
  309.2,
  310.8,
  237.1,
  214.4,
  209.3
])
plt.title('education and income')
plt.xlabel('age')
plt.ylabel('income')
plt.plot(generations, average_data, label='all')
plt.plot(generations, university, label='univercity')
plt.plot(generations, junior_high, label='junior_highschool')
plt.plot(generations, short_university, label='short_university')
plt.plot(generations, high_school, label='high_school')
plt.grid()
plt.legend(loc = 'upper left')