0
0

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.

ChatGPT3.5にPython, matplotlibでパレート図を作成させてみた

Last updated at Posted at 2023-04-21

文字通り ChatGPT3.5 にパレート図を描く Python プログラムを書かせてみた。
一番最初に提示されたプログラム。全くダメダメプログラム。

import matplotlib.pyplot as plt

# テストデータ (category:count)
data = {"A": 200, "B": 150, "C": 100, "D": 50, "E": 20, "F": 10}

# countを基準に降順にソートする
sorted_data = sorted(data.items(), key=lambda x: x[1], reverse=True)

# 合計値を算出する
total_count = sum(data.values())

# パレート図の描画
fig, ax1 = plt.subplots()

ax1.bar([x[0] for x in sorted_data], [x[1] for x in sorted_data], color='royalblue')
ax1.set_xlabel('Category')
ax1.set_ylabel('Count', color='royalblue')
ax1.tick_params(axis='y', labelcolor='royalblue')

ax2 = ax1.twinx()

cumulative_count = 0
cumulative_percentages = []
for i, (category, count) in enumerate(sorted_data):
    cumulative_count += count
    cumulative_percent = cumulative_count / total_count * 100
    cumulative_percentages.append(cumulative_percent)
    ax2.plot([i, i+1], [cumulative_percent, cumulative_percent], color='firebrick', linewidth=2)
ax2.set_ylabel('Cumulative Percentage (%)', color='firebrick')
ax2.tick_params(axis='y', labelcolor='firebrick')

plt.title('Pareto Chart')
plt.xticks(rotation=45, ha='right')
plt.show()

スクリーンショット 2023-04-21 9.24.14.png

行き違いというか指示不足もあったりで,その後何度もダメ出しして,19回目になってやっとまともな図を描くプログラムを提示してきた。

プログラムの欠点・欠陥を見抜けるか,プログラム・成果物の仕様を発注者(利用者)が正確に把握できているかが重要である。利用者がちゃんとしていないと,故意ではないにしてもChatGPTの不正確・不十分な成果物を受け入れてしまう可能性が高いなあと実感した。

最終成果物(まだ色々直したいところもあるが)

import matplotlib.pyplot as plt
import pandas as pd

# テストデータ
df = pd.DataFrame({
    'category': ['E', 'D', 'C', 'B', 'A'],
    'count': [10, 15, 20, 23, 25]
})

# カテゴリーを降順に並べ替える
df = df.sort_values('count', ascending=False).reset_index(drop=True)

# パーセントと累積パーセントを計算
df['Percent'] = df['count'] / df['count'].sum() * 100
df['Cumulative percent'] = df['Percent'].cumsum()

# パレート図を描画
fig, ax1 = plt.subplots(figsize=(8,6))

# 棒グラフを描画
ax1.bar(df['category'], df['Percent'], color='tab:blue')
ax1.set_ylabel('Percent', fontsize=14)
ax1.tick_params(axis='y', labelsize=12)
ax1.set_ylim([0, 100])

# 折れ線グラフを描画
ax2 = ax1.twinx()
ax2.plot(df['category'], df['Cumulative percent'], color='tab:red', marker='o')
ax2.set_ylabel('Cumulative percent', fontsize=14)
ax2.tick_params(axis='y', labelsize=12)
ax2.set_ylim([0, 100])

# x 軸のラベルを回転して表示
ax1.set_xticks(range(len(df)))
ax1.set_xticklabels(df['category'], fontsize=12, rotation=90)

# 軸目盛を整数にする
ax1.yaxis.set_major_locator(plt.MaxNLocator(integer=True))
ax2.yaxis.set_major_locator(plt.MaxNLocator(integer=True))

plt.title('Pareto Chart', fontsize=16)
plt.show()

スクリーンショット 2023-04-21 9.33.28.png

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?