統計の話をしようじゃないか - ソフトウェア品質のための統計入門(No.7 PythonとExcelで描く統計グラフ入門)
Back to Top
はじめに
#「統計の話をしようじゃないか」第7回では、実務で使えるグラフの描き方を紹介します。
これまで紹介してきた「代表値」「ばらつき」「分布の形」などは、視覚的に示してこそ価値があるものです。
今回は、現場でもよく使われるPython(matplotlib/pandas)とExcelの2通りで、次のような統計グラフを実際に描いてみましょう。
Pythonプログラムについては簡単な解説を、Excelについてはグラフ作成の簡単な手順を追記しましたので、皆様も実際に手を動かして作成してみてください。
- 棒グラフ(Bar Chart):カテゴリごとの数量比較に最適
- 折れ線グラフ(Line Chart):時系列の変化やトレンドの把握に有効
- 散布図(Scatter Plot):2つの数値間の関係性を可視化
- ヒストグラム(Histogram):連続データの分布形状を把握
- 箱ひげ図(Box Plot):ばらつき・偏り・外れ値の視覚化に最適
- パレート図(Pareto Chart):重点対策の判断や優先順位付けに活用
0. 環境
#本章では、Pythonを使って統計グラフを描画するために必要な環境を簡単に整備します。
特別な開発環境は必要なく、ローカルPCでPythonが動くことを前提とします。
● Pythonのバージョン
#- Python 3.9 以上(推奨)
● 必要なライブラリ
#以下のライブラリを使用します。
コマンドプロンプト(またはターミナル)で以下を実行してインストールしてください。
pip install matplotlib pandas numpy
- matplotlib:グラフ描画のための基本ライブラリ
- pandas:データフレーム操作に便利
- numpy:データ生成や統計計算に使用
● フォントの注意(Windows環境)
#日本語の文字化けを防ぐために、matplotlibの設定でフォントを指定します。
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Meiryo' # Windowsなら'Meiryo'、macなら'AppleGothic'
● Jupyter Labの利用もおすすめ
#ブラウザ上でインタラクティブにコードを実行できる Jupyter Lab は、グラフを確認しながら進めるのに最適です。
以下のコマンドでインストールできます:
pip install jupyterlab
起動方法:
jupyter lab
● Excelについて
#Excelは、Microsoft365のExcelを使用します。
Excelの導入については割愛させていただきます。
1. 棒グラフ(Bar Chart):カテゴリごとの数量比較に最適
#棒グラフ(Bar Chart)は、カテゴリごとの数量の違いを視覚的に把握するのに非常に有効なグラフです。
ソフトウェア品質管理においては、「バグ種別ごとの発生件数」や「レビュー指摘数の比較」などで活躍します。
● データ
#下記のようなカテゴリ別のバグ件数データを仮定します。
カテゴリ | 件数 |
---|---|
UI | 10 |
ロジック | 15 |
性能 | 8 |
その他 | 5 |
● Pythonで描く
#以下は、カテゴリ別にバグの件数を表す棒グラフの例です。
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Meiryo'
categories = ["UI", "ロジック", "性能", "その他"]
counts = [10, 15, 8, 5]
plt.bar(categories, counts, color='salmon', edgecolor='black')
plt.title("バグ種別の件数")
plt.xlabel("カテゴリ")
plt.ylabel("件数")
plt.tight_layout()
plt.show()
解説(Python)
plt.bar()
で棒グラフを描画します。color='salmon'
で棒の色を設定、edgecolor='black'
で枠をはっきりさせています。tight_layout()
を使うことでラベルの重なりを防ぎ、見やすいグラフになります。- 日本語を表示するために
plt.rcParams['font.family'] = 'Meiryo'
を使っています(Windows環境向け)。
● Excelで描く
#- A列にカテゴリ、B列にバグ件数を入力します。
- 範囲を選択して、「挿入」→「グラフ」→「縦棒グラフ」を選びます。
- グラフタイトルや軸ラベルを設定します(任意)。
解説(Excel)
- Excelでは、「縦棒グラフ」を使うことでカテゴリごとの数量を簡単に可視化できます。
- 横軸に「カテゴリ」、縦軸に「件数」が配置されます。
- データがカテゴリ(名義尺度)の場合、棒グラフが最適です。
● 補足:グラフ作成時の注意点
#棒グラフは、数の比較に強いグラフです。
ただし、時系列データ(例:月ごとの変化)には折れ線グラフを使うのが基本です。使い分けが重要です。
2. 折れ線グラフ(Line Chart):時系列の変化やトレンドの把握に有効
#折れ線グラフ(Line Chart)は、時間の流れに沿ったデータの変化や傾向を把握するのに適したグラフです。
日単位・週単位・月単位など、一定間隔で記録された時系列データを線で結ぶことで、トレンド(傾向)を視覚化できます。
品質管理では、進捗管理・異常検知・改善効果の確認など、幅広い用途で活用されています。
● データ
#下記のような曜日毎のバグ件数データを仮定します。
曜日 | バグ件数 |
---|---|
月 | 5 |
火 | 3 |
水 | 6 |
木 | 4 |
金 | 2 |
● Pythonで描く
#import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Meiryo'
days = ["月", "火", "水", "木", "金"]
bugs = [5, 3, 6, 4, 2]
plt.plot(days, bugs, marker='o')
plt.title("日別バグ件数")
plt.xlabel("曜日")
plt.ylabel("件数")
plt.tight_layout()
plt.show()
解説(Python)
plt.plot()
を使用して折れ線グラフを描画しています。marker='o'
を指定することで、各データ点を丸で表示しています。plt.tight_layout()
はグラフ要素がはみ出さないようにするための設定です。
● Excelで描く
#- A列に曜日、B列にバグ件数を入力します。
- 範囲を選択して、「挿入」→「グラフ」→「折れ線グラフ」を選びます。
- グラフタイトルや軸ラベルを設定します(任意)。
解説(Excel)
曜日と件数の2列データから、折れ線グラフを挿入するだけの簡単な操作です。
Excelでは自動的にX軸(横軸)をカテゴリ軸として解釈してくれます。
軸タイトルやデータラベルを追加することで、よりわかりやすい図になります。
● 補足:グラフ作成時の注意点
#- 横軸は順序性のある「曜日」を使用しており、折れ線でつなぐのが適しています。
- 折れ線グラフは「流れ」や「傾向」を示すのに適していますが、カテゴリ間に関係がない場合(例:担当者名など)には不向きです。
- データ点が少なすぎると線が過剰に強調されてしまい、トレンドを誤認する恐れがあるため注意が必要です。
3. 散布図(Scatter Plot):2つの数値間の関係性を可視化
#散布図は、2つの数値データ間の関係性(相関)を可視化するのに適したグラフです。
ソフトウェア品質においても、レビュー時間と指摘数の関係やテストケース数とバグ件数など、さまざまな“変数同士のつながり”を見つけるのに活用できます。
● データ
#下記のようなレビュー所要時間とバグ指摘数のデータを仮定します。
レビュー時間(分) | 指摘数 |
---|---|
10 | 2 |
20 | 3 |
30 | 4 |
40 | 8 |
50 | 15 |
● Pythonで描く
#import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Meiryo'
x = [10, 20, 30, 40, 50] # レビュー時間
y = [2, 3, 4, 8, 15] # 指摘数
plt.scatter(x, y, color='dodgerblue', edgecolor='black')
plt.title("レビュー時間と指摘数の関係")
plt.xlabel("レビュー時間(分)")
plt.ylabel("指摘数")
plt.grid(True)
plt.tight_layout()
plt.show()
解説(Python)
plt.scatter()
は散布図を描く関数です。- 点の色や枠線は
color
やedgecolor
で指定できます。 grid(True)
で補助線を加えると、位置関係がより把握しやすくなります。- 回帰直線(※1)などを追加することで、傾向の強さ・向きも確認できます。
※1: 回帰直線とは:散布図上に引かれる「データの傾向を最もよく表す直線」のことです。
「y = ax + b」の形で、予測や相関の強さを判断するのに使われます。
● Excelで描く
#- A列に「レビュー時間(分)」、B列に「指摘数」を入力します。
- 範囲を選択して、「挿入」→「グラフ」→「散布図(点)」を選びます。
- 必要に応じて「近似曲線(回帰直線)」を追加します。
解説(Excel)
- Excelの散布図では、「X軸:レビュー時間」「Y軸:指摘数」を軸に自動で設定できます。
- 点を選択し、右クリックで「近似曲線の追加」を選ぶことで、回帰直線を表示することも可能です。
- データ点が重なって見づらい場合は、点のサイズや透明度を調整するとよいでしょう。
● 補足:グラフ作成時の注意点
#- 数値データ同士の関係を見るグラフなので、カテゴリ型のデータには不向きです。
- 点が多すぎて重なる場合は、透明度(alpha) や jitter(微小なズレ) を使って視認性を上げます。
- 外れ値や傾向線(回帰直線)の追加によって、より深い分析が可能になります。
4. ヒストグラム(Histogram):連続データの分布形状を把握
#ヒストグラム(Histogram)は、連続データの分布形状を視覚的に把握するのに適したグラフです。
バグ修正時間やテスト実行時間など、ばらつきのある定量データを理解するうえで重要な手段です。
● データ
#下記のようなテスト実行時間(分)のデータを仮定します。(30件)
No. | 実行時間(分) | No. | 実行時間(分) |
---|---|---|---|
1 | 12 | 16 | 33 |
2 | 15 | 17 | 34 |
3 | 18 | 18 | 35 |
4 | 20 | 19 | 36 |
5 | 22 | 20 | 38 |
6 | 23 | 21 | 39 |
7 | 25 | 22 | 40 |
8 | 25 | 23 | 42 |
9 | 26 | 24 | 43 |
10 | 28 | 25 | 45 |
11 | 29 | 26 | 47 |
12 | 30 | 27 | 49 |
13 | 30 | 28 | 50 |
14 | 31 | 29 | 52 |
15 | 32 | 30 | 55 |
● Pythonで描く
#import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Meiryo'
# テスト実行時間データ(単位:分)
test_times = [
12, 15, 18, 20, 22, 23, 25, 25, 26, 28,
29, 30, 30, 31, 32, 33, 34, 35, 36, 38,
39, 40, 42, 43, 45, 47, 49, 50, 52, 55
]
# ヒストグラムを描画
plt.figure(figsize=(8, 5))
plt.hist(test_times, bins=8, edgecolor='black')
plt.title('テスト実行時間の分布(単位:分)')
plt.xlabel('テスト実行時間(分)')
plt.ylabel('件数')
plt.grid(True, linestyle='--', alpha=0.5)
plt.tight_layout()
plt.show()
解説(Python)
plt.hist()
によってヒストグラムを描画。bins=8
は区切りの数(ビン数)を指定。調整することで見やすさが変わる。edgecolor='black'
で棒の枠を明確にして視認性を向上。
● Excelで描く
#- 実行時間データ(A列)を準備。
- 範囲を選択して、「挿入」→「統計グラフ」→「ヒストグラム」を選びます。
- ビンの数やラベルを調整して視認性を高める。
解説(Excel)
- Excelでもヒストグラムは自動的にビンを計算してくれます。
- [軸の書式設定] → [ビンの幅]や[区切り数]を手動で調整可能。
- 外れ値が多い場合、ログスケールなどの工夫も検討すると良いです。
● 補足:グラフ作成時の注意点
#- ビンの設定(数や幅)でグラフの印象が大きく変わる。
- 見た目で判断せず、背景の統計的性質を意識する。
- 外れ値が目立つようなら、別途注釈を入れるとより親切です。
5. 箱ひげ図(Box Plot):ばらつき・偏り・外れ値の視覚化に最適
#箱ひげ図(Box Plot)は、データの広がりや偏り、外れ値の有無を一枚で視覚化できる強力なグラフです。
四分位数をベースにしており、中央値・四分位範囲(IQR)・最大・最小・外れ値などが同時に確認できます。
● データ
#下記のようなレビュー所要時間(分)のデータを仮定します。
No. | 所要時間(分) |
---|---|
1 | 19 |
2 | 20 |
3 | 21 |
4 | 21 |
5 | 22 |
6 | 23 |
7 | 24 |
8 | 25 |
9 | 26 |
10 | 27 |
11 | 55 |
● Pythonで描く
#import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Meiryo'
data = [19, 20, 21, 21, 22, 23, 24, 25, 26, 27, 55]
plt.boxplot(data, vert=False, patch_artist=True)
plt.title("レビュー時間のばらつき")
plt.xlabel("時間(分)")
plt.tight_layout()
plt.show()
解説(Python)
plt.boxplot()
は箱ひげ図を描く関数です。patch_artist=True
によって箱に色を塗れるように設定できます。vert=False
を指定することで横向きの箱ひげ図になります。- 外れ値(55)は、自動的にひげの外に点で表示されます。
● Excelで描く
#- データをA列に入力します。
- 範囲を選択し、「挿入」→「統計グラフ」→「箱ひげ図」を選びます。
- タイトルや軸を整えます。
解説(Excel)
- Excelでは統計グラフとして箱ひげ図を簡単に挿入可能です。
- 外れ値がある場合、自動的に丸印で表示されます。
- 四分位範囲(IQR)や中央値も視覚的に確認できます。
● 補足:グラフ作成時の注意点
#- 外れ値が極端な場合、スケールが崩れやすいため注意が必要です。
- 複数グループを並べる場合はスケールの統一が必要です。
- 少数データの場合、箱が極端に小さくなることもあるため、補足の説明を加えると親切です。
6. パレート図(Pareto Chart):重点対策の判断や優先順位付けに活用
#パレート図は、棒グラフと折れ線グラフを組み合わせたグラフで、要因別の件数とその累積割合を同時に可視化できます。
「重要少数 vs. 些末多数(80:20の法則)」を見極めるために使われ、リソースの集中配分や改善の優先順位付けに適しています。
● データ
#下記のようなバグ種別の件数データを仮定します。
バグ種別 | 件数 |
---|---|
ロジック | 18 |
UI | 12 |
性能 | 9 |
テスト漏れ | 6 |
その他 | 5 |
● Pythonで描く
#import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = 'Meiryo'
labels = ["ロジック", "UI", "性能", "テスト漏れ", "その他"]
values = [18, 12, 9, 6, 5]
# 累積比率を計算
cum_values = np.cumsum(values)
total = sum(values)
cum_percentage = cum_values / total * 100
fig, ax1 = plt.subplots()
# 棒グラフ(件数)
ax1.bar(labels, values, color='skyblue', edgecolor='black')
ax1.set_ylabel('件数', color='black')
ax1.tick_params(axis='y', labelcolor='black')
# 折れ線グラフ(累積比率)
ax2 = ax1.twinx()
ax2.plot(labels, cum_percentage, color='red', marker='o')
ax2.set_ylabel('累積比率(%)', color='red')
ax2.tick_params(axis='y', labelcolor='red')
ax2.set_ylim(0, 100)
plt.title('バグ種別ごとの件数と累積比率(パレート図)')
plt.grid(True, axis='y', linestyle='--', alpha=0.5)
plt.tight_layout()
plt.show()
● 解説(Python)
#bar()
でカテゴリごとの件数を描画し、plot()
で累積比率を折れ線で表示。twinx()
によって、棒グラフと折れ線グラフで異なるY軸を共有できる。np.cumsum()
で累積値、累積比率を計算。
● Excelで描く
#- A列にバグ種別、B列にバグ件数を入力します。
- 件数の降順に並び替える。
- 累積比率列を追加し、累積値÷合計で算出。
- 棒グラフ+折れ線グラフを複合グラフとして描画。
● 解説(Excel)
#- 棒と線で軸が異なるため、軸ラベルの設定を忘れずに。
- 項目の順番は「件数の多い順」でないとパレート図として意味をなさない。
- Excelでは「複合グラフ」を選ぶことで棒+折れ線の組み合わせが可能。
● 補足:グラフ作成時の注意点
#- カテゴリは降順で並べることが大前提。
- 「累積比率」は必ず第2軸に表示。
- 上位20%に含まれない項目も、重要なケースがあるため注意が必要。
実務での活用のヒント
#- グラフにはタイトル・軸ラベル・凡例を忘れずに
- 外れ値や傾向がある場合は注釈を加えると効果的
- 社内資料では「グラフの説明文」をセットでつけると親切
まとめ
#- PythonやExcelを使えば、統計グラフは誰でも描ける
- 意味のあるグラフは、分析と説明の両方を助ける
- 使い方の基本を押さえ、目的に合った形式を選ぼう
次回予告
#次回は「確率の直感と計算:「偶然」の正体を知る」です。
統計と深く関わる“確率”の基本を、直感的かつ実務寄りに解説します。
データ分析にご活用いただければ幸いです。