個人メモ なんかのチェック処理・・・の続き


なんかのチェック処理でその結果のDataFrameを作成しています。
その続きです
https://qiita.com/kawagucchi_suzuki/items/9921bc5331afe260385b
(DFを作ったのはこちらを参照)

結果を見るにあたってファイルだったりすると面倒なので
Redmineチケット発行してissueとして結果を作成すれば楽に還元できます。

https://qiita.com/kawagucchi_suzuki/items/b65bd98e66c742e7c465
(こちらで書きました)

で、DataFrameはいろいろなものが出てきそうなので
DataFrame→MarkdownTableを生成するよう関数を定義しました。

ざっとこんな感じ
False判定があれば強調するようにしておきました。

def createMarkdownTable(issue, df):

    for i in range(len(df.columns)):
        issue = issue + "|**" + str(df.columns[i]) + "**"
    issue = issue + "|" + "\n"

    for i in range(df.shape[0]):
        for j in range(df.shape[1]):
            if df.iloc[i, j] == False:
                z = "**" + str(df.iloc[i, j]) + "**"
            else:
                z = str(df.iloc[i, j])
            issue = issue + "|" + z  
        issue = issue + "|" + "\n"

    return issue

検証

y = x[['filename','ext','kaigyocode','mojicode','judge']]
issue = ''

issue_x = createMarkdownTable(issue, y)
print(issue_x)

redmeineとQiitaのmarkdownは少々異なるようなので
Qitta上ではテーブルと識別するように書き加えています。

filename ext kaigyocode mojicode judge
a.java java CRLF UTF8 True
b.java java CRLF SJIS False
c.java java LF UTF8 False
a.java java CRLF UTF8 True
a.akira akira shiena popko True
a.akira akira shiena poteko False
a.akira akira shiena popko True
b.akira akira shiena popko True
z.kawashima kawashima yuki pipimi True
z.kawashima kawashima yuki pipko False

2つの話をまとめるとコードはこんな感じに

import pandas as pd

df1_columns=['ext','True_kaigyocode','True_mojicode']
df1 = pd.read_csv('/home/satoshi/popko/Def.txt',
                 dtype='object',
                 encoding='utf_8',
                 names=df1_columns,
                 skipinitialspace=True)

df2_columns=['filename','ext','kaigyocode','mojicode']
df2 = pd.read_csv('/home/satoshi/popko/data.txt',
                 dtype='object',
                 encoding='utf_8',
                 names=df2_columns,
                 skipinitialspace=True)

x = pd.merge(df2,df1,on='ext',how='outer')
(x['kaigyocode'] == x['True_kaigyocode']) & (x['mojicode'] == x['True_mojicode'])

x[(x['kaigyocode'] == x['True_kaigyocode']) & (x['mojicode'] == x['True_mojicode'])]
x[~((x['kaigyocode'] == x['True_kaigyocode']) & (x['mojicode'] == x['True_mojicode']))]

x['judge'] = ((x['kaigyocode'] == x['True_kaigyocode']) & (x['mojicode'] == x['True_mojicode']))
x[['filename','ext','kaigyocode','mojicode','judge']]

# エラー有無チェック、all()を使うことで
# 1つでもエラーがあったかどうか、判定
# 集合の感覚と同じ、便利!
((x['kaigyocode'] == x['True_kaigyocode']) & (x['mojicode'] == x['True_mojicode'])).all()


# 関数化できるよね。

def createMarkdownTable(issue, df):

    for i in range(len(df.columns)):
        issue = issue + "|**" + str(df.columns[i]) + "**"
    issue = issue + "|" + "\n"

    for i in range(df.shape[0]):
        for j in range(df.shape[1]):
            if df.iloc[i, j] == False:
                z = "☓"
            elif df.iloc[i, j] == True:
                z = ""                
            else:
                z = str(df.iloc[i, j])
            issue = issue + "|" + z  
        issue = issue + "|" + "\n"

    return issue


# 検証 ---------------------------------------------------
y = x[['filename','ext','kaigyocode','mojicode','judge']]
issue = ''

issue_x = createMarkdownTable(issue, y)
print(issue_x)