Views: 90
階層型 Tidy dataと正規化した複数の表との違い
Nobuyuki SAMBUICHI
ISO/TC295 Audit data services/SG1 Semantic model Convener
先日の記事
「ChatGPTにTidy dataを指導」
の続きで、どこまで理解しているか再質問したところ、正規化された複数の表を用いた回答を繰り返すので、定義の説明から問いかけなおしたところようやく理解してくれたようです。
これも前回同様に仕訳日記帳の記入例です。
まとめ
論理的な整合性は判断できるように見えても実際に理解しているわけではないので、新しい発想に基づいた説明はできません。
ChatGPTの教育に使用された膨大な言語データには旧来の思考パターンが刷り込まれています。
今後ますます柔軟な思考方法や発想が求められる時代になってきますが、ChatGPTにはそうした発想を求めることができないため、旧弊を固定化しかねません。
また、悪意を持って情報発信されると、それらしい解説をするので、自ら考えることをせず鵜呑みにする人が増える状況だとかなり危険です。
学生がChatGPTで課題レポートを作成し提出したとしても、論理展開や課題のとらえ方などの本質理解を評価できるような課題設定であれば問題にならないと思います。ただし、学生自身がそこまでChatGPTを使いこなせなければ、思考を深めることにつながりません。これは、従来のネット情報の切り貼りレポートと同様。使いこなせれば、経験不足による配慮不足を補うことができ、根拠資料の調査レベルを効率よく深めることができます。
1980年代までは、海外の文献は大規模な図書館の蔵書から図書索引カードを駆使して探し、必要な場合は出版元に航空便で郵送を依頼する。といった大変面倒な手間と時間がかかっていました。その時代に戻ることはありえないと同様にChatGPTなどのAIツールの正しい使い方の指導が重要です。ChatGPTのない時代には戻れません。
仕訳情報検索専用ブラウザ
この形式の標準CSVを市販ソフトが提供しているCSVインタフェースと組み合わせて利用することで、仕訳情報検索専用ブラウザ を作成しています。
ここでは、
「日本版コアインボイス変換サービス」
で使用している構文バインディングの定義表のXPath定義に代えて、市販ソフトのCSVインタフェースファイルの欄名と階層型Tidy dataの変数の対応定義を次の表を用いて定義しています。
この定義表を変更することで、プログラム(csv2tidy.py)を変更しなくても、別の市販ソフトのCSVインタフェースファイルに対応可能です。
それぞれに対応した画面は、下記リンクからご確認いただけます。
北海道産業 EPSON財務会計R4のCSV
GL_Details(階層型Tidy data)
horizontal_ledger 仕訳日記帳
GeneralLedger 総勘定元帳
TrialBalance 残高試算表
プログラムに興味がある方は、上記のページを開いたときに表示される画面下部のGitHubアイコンをクリックすると、ソースコードやテストデータを確認いただけます。
指導1
階層型Tidy dataは、各行が仕訳明細を表し、そのエントリに属する行ごとにエントリ レベルのデータが繰り返されます。 この形式は、1 つの行内にデータの重複がなく、必要に応じてデータを簡単に集計またはフィルター処理できるため、整理されていると見なされます。
観測は、必ずしも同じ性質である必要はなく、仕訳入力単位の観測と仕訳明細の観測を合わせて含むことができます。
ご指摘の通り、階層型のTidy dataでは、各行が仕訳明細を表し、そのエントリに属する行ごとにエントリレベルのデータが繰り返されます。この形式では、データの重複がなく、データの集計やフィルタリングが容易に行えるため、整理された形式として扱われます。観測は、必ずしも同じ性質を持つ必要はなく、仕訳入力の観測と仕訳明細の観測を組み合わせて含むことができます。
Tidy dataの原則に従い、各変数が列を形成し、各観測値が行を形成することによって、データを整理し、分析や可視化に適した形式にすることができます。階層型のTidy dataは、このようなデータの形式の一つであり、複数の観測の異なる性質を含めることができます。
ご説明が明確であるかご確認いただければ幸いです。もし他に何かお困りの点がございましたら、お知らせください。
指導2
この階層型Tidy dataを用いて仕訳日記帳の記入例を提示してください。
以下に、階層型Tidy dataを用いた仕訳日記帳の記入例を示します。
仕訳ID | 仕訳コメント | 入力日付 | 仕訳行ID | 借方科目 | 借方金額 | 貸方科目 | 貸方金額 | 借方補助科目名 | 借方補助科目値 | 貸方補助科目名 | 貸方補助科目値 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
払い戻し |
2022-09-02 |
北信産業 株式会社 |
|||||||||
1 |
1 |
現金 |
15000 |
城北銀行普通預金 |
15000 |
|||||||
1 |
2 |
支払手数料 |
500 |
城北銀行普通預金 |
500 |
|||||||
2 |
給料支払い |
2022-09-03 |
北信産業 株式会社 |
|||||||||
2 |
1 |
報酬経費 |
30000 |
現金 |
30000 |
|||||||
2 |
2 |
給与手当 |
5000 |
現金 |
5000 |
上記の例では、仕訳ID、仕訳コメント、入力日付、仕訳行ID、借方科目、借方金額、貸方科目、貸方金額、借方補助科目名、借方補助科目値、貸方補助科目名、貸方補助科目値の項目が含まれています。
1つの仕訳に複数の明細行が存在する場合、同じ仕訳IDと仕訳コメントが繰り返され、借方科目・借方金額・貸方科目・貸方金額の情報が明細行ごとに記載されます。また、借方補助科目名、借方補助科目値、貸方補助科目名、貸方補助科目値の項目が追加され、必要に応じて補助科目情報を記録することができます。
階層型Tidy dataを使用することで、仕訳日記帳のデータを整理し、個々の仕訳と明細行の情報を効果的に管理できます。
ご参考までに、仕訳日記帳の記入例を提供いたしましたが、実際の業務や要件に応じて、さらなる項目の追加や変更が必要になる場合もあるかと思います。
指導3
仕訳入力単位の観測の行の「北信産業 株式会社」は、貸方科目ではなく仕訳コメント 「北信産業 株式会社払い戻し」です。
おっしゃる通り、指摘いただいた部分に誤りがありました。訂正を加えた例を以下に示します。
仕訳ID | 仕訳コメント | 入力日付 | 仕訳行ID | 借方科目 | 借方金額 | 貸方科目 | 貸方金額 | 借方補助科目名 | 借方補助科目値 | 貸方補助科目名 | 貸方補助科目値 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
北信産業 株式会社払い戻し |
2022-09-02 |
||||||||||
1 |
1 |
現金 |
15000 |
北信産業 株式会社 |
15000 |
|||||||
1 |
2 |
支払手数料 |
500 |
北信産業 株式会社 |
500 |
|||||||
2 |
給料支払い |
2022-09-03 |
北信産業 株式会社 |
|||||||||
2 |
1 |
報酬経費 |
30000 |
現金 |
30000 |
|||||||
2 |
2 |
給与手当 |
5000 |
現金 |
5000 |
修正例では、仕訳コメントに「北信産業 株式会社払い戻し」と記載し、貸方科目の欄を空欄にしました。また、2行目と3行目の貸方科目は「北信産業 株式会社」となっています。
再度、修正例をご確認いただければ幸いです。お手数をおかけしました。
指導4
仕訳ID 1 の 仕訳行ID 1,2の貸方科目が、「城北銀行普通預金」から「北信産業 株式会社」に誤って変更されているが、構造の修正をまず指摘する。
仕訳ID 2も同様
おっしゃる通り、仕訳ID 2の部分も修正が必要です。訂正を加えた例を以下に示します。
仕訳ID | 仕訳コメント | 入力日付 | 仕訳行ID | 借方科目 | 借方金額 | 貸方科目 | 貸方金額 | 借方補助科目名 | 借方補助科目値 | 貸方補助科目名 | 貸方補助科目値 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
北信産業 株式会社払い戻し |
2022-09-02 |
||||||||||
1 |
1 |
現金 |
15000 |
北信産業 株式会社 |
15000 |
|||||||
1 |
2 |
支払手数料 |
500 |
北信産業 株式会社 |
500 |
|||||||
2 |
北信産業 株式会社給料支払い |
2022-09-03 |
||||||||||
2 |
1 |
報酬経費 |
30000 |
北信産業 株式会社 |
30000 |
|||||||
2 |
2 |
給与手当 |
5000 |
北信産業 株式会社 |
5000 |
修正例では、仕訳ID 2の仕訳コメントに「北信産業 株式会社給料支払い」と記載し、貸方科目の欄を空欄にしました。また、2行目と3行目の貸方科目も「北信産業 株式会社」となっています。
再度、修正例をご確認いただければ幸いです。お手数をおかけしました。
確認
仕訳コメントが、「給料支払い」から「北信産業 株式会社給料支払い」に誤って変更された。プログラムなので、正確な訂正方法を指示しないと正しく直さない。個別項目の訂正指示はここで断念して、階層型 Tidy dataをどこまで理解しているか確認することにする。
次のような仕訳日記帳の例を用いて「階層型 Tidy data」の特長と従来の正規化された複数の表を用いて記録する場合との違いを簡単に説明してください。
このような形です
GL02 | GL02-GL55 | GL55-GL60 | GL55-GL68 | GL02-01 | GL02-02 | GL02-03 | GL64-02 | GL64-03 | GL64-04 | GL57-01 | GL57-02 | GL55-01 | GL55-02 | GL55-03 | GL55-04 | GL55-05 | GL55-06 | GL55-08 | GL63-01 | GL63-02 | GL56-01 | GL60-01 | GL60-02 | GL60-03 | GL68-01 | GL68-02 | GL68-04 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
1 |
1 |
北信産業 株式会社 |
財務会計R4 |
PC01 |
ISOBE-PC01 |
2022-09-02 |
1 |
2022-07-04 |
4 |
預金引出 |
||||||||||||||||
1 |
1 |
借方 |
100 |
現金 |
150000 |
||||||||||||||||||||||
1 |
2 |
貸方 |
110 |
城北銀行普通預金 |
150000 |
||||||||||||||||||||||
2 |
2 |
2 |
北信産業 株式会社 |
財務会計R4 |
PC02 |
ISOBE-PC01 |
2023-04-15 |
1 |
2022-07-04 |
4 |
ABC工務店、看板取り外し処分 |
||||||||||||||||
2 |
1 |
借方 |
529 |
修繕費 |
50000 |
資金区分 |
56 |
32 |
10 |
消費税 |
|||||||||||||||||
2 |
2 |
貸方 |
100 |
現金 |
50000 |
||||||||||||||||||||||
3 |
3 |
3 |
北信産業 株式会社 |
財務会計R4 |
PC01 |
ISOBE-PC01 |
2022-09-02 |
1 |
2022-07-11 |
4 |
信金クレジット扱ETC、有料道路代 |
||||||||||||||||
3 |
1 |
借方 |
204 |
未払金 |
7860 |
資金区分 |
67 |
||||||||||||||||||||
3 |
2 |
貸方 |
110 |
城北銀行普通預金 |
7860 |
||||||||||||||||||||||
4 |
4 |
4 |
北信産業 株式会社 |
財務会計R4 |
PC01 |
ISOBE-PC01 |
2022-09-02 |
1 |
2022-07-11 |
4 |
城北信金、アンサーホン手数料 |
||||||||||||||||
4 |
1 |
借方 |
512 |
支払手数料 |
1100 |
資金区分 |
56 |
32 |
10 |
消費税 |
|||||||||||||||||
4 |
2 |
貸方 |
110 |
城北銀行普通預金 |
1100 |
階層型 Tidy dataの特長と従来の正規化された複数の表を用いて記録する場合との違いは次のとおりです。
階層型 Tidy dataの特長:
単一の表で情報を記録: 階層型 Tidy dataでは、仕訳の情報や明細行の情報を単一の表で管理します。各行が観測値を表し、観測単位ごとにテーブルを形成します。
重複の削減: 階層型 Tidy dataでは、情報の重複を最小限に抑えます。必要な情報のみを適切な行に記載することで、データの冗長性を減らします。
階層構造の表現: 階層型 Tidy dataでは、階層的な関係を表現できます。列名や行の配置によって、親子関係や階層関係を明示的に示すことができます。
従来の正規化された複数の表を用いた場合:
テーブルの分割: 従来の方法では、仕訳情報と明細行情報を別々のテーブルに分割して管理します。複数のテーブルが必要になります。
結合操作の必要性: 情報を取得する際には、複数のテーブルを結合する必要があります。データベース操作やクエリの複雑さが増します。
冗長性の増加: 各テーブルには必要な情報の一部が重複して存在する場合があります。データの更新や変更があった場合、複数のテーブルで同じ情報を更新する必要があります。
階層型 Tidy dataは、情報の一貫性と集約性を保ちながら、データの冗長性を最小限に抑えることができます。また、階層関係を明示的に表現できるため、データの構造や関連性が直感的に理解しやすくなります。これに対して、従来の正規化された複数の表を使用する場合は、データの結合や操作の複雑さが増し、冗長性の増加も起こり得ます。
階層型 Tidy dataは、データの管理や解析、可視化などのさまざまな用途で効果的に活用できるデータ形式です。
ChatGPTが理解できているか確認
階層型Tidy dataの解説を、仕訳日記帳以外の例を使って、2000字程度で提示してください。
階層型Tidy dataは、各行が異なる観測を表し、そのエントリに属する行ごとにエントリ レベルのデータが繰り返されます。 このとき、観測の種類が異なると、異なる組み合わせの欄が使用されます。
この形式は、1 つの行内にデータの重複がなく、必要に応じてデータを簡単に集計またはフィルター処理できるため、整理されていると見なされます。
観測は、必ずしも同じ性質である必要はなく、例えば、仕訳入力単位の観測と仕訳明細の観測を合わせて含むことができます。
階層型 Tidy dataは、データの整理と解析を容易にするための形式です。この形式では、各行が異なる観測を表し、そのエントリに属する行ごとにエントリレベルのデータが繰り返されます。各行は観測単位としての意味を持ち、異なる組み合わせの欄が使用されることで異なる種類の観測を表現します。
階層型 Tidy dataの特長は、データの重複の削減と集約性の向上です。1つの行内にデータの重複がないため、必要な情報だけが適切な行に記載されます。このため、データの冗長性が減ります。また、データの集計やフィルタリングも容易に行うことができます。同じエントリに関連する行がまとまっており、必要なデータを簡単に抽出したり、集計したりすることができます。
階層型 Tidy dataでは、観測の種類が異なる場合でも柔軟にデータを表現することができます。例えば、仕訳入力単位の観測と仕訳明細の観測を同じ表に含めることができます。これにより、関連する情報を一緒に管理することができます。さまざまな種類の観測を1つの表にまとめることで、データの一貫性と関連性を保ちながら、複雑なデータ構造を簡潔に表現することができます。
従来の正規化された複数の表を使用する場合と比較して、階層型 Tidy dataの利点は以下のようにまとめられます。
データの統合性: 階層型 Tidy dataでは、関連する情報を1つの表にまとめることができます。データの分散や断片化を減らし、データの統合性を高めます。
冗長性の低減: 同じデータを複数のテーブルで重複して管理する必要がなくなります。データの冗長性を低減し、データの一貫性を向上させます。
柔軟なデータ操作: 階層型 Tidy dataは、データの集計やフィルタリングなどの操作が容易です。必要な情報を簡単に抽出したり、特定の条件に基づいてデータを操作したりすることができます。
可読性と理解しやすさ: 階層型 Tidy dataは、データの構造を明確に表現するため、可読性が高く理解しやすい形式です。データの関連性や階層関係が視覚的に把握しやすくなります。
階層型 Tidy dataは、データの整理と解析を容易にするための強力な形式です。データの複雑さを抑えながら情報を効果的に管理し、データ駆動型の分析や洞察を迅速に実現することができます。
追加質問
例を交えて説明してください
もちろんです。以下に具体的な例を交えながら、階層型 Tidy dataの特長と従来の正規化された複数の表を用いる場合との違いを説明します。
仮想的なデータセットを使用して、商品の売上データを考えましょう。従来の正規化された表のアプローチと、階層型 Tidy dataのアプローチの比較を行います。
従来の正規化された表のアプローチ
例えば、以下のような表構造を考えます。
テーブル: Sales
カラム: SaleID, ProductID, Region, Country, Quantity, Amount
この場合、商品ごとに複数の行があり、地域や国に関する情報が重複して記録されます。
SaleID | ProductID | Region | Country | Quantity | Amount |
---|---|---|---|---|---|
1 |
1001 |
North |
USA |
10 |
100 |
2 |
1001 |
North |
Canada |
5 |
50 |
3 |
1002 |
North |
USA |
8 |
80 |
4 |
1002 |
North |
Canada |
12 |
120 |
このような表構造では、同じ商品に関する情報が複数の行に分散して記録されています。データの冗長性が高く、情報の重複や不整合が生じる可能性があります。
階層型 Tidy dataのアプローチ
階層型 Tidy dataを使用すると、上記のデータを次のように表現することができます。
テーブル: Sales
カラム: SaleID, ProductID, EntryID, Region, Country, Quantity, Amount
Salesテーブルには、仕訳入力単位ごとの情報も含めることができます。
SaleID | ProductID | EntryID | Region | Country | Quantity | Amount |
---|---|---|---|---|---|---|
1 |
1001 |
1 |
North |
USA |
10 |
100 |
1 |
1001 |
1 |
North |
Canada |
5 |
50 |
2 |
1002 |
2 |
North |
USA |
8 |
80 |
2 |
1002 |
2 |
North |
Canada |
12 |
120 |
このような表構造では、商品ごとの情報が1つの観測としてまとめられています。重複する情報は1つの行にまとめられるため、データの冗長性が低くなります。
誤りを指摘
階層型 Tidy dataの例が間違いです
おっしゃる通り、先ほどの例に誤りがありました。お詫び申し上げます。
正しい階層型 Tidy dataの例を以下に示します。
SaleID | ProductID | EntryID | EntryComment | EntryDate | JournalLineID | Region | Country | Quantity | Amount | |
---|---|---|---|---|---|---|---|---|---|---|
1 |
1001 |
1 |
Entry 1 |
2022-01-01 |
North |
|||||
1 |
1001 |
1 |
1 |
10 |
100 |
|||||
1 |
1001 |
1 |
2 |
5 |
50 |
|||||
2 |
1002 |
2 |
Entry 2 |
2022-01-02 |
North |
|||||
2 |
1002 |
2 |
3 |
8 |
80 |
|||||
2 |
1002 |
2 |
4 |
12 |
120 |
この例では、階層型 Tidy dataの原則に従い、各行が異なる観測を表現しています。エントリごとにエントリ情報が繰り返され、エントリに属する仕訳明細行が続きます。
例えば、SaleID 1は「Entry 1」というエントリコメントと「2022-01-01」という入力日を持ち、それに続く仕訳明細行では「Region」や「Country」に関する情報、そして「Quantity」と「Amount」が記録されています。
階層型 Tidy dataのこの形式を使用することで、異なる種類の観測を一つの表に結合することができます。情報の重複を避けつつ、観測単位ごとに必要な情報を包括的に表現することができます。また、集計やフィルタリングなどのデータ操作も容易に行えます。
Country欄からUSA, Canadaが消されてしまっているが、追加指摘はせずここまでとした。
Marmaid
Marmaid
VS CodeのAscii DocでMermaid Markdown Syntax Highlighting機能拡張を使用して作図。
Mermaidについては、
https://mermaid.js.org/syntax/classDiagram.html