Pythonでガントチャートの作成する

Pandasでガントチャートの作成します。

# ライブラリのインストール

下記のコマンドを実行して再起動する

!pip install plotly
!pip install plotly_express
!jupyter labextension install @jupyterlab/plotly-extension

# ガントチャートの作成

# 単純プロット

import pandas as pd
import plotly.express as px
import plotly.io as pio
# pxでガントチャートを作成
# そのまま作成すると縦軸が上下逆さまに
# ガントチャートを作成するデータフレーム
df = pd.DataFrame([
    dict(
        Task='Job A',  # ジョブの名称
        Start='2022-01-01',  # 開始日
        Finish='2022-02-28',  # 終了日
    ),
    dict(
        Task='Job B',
        Start='2022-03-05',  # 開始日
        Finish='2022-04-15',  # 終了日
    ),
    dict(
        Task='Job C',
        Start='2022-02-20',  # 開始日
        Finish='2022-05-30',  # 終了日
    )
])
print(df)
#     Task       Start      Finish
# 0  Job A  2022-01-01  2022-02-28
# 1  Job B  2022-03-05  2022-04-15
# 2  Job C  2022-02-20  2022-05-30

fig = px.timeline(
    df,  # 使用するデータフレーム
    x_start='Start', x_end='Finish',  # 横軸の開始・終了の列名
    y='Task',  # 縦軸の列名
)
# グラフ全体とホバーのフォントサイズ変更
fig.update_layout(font_size=20, hoverlabel_font_size=20)
fig.show()

# # グラフ保存
# prefix = 'plotly-gantt-charts'  # 保存ファイル名の接頭辞
# save_name = f"{prefix}_simple"
# pio.orca.config.executable = '/Applications/orca.app/Contents/MacOS/orca'
# pio.write_html(fig, f"{save_name}.html")
# pio.write_image(fig, f"{save_name}.png")

# 判例によって色分けプロット

import pandas as pd
import plotly.express as px
import plotly.io as pio
# colorで色分けする(人名、リソース)
# ガントチャートを作成するデータフレーム
df = pd.DataFrame([
    dict(
        Task='Job A',  # ジョブの名称
        Start='2022-01-01', Finish='2022-02-28',  # 開始年と終了年
        Resource='Alex',  # リソース名
        Time=60, # 作業時間
        People=3, # 人工
    ),
    dict(
        Task='Job B',
        Start='2022-03-05', Finish='2022-04-15',
        Resource='Alex',  # リソース名
        Time=60, # 作業時間
        People=3, # 人工
    ),
    dict(
        Task='Job C',
        Start='2022-02-20', Finish='2022-05-30',
        Resource='Max',  # リソース名
        Time=60, # 作業時間
        People=3, # 人工
    )
])
print(df)
#     Task       Start      Finish Resource  Time  People
# 0  Job A  2022-01-01  2022-02-28     Alex    60       3
# 1  Job B  2022-03-05  2022-04-15     Alex    60       3
# 2  Job C  2022-02-20  2022-05-30      Max    60       3
fig = px.timeline(
    df,  # 使用するデータフレーム
    x_start='Start', x_end='Finish',  # 横軸の開始・終了の列名
    y='Task',  # 縦軸の列名
    color='Resource',  # 色分けをリソースにする
)
# グラフ全体とホバーのフォントサイズ変更
fig.update_layout(font_size=20, hoverlabel_font_size=20)
# 縦軸の向きを逆にする
fig.update_yaxes(autorange='reversed')
fig.show()
# # グラフ保存
# prefix = 'plotly-gantt-charts'  # 保存ファイル名の接頭辞
# save_name = f"{prefix}_color_Resource"
# pio.orca.config.executable = '/Applications/orca.app/Contents/MacOS/orca'
# pio.write_html(fig, f"{save_name}.html")
# pio.write_image(fig, f"{save_name}.png")

# 判例によって任意の色分けプロット

import pandas as pd
import plotly.express as px
import plotly.io as pio
# color_discrete_sequenceで色を変更
# ガントチャートを作成するデータフレーム
df = pd.DataFrame([
    dict(
        Task='Job A',  # ジョブの名称
        Start='2022-01-01', Finish='2022-02-28',  # 開始年と終了年
        Resource='Alex',  # リソース名
        Time=60, # 作業時間
        People=3, # 人工
    ),
    dict(
        Task='Job B',
        Start='2022-03-05', Finish='2022-04-15',
        Resource='Alex',  # リソース名
        Time=60, # 作業時間
        People=3, # 人工
    ),
    dict(
        Task='Job C',
        Start='2022-02-20', Finish='2022-05-30',
        Resource='Max',  # リソース名
        Time=60, # 作業時間
        People=3, # 人工
    )
])
print(df)
#     Task       Start      Finish Resource  Time  People
# 0  Job A  2022-01-01  2022-02-28     Alex    60       3
# 1  Job B  2022-03-05  2022-04-15     Alex    60       3
# 2  Job C  2022-02-20  2022-05-30      Max    60       3
fig = px.timeline(
    df,  # 使用するデータフレーム
    x_start='Start', x_end='Finish',  # 横軸の開始・終了の列名
    y='Task',  # 縦軸の列名
    color='Resource',  # 色分けをリソースにする
    # 色の変更。余った色は反映されない
    color_discrete_sequence=('violet', 'orange', 'green')
)
# グラフ全体とホバーのフォントサイズ変更
fig.update_layout(font_size=20, hoverlabel_font_size=20)
# 縦軸の向きを逆にする
fig.update_yaxes(autorange='reversed')
fig.show()
# # グラフ保存
# prefix = 'plotly-gantt-charts'  # 保存ファイル名の接頭辞
# save_name = f"{prefix}_color_discrete_sequence"
# pio.orca.config.executable = '/Applications/orca.app/Contents/MacOS/orca'
# pio.write_html(fig, f"{save_name}.html")
# pio.write_image(fig, f"{save_name}.png")

# 任意の情報も付属させる

import pandas as pd
import plotly.express as px
import plotly.io as pio
# color_discrete_sequenceで色を変更
# ガントチャートを作成するデータフレーム
df = pd.DataFrame([
    dict(
        Task='Job A',  # ジョブの名称
        Start='2022-01-01', Finish='2022-02-28',  # 開始年と終了年
        Resource='Alex',  # リソース名
        Time=60, # 作業時間
        People=3, # 人工
    ),
    dict(
        Task='Job B',
        Start='2022-03-05', Finish='2022-04-15',
        Resource='Alex',  # リソース名
        Time=60, # 作業時間
        People=3, # 人工
    ),
    dict(
        Task='Job C',
        Start='2022-02-20', Finish='2022-05-30',
        Resource='Max',  # リソース名
        Time=60, # 作業時間
        People=3, # 人工
    )
])
print(df)
#     Task       Start      Finish Resource  Time  People
# 0  Job A  2022-01-01  2022-02-28     Alex    60       3
# 1  Job B  2022-03-05  2022-04-15     Alex    60       3
# 2  Job C  2022-02-20  2022-05-30      Max    60       3
fig = px.timeline(
    df,  # 使用するデータフレーム
    x_start='Start', x_end='Finish',  # 横軸の開始・終了の列名
    y='Task',  # 縦軸の列名
    color='Resource',  # 色分けをリソースにする
    # 色の変更。余った色は反映されない
    color_discrete_sequence=('violet', 'orange', 'green'),
    hover_data=df[["Time", "People"]] # グラフに情報を付与
)
# グラフ全体とホバーのフォントサイズ変更
fig.update_layout(font_size=20, hoverlabel_font_size=20)
# 縦軸の向きを逆にする
fig.update_yaxes(autorange='reversed')
fig.show()
# # グラフ保存
# prefix = 'plotly-gantt-charts'  # 保存ファイル名の接頭辞
# save_name = f"{prefix}_color_discrete_sequence"
# pio.orca.config.executable = '/Applications/orca.app/Contents/MacOS/orca'
# pio.write_html(fig, f"{save_name}.html")
# pio.write_image(fig, f"{save_name}.png")

# まとめ

Pandasでガントチャートの作成しました.

# 参考サイト

Python ガントチャートの作成 (opens new window)

エラーメッセージ「TypeError: Object of type int64 is not JSON serializable」

エラーメッセージ「TypeError: Object of type int64 is not JSON serializable」

エラーメッセージ「TypeError: Object of type int64 is not JSON serializable」に対応します。

Google Colab + seleniumでarxivの論文をアブストも含めてダウンロードし,翻訳も実施する(2022/12/18)