3

背景: PC-Axis は、統計情報の配布に使用されるファイル形式です。この形式は、公式統計を広めるために多くの国の統計機関によって使用されています。

PC-Axis ファイルは次のようになりますが、通常はかなり長くなります。

CHARSET=”ANSI”;
MATRIX="BE001";
SUBJECT-CODE="BE";
SUBJECT-AREA="Population";
TITLE="Population by region, time, marital status and sex.";
Data=
".." ".." ".." ".." ".." 
".." ".." ".." ".." ".." 
".." 24.80 34.20 52.00 23.00 
".." 32.10 40.30 50.70 1.00 
".." 31.60 35.00 49.10 2.30 
41.20 43.00 50.80 60.10 0.00 
50.90 52.00 53.90 65.90 0.00 
28.90 31.80 39.60 51.00 0.00;

PC-Axis ファイルの詳細については、Statistics Sweden の Web サイトを参照してください。ただし、基本的な要点は、メタデータがファイルの先頭に配置され、「DATA=」の後に実際のデータそのものが配置されていることです。また、データが列ではなくデータ テーブルのように編成されていることも注目に値します。

問題: Matlab を使用して PC 軸ファイルを解析したいのですが、それを行う方法について少し困惑しています。これらのファイルの 1 つを Matlab で解析する方法を知っている人はいますか? Perl などの他の言語を使用してこのタイプのファイルを解析し、データを Matlab にインポートする方が簡単でしょうか、それとも、Matlab はその仕事に十分なツールでしょうか? 計画は、テキスト処理段階の後に Matlab でデータを分析することであることに注意してください。

fgetl、textscan、fscanf、その他いくつかの Matlab のテキスト処理ツールを使用してみましたが、非常に扱いにくいものです。誰かがそれを行う方法についての指針を持っていますか?

基本的に、各キーワード (CHARSET、MATRIX など) とそれに対応する値 (ANSI、BE001 など) を Matlab のメタデータとして、おそらく構造体として保存したいと思います。データをMatlabにも保存したいと思います-たとえば、マトリックスとして。

: R のpxR パッケージ (CRAN)を認識しています。これは、.px ファイルをワークスペースに data.frame オブジェクトとして読み込むための処理を行います。Data::PcAxis (CPAN)という非常に優れた Perl モジュールもありますが、特に Matlab を使用して .px ファイルを解析する方法を知りたいと思っています。

更新: metadatadataに加えて、 variableもあることに言及する必要がありました。これは、例によって最もよく説明されています。以下の PC-Axis ファイルの例は、2 つの変数を追加したことを除いて、上記のファイルと同じです。これらは VALUES("Month") および VALUES("region") という名前で、メタデータの後、データのに配置されます。

CHARSET=”ANSI”;
MATRIX="BE001";
SUBJECT-CODE="BE";
SUBJECT-AREA="Population";
TITLE="Population by region, time, marital status and sex.";
VALUES("Month")="1976M01","1976M02","1976M03","1976M04",
"1976M05","1976M06","1976M07","1976M08",
"1976M09","1976M10","1976M11","1976M12";
VALUES("region")="Sweden","Germany","France",
"Ireland","Finland";
Data=
".." ".." ".." ".." ".." 
".." ".." ".." ".." ".." 
".." 24.80 34.20 52.00 23.00 
".." 32.10 40.30 50.70 1.00 
".." 31.60 35.00 49.10 2.30 
41.20 43.00 50.80 60.10 0.00 
50.90 52.00 53.90 65.90 0.00 
28.90 31.80 39.60 51.00 0.00;

Textscan は、テキスト ファイルの各行を文字列 (セル配列内) として読み取る場合に便利です。ただし、両方の変数 (つまり、VALUES("Month") と VALUES("region")) の "=" 記号の後の要素は、複数の行にまたがっています。この場合、textscan を使用すると、たとえば、月のリスト (1976M01 から 1976M12) を収集するために、一部の文字列を連結する必要があるようです。

質問: 変数データを収集する最良の方法は何ですか? テキスト ファイルを 1 つの文字列として読み取り、strtok を 2 回使用して日付の部分文字列を抽出しますか? おそらく、より良い(より体系的な)方法はありますか?

4

2 に答える 2