• 締切済み

大容量のファイル処理(csv or xml?)

大容量のファイルの処理(csv形式、xml形式どちらが適切でしょうか?) 商品のアクセス件数を分析する仕組み(ツール)を提案したいのですが、 肝心のアクセス件数結果が出力されるファイルが膨大な場合が多くどのように処理すればいいか 途方にくれています。 結果ファイルの中身は「どのユーザーが何時何分に何にアクセスした」 という結果が一行一行出力されています。 ユーザーA 12:00 商品A ユーザーB 12:22 商品C ・ ・ ・ といった様相です。 *結果ファイルはcsvファイル、またはxmlファイルで出力できます。 一日程度の結果であればcsvファイルをエクセル2007で開き自力で色々といじることが できるのですが、数日~数か月におよぶとデータ行が膨大になりエクセルの最大行数1048576を 簡単に超えてしまい処理に困っています。 当初はエクセルマクロを使い分析ツールを依頼しようと考えていたのですが、すぐにこのデータ量で 素人目にも難しいとわかりました。 このような大きなファイルの中身の分析はxmlファイルの方が 分析ツールを作成する側としても処理(ファイルの取り込みや中身のソートなど)しやすいものなのでしょうか? なにぶん浅学なため、今まで使っていたエクセルでどうにかこうにかしてきたのですが、 流石に限界なのかと感じています。 どなたかご助言いただけますと、幸いです。よろしくお願いいたします。

みんなの回答

回答No.2

データ集計内容がたとえば、大量のログのなかから 商品A,B,Cの出現回数を数えるだけとか、日別や時間別のアクセス数を数えるだけといった、 簡単なものなら、毎回、全ログを最初から集計しなおすんじゃなくて、 月とか日とか週で集計しておいたサマリを別のブックに残しておいて、 過去分データはそれを参照するようにすれば、容量制限が解消でき、高速化も実現できるかと。 (大抵のアクセス解析ツールはそうなってます)(過去のログは書き換わるものではないので) もっと、自在に検索したいなら、私も データベースを使う方法がベストだと思いますが、 その大きなCSVファイルをperlとかコマンドラインのPHPで読み込んで、 商品名や日付や時間帯をキーにした連想配列で集計して、結果をCSVに吐き出して、 見栄えを整えたりグラフ化するとこだけ、Excelでやっちゃうのが、実装自体は簡単だと思います。

ukuk4321
質問者

お礼

superside0様 お礼を申し上げるのが遅れて大変申し訳ありません。 >>、毎回、全ログを最初から集計しなおすんじゃなくて、 月とか日とか週で集計しておいたサマリを別のブックに残しておいて、 過去分データはそれを参照するようにすれば、容量制限が解消でき、高速化も実現できるかと。 この部分について、データベースの担当の方も同様の意見を述べており、とても参考になります。ご推察の通り、大量のデータとなっているのはイチイチ集計毎に大量のログを集計しにいっているため時間もかかり大容量のファイルとなっているそうです。この点も踏まえデータベースにどのようにアクセスする、どういった集計がしたいかを具体化させて良い提案を練り上げます。 ご助言本当にありがとうございました。

  • uams
  • ベストアンサー率63% (100/157)
回答No.1

はじめまして。 「Excelでデータを分析したい」というのが要件ですね。 大量のデータはExcelでは不向きなので、データベースと呼ばれる仕組みで管理・分析するのが一般的です。一番身近なデータベースといえば、Excelの兄弟分であるAccessです。サーバーで動作するより高性能なデータベースとしては、OracleやSQL Serverなどの製品があります。 ただ、データベースは専門の知識がないと管理・分析が難しいため、質問者さまのように、使いやすいExcelで扱えるCSVやXMLなどの形式でエクスポートすることは多々あります。 データベースなら解決できるのに敷居が高い、でも使い慣れたExcelで分析したいというジレンマを解消するには、BI(ビジネスインテリジェンス)ツールをお勧めします。これは、サーバー上であらかじめ分析用のデータベースを作っておき、Excelでこれに接続してピボット機能でデータを分析できるものです。 分析したい視点(商品別のアクセス数、ユーザー別の商品数など)を設定しておけば、たとえば夜間に前日までのデータを分析用データベースに変換して、翌朝にはExcel上で分析結果が見れるということが可能になります。 分析したい視点での設定は多少の知識が必要になりますが、それほど難しくはないかと思います。もしCSVやXMLのファイルを取り出す元のデータベースに手を入れられるのであれば、BIツールをお勧めします。DataNature、Dr.Sum、Oracle Business Intelligence、SQL Server Analysis Servicesなどがありますが、どれも高額です。(SQL Server Analysis ServicesはSQL Serverに標準添付しているので追加購入は不要) お金はかけられない、元のデータベースに手を入れられない(CSVまたはXMLでしか受け取る権限がない)のであれば、やはりExcel上での工夫になってしまうと思います。となると私は答えを持ち合わせていないので、上記の回答は参考程度に収めてください。 ここまで書いてて思ったのですが、CSVやXMLで得られるログがウェブサイトのアクセスログであれば、データベース云々ではなくアクセスログ解析ツールが利用できます。こちらはWebLogという無料のツールや、Urchinという有料のツールなどがあります。ご参考までに。

ukuk4321
質問者

お礼

uarms様 お礼が大変遅れて申し訳ありません。とても素早い回答にただ感謝するのみです。BIについて調べるきっかけになり、本当にありがとうございます。 元のデータベースから何ステップか経由して件のCSV/XMLファイルが手に入っています。 しかしデータベースを管理している方に話を持って行ったところBIなどで、もっとユーザーサイド(この場合は当方になりますが)で処理しやすいようにアクセスできるようにすることは可能と、助言いただきました。BIについては様々な種類のものが世の中にはあるみたいですが、詳しく調査し有効に活用できるものか判断したいと思います。 本当に助かりました。良い提案のためのグッドスタートに絶対いたします。

関連するQ&A

  • javaサーブレットでjspへのフォワード処理と、ファイルに出力処理を行いたいのですが。。

    今javaサーブレットとjspでツール作成中です。 DBにアクセスして、その内容をCSVファイルに書き出すというツールなのですが、サーブレットではjspにフォワードという処理と、ファイルに出力という処理の二つを同時に行うことができるのでしょうか。 たくさんの本やサイトにそれぞれ片方の処理だけする場合は載っているのですが、両方を並行して処理させる場合のサーブレットの書き方がわかりません。。 jspからの情報をもとにサーブレットでDAOを生成、DBにアクセスし、検索結果をDTO(一行の情報はBean)に格納し、それをサーブレットからjspにフォワード&CSV出力というものを作りたいと思っています。 よろしくお願いします。

  • csvファイルについて

    javaで、csvファイルを読み取り、データベースにいれるツールを作成しています。 csvファイルを読み込む部分でつまづいてしまったので、どなたかご教授ください! 指定されたcsvファイルを一行ずつ取り込むのですが、一つの情報が2行以上になってしまうデータがいくつかあり、ファイルチェックとして、1つ目のカラムは何文字のものだとかしているけれども、その前の行の続きに当たる行が、その条件から外れてしまい、エラーになってしまいます。(当たり前ですが、、、) なぜ、csvファイルが一行に収まらないのかが、わかずですし、それを一行として読み込むことができるのかが不明で困っております。   原因や対処法が分かれば、教えていただければと思います。 よろしくお願いします。

  • CSVの内部結合について

    CSVまたはエクセルの.xml形式のファイルでの内部結合を行う方法を探しています。 これまではアクセスを使用して結合を行っていましたが、 私がアクセスにあまりなれておらず、面倒なことがあり、 別なフリーソフトまたはEXCEL上で、処理をする方法はないかを 探しています。 「CSV 結合」などで検索すると、単純に、CSVファイルをつなぎ合わせるソフトは 多数見つかりますが、そうではなく、ファイルAとファイルBの任意の列が同じものを 探し出して結合する、といった方法を探しています。 ご存知の方がおられたらお教えいただければ幸いです。

  • CSVファイルの出力

    こんにちは。 ただいまアクセスで商品の検索プログラムを作っていまして、入力した商品名に一致する商品コードと商品名をテーブルから抽出し、CSVファイルに出力したいのですが、どういった方法で出力すればいいのでしょうか?

  • CSVファイルが操作できるソフト

    いつもお世話になっています CSVファイルの特定の項目について、文字を加えたいのですが、件数が膨大 なため(15万レコード程度)、エクセルで操作することができません。 文字を加えるというのはこのようなイメージです  012011,012225,125666,54855~      ↓  012011,K012225,125666,54855~ 分割してエクセルによみこまして処理することも考えたのですが、大変手間でも ありますので、このような機能があるようなCSVファイル操作できるフリーソフト はありませんでしょうか? 

  • CSVファイルの集計

    VB初心者の為、簡単なことかもしれませんが教えて下さい。 複数あるCSVファイルの内容を集計したいと思っています。 いずれのファイルにもコードと数量が含まれているのですが、集計したいのはそのコード毎の数量計です。 EXCELやACCESS等を使えば簡単だと思うのですが、そういった他アプリやDBなどを使わずにVBとCSVファイルのみで処理したいと考えています。 できれば処理時間も短いようなやり方があれば教えて下さい。

  • データベースの保存と読み込み(XML、CSV)

    複数のテーブルに分かれてるデータを一つのファイルに保存をし、保存したファイルからそれぞれのテーブルごとに表示をするという処理を行いたいと思っています。 どのようにして行ったら良いのか迷っているのですが、皆様でしたらどのようにされますか? 私は、初めにテーブルの一つ一つのデータをCSVで区切り、それをテーブル事にXMLのタグで分けて保存をし、それを開くときにはタグでテーブルを判断し、CSVでデータを区別して取得をするようにしていました。 (解っていただけるでしょうか?^^;) ところが、分けあってXMLがうまく使えないようになりました。 そこで、他の方法を考えているのですが、何か良い方法をご存知ありませんでしょうか? プログラミング環境はBCBです。

  • CSVファイルの処理方法

    PerlでCSVファイルの処理をしようとしています。 CSVファイル(ここではdata1.csvとします)の中身は、A列とB列に数値が1000行程表記されています。 -5,1 -4,2 -3,3  ・  ・  ・ 作成したPerlのファイル(ここではtest1.plとします)下のようにし、 while ($_=<stdin>){ print"$_\n"; } Cygwinコマンド上で、 $ perl test1.pl <data1.csv と入力すると、CSVファイル(data1.csv)の数値がCygwinコマンド上に全て表記されます。 前置きが長かったのですが、CSVファイル(data1.csv)の3行目までの数値だけをCygwinコマンド上に表記したい場合、どのようにプログラムすればよいのですか。 お願いします。

    • ベストアンサー
    • Perl
  • excel vbaでのxml出力がわかりません

    EXCEL VBAでAPIを使い、XMLファイルを出力するプログラムを作っているのですが、うまくいきません。 機能としましては、指定したセルの範囲内にユーザーが入力した値を、XMLファイルとして出力するというものです。 ただXMLファイルを出力するだけなら自力でできたのですが、XMLファイルにセルの値を入れることができません。 どなたかご教授願います。

  • MDBファイルをCSV出力したい

    こんばんは。 環境: OS:WINDOWS2000 VB6.0 sp5 アクセス2000 VBからアクセスのMDBデータをCSV形式で出力させようとしています。  mdbファイルが実行中にVBのexeを起動してcsvファイルを取得したいのですが、いい方法が分かりません。 閉じているMDBファイルのデータをCSVで出力することは可能です。  MDBファイルが開いているとexeを実行した時に「実行時エラー7866 データベースが開いています」というようなメッセージが出て処理ができません。 なにかいい方法はないでしょうか よろしくお願いいたします。