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

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

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

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

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

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

~~~python
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
~~~

# 検証

~~~python 
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つの話をまとめるとコードはこんな感じに

~~~python
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)

~~~