1

各「行」の構文が [number] [number]_[number] [Text].
例えば

123 12_14 Text 1
1234 13_456 Text 2
33 12_12 Text 3
24 678_10 Text 4

私の目的は、このデータを Excel ファイルとして保存することです。テキスト ファイルの各「行」は、
Excel ファイルの行です。過去の例によると:

[A1] 123
[B1] 12_14
[C1] Text 1
[A2] 1234
[B2] 13_456
[C2] Text 2
[A3] 33
[B3] 12_12
[C3] Text 3
[A4] 24
[B4] 678_10
[C4] Text 4

私の計画は、ここでアドバイスされているように、テキスト「行」を繰り返し、「行」を分離
し、Excel ファイルのセルに保存することです。

テキスト サイズの問題のため、小さな Excel ファイルを多数作成することを考えました。これらはすべて一緒にテキスト ファイルと同じになります。

小さなExcelファイルを分析する必要があるよりも、主にセルで言及されている用語を見つけ、[Text]セルに関連する外観の数を数えます[number](投稿と投稿のIDを表します)。

最後に、このすべてのデータを Excel ファイルに合計する必要があります。

Excelファイルを作成して分析する最良の方法を検討しています。ここ
で 述べたように、主なライブラリはxlrdcsvです。

4

2 に答える 2

3

「小さな Excel ファイル以外に選択肢がないことは確かですが、別のアプローチは何でしょうか?」

あなたの巨大なテキスト ファイルはデータベースの一種ですが、不便ではあります。一連の小さな Excel ファイルは、同じデータベースを表現するのにさらに便利ではありません。Excel には含まれる行数に上限があるため (Excel のバージョンによって 65'000 または 1'000'000)、多数の小さなファイルを作成しようとしていると思います。ただし、既に述べたように、Excel ファイルは本当にひどいデータベース ストアです。

既に Python を使用しているため、 module を使用しますsqlite3。これは既に組み込まれており、実際のデータベースであり、100 万行を超える行を処理できます。そしてそれは速いです。

しかし、あなたが提案した規模のデータでどれだけ速いかを知りたかったので、データセットとほぼ同じ複雑さの 30M 行データベースを作成しました。スキーマは単純です。

create table words
    (id integer primary key autoincrement not null,
     first text, second text, third text);

/usr/dict/words から引き出されたランダムなトライグラムを入力しました(このようなテストデータを生成するためのモジュールがあり、エントリは次のようになります

sqlite> select * from words limit 5;
1|salvation|prorates|bird
2|fore|embellishment|empathized
3|scalier|trinity|graze
4|exes|archways|interrelationships
5|voguish|collating|partying

しかし、終わりに近づいていることがわかっている行に対する単純なクエリは、思ったよりも時間がかかりました。

select * from words where first == "dole" and second == "licked";
29599672|dole|licked|hates

かなり平均的な 3 年前のデスクトップで約 7 秒かかったので、いくつかのインデックスを追加しました

create index first on words (first);
create index second on words (second);

これにより、データベース ファイルのサイズが 1.1GB から 2.3GB に 2 倍になりましたが、単純なクエリ時間はかなり妥当な 0.006 秒に短縮されました。あなたはエクセルをうまく扱えるとは思えません。

したがって、必要に応じてデータを解析しますが、実際のデータベースに入れます。

于 2013-08-15T00:47:26.800 に答える