Python

【Pythonで業務改善】設備の稼働状況見える化

製造業において設備の稼働時間・稼働率を見える化することは、改善すべき方向性を決める上でとても役に立ちます。

世の中には様々な見える化ソフトが登場していますが、今回の内容はPythonを使って無料でやってしまおうという内容です。

また、Pythonの基礎知識だけでなくガントチャートの作り方やレイアウト変更などの応用まで紹介します。

基本的なガントチャート作成方法

作成するガントチャート 

各色はパトライトやカメラ、センサなどの情報から得る事を想定しています。

パトライトではIOT機器も販売されているので手取り早く稼働率の見える化したい場合にはおすすめです。

データ準備

このようなデータが準備できればOKです。

C列にある「時間」はONしてからOFFするまでの時間です。

Pythonコード解説

必要なライブラリをインポート

本解説ではPythonを使ってグラフ化まで行います。

各種必要なライブラリをインポートします。

import pandas as pd
import datetime
import plotly.express as px
import plotly.io as pio

エクセルデータを読み込みます。

df= pd.read_excel('稼働状況見える化.xlsx')

中身を見てみましょう。

ガントチャートを作成する

plotly_expressのtimelineを使用します。

text=のところでグラフ内に数値を挿入します。

fig.update_traces(textposition=’inside’, orientation=”h”)

で挿入する数値の位置と向きを指定します。

ポイントはcolor_discrete_mapを使用してグラフの色を指定するところですかね。

また、category_ordersで表示順を固定します。

fig= px.timeline(df, x_start="ON時間", x_end="OFF時間",text="時間",
                     y="色",color="色",color_discrete_map={'緑':'rgb(51,153,51)',
                  '黄':'rgb(255,192,0)',
                  '赤':'rgb(224,50,83)',
                  '電源OFF':'rgb(77,77,77)'},title="設備の稼働状況見える化",category_orders={"色":['緑','黄','赤','電源OFF']})
fig.update_traces(textposition='inside', orientation="h")

ガントチャートを表示してみます。

fig.show()

htmlでの保存もできます。

pio.write_html(fig,file="./稼働状況見える化.html")

稼働時間・稼働率も表示する

ここではデータフレーム内で計算をすることによって、稼働時間と稼働率を表示できるアレンジについて解説します。

total_timeが合計時間

op_timeが稼働時間

ratioが稼働率となります。

from datetime import timedelta

total_time=sum((df['OFF時間']-df['ON時間']).dt.total_seconds()/3600)
df_op=df[(df['色']=='緑')]   
op_time=sum((df_op['OFF時間']-df_op['ON時間']).dt.total_seconds()/3600)
ratio=(op_time/total_time)*100

グラフへ挿入してみます。

変えるところはタイトルの部分をtitle=f”設備の稼働状況見える化 稼働時間:{op_time}h,稼働率:{ratio}%”とします。

fig= px.timeline(df, x_start="ON時間", x_end="OFF時間",text="時間",
                     y="色",color="色",color_discrete_map={'緑':'rgb(51,153,51)',
                  '黄':'rgb(255,192,0)',
                  '赤':'rgb(224,50,83)',
                  '電源OFF':'rgb(77,77,77)'},title=f"設備の稼働状況見える化 稼働時間:{op_time}h,稼働率:{ratio}%",category_orders={"色":['緑','黄','赤','電源OFF']})
fig.update_traces(textposition='inside', orientation="h")

表示してみます。

タイトルに稼働時間と稼働率が表示されました。

レイアウトを工夫する

軸の間隔を自在に変化させられるrangeselectorとrangesliderについて解説します。

使い方は以下の通りです。

fig.update_layout(
    xaxis=dict(
        rangeselector=dict(
            buttons=list([
                dict(count=1,
                     label="1時間",
                     step="hour",
                     stepmode="backward"),
                dict(count=3,
                     label="3時間",
                     step="hour",
                     stepmode="backward"),
            ])
        )
    )
)
fig.update_xaxes(rangeslider_visible=True)

表示してみます。

以上で解説は終わりです。

ガントチャートの基本的な使い方はこちら

【plotlyチュートリアル】>ガントチャート ガントチャート(Gantt charts) 本記事ではPythonのグラフライブラリとして使えるplotlyによる「ガントチャー...

Plotlyに関する書籍紹介

↓Plotlyについて学べる数少ない参考書です。

Mickey@コーヒー好きエンジニア

【製造業×プログラミング×AI】Python/VBAを活用した業務改善、Streamlit/Plotlyを活用したWebアプリ開発について初心者向けに発信中|趣味は自家焙煎コーヒー作り|noteでは焙煎理論を発信|ココナラではプログラミングに関する相談,就職/転職やコーヒーに関する相談などのサービスをやっています