Чтение текстовых данных из файла CSV в MATLAB - PullRequest
2 голосов
/ 20 июля 2011

мои данные в следующей форме:

days of week      date        time(hrs)        visitors
mon            jan 2 2010     900               501 
mon            jan 2 2010    1000               449
mon            jan 2 2010    1100               612

аналогично за каждый день в течение всего года. мне нужно создать матрицу дней недели, как показано ниже:

A=[
    mon
    mon
    mon
]

Ответы [ 5 ]

1 голос
/ 20 июля 2011

Вот как я должен прочитать значения, разделенные табуляцией , и проанализировать даты:

%# read and parse file
fid = fopen('data.csv','rt');
C = textscan(fid, '%s %s %s %d', 'Delimiter','\t', 'HeaderLines',1, ...
    'MultipleDelimsAsOne',true, 'CollectOutput',false);
fclose(fid);

%# get date and number of visitors
dt = datenum(strcat(C{2}, {' '}, C{3}), 'mmm dd yyyy HHMM');
visitors = C{4};

%# plot
plot(dt,visitors)
datetick('x')
xlabel('time of day'), ylabel('visitors')

enter image description here

Что касается дня-недельный столбец, вы можете получить его следующим образом:

>> C{1}                        %# first column from file
ans = 
    'mon'
    'mon'
    'mon'

>> cellstr(datestr(dt,'ddd'))  %# actual day of week from parsed dates
ans = 
    'Sat'
    'Sat'
    'Sat'

это приводит к разным дням (либо ваши данные были просто составлены, либо у вас есть ошибка в той части, которая сгенерировала эти даты!)

0 голосов
/ 11 октября 2013

Если вы только начинаете работать с (последней версией) matlab, самый простой способ - использовать «мастер импорта».

Несколько простых шагов:

  1. Найдите файл и щелкните правой кнопкой мыши
  2. Выберите вариант импорта
  3. Выберите вариант хранения вещей как cell array (векторы или матрицы не будут работать).
  4. Нажмите Импорт

При желании вы можете нажать «Далее» для импорта и выбрать, что вы хотите сгенерировать код для этой процедуры. Однако, это, вероятно, будет немного многословно. Если вам нужно сделать это один раз, я бы порекомендовал этот метод.

0 голосов
/ 21 июля 2011

Вы можете попробовать использовать dlmread.Может принимать любой разделитель ASCII.Я думаю, что это может удовлетворить ваши требования.Смотри здесь .

0 голосов
/ 20 июля 2011

Вы можете загрузить мою csvimport заявку с файловой биржи. Предполагая, что ваши данные разделены табуляцией, вы можете прочитать их, используя:

[days datecol timecol visitors] = csvimport( 'file.txt', 'delimiter', '\t', ...
       'columns', {'days of week', 'date', 'time(hrs)', 'visitors'} );

Первые 2 выходных параметра будут представлять собой массивы строк, в то время как последние 2 будут двойными матрицами.

0 голосов
/ 20 июля 2011

Принимая подсказки от этого предыдущего вопроса ,

fid = fopen('filename.txt');
% Skip a line for the header
s = fgetl(fid);
% Read the rest into data
data = textscan(fid, '%s %s %d %d %d %d');
% Close the file
fclose(fid);

Дни недели находятся в первой ячейке data.

...