【初心者向け】~製造業~Pythonによるデータ分析(16進数編)

今回は製造業で働いているバランが、日頃のデータ分析や自動化する際に使用するPythonコードを、実例を用いて説明していきます。

Baran

私の自己紹介ページです。

やりたいことをやろう

1. 製造業における16進数表現

今回はデータ分析で使用する機会がある16進数を10進数に変換する処理コードを検討します。

図1は16進数で表現されたデータですが、製造業では数値結果が16進数であることを示すために、数値結果の最後に文字が記載されることがあります。なお、今回は最後に記載されている文字”HEX”は、16進数を表す”HEX”を使用しました。

桁数の多いデータは16進数で表現されることが多いですが、いざデータ分析後にデータを可視化しようとすると、10進数のほうが都合がよいことがあります。そのため、この16進数で表現されたデータを10進数に変換していきます。

この文字列がデータ処理する際に結構邪魔です。

図1 製造業における16進数データ表現例

2. 文字列を含む16進数を10進数に変換する

以下は、変換コード例です。まず、16進数データを作成します。

import pandas as pd
df_16 = pd.DataFrame({'Number': ["0000HEX", "1111HEX", "FFFFHEX"]})

次に、16進数を10進数に変換する関数を作成します。

def base_16ary_to_10ary(df):
    """ 16進数のデータを"抽出、整形 """
    df["Number"] = df["Number"].str.extract('(\w+)HEX', expand=True)
    """ 16進数を10進数(int型)に変換 """
    df["Number"] = df["Number"].apply(lambda x: int(x, 16))
    """ 変換したDataFrameを戻します """
    return df

1行ずつ見ていきましょう。まず、以下のコードで変換関数を定義します。関数名は”base_16ary_to_10ary”としました。引数はデータフレームのみです。

def base_16ary_to_10ary(df):

次の行で、16進数を10進数に変換するために必要なデータ、つまり文字列”HEX”を取り除いたデータを抽出します。

""" 16進数のデータを"抽出、整形 """
df["Number"] = df["Number"].str.extract('(\w+)HEX', expand=True)

データフレームdf中から、”Number”というカラムに対して、正規表現を利用してデータを分けて、再度データフレームdfの”Number”というカラムにデータを代入します。ここでのデータ変換結果は以下のようになります。HEXを取り除けていますね。

図2 16進数データの文字列HEXを取り除いたデータ

(\w+)は、任意の英数字で1回以上の繰り返しのものをグループ化する記載です。HEXはグループ化せず、取り除きます。正規表現が不明な方は、以下のサイトがわかりやすいです。

正規表現の参照リスト

分かりやすいpythonの正規表現の例

あとは、HEXを取り除いた16進数データを10進数(int型)に変換するコードを記載します。

""" 16進数を10進数(int型)に変換 """
df["Number"] = df["Number"].apply(lambda x: int(x, 16))

以上で変換完了です。とても簡単でしたね。

3. 完成版コードとまとめ

完成版コードは以下です。

import pandas as pd

def base_16ary_to_10ary(df):
    """ 16進数のデータを"抽出、整形 """
    df["Number"] = df["Number"].str.extract('(\w+)HEX', expand=True)
    """ 16進数を10進数(int型)に変換 """
    df["Number"] = df["Number"].apply(lambda x: int(x, 16))
    """ 変換したDataFrameを戻します """
    return df

JupyterNotebook(またはJupyterlab)上での出力結果は以下となります。10進数に変換されていますね。

df_16 = pd.DataFrame({'Number': ["0000HEX", "1111HEX", "FFFFHEX"]})
df_10 = base_16ary_to_10ary(df_16)
df_10
図3 10進数に変換されたデータ

もちろん、文字列が含まれていないデータであれば、以下のコードでN進数を10進数に変換することが可能ですので、ぜひお確かめください。

import pandas as pd

def base_Nary_to_10ary(df, N=2):
    """ N進数を10進数(int型)に変換 """
    df["Number"] = df["Number"].apply(lambda x: int(x, N))
    """ 変換したDataFrameを戻します """
    return df

df_2 = pd.DataFrame({'Number': ["0000", "1010", "1111"]})
df_10 = base_Nary_to_10ary(df_2, 2)
df_10

これからも、製造業のデータ分析から得た知見や自動化ツールを発信していこうと思います。

それでは。

Twitterもやってまーす。

Baran

他の記事もご欄いただけると幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US

Baran-gizagiza
経歴:浪人→理系大学院卒業→大手製造業に就職(技術職)→アメリカ赴任中 仕事は、研究・設計など上流工程の仕事に携わっています。企業勤務を継続しながら、新しいことにチャレンジしたいと思い、ブログを下記はじめました。 このブログでは、趣味である 筋トレ(健康、ダイエット) AIとデータ(高校数学、プログラミング) 読書(主に自己啓発系) を中心に、人生経験やおすすめ情報の発信しています。