(57)【特許請求の範囲】
【請求項１】
複数の項目の項目値を含むレコードが複数登録されたデータ集合を複数のグループに分割するデータ集合分割プログラムにおいて、
コンピュータを、
分割基準となる複数の指定項目が設定された指定項目情報に基づいて、複数の項目の項目値を含む複数のレコードを記憶する記憶手段内の前記複数のレコードそれぞれから前記指定項目の項目値を獲得し、所定の配列で前記項目値を並べた項目値リストをレコード毎に生成する項目値獲得手段、
根ノードに指定項目の項目値に関連付けられた複数のノードが木構造で接続され、各ノードに対して、根ノードから該ノードまでの経路上のノードそれぞれに関連付けられた指定項目の項目値の配列と同じ項目値の配列を有する項目値リストの出現回数を示すカウント値が設定された頻出木を有し、項目値リストを１つずつ選択し、該選択された項目値リストに含まれる指定項目の項目値の配列に沿って、前記頻出木の根ノードから順に各項目値が関連付けられたノードへ対象を遷移させていき、対象となったノードのカウント値をカウントアップし、対象のノードのカウント値が成長頻度を超えており、対象のノードに、該項目値リストの項目値の配列に沿った次の項目値に関連付けられたノードが接続されている場合、該ノードに対象を遷移させ、対象のノードのカウント値が該成長頻度を超えているが、対象のノードに、該項目値リストの項目値の配列に沿った次の項目値に関連付けられたノードが接続されていない場合、対象のノードに該次の項目値に関連付けられたノードを接続して、該ノードに対象を遷移させ、対象のノードのカウント値が該成長頻度を超えていないか、該項目値リストの最後の項目値に対応するノードまで対象を遷移させた場合、該選択された項目値リストに応じた対象の遷移を終了する頻出木構築手段、
前記頻出木のノードのうち、少なくとも、遷移先となるノードを有していない葉ノードを１つずつ選択し、選択した該葉ノードを、複数の分割先集合のうちの既に割り当てられた葉ノードのカウント値の合計が最も少ない分割先集合に割り当てる分割先決定手段、
前記記憶手段内の前記複数のレコードそれぞれについて、レコードの項目値リストに含まれる指定項目の項目値の配列に基づいて前記頻出木の根ノードから順にノードを辿り、最後に辿り着いたノードが割り当てられた分割先集合に、該レコードを振り分けるレコード振り分け手段、
として機能させることを特徴とするデータ集合分割プログラム。
【請求項２】
前記頻出木構築手段は、前記頻出木の構築処理の進行度合いに従って、前記成長頻度を動的に増加させることを特徴とする請求項１記載のデータ集合分割プログラム。
【請求項３】
複数の項目の項目値を含むレコードが複数登録されたデータ集合を複数のグループに分割するデータ集合分割装置において、
分割基準となる複数の指定項目が設定された指定項目情報に基づいて、複数の項目の項目値を含む複数のレコードを記憶する記憶手段内の前記複数のレコードそれぞれから前記指定項目の項目値を獲得し、所定の配列で前記項目値を並べた項目値リストをレコード毎に生成する項目値獲得手段と、
根ノードに指定項目の項目値に関連付けられた複数のノードが木構造で接続され、各ノードに対して、根ノードから該ノードまでの経路上のノードそれぞれに関連付けられた指定項目の項目値の配列と同じ項目値の配列を有する項目値リストの出現回数を示すカウント値が設定された頻出木を有し、項目値リストを１つずつ選択し、該選択された項目値リストに含まれる指定項目の項目値の配列に沿って、前記頻出木の根ノードから順に各項目値が関連付けられたノードへ対象を遷移させていき、対象となったノードのカウント値をカウントアップし、対象のノードのカウント値が成長頻度を超えており、対象のノードに、該項目値リストの項目値の配列に沿った次の項目値に関連付けられたノードが接続されている場合、該ノードに対象を遷移させ、対象のノードのカウント値が該成長頻度を超えているが、対象のノードに、該項目値リストの項目値の配列に沿った次の項目値に関連付けられたノードが接続されていない場合、対象のノードに該次の項目値に関連付けられたノードを接続して、該ノードに対象を遷移させ、対象のノードのカウント値が該成長頻度を超えていないか、該項目値リストの最後の項目値に対応するノードまで対象を遷移させた場合、該選択された項目値リストに応じた対象の遷移を終了する頻出木構築手段と、
前記頻出木のノードのうち、少なくとも、遷移先となるノードを有していない葉ノードを１つずつ選択し、選択した該葉ノードを、複数の分割先集合のうちの既に割り当てられた葉ノードのカウント値の合計が最も少ない分割先集合に割り当てる分割先決定手段と、
前記記憶手段内の前記複数のレコードそれぞれについて、レコードの項目値リストに含まれる指定項目の項目値の配列に基づいて前記頻出木の根ノードから順にノードを辿り、最後に辿り着いたノードが割り当てられた分割先集合に、該レコードを振り分けるレコード振り分け手段と、
を有することを特徴とするデータ集合分割装置。
【請求項４】
複数の項目の項目値を含むレコードが複数登録されたデータ集合を複数のグループに分割するデータ集合分割方法において、
分割基準となる複数の指定項目が設定された指定項目情報に基づいて、複数の項目の項目値を含む複数のレコードを記憶する記憶手段内の前記複数のレコードそれぞれから前記指定項目の項目値を獲得し、所定の配列で前記項目値を並べた項目値リストをレコード毎に生成し、
根ノードに指定項目の項目値に関連付けられた複数のノードが木構造で接続され、各ノードに対して、根ノードから該ノードまでの経路上のノードそれぞれに関連付けられた指定項目の項目値の配列と同じ項目値の配列を有する項目値リストの出現回数を示すカウント値が設定された頻出木を有し、項目値リストを１つずつ選択し、該選択された項目値リストに含まれる指定項目の項目値の配列に沿って、前記頻出木の根ノードから順に各項目値が関連付けられたノードへ対象を遷移させていき、対象となったノードのカウント値をカウントアップし、対象のノードのカウント値が成長頻度を超えており、対象のノードに、該項目値リストの項目値の配列に沿った次の項目値に関連付けられたノードが接続されている場合、該ノードに対象を遷移させ、対象のノードのカウント値が該成長頻度を超えているが、対象のノードに、該項目値リストの項目値の配列に沿った次の項目値に関連付けられたノードが接続されていない場合、対象のノードに該次の項目値に関連付けられたノードを接続して、該ノードに対象を遷移させ、対象のノードのカウント値が該成長頻度を超えていないか、該項目値リストの最後の項目値に対応するノードまで対象を遷移させた場合、該選択された項目値リストに応じた対象の遷移を終了し、
前記頻出木のノードのうち、少なくとも、遷移先となるノードを有していない葉ノードを１つずつ選択し、選択した該葉ノードを、複数の分割先集合のうちの既に割り当てられた葉ノードのカウント値の合計が最も少ない分割先集合に割り当て、
前記記憶手段内の前記複数のレコードそれぞれについて、レコードの項目値リストに含まれる指定項目の項目値の配列に基づいて前記頻出木の根ノードから順にノードを辿り、最後に辿り着いたノードが割り当てられた分割先集合に、該レコードを振り分ける、
ことを特徴とするデータ集合分割方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は大規模なデータベース内のデータ集合を複数の集合に分割するためのデータ集合分割プログラム、データ集合分割装置、およびデータ集合分割方法に関し、特に各データの集計に適した分割を行うデータ集合分割プログラム、データ集合分割装置、およびデータ集合分割方法に関する。
【背景技術】
【０００２】
企業の業務において、データベースシステムが多く利用される。データベースシステムには様々なデータが管理されている。そして、ユーザは、必要に応じて、データベース内のデータの値を集計することがある。
【０００３】
集計とは、指定された項目に対して、項目値の出現回数（度数）を求めることや、項目値を集約した計算を行うことを指す。集計は、データ分析・活用のための最も基本的で重要な処理の一つである。
【０００４】
集計処理に対する最も強い要望の１つとして、大規模データに対する高速集計の実現が挙げられる。近年の計算機の普及やネットワークの整備に伴い、大量のデータが流通・蓄積されるようになってきており、集計処理が対象とするデータの規模も増加の一途を辿っている。このため、規模耐性を有する高速集計技術の重要性はますます大きくなってきている。
【０００５】
また、近年では、ＸＭＬ（eXtensible Markup Language）データが急速な勢いで普及してきている。このため、従来のＲＤＢ（Relational DataBase）などが対象としてきた構造化データだけでなく、データ自体の変更や、データ定義の変更、データ構造の変更を柔軟に行えるＸＭＬデータを対象とした集計処理の実現が、非常に重要になってきている。
【０００６】
ここで、大規模データに対する集計処理を高速に行うためには、データ集合を複数のデータ群に分割し、分割したデータ群に対して集計処理を行う方法が有効である。
データ集合の分割を行う従来の技術として、格納順でデータの均等分割を行う、格納順分割方式がある。この方式では、例えば、データが１０００万件あり、それを１０個ずつのデータ集合に分割する場合、データの格納順で１００万件ずつを同じ分割先に分割する。
【０００７】
格納順分割方式を用いて大規模データを分割した場合、それらのデータを集計するためにデータ集合の併合処理が必要となる。例えば、格納順分割方式によりデータ分割を行った後、各分割されたデータをソートし、各分割データを併合しながら集計処理を行う技術がある（特許文献１参照）。このような格納順分割方式は、均等なデータ数に分割でき、レコードが定義できるデータであれば、どのようなデータに対しても容易に適用することができるという利点を持つ。
【０００８】
また、データ量が肥大化したＸＭＬデータを対象にしたデータ分割を行う技術がある。この技術では、データ中の項目（タグ）と項目値の出現回数とをカウントし、リストの形式でユーザに提供する。ユーザは、このリストの中から、分割に使用する項目を選択する。選択された項目値の組毎に分割先が対応付けられ、この対応付けに応じて、ＸＭＬデータ中の各レコードを振り分けることで、データ分割を行う（特許文献２参照）。
【特許文献１】特許第２９５９４９７号公報
【特許文献２】特開２００２−１０８８４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかし、格納順分割方式は、指定された項目次元上のデータ分布を考慮していないため、集計処理を行う際に、処理コストが高い併合処理を必要とするという課題を抱えている。例えば、特許文献１では、複数のデータ集合それぞれをデータの項目によってソートし、各データ集合を併合する際にも、データ集合から取り出したデータのソートが行われる（特許文献１の段落番号［００１９］参照）。
【００１０】
また、特許文献２で開示されているＸＭＬデータの分割方式では、項目（タグ）と項目値の出現回数のカウントが項目毎に独立に行われている。そのため、複数項目の値のデータ分布を考慮したデータ分割が困難となる。さらに、データの追加・更新・削除に伴うデータ分布の変化に即したデータの分割には高いコストを必要とするという課題も抱えている。
【００１１】
なお、ＸＭＬデータを扱った集計を行う技術として、特願２００４−３５８９４７号に記載されたデータ集計装置がある。この技術では、ＸＭＬ形式などでデータが記述された１つ以上のファイルから、集計に必要な項目情報を取り出し、取り出した情報を元にトライを構築することでデータ集計を行っている。
【００１２】
さらに、この出願に係るデータ集計装置では、データを一度スキャンするだけでデータ集計を実現できるため、非常に高速な集計処理を実現できる。しかしながら、トライを構築する際に、指定項目の相異なる値の数に比例した主記憶容量を必要とする。そのため、大規模データに適用する場合、計算領域が不足して、性能が悪化するという課題を抱えている。
【００１３】
本発明はこのような点に鑑みてなされたものであり、指定された項目に沿ったデータ集合の分割を効率よく行うことができるデータ集合分割プログラム、データ集合分割装置、およびデータ集合分割方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明では上記課題を解決するために、図１に示すようなデータ集合分割プログラムが提供される。本発明に係るデータ集合分割プログラムは、複数の項目の項目値を含むレコード１ａ，１ｂ，１ｃ，・・・が複数登録されたデータ集合１を複数のグループに分割するために、図１に示す機能をコンピュータに実行させることができる。
【００１５】
項目値獲得手段３は、分割基準となる複数の指定項目が設定された指定項目情報２に基づいて、データ集合１内のレコード１ａ，１ｂ，１ｃ，・・・から指定項目の項目値を獲得し、所定の配列で項目値を並べた項目値リスト３ａ，３ｂ，３ｃ，・・・をレコード１ａ，１ｂ，１ｃ，・・・毎に生成する。頻出木構築手段４は、複数の項目値リスト３ａを互いに比較し、所定の配列の先頭から任意の項目値までの項目値の並びを示す接頭項目値のうち、成長頻度で示される回数以上出現する接頭項目値を検出し、検出された接頭項目値で示される項目値の並びをノード間の遷移で表す頻出木５を構築する。分割先決定手段６は、頻出木５の葉ノードを複数の分割先集合６ａ，６ｂの何れかに割り当てる。レコード振り分け手段７は、レコード１ａ，１ｂ，１ｃ，・・・の項目値リスト３ａ，３ｂ，３ｃ，・・・に基づいてレコード１ａ，１ｂ，１ｃ，・・・を頻出木５に沿って遷移させ、最終遷移先のノードに応じてレコード１ａ，１ｂ，１ｃ，・・・を分割先集合６ａ，６ｂに振り分ける。
【００１６】
このようなデータ集合分割プログラムによれば、項目値獲得手段３により、指定項目情報２に基づいて、データ集合１内のレコード１ａ，１ｂ，１ｃ，・・・から指定項目の項目値が獲得され、レコード１ａ，１ｂ，１ｃ，・・・毎の項目値リスト３ａ，３ｂ，３ｃ，・・・が生成される。次に、頻出木構築手段４により、複数の項目値リスト３ａ，３ｂ，３ｃ，・・・が互いに比較され、所定の配列の先頭から任意の項目値までの項目値の並びを示す接頭項目値のうち、成長頻度で示される回数以上出現する接頭項目値が検出され、検出された接頭項目値で示される項目値の並びをノード間の遷移で表す頻出木５が構築される。さらに、分割先決定手段６により、頻出木５の葉ノードが複数の分割先集合６ａ，６ｂの何れかに割り当てられる。そして、レコード振り分け手段７により、レコード１ａ，１ｂ，１ｃ，・・・の項目値リスト３ａ，３ｂ，３ｃ，・・・に基づいてレコード１ａ，１ｂ，１ｃ，・・・が頻出木５に沿って遷移させられ、最終遷移先のノードに応じてレコード１ａ，１ｂ，１ｃ，・・・が分割先集合６ａ，６ｂに振り分けられる。
【発明の効果】
【００１７】
本発明では、各レコード内の指定項目の項目値の並びを示す接頭項目値のうち、成長頻度で示される回数以上出現する接頭項目値に基づいて、簡略化された頻出木を生成し、その頻出木に沿って遷移させたときの遷移先に応じてレコードを分割先集合に振り分けるようにした。そのため、指定項目の項目値が同じレコード同士を同じ分割先集合とするデータ集合分割処理を効率よく行うことができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本実施の形態の概略を示す図である。図１には、複数の項目の項目値を含むレコード１ａ，１ｂ，１ｃ，・・・が複数登録されたデータ集合１を複数のグループに分割するための処理手段が示されている。各処理手段は、以下の機能を有する。
【００１９】
項目値獲得手段３は、分割基準となる複数の指定項目が設定された指定項目情報２に基づいて、データ集合１内のレコード１ａ，１ｂ，１ｃ，・・・から指定項目の項目値を獲得する。そして、項目値獲得手段３は、所定の配列で項目値を並べた項目値リスト３ａ，３ｂ，３ｃ，・・・をレコード１ａ，１ｂ，１ｃ，・・・毎に生成する。
【００２０】
頻出木構築手段４は、複数の項目値リスト３ａ，３ｂ，３ｃ，・・・を互いに比較し、所定の配列の先頭から任意の項目値までの項目値の並びを示す接頭項目値のうち、成長頻度で示される回数以上出現する接頭項目値を検出する。そして、頻出木構築手段４は、検出された接頭項目値で示される項目値の並びをノード間の遷移で表す頻出木５を構築する。
【００２１】
分割先決定手段６は、頻出木５の葉ノードを複数の分割先集合６ａ，６ｂの何れかに割り当てる。例えば、分割先決定手段６は、各ノードを最終遷移先とするレコードの数に基づいて、分割先集合それぞれに割り当てられたノードに遷移するレコードの総数が平均化されるように、各ノードの割り当てを行う。
【００２２】
レコード振り分け手段７は、レコード１ａ，１ｂ，１ｃ，・・・の項目値リスト３ａ，３ｂ，３ｃ，・・・に基づいてレコード１ａ，１ｂ，１ｃ，・・・を頻出木５に沿って遷移させる。そして、レコード振り分け手段７は、最終遷移先のノードに応じてレコード１ａ，１ｂ，１ｃ，・・・を分割先集合６ａ，６ｂに振り分ける。
【００２３】
例えば、レコード振り分け手段７は、頻出木５の葉ノードまで遷移したレコードは、遷移先の葉ノードが属する分割先集合に振り分ける。また、レコード振り分け手段７は、葉ノードまで遷移しないレコードは、最終遷移先ノードが属する分割先集合（具体的には、そのノードから遷移可能な葉ノードが属する分割先集合）に振り分ける。
【００２４】
このような処理手段によれば、項目値獲得手段３により、指定項目情報２に基づいて、データ集合１内のレコード１ａ，１ｂ，１ｃ，・・・から指定項目の項目値が獲得され、レコード１ａ，１ｂ，１ｃ，・・・毎の項目値リスト３ａ，３ｂ，３ｃ，・・・が生成される。次に、頻出木構築手段４により、複数の項目値リスト３ａ，３ｂ，３ｃ，・・・が互いに比較され、所定の配列の先頭から任意の項目値までの項目値の並びを示す接頭項目値のうち、成長頻度で示される回数以上出現する接頭項目値が検出され、検出された接頭項目値で示される項目値の並びをノード間の遷移で表す頻出木５が構築される。さらに、分割先決定手段６により、頻出木５の葉ノードが複数の分割先集合６ａ，６ｂの何れかに割り当てられる。そして、レコード振り分け手段７により、レコード１ａ，１ｂ，１ｃ，・・・の項目値リスト３ａ，３ｂ，３ｃ，・・・に基づいてレコード１ａ，１ｂ，１ｃ，・・・が頻出木５に沿って遷移させられ、最終遷移先のノードに応じてレコード１ａ，１ｂ，１ｃ，・・・が分割先集合６ａ，６ｂに振り分けられる。
【００２５】
これにより、指定項目の項目値が同じレコード同士を同じ分割先集合とするデータ集合分割処理を効率よく行うことが可能となる。
すなわち、成長頻度で示される回数以上出現する接頭項目値によって頻出木５を作成するため、簡略化された頻出木５が構築される。その結果、レコード１ａ，１ｂ，１ｃ，・・・の量が膨大であっても、少ないメモリ容量で頻出木５を作成可能である。
【００２６】
しかも、指定項目に該当する項目値を用いて頻出木５を作成しているため、指定項目の値が共通するレコードは、必ず同じ分割先集合に振り分けられる。従って、分割されたレコードに含まれる任意のデータを指定項目で分類指定して集計する際に、分割先集合毎に個別に集計すればよい。その際、集計結果の統合処理（例えば、同じグループに属する集計結果を検出して、その集計結果を合算する処理）を行う必要がないため、効率的な集計処理が可能となる。
【００２７】
そこで、図１に示したデータ集合分割機能を包含するデータ集計装置の例を用い、本実施の形態の詳細を説明する。また、以下の実施の形態では、ＸＭＬ形式のファイル内に膨大な量のデータが格納されているものとする。
【００２８】
図２は、本実施の形態に用いるコンピュータのハードウェア構成例を示す図である。データ集計装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、および通信インタフェース１０６が接続されている。
【００２９】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。
【００３０】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００３１】
通信インタフェース１０６は、ネットワーク１０に接続されている。通信インタフェース１０６は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。
【００３２】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
図３は、データ集計装置の機能を示すブロック図である。データ集計装置１００は、項目獲得部１１０、項目値変換部１２０、頻出木構築部１３０、分割先決定部１４０、データ振り分け部１５０、および集計部１６０を有する。
【００３３】
項目獲得部１１０は、ＸＭＬデータ２０から指定項目情報３０で示される値を獲得し、レコード毎に指定項目値のリストを作成する。指定項目情報３０とは、集計対象となるデータ（指定項目）の項目名である。指定項目情報３０は、ユーザによって任意に入力される。
【００３４】
項目値変換部１２０は、項目獲得部１１０で獲得された項目値を、所定のアルゴリズムに沿って変換する。例えば、ユーザの年代毎にデータ集計をおこなう場合、各ユーザの年齢を示すデータの下一桁の数字を「０」にする。この場合、年齢を表すデータが「３１」であれば、「３０」に変更される。これにより、１０代、２０代、３０代，・・・といった年代毎のデータ集計が容易となる。
【００３５】
頻出木構築部１３０は、このレコード毎の項目値リストから、一定回数以上出現する接頭項目の値を全て格納した頻出木を構築する。頻出木のエッジには項目値が格納されており、ノードにはカウント値が設定されており、そのカウント値に出現回数が記憶されている。なお、頻出木構築部１３０は、レコード毎の項目値リストを順次読み込みながら、頻出木を近似的に構築する。
【００３６】
分割先決定部１４０は、出現回数に基づいて、頻出木のノードと分割先とを対応付ける。
データ振り分け部１５０は、各レコードに対応する項目値リストに基づいて、頻出木を遷移させ、遷移が停止したノードに対応付けられた分割先にレコードを振り分ける。
【００３７】
集計部１６０は、分割されたデータの値を集計し、集計結果を出力する。集計処理は、１台の計算機で逐次的、並列的に処理してもよいし、分割したデータを複数の計算機に分散させ、分散処理してもよい。また、分割データ毎の集計結果をそのまま出力してもよいが、集計結果をまとめて１つの集計結果として出力してもよい。
【００３８】
ここでは、頻出木の近似的な構築に基づくデータ集計装置１００の処理を、具体的なデータを用いて説明する。
図４は、ＸＭＬデータの例を示す図である。この例では、全国各地に販売店を有する家電量販店におけるパーソナルコンピュータ（パソコン）関連商品の売上げに関するデータが、ＸＭＬデータ２０内に登録されている。ＸＭＬデータ２０には、複数のレコード２１，２２，・・・が設定されている。各レコード２１，２２，・・・は、売上情報タグ（＜売上情報＞、＜／売上情報＞）で囲まれている。
【００３９】
図５は、指定項目情報の例を示す図である。指定項目情報３０には、指定項目として、以下の３つの絶対ロケーションパス（文書構造上の最上位の項目から指定項目に至る経路）が指定されている。
［指定項目＃１］売上管理／売上情報／顧客／年齢
［指定項目＃２］売上管理／売上情報／顧客／性別
［指定項目＃３］売上管理／売上情報／顧客／住所／都道府県
各指定項目には、頻出木を構築する際の判断基準とする際の優先順位がある。この例では、指定項目情報３０内の上位に設定された指定項目ほど優先順位が高い。すなわち、優先順位は、［指定項目＃１］、［指定項目＃２］、［指定項目＃３］の順となる。
【００４０】
以上のようなＸＭＬデータ２０と指定項目情報３０とが入力されると、データ集計処理が実行される。データ集計処理では、まず項目値リスト生成処理が行われる。
図６は、項目値リスト生成処理の手順を示すフローチャートである。以下、図６に示す処理をステップ番号に沿って説明する。
【００４１】
［ステップＳ１１］項目獲得部１１０は、項目値リストを初期化する。なお、項目値リストには、ＸＭＬデータ２０内のレコード２１，２２，・・・それぞれの指定項目の内容が設定される。初期化により、項目獲得部１１０内（具体的にはＲＡＭ１０２などの記憶領域の一部）に、項目値リストのための記憶領域が確保される。
【００４２】
［ステップＳ１２］項目獲得部１１０は、ＸＭＬデータ２０の上位から順に１行ずつデータを読み込む。
［ステップＳ１３］項目獲得部１１０は、既にＸＭＬデータ２０の最後（ＥＯＦ）に達しており、ステップＳ１２による読み込みに失敗したか否かを判断する。ＥＯＦであれば、処理が終了する。ステップＳ１２で新たなデータが読み込まれた場合、処理がステップＳ１４に進められる。
【００４３】
［ステップＳ１４］項目獲得部１１０は、ステップＳ１２で読み込んだデータがレコードの終了を示すデータか否かを判断する。この実施の形態では、読み込んだデータが＜／売上情報＞タグであれば、レコード終了である。レコード終了のデータが読み込まれた場合、処理がステップＳ１８に進められる。レコード終了のデータではない場合、処理がステップＳ１５に進められる。
【００４４】
［ステップＳ１５］項目獲得部１１０は、読み込んだデータが指定項目か否かを判断する。この例では、読み込んだデータが、図５に示す指定項目情報３０で示される何れかの指定項目を構成する項目か否かが判断される。
【００４５】
具体的には、読み込んだデータが、＜売上管理＞タグ、＜売上情報＞タグ、および＜顧客＞タグの下位構造の＜年齢＞タグの場合、そのデータは［指定項目＃１］に該当する。読み込んだデータが、＜売上管理＞タグ、＜売上情報＞タグ、および＜顧客＞タグの下位構造の＜性別＞タグの場合、そのデータは［指定項目＃２］に該当する。読み込んだデータが、＜売上管理＞タグ、＜売上情報＞タグ、および＜顧客＞タグの下位構造の＜住所＞タグの場合、そのデータは［指定項目＃３］に該当する。
【００４６】
読み込んだデータが指定項目であれば、処理がステップＳ１６に進められる。読み込んだデータが指定項目でなければ、処理がステップＳ１２に進められる。
［ステップＳ１６］項目値変換部１２０は、項目値の変換処理を行う。本実施の形態では、項目値変換部１２０は、年齢の値の１の桁を０に変更することで、年代毎のデータ集計を行う。
【００４７】
具体的には、項目値変換部１２０は、項目「年齢」が１０以上１９以下の場合は「１０」に置き換え、２０以上２９以下の場合は「２０」に置き換えるという具合に、項目「年齢」の値を年代別にレンジ化する。
【００４８】
［ステップＳ１７］項目値変換部１２０は、項目値変換後の項目値を、項目値リストに格納する。その後、処理がステップＳ１２に進められる。
［ステップＳ１８］ステップＳ１４でレコード終了と判断されると、項目獲得部１１０は、項目値リストに項目値を格納する。この際、各項目値は、対応する指定項目の優先順位（図５に示す指定項目情報３０内の上位に設定されている順）に沿った並びで項目値リストに格納される。
【００４９】
なお、指定項目に対する値が存在しない場合は、項目獲得部１１０は、値として空文字（例えば、「？」）を入れておく。また、指定項目に対する値が複数ある場合は、項目獲得部１１０は、値の組合せによる複数の項目値リストを作成する。この場合、１つのレコードに対して複数の項目値リストが生成されることになる。
【００５０】
［ステップＳ１９］項目獲得部１１０は、項目値リストを入力して、頻出木近似構築処理を起動する。これにより、頻出木構築部１３０による頻出木近似構築処理が実行される。
【００５１】
［ステップＳ２０］項目獲得部１１０は、項目値リストを初期化し、処理をステップＳ１２に進める。なお、初期化前の項目値リストの内容は、ステップＳ１９で起動した頻出木構築部１３０で保持されている。
【００５２】
このようにして、レコード毎に項目値リストが作成され、その項目値リスト毎に頻出木近似構築処理が実行される。
ここで、図４に示すＸＭＬデータ２０と図５に示す指定項目情報３０とに基づいて、項目値リスト作成状況を説明する。
【００５３】
項目獲得部１１０は、ＸＭＬデータ２０の１行目から順にデータを読み込む。すると、５行目までは指定項目と合致しないため、読み飛ばされる。その後、６行目が項目獲得部１１０で読み込まれる。
【００５４】
６行目の記載は、「＜都道府県＞山口＜／都道府県＞」である。この項目は、最上位から＜売上管理＞、＜売上情報＞、＜顧客＞、＜住所＞と項目を辿ったときの＜住所＞の下位に位置する。従って、この＜都道府県＞の項目は、＜顧客＞の下位構造でもある。すると、「指定項目＃３」と合致する。そこで、項目獲得部１１０は、読み込んだデータの値である「山口」を、項目値リストに格納する。
【００５５】
その後、項目獲得部１１０が７行目以降を順に読み込む。８行目までは指定項目と合致しないため、読み飛ばされる。
次に、９行目が読み込まれる。すると、項目獲得部１１０は、「指定項目＃１」に合致すると認識し、その値「３８」を項目値リストに格納する。
【００５６】
さらに、１０行目が読み込まれる。すると、項目獲得部１１０は、「指定項目＃２」に合致すると認識し、その値「男」を項目値リストに格納する。
その後、項目獲得部１１０が１１行目以降を順に読み込む。１５行目までは指定項目と合致しないため、読み飛ばされる。
【００５７】
１６行目を読み込むと、項目獲得部１１０は、レコードの終わりだと判定する。そこで、項目獲得部１１０は、格納した指定項目の値を指定された順番（この例では、「指定項目＃１」、「指定項目＃２」、「指定項目＃３」の順）に並べる。その結果、以下のような項目値リストが作成される。
［３８、男、山口］
ここで、項目値変換部１２０により、項目値の変換が行われる。この例では、年齢のレンジ化が行われ、年齢「３８」が「３０」に変更される。これにより、最初のレコード２１から生成される項目値リストは、以下のようになる。
［３０、男、山口］
レコード毎に生成された項目値リストは、順次、頻出木構築部１３０に渡される。
【００５８】
図７は、頻出木近似構築処理の手順を示すフローチャートである。以下、図７に示す処理をステップ番号に沿って説明する。なお、この処理は、頻出木近似構築処理が起動された際に、項目獲得部１１０から渡された項目値リストに基づいて頻出木構築部１３０によって実行される。
【００５９】
［ステップＳ３１］頻出木構築部１３０は、入力された項目値リストが、項目獲得部１１０で生成された最初の項目値リストか否かを判断する。最初の項目値リストであれば処理がステップＳ３２に進められる。最初の項目値リストでなければ、処理がステップＳ３３に進められる。
【００６０】
［ステップＳ３２］頻出木構築部１３０は、頻出木の根ノードを作成する。この際、根ノードのカウント値の初期値として、ノード生成の成長頻度（閾値）の値が設定される。これは、根ノードのカウント値が閾値を超えるまでのデータが無駄に破棄されるのを防ぐためである。
【００６１】
［ステップＳ３３］頻出木構築部１３０は、制御対象のノードを示す現在位置を根ノードに設定する。
［ステップＳ３４］頻出木構築部１３０は、根ノードのカウント値に１を加算する。
【００６２】
［ステップＳ３５］頻出木構築部１３０は、項目値リストから、まだ読み込んでいない項目値を上位から順に読み込む。
［ステップＳ３６］頻出木構築部１３０は、現在位置のカウント値が閾値よりも大きいか否かを判断する。カウント値が閾値よりも大きければ、処理がステップＳ３７に進められる。カウント値が閾値未満であれば、処理が終了する。
【００６３】
［ステップＳ３７］頻出木構築部１３０は、読み込んだ項目値のエッジ（ノード間を接続する線）が存在するか否かを判断する。エッジが存在すれば、処理がステップＳ３９に進められる。エッジが存在しなければ、処理がステップＳ３８に進められる。
【００６４】
［ステップＳ３８］頻出木構築部１３０は、読み込んだ項目値を関連付けたエッジと、遷移先となるノードとを作成する。
［ステップＳ３９］頻出木構築部１３０は、現在位置を、読み込んだ項目値が関連付けられたエッジによる遷移先のノードに移す。
【００６５】
［ステップＳ４０］頻出木構築部１３０は、現在位置のカウント値に１を加算する。
［ステップＳ４１］頻出木構築部１３０は、全ての項目値を読み込んだか否かを判断する。全ての項目値が読み込まれた場合処理が終了する。まだ読み込まれていない項目値が存在する場合、処理がステップＳ３５に進められる。
【００６６】
このような処理が、項目獲得部１１０で生成された全ての項目値リストに対応して実行されることにより、頻出木が生成される。
ここで、図４に示すＸＭＬデータ２０と図５に示す指定項目情報３０とに基づいて、頻出木の作成状況を説明する。なお、この例では、ノード生成のための閾値は５０であるものとする。
【００６７】
図８は、生成途中の頻出木を示す図である。頻出木Ｔは、ノード４１〜４５と、ノード間を接続するエッジ４２ａ，４３ａ，４４ａ，４５ａで構成されている。ノード４１が根ノードであり、他のノード４２〜４５はノード４１の下位構造となっている。この例では、頻出木Ｔを、エッジが２バイト文字であるトライ構造として表現している。
【００６８】
エッジ４２ａ，４３ａ，４４ａ，４５ａには、項目値が関連付けられている。根ノードであるノード４１に接続されるエッジ４２ａ，４３ａ，４４ａ，４５ａには、最優先の指定項目である［指定項目＃１］に対応する「年齢」の項目値が関連付けられている。
【００６９】
また、各ノード４１〜４５には、カウント値が設定されている。カウント値は、根ノードから各ノードに至るパスで形成される項目値の組の出現回数を近似的にカウントしたものとなっている。
【００７０】
各ノード４１〜４５は、生成されるときにカウント値の初期値が設定される。根ノードであるノード４１は、カウント値の初期値として閾値（この例では「５０」）が設定される。他のノード４１〜４５は、カウント値の初期値は「０」である。
【００７１】
図８には、１００件のレコードが読み込まれ１００件の項目値リストが生成された時点の頻出木Ｔが示されている。そのため、根ノードであるノード４１のカウント値は「１５０」（初期値＋項目値リスト数）となっている。また、読み込まれた項目値リストに応じて、現在位置がノード４１から他の何れかのノードに常に遷移するため、他のノード４１〜４５のカウント値の合計は「１００」となる。
【００７２】
ノード４１〜４５からさらに下位のノードの生成および現在位置の遷移は、カウント値が閾値「５０」に達するまで行われない。図８に示す状態では根ノード以外のノード４１〜４５の中に、カウント値が閾値を超えている物がない。そのため、ノード４１〜４５の下位のノードは生成されていない。
【００７３】
ここで、１０１件目のレコードから、以下の項目値リストが生成されたと仮定する。
［３０、男、東京］
図７に示したフローチャートに従うと、まず、現在位置である根ノード（ノード４１）のカウント値に１が加算される。その結果、ノード４１のカウント値は「１５１（項目値リスト数＋初期値）」となる。
【００７４】
次に、生成された項目値リストから、最初の要素である「３０」が読み込まれる。ここで、根ノード（ノード４１）のカウント値は、閾値である５０より大きく、「３０」というエッジ４２ａが存在する。そこで、エッジ「３０」を辿って現在位置がノード４２に「移動する。現在位置のノード４２のカウント値に１が加算され「５１」となる。
【００７５】
次に、項目値リストの２番目の要素である「男」が読み込まれる。現在位置のカウント値は「５１」であり、閾値より大きい。また、ノード４２に対して「男」というエッジは存在しない。そこで、「男」というエッジと新しいノードが作成される。現在位置は、新しく作成したノードに移り、カウント値は「１」となる。
【００７６】
さらに、項目値リストから３番目の要素である「東京」が読み込まれる。しかし、現在位置のカウント値は「１」であり、閾値以上の条件を満たさない。そのため、ここで処理が終了となる。
【００７７】
図９は、１０１件目のレコードを読んだ段階の頻出木を示す図であり、近似的に構築された頻出木Ｔを示している。図８の状態と比べると、ノード４２に対して「男」というエッジ４６ａが接続され、エッジ４６ａの遷移先にノード４６が生成されている。また、ノード４１，４２のカウント値に１が加算されており、生成されたノード４６のカウント値に１が加算されている。
【００７８】
以上の操作が、最後のレコードから生成された項目値リストに対する、頻出木を構築するまで繰り返し行われる。これにより、頻出木Ｔが完成する。
図１０は、完成した頻出木を示す図である。完成した頻出木Ｔを構成する各ノード４１〜７０には、ノードＩＤが振られる。ただし、ノード５２〜６０については、カウント値が設定されておらず、且つノードＩＤが振られていない。これは、ノード５２〜６０に遷移するためのエッジが＜都道府県＞の項目値の一文字目を示すのみであり、項目値の最後の文字まで遷移した先のノードで、そのノードまで遷移する項目値リストの数をカウントすれば十分だからである。
【００７９】
次に、構築された頻出木Ｔを用いて、頻出木Ｔのノードと分割先との対応付けが行われる。対応付けは、分割データができるだけ均等に分かれるように行われる。
図１１は、分割先決定処理の手順を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
【００８０】
［ステップＳ５１］分割先決定部１４０は、分割数分のバケットを定義し、各バケットのカウント値を０にセットする。なお、分割数は予め設定されている。
［ステップＳ５２］分割先決定部１４０は、頻度リストを作成する。頻度リストは、頻出木Ｔの葉ノードのノードＩＤとカウント値とのペアを格納したものである。
【００８１】
［ステップＳ５３］分割先決定部１４０は、頻度リストから頻度（カウント値）が最も大きい要素を選択する。
［ステップＳ５４］分割先決定部１４０は、ステップＳ５２の処理の際に、既に全ての要素が選択済か否か（選択すべき要素が存在するか否か）を判断する。全ての要素が選択済の場合、処理が終了する。要素が選択された場合、処理がステップＳ５５に進められる。
【００８２】
［ステップＳ５５］分割先決定部１４０は、カウント値が最小のバケットに選択した要素を格納する。
［ステップＳ５６］分割先決定部１４０は、バケットのカウント値に選んだ要素の頻度（カウント値）を加算する。
【００８３】
［ステップＳ５７］分割先決定部１４０は、頻度リストからステップＳ５３で選択した要素を削除する。その後、処理がステップＳ５３に進められる。
このようにして、頻度リスト内の全ての要素を、何れかのバケットに振り分けることができる。すなわち、頻度が大きい要素から順に、その時点でカウント値（格納された要素の頻度の合計）が最小のバケットに対して格納される。
【００８４】
ここで、分割数を３とした場合の分割先決定処理について説明する。まず、頻出木Ｔの頻度リストは、以下のようになる。
［（３，８０），（４，６０），（５，２０），（６，４０），（８，８０），（９，６０），（１０，４０），（１３，２０），（１４，３０），（１７，３０），（１９，８０），（２０，２０）］
頻度リストにおいて、括弧内の情報が選択対象の要素である。括弧内の左側の数字が、その要素に対応するノードのノードＩＤである。括弧内の右側の数字が、その要素に対応するノードのカウント値である。
【００８５】
このような頻度リストに対して、図１１のフローチャートに従って処理を行うと、以下の結果が得られる。
・バケット＃１（カウント値＝１９０）：［（３，８０），（４．６０），（１４，３０），（５，２０）］
・バケット＃２（カウント値＝１９０）：［（８，８０），（９，６０），（１７，３０），（１３，２０）］
・バケット＃３（カウント値＝１８０）：［（１９，８０），（６，４０），（１０，４０），（２０，２０）］
図１２は、頻出木の葉ノードと分割先との関係を示す図である。内部模様が斜線のノード４９，６１，６２，６３は「バケット＃１」、内部模様が網掛けのノード６５，６６，６７，６８は「バケット＃２」、内部模様が格子のノード４３，６４，６９，７０は「バケット＃３」に対応付けられている。
【００８６】
次に、データ振り分け部１５０が、レコード毎の項目値リストに応じて、レコードを、頻出木Ｔのエッジに沿って遷移させ、遷移先のノードに対応付けられた分割先となるバケットに、レコードを振り分ける。
【００８７】
図１３は、レコード振り分けの第１の例を示す図である。これは、頻出木Ｔに、図４で示したＸＭＬデータ２０のレコード２２を流し込む場合の例である。レコード２２の項目値リストの内容は以下の通りである。
［３０、男、東京］
この場合、頻出木Ｔ上を、レコード２２がノード４２、ノード４６、ノード５２と順に遷移し、最後に最左の葉のノード６１まで遷移する。ノード６１の分割先は「バケット＃１」である。従って、レコード２２は、「バケット＃１」に割り振られる。
【００８８】
図１４は、項目値リスト振り分けの第２の例を示す図である。ここで、あるレコード２３から、以下の項目値リスト７２が生成されたと仮定する。
［３０、男、福岡］
この項目値リストが入力されると、項目値「３０」と項目値「男」とにより、レコード２３が頻出木Ｔ上をノード４２、ノード４６へと遷移する。しかし、その次の項目値「福岡」に対応する遷移先が存在しない。
【００８９】
この場合は、現在遷移しているノード４６を頂点とした部分木の葉ノード（ノード６１〜６４）に対応付けられたバケットのうち、分割先の対応付けを行った際の、バケットのカウント値が最小の分割先にレコード２３が振り分けられる。
【００９０】
この例では、ノード６１〜６３は、バケット＃１に対応付けられている。また、ノード６４は、バケット＃３に対応付けられている。バケット＃１のカウント値は「１９０」であり、バケット＃３のカウント値は「１８０」である。すなわち、カウント値が最小のバケットは、バケット＃３である。従って、項目値リスト７２は、バケット＃３に振り分けられる。
【００９１】
なお、この例では、葉ノード以外のノードを最終遷移先とするレコードの振り分け先を、レコード振り分け時に判断しているが、葉ノードの分割先となるバケットを決定する際に、分割先決定部１４０が、葉ノード以外の各ノードの分割先となるバケットを決定しておいてもよい。具体的には、分割先決定部１４０は、該当ノードを頂点とした部分木の葉ノードに対応付けられたバケットのうち、葉ノードによる分割先の対応付けを行った際のバケットのカウント値が最小のバケットを分割先とする。
【００９２】
以上の操作を、データ振り分け部１５０が最後のレコードの振り分けが終了するまで繰り返す。これにより、データ分割処理が完了する。
なお、データ分割する場合、入力として与えられたＸＭＬデータの形式で分割して格納するのではなく、集計が容易に行える形式で格納することが望ましい。例えば、ＣＳＶ（Comma Separated Values）形式で、分割データを表現できる。
【００９３】
図１５は、ＣＳＶ形式でレコードが格納されたバケットの例を示す図である。図１５に示すように、バケット８０には以下のようなレコードが格納されている。
“30”、“男”、“山口”、“200000”
“30”、“男”、“東京”、“380000”
最後に、集計部１６０によって集計処理が行われる。集計処理は、複数のバケットに振り分けられたレコードに対して行われる。例えば、図４に示されたＸＭＬデータ２０に対し、年代と性別および所在地別の売上金額の合計を集計することができる。
【００９４】
集計処理は、バケット毎に行われる。分割データ毎の集計結果は、そのまま出力してもよいし、集計表などの形式でまとめて出力してもよい。
なお、上記の例は、入力がＸＭＬデータの場合であるが、別のデータ形式のデータベースを入力することもできる。例えば、ＲＤＢに格納されたデータでも、ＣＳＶ形式のデータでも、指定された項目の値を抽出できるデータであれば、データ集計装置１００はどのような表現形式にも対応することができる。
【００９５】
ところで、ノード生成の要否を判断するためのカウント値の閾値を動的に変更することもできる。具体的には、頻出木Ｔの構築処理の進行度合いに従って、閾値を動的に増加させることができる。これにより、頻出木Ｔの肥大化が防止できる。以下、閾値の算出例について説明する。
【００９６】
［第１の閾値算出例］
例えば、既に読み込んだデータ件数や生成されたノード数など、頻出木生成開始からの経過時間に対して単調に増加する属性を定義域として、閾値を定義することができる。この場合、閾値を定義する関数には、定義域と値域が自然数であるような関数が用いられる。
【００９７】
例えば、非負値の多項式関数、指数関数、三角関数、階段関数（の自然数への制限）などが使用できる。具体的には、以下のような例が考えられる。
・比例増加の例
データ件数またはノード数をｎ（ｎは自然数）とすると、成長頻度関数ｆ（ｎ）として
ｆ（ｎ）＝ａｎ＋ｂ（ａ＞０，ｂ≧０）    ・・・（１）
とする。ａ，ｂは、予め設定される定数である。これにより、成長頻度はデータ件数や生成ノード数に比例して増加する。
【００９８】
・指数増加の例
ｆ（ｎ）＝ｃ・ａn＋ｂ（ａ＞０，ｂ≧０，ｃ＞０）    ・・・（２）
とする。ａ，ｂ，ｃは、予め設定される定数である。これにより、成長頻度はデータ件数や生成ノード数に対して指数的に増加する。閾値を指数的に増加させる方式は、プログラムが長く動いたときに頻出木の成長を劇的に抑制したい場合に非常に有効である。
【００９９】
［第２の閾値算出例］
また、ノードの深さやノードを表す文字など、個別ノード毎に特有な属性の値を定義域として、閾値を定義することができる。
【０１００】
ノードの深さなどの自然数属性上の関数としては、式（１）または式（２）に示す関数が同様に使用できる。この場合、ノードの深さをｎとする。
例えば、ノードの深さをｎとして式（１）を用いた場合は、頻出木のノードの深さに比例して成長頻度が大きくなる。また、式（２）を用いた場合は、ノードが深くなるに従って、頻出木の成長は劇的に抑制される。
【０１０１】
次に、ノードのアルファベット上の関数としては、各アルファベットと自然数を対応付ける関数表の使用が考えられる。例えば自然言語の統計を利用して関数表を作成しておけば、読んだ文字によって頻出木の成長を早めたり遅めたりといった制御が可能となる。
【０１０２】
さらに、ｆ（＠）＝０となる特別な記号＠を用意することで、一括して処理したい文字列を頻出木の近似構築の枠組みで扱えるようになる。例えば、データ中で「東京都」を「（＠＿東）（＠＿京）都」のように書き換えておけば、データを読んだ瞬間に「東京都」を表すパスを作成できる。
【０１０３】
以上説明したように、本実施の形態によれば、指定項目の項目値によって近似的な頻出木Ｔを構築することで、指定項目を判断基準としたデータ分布を適切に求めることができる。しかも、頻出木Ｔに基づいて、指定項目の項目値に応じたレコードの分割先となるバケットを自動的に決定できるため、指定された項目が複数ある場合でも、データ集合の分割を低いコストで実現することが可能になる。
【０１０４】
また、分割先のバケットは、頻出木Ｔのノードに一意に対応付けられているため、指定項目の値の組が同じレコードは、同じ分割先に格納することが保証される。さらに、レコード毎に生成された項目値リストに基づいてデータ分割を行うため、レコードが定義でき、項目の値が取り出せるデータであれば、データ集合を表すデータ構造の種類によらずにデータの分割を行うことができる。
【０１０５】
なお、生成した頻出木Ｔは再利用可能である。すなわち、過去に構築した頻出木Ｔを登録しておき、新しくデータが追加された場合は、頻出木構築部１３０と分割先決定部１４０との処理をスキップし、過去に構築した頻出木Ｔを用いて、新しく追加されたレコードだけを振り分けることができる。このように、頻出木Ｔの再利用により、さらに低い処理コストで、データ分割を行うことも可能である。
【０１０６】
また、本実施の形態では、レコード毎に生成された項目値リストを、逐次的に読み込むことで頻出木Ｔを近似的に構築する。そのため、データ集合を１回スキャンするだけで、頻出木の近似的構築が可能となる。その結果、頻出木構築の高速化と省メモリ化を実現できる。
【０１０７】
また、頻出木の近似的構築は、項目値リストを逐次的に読み込むことで実現できるため、新しくデータが追加された場合は、過去に構築した頻出木を初期の頻出木として使用し、新しく追加されたデータの項目値リストだけを用いて、頻出木を近似的に構築できる。このように頻出木の再利用により、さらに低いコストで頻出木を近似的に構築することが可能となる。
【０１０８】
なお、上記の例では、項目値の変換例として値のレンジ化（例えば、項目「年齢」の値を、１０代、２０代などの年代に置き換えるなど）が示されているが、他にも次のような変換が可能である。例えば、項目値の圧縮（数字の下位の桁を削除するなど）、値の再カテゴリ化（例えば、項目「住所」の値を、関東、中部、近畿などの地域に置き換えるなど）などが考えられる。このように、項目値を変換することで、データ分割を容易に実現できる。
【０１０９】
そして、本実施の形態によって分割されたデータ集合をバケット毎に集計することで、併合処理が不要となり、低い処理コストで集計処理を実現できる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、データ集計装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１１０】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１１１】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１１２】
なお、本発明は、上述の実施の形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変更を加えることができる。
以上説明した実施の形態の主な技術的特徴は、以下の付記の通りである。
【０１１３】
（付記１）  複数の項目の項目値を含むレコードが複数登録されたデータ集合を複数のグループに分割するデータ集合分割プログラムにおいて、
コンピュータを、
分割基準となる複数の指定項目が設定された指定項目情報に基づいて、前記データ集合内の前記レコードから前記指定項目の項目値を獲得し、所定の配列で前記項目値を並べた項目値リストを前記レコード毎に生成する項目値獲得手段、
複数の前記項目値リストを互いに比較し、前記所定の配列の先頭から任意の前記項目値までの前記項目値の並びを示す接頭項目値のうち、成長頻度で示される回数以上出現する前記接頭項目値を検出し、検出された前記接頭項目値で示される前記項目値の並びをノード間の遷移で表す頻出木を構築する頻出木構築手段、
前記頻出木のノードを複数の分割先集合の何れかに割り当てる分割先決定手段、
前記レコードの前記項目値リストに基づいて前記レコードを前記頻出木に沿って遷移させ、最終遷移先のノードに応じて前記レコードを前記分割先集合に振り分けるレコード振り分け手段、
として機能させることを特徴とするデータ集合分割プログラム。
【０１１４】
（付記２）  前記頻出木構築手段は、構築過程の前記頻出木の各ノードに対して、該当ノードまで遷移する前記接頭項目値の発生回数を示すカウント値を設定し、前記項目値リストを取得する毎に、抽出可能な前記接頭項目値に応じたノードの前記カウント値をカウントアップし、前記カウント値が前記成長頻度を超えた場合、前記項目値リストの前記項目値の配列に沿った次の遷移先のノードを生成することを特徴とする付記１記載のデータ集合分割プログラム。
【０１１５】
（付記３）  前記分割先決定手段は、各前記ノードを最終遷移先とする前記レコードの数に基づいて、前記分割先集合それぞれに割り当てられた前記ノードに遷移する前記レコードの総数の平均化を図ることを特徴とする付記１記載のデータ集合分割プログラム。
【０１１６】
（付記４）  前記分割先決定手段は、前記最終遷移先となるレコード数が多い順に前記ノードを選択し、既に割り当てられた前記ノードを最終遷移先とするレコードの総数が最も少ない前記分割先集合に対して、選択した前記ノードを割り当てることを特徴とする付記３記載のデータ集合分割プログラム。
【０１１７】
（付記５）  前記レコード振り分け手段は、前記頻出木の葉ノードまで遷移した前記レコードは、遷移先の前記葉ノードが属する前記分割先集合に振り分け、前記葉ノードまで遷移しない前記レコードは、最終遷移先ノードから遷移可能な前記葉ノードが属する前記分割先集合に振り分けることを特徴とする付記１記載のデータ集合分割プログラム。
【０１１８】
（付記６）  前記コンピュータを、さらに、
前記項目値獲得手段が獲得した前記項目値のうち、所定の前記指定項目に応じた前記項目値を所定の規則に従って変換する項目値変換手段、
として機能させることを特徴とする付記１記載のデータ集合分割プログラム。
【０１１９】
（付記７）  前記頻出木構築手段は、前記頻出木の構築処理の進行度合いに従って、前記成長頻度を動的に増加させることを特徴とする付記１記載のデータ集合分割プログラム。
【０１２０】
（付記８）  前記コンピュータを、さらに、
前記分割先集合毎に、振り分けられた前記レコードに設定されているデータの集計を行う集計手段、
として機能させることを特徴とする付記１記載のデータ集合分割プログラム。
【０１２１】
（付記９）  複数の項目の項目値を含むレコードが複数登録されたデータ集合を複数のグループに分割するデータ集合分割装置において、
分割基準となる複数の指定項目が設定された指定項目情報に基づいて、前記データ集合内の前記レコードから前記指定項目の項目値を獲得し、所定の配列で前記項目値を並べた項目値リストを前記レコード毎に生成する項目値獲得手段と、
複数の前記項目値リストを互いに比較し、前記所定の配列の先頭から任意の前記項目値までの前記項目値の並びを示す接頭項目値のうち、成長頻度で示される回数以上出現する前記接頭項目値を検出し、検出された前記接頭項目値で示される前記項目値の並びをノード間の遷移で表す頻出木を構築する頻出木構築手段と、
前記頻出木のノードを複数の分割先集合の何れかに割り当てる分割先決定手段と、
前記レコードの前記項目値リストに基づいて前記レコードを前記頻出木に沿って遷移させ、最終遷移先のノードに応じて前記レコードを前記分割先集合に振り分けるレコード振り分け手段と、
を有することを特徴とするデータ集合分割装置。
【０１２２】
（付記１０）  複数の項目の項目値を含むレコードが複数登録されたデータ集合を複数のグループに分割するデータ集合分割方法において、
項目値獲得手段が、分割基準となる複数の指定項目が設定された指定項目情報に基づいて、前記データ集合内の前記レコードから前記指定項目の項目値を獲得し、所定の配列で前記項目値を並べた項目値リストを前記レコード毎に生成し、
頻出木構築手段が、複数の前記項目値リストを互いに比較し、前記所定の配列の先頭から任意の前記項目値までの前記項目値の並びを示す接頭項目値のうち、成長頻度で示される回数以上出現する前記接頭項目値を検出し、検出された前記接頭項目値で示される前記項目値の並びをノード間の遷移で表す頻出木を構築し、
分割先決定手段が、前記頻出木のノードを複数の分割先集合の何れかに割り当てる、
レコード振り分け手段が、前記レコードの前記項目値リストに基づいて前記レコードを前記頻出木に沿って遷移させ、最終遷移先のノードに応じて前記レコードを前記分割先集合に振り分ける、
ことを特徴とするデータ集合分割方法。
【図面の簡単な説明】
【０１２３】
【図１】本実施の形態の概略を示す図である。
【図２】本実施の形態に用いるコンピュータのハードウェア構成例を示す図である。
【図３】データ集計装置の機能を示すブロック図である。
【図４】ＸＭＬデータの例を示す図である。
【図５】指定項目情報の例を示す図である。
【図６】項目値リスト生成処理の手順を示すフローチャートである。
【図７】頻出木近似構築処理の手順を示すフローチャートである。
【図８】生成途中の頻出木を示す図である。
【図９】１０１件目のレコードを読んだ段階の頻出木を示す図である。
【図１０】完成した頻出木を示す図である。
【図１１】分割先決定処理の手順を示すフローチャートである。
【図１２】頻出木の葉ノードと分割先との関係を示す図である。
【図１３】レコード振り分けの第１の例を示す図である。
【図１４】項目値リスト振り分けの第２の例を示す図である。
【図１５】ＣＳＶ形式でレコードが格納されたバケットの例を示す図である。
【符号の説明】
【０１２４】
１  データ集合
１ａ，１ｂ，１ｃ  レコード
２  指定項目情報
３  項目値獲得手段
３ａ，３ｂ，３ｃ  項目値リスト
４  頻出木構築手段
５  頻出木
６  分割先決定手段
６ａ，６ｂ  分割先集合
７  レコード振り分け手段
【図１】
0004782490.tif 000002
【図２】
0004782490.tif 000003
【図３】
0004782490.tif 000004
【図４】
0004782490.tif 000005
【図５】
0004782490.tif 000006
【図６】
0004782490.tif 000007
【図７】
0004782490.tif 000008
【図８】
0004782490.tif 000009
【図９】
0004782490.tif 000010
【図１０】
0004782490.tif 000011
【図１１】
0004782490.tif 000012
【図１２】
0004782490.tif 000013
【図１３】
0004782490.tif 000014
【図１４】
0004782490.tif 000015
【図１５】
0004782490.tif 000016