Фон: PC-Axis - формат файла, используемый для распространения статистической информации. Формат используется рядом национальных статистических организаций для распространения официальной статистики.Анализ файла PC-Axis (.px) в Matlab
Файл 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 website, но основная суть в том, что метаданные располагаются в верхней части файла и после того, как «DATA =» - это фактические данные. Также стоит отметить, что данные организованы скорее как таблица данных, а не столбцы.
Проблема: Я хотел бы проанализировать файл PC-Axis с помощью Matlab, но я немного зациклен на том, как это сделать. Кто-нибудь знает, как разобрать один из этих файлов в Matlab? Было бы проще проанализировать этот тип файла с помощью какого-либо другого языка, например Perl, а затем импортировать данные в Matlab или, может быть, Matlab будет достаточно подходящим инструментом для этой работы? Обратите внимание, что план будет состоять в анализе данных в Matlab после этапа обработки текста.
Я пробовал использовать инструменты обработки текста Matlab, такие как fgetl, textscan, fscanf и несколько других, но это ужасно сложно. Есть ли у кого-нибудь указания относительно того, как это сделать?
По существу, я хотел бы хранить каждое из ключевых слов (CHARSET, MATRIX и т. Д.) И их соответствующие значения (ANSI, BE001 и т. Д.) Как метаданные в Matlab - возможно, как структура. Я хотел бы также иметь данные, хранящиеся в Matlab, например, в качестве матрицы.
Примечание: Я знаю о pxR package (CRAN) в R, который работает лакомство для чтения .px файлов в рабочую область в качестве объекта data.frame. Там также есть модуль Perl с именем Data::PcAxis (CPAN), который тоже очень хорош, но я специально хочу знать, как разбирать .px-файл с помощью Matlab.
UPDATE: я должен отметить, что в дополнение к метаданных и данных, есть также переменные. Это лучше всего объясняется примером. Пример файла PC-Axis ниже совпадает с приведенным выше, за исключением того, что я добавил две переменные. Они называются VALUES («Месяц») и VALUES («область») и позиционируются после метаданных и до данных.
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 («Месяц») и VALUES («region»)) охватывают более одной строки. Похоже, что использование textscan в этом случае означает, что некоторые строки должны быть объединены, скажем, например, чтобы собрать список месяцев (1976M01 по 1976M12).
Вопрос: Каков наилучший способ сбора данных переменных? Прочитайте текстовый файл как одну строку, а затем дважды используйте strtok для извлечения подстроки дат? Может быть, есть лучший (более систематический) способ?
Я уверен, что Matlab достаточно, чтобы делать то, что вы хотите. Я бы дал ему уйти, а затем разместил ваши конкретные задачи. Например, попробуйте использовать textscan для анализа матрицы (см. Мой ответ ниже). Если вы столкнулись с трудностями, разместите свои конкретные текстовые вопросы. Удачи! –