LoginSignup
1
1

More than 1 year has passed since last update.

IQ Botのカスタムロジック:パターンの決まった文字化けの補正、空欄埋め、形式変換、ノイズの除外(置換処理)

Last updated at Posted at 2020-04-06

IQ Botのカスタムロジックの概要について、先日以下の記事でご紹介しました。

カスタムロジックはPythonというプログラミング言語そのものではあるんですが、
プログラミングの知識がないと使いこなせないかというと、そんなことはありません。

この記事では、コード自体は簡単ですが実際に業務で使う8~9割を占める
「置換」の処理について、コードと使用例をご紹介していきます。

上記の記事でもご紹介したとおり、
フィールド項目とテーブル項目で若干考え方が違うので、それぞれ紹介します。

フィールド項目に対する置換処理

まずはより基本編となるフィールド項目から。

置換のロジックはめちゃ簡単ですが、実際に業務で使うカスタムロジックの8~9割はこれです。

基本のコード

フィールド項目に対する置換の処理
field_value = field_value.replace("置換前の文字列","置換後の文字列")

以下のように改行して、同じ項目に対して複数の置換処理を定義することが可能です。

改行すれば複数の定義OK
field_value = field_value.replace("置換前の文字列1","置換後の文字列1")
field_value = field_value.replace("置換前の文字列2","置換後の文字列2")

たったこれだけのコードですが、以下のようにいろいろ応用できます。

置換処理の使い道いろいろ

  • 空欄を埋める

field_value.replace(" ","")で、空欄を埋められます。

余談ですが、IQ Botは改行ありの値を読み込んだ場合に、仕様として改行部分が空欄に変換されます。

  • オーと読まれた文字をゼロに変換(パターンの決まった文字化けの補正)

field_value.replace("O","0")で、オーをゼロに変換できます。

同じ要領で、

l(エル)やI(アイ)や|(パイプライン)を1(いち)に置き換えたり、
棘を東京に置き換えたり、
▲で表記されたマイナスをマイナス符号に置き換えたりなど、

いろいろできます。

  • 形式の変換

「2020年4月6日」を「2020/4/6」のような形式に直したい場合も、置換で対応できます。

日付の形式変換の例
field_value = field_value.replace("年","/") 
field_value = field_value.replace("月","/") 
field_value = field_value.replace("日","") 
  • ノイズの除外

OCRで帳票を処理すると、紙の汚れや人がボールペンでチェックしたマークなどが、
ピリオド、カンマ、コロン、セミコロン、スラッシュ、クオーテーション、ダブルクオーテーション 等々の
ノイズとして読み込まれてしまうケースが多々あります。

そうした記号が不要な項目であれば、field_value.replace("除外したいノイズ","")でノイズの除外ができます。

なお、置換前の文字列や置換後の文字列は、
ダブルクオーテーション(")かシングルクオーテーション(')のどちらかで囲まれていれば大丈夫です。

除外したいノイズ自体にダブルクオーテーションやシングルクオーテーションが入っている場合は、
以下のように定義すれば大丈夫です。

除外したいノイズじゃない方のクオーテーションで囲む

#シングルクオーテーションを除外する場合は、ダブルクオーテーションで囲む
field_value = field_value.replace("'","") 

#ダブルクオーテーションを除外する場合は、シングルクオーテーションで囲む
field_value = field_value.replace('"',"") 

テーブル項目に対する置換処理

テーブル項目の場合は、ちょっと書き方が変わりますが、それでも簡単です。

こちらで説明した「おまじないコード」の間に・・・

このように↓書きます。

テーブル項目に対する置換の処理
df['列名'] = df['列名'].str.replace('置換前の文字列', '置換後の文字列')

列名はIQ Botで帳票設定するときに定義したこちら↓の列名をそのまま使います。

Qiita用.jpg

日本語の列名でも普通に動きますが、
列名にスペースが含まれている場合は、スペースはアンスコ(_)に置き換えます。

例えば上記の「金額」と「金額 税込」の列から、「円」という単位を除外したい場合は以下のように処理します。

フィールド項目に対する置換の処理
df['金額'] = df['金額'].str.replace('円', '')
df['金額_税込'] = df['金額_税込'].str.replace('円', '')

まとめ

  • 置換の処理は簡単だけど、業務で使うカスタムロジックのほとんどはこれだよ
  • 置換処理の仕組みを使って、パターンの決まった文字化け補正や空欄埋め、ノイズの除外などいろいろできるよ
  • テーブルの場合は列名を指定するよ
  • テーブルの列名にスペースが含まれている場合は、アンスコ(_)に置き換えるよ

いかがでしたか?

置換処理を適切に使うと、簡単にインプットデータの質を上げられて自動化がしやすくなるので、ぜひ試してみてください!

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