2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pythonで品質管理図を描く

Last updated at Posted at 2022-04-05

はじめに

テスト工程において品質の状況を逐一知りたいというときに「品質管理図」があれば把握できます。
品質が悪い場合、早めの対策が取れたりするのでpythonのmatplotlibを用いて描く方法を共有します。

準備(管理表)

  • シート名:list
  • カラム名は下記
    date:日付
    not_implemented_s:テスト消化予想線
    not_implemented_a:テスト消化線
    bug_s:不良摘出予想線
    bug_a:テスト消化線

sはschedule、aはactualの略としています。

バグ予想の列は「ゴンペルツ曲線」を用いて算出します。(これは別途)
下記はテストデータとなります。
fig.png

グラフ作成

ライブラリインポート

import openpyxl
import pandas as pd
import matplotlib.pyplot as plt
import datetime

管理表(エクセル)読み込み

wb = openpyxl.load_workbook('D:\\work\\test\\test_result_table.xlsx', data_only=True)
sheet_count = wb['list']

pandas.DataFrame作成

def getDataframe(sheet):
    data = sheet.values
    # 最初の行をヘッダーとして取得する
    columns = next(data)[0:]
    # 以降のデータからDataFrameを作成する
    df = pd.DataFrame(data, columns=columns)
   
    return df

df_count = getDataframe(sheet_count)

描画

タイトルが文字化け(豆腐)になるときは下記をダウンロードする。
https://moji.or.jp/ipafont/ipaex00401/

下記は「IPAexゴシック」をダウンロードした例です。

fig = plt.figure(figsize=(20, 20))
# フォント指定
plt.rcParams['font.family'] = 'IPAexGothic'
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

ax1.plot(df_count["date"], df_count["not_implemented_s"], color="k", label="テスト消化予想線")
ax1.plot(df_count["date"], df_count["not_implemented_a"], color="r", label="テスト消化線")

ax2.plot(
    df_count["date"], df_count["bug_s"], color="k", label="不良摘出予想線", linestyle="dashed"
)
ax2.plot(
    df_count["date"], df_count["bug_a"], color="r", label="不良摘出実績線", linestyle="dashed"
)

plt.tick_params(labelsize=10)  # 目盛線ラベルのフォントサイズ

# グラフタイトルを付ける
plt.title("消化したテスト項目数と摘出したバグ数", fontsize=15)
ax1.grid(False)
ax2.grid(False)
# 凡例の表示のため、handler1と2にはグラフオブジェクトのリスト情報が入る
# label1と2には、凡例用に各labelのリスト情報が入る
handler1, label1 = ax1.get_legend_handles_labels()
handler2, label2 = ax2.get_legend_handles_labels()

# 凡例をまとめて出力する
ax1.legend(
    handler1 + handler2,
    label1 + label2,
    bbox_to_anchor=(1.25, 1),
    loc="upper left",
    borderaxespad=0.0,
)
fig.autofmt_xdate(rotation=45)
ax1.set_ylim([0, 500])
ax2.set_ylim([0, 70])
ax1.set_ylabel("残存テスト項目数")
ax2.set_ylabel("不良摘出件数")

図示すると下記のような図になります。
予想線をちゃんとつければ評価できる図になります。
品質管理図.png

おわりに

管理表(エクセル)からpythonのmatplotlibを用いて品質管理図を図示するコードを共有しました。
図示することで意思決定がしやすくなると思います。
例えば下記のどのパターンになっているかなど。
https://monoist.itmedia.co.jp/mn/articles/1002/18/news101.html

参考

https://qiita.com/pbjpkas/items/e45dfed05c39518f3ad3
https://qiita.com/katuemon/items/5c4db01997ad9dc343e0

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?