LoginSignup
0
1

パレートの法則をPythonで表現する

Posted at

はじめに

パレートの法則というものがあります。80:20の法則とか呼ばれたりもします。
https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E6%B3%95%E5%89%87

このグラフをPythonで書きたいと思い、いろいろ模索しました。

要件

まず、以下を第一要件とします。

仕事の成果の8割は、費やした時間全体のうちの2割の時間で生み出している。(Wikipedia「パレートの法則」より)

これをグラフにするため、(20,80),(100,100)を通るようなグラフにしたいと思います。

べき分布・べき乗則

べき分布とかべき乗則とか呼ばれるものがあるそうです。
https://design.kyusan-u.ac.jp/OpenSquareJP/?Distribution
ここに書かれている以下の式
y=ax^(-k)+b
を使って(20,80),(100,100)を通るようなグラフを書ければよいのではないかと考えました。

プログラム

そうとわかればあとはPythonで書いてみるだけです。

graph.py
#!/usr/bin/env python
# coding: utf-8

# matplotlibのインポート
import matplotlib.pyplot as plt
import japanize_matplotlib  # <- 日本語の出力に必要
import numpy as np

# x座標は0.1単位で用意
x  = np.linspace(0.1, 100, 1000)
# 単なる反比例
y1 = (-480) / (x) + 104

# グラフの設定
plt.plot(x, y1, label='反比例カーブ', color='blue')
plt.scatter(x_points, y_points, color='blue', marker='o')
plt.xlabel('費やした時間 (%)')
plt.ylabel('仕事の成果 (%)')
plt.title('工数と品質の関係')
plt.xticks(np.arange(0, 110, 10))
plt.yticks(np.arange(0, 120, 10))
plt.grid(True)
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.legend(loc='lower right')

# グラフの表示
plt.show()

y=ax^(-k)+b の一番シンプルな式は k=-1、つまり反比例の式ですので、まずはそれでモデル化を試みました。
これは(20,80)を通り、(100,100)に近づきます。

おわりに

モデル自体が非常に単純なので、もっとモデル自体を見直して改善してみたいと思いました。

(おわり)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1