2017-01-12 5 views
0

Есть две части моего запроса:Объединение и чтение данных из Excel (.xlsx) в Matlab

1) У меня есть несколько .xlsx файлы, хранящиеся в папке, в общей сложности на сумму 1 года (~ 365. xlsx). Они названы по дате: 'A_ddmmmyyyy.xlsx' (например, A_01Jan2016.xlsx). Каждый .xlsx имеет 5 столбцов данных: Дата, Количество, Широта, Долгота, Измерение. Проблема заключается в том, что каждый файл .xlsx состоит из 400 000 строк данных, и хотя у меня есть сценарии в Excel для их слияния, присущее ограничение строки в Excel не позволяет мне объединить все данные вместе.

(i) Есть ли способ прочитать рекурсивно данные из каждого листа .xlsx в MATLAB и указать имя переменной (например, Date, Quantity и т. Д.) Для каждого столбца (переменной) в MATLAB (нет заголовков столбцов в файлах .xlsx)?

(ii) Как объединить данные для каждого столбца из каждого .xlsx вместе?

Спасибо Джефферсона

+0

Если размер массива в пределах Excel, тогда вы не будете иметь возможность размещать все данные в одном файле xlsx независимо от MATLAB. Вы можете, конечно, сохранить данные в MATLAB. Что вы подразумеваете под «слиянием данных каждого столбца»? Суммировать их? объединить их? – buzjwa

+0

Попробуйте прочитать файлы с помощью 'xlsread'. Вы можете использовать функцию 'dir' для получения всех имен файлов так:' files = dir ('myfolder/A _ *. Xlsx'); '. После того, как у вас есть код, вы можете публиковать любые конкретные проблемы, которые у вас есть с ним. – buzjwa

ответ

0

Пойдемт по частям

Сначала я не рекомендую объединить все ваши данные файлы в одном столбце, нет необходимости иметь эту информацию вместе вы можете работать отдельно с это, используя, например датастор

, работающий в среде MATLAB в каталоге: млн лет

>> pwd 

ans = 

/home/anquegi/learn/matlab/stackoverflow 

I HAV е папку с папкой, которые имеют два образца Excel файлов:

>> ls 
20_hz.jpg big_data_store_analysis.m excel_files octave-workspace sample-file.log 
40_hz.jpg chirp_signals.m  NewCode.m sample.csv 

>> ls excel_files/ 
A_01Jan2016.xlsx A_02Jan2016.xlsx 

содержание каждого файла:

Date Quantity Latitude Longitude Measurement 
1 1 1 1 1 
2 2 2 2 2 
3 3 3 3 3 
4 4 4 4 4 
5 5 5 5 5 
6 6 6 6 6 
7 7 7 7 7 
8 8 8 8 8 
9 9 9 9 9 
10 10 10 10 10 
11 11 11 11 11 
12 12 12 12 12 
13 13 13 13 13 
14 14 14 14 14 
15 15 15 15 15 
16 16 16 16 16 
17 17 17 17 17 
18 18 18 18 18 
19 19 19 19 19 
20 20 20 20 20 
21 21 21 21 21 
22 22 22 22 22 

Только кто, как он будет работать.

Считывание данных:

>> ssds = spreadsheetDatastore('./excel_files') 

ssds = 

    SpreadsheetDatastore with properties: 

         Files: { 
          '/home/anquegi/learn/matlab/stackoverflow/excel_files/A_01Jan2016.xlsx'; 
          '/home/anquegi/learn/matlab/stackoverflow/excel_files/A_02Jan2016.xlsx' 
          } 
        Sheets: '' 
         Range: '' 

    Sheet Format Properties: 
      NumHeaderLines: 0 
      ReadVariableNames: true 
       VariableNames: {'Date', 'Quantity', 'Latitude' ... and 2 more} 
       VariableTypes: {'double', 'double', 'double' ... and 2 more} 

    Properties that control the table returned by preview, read, readall: 
     SelectedVariableNames: {'Date', 'Quantity', 'Latitude' ... and 2 more} 
     SelectedVariableTypes: {'double', 'double', 'double' ... and 2 more} 
        ReadSize: 'file' 

Теперь у вас есть все ваши данные в таблицах, давайте предварительного просмотра

>> data = preview(ssds) 

data = 

    Date Quantity Latitude Longitude Measurement 
    ____ ________ ________ _________ ___________ 

    1  1   1   1   1   
    2  2   2   2   2   
    3  3   3   3   3   
    4  4   4   4   4   
    5  5   5   5   5   
    6  6   6   6   6   
    7  7   7   7   7   
    8  8   8   8   8  

предварительный просмотр хороший момент, чтобы получить образец данных для работы.

Вам не нужно сливаться вы можете работать Повсеместно все элементы:

>> ssds.VariableNames 

ans = 

    'Date' 'Quantity' 'Latitude' 'Longitude' 'Measurement' 

>> ssds.VariableTypes 

ans = 

    'double' 'double' 'double' 'double' 'double' 

% let's get all the Latitude elements that have Date equal 1, in this case the tow files are the same, so we wil get two elements with value 1 

    >> reset(ssds) 
    accum = []; 
    while hasdata(ssds) 
     T = read(ssds); 
     accum(end +1) = T(T.Date == 1,:).Latitude; 
    end 
    >> accum 

    accum = 

     1  1 

Таким образом, вы должны работать с хранилищем данных и таблиц, это немного сложно, но очень полезно, вы также хотели бы контролировать readsize и другие переменные в объектах хранилища данных.но это хороший способ работы с большими файлами данных в MATLAB

Для более старых версий MATLAB вы можете использовать более традиционные аппроксимации:

folder='./excel_files'; 
filetype='*.xlsx'; 
f=fullfile(folder,filetype); 
d=dir(f); 
for k=1:numel(d); 
    data{k}=xlsread(fullfile(folder,d(k).name)); 
end 

Теперь у вас есть данные, хранящиеся в данных

folder='./excel_files'; 
filetype='*.xlsx'; 
f=fullfile(folder,filetype); 
d=dir(f); 
for k=1:numel(d); 
data{k}=xlsread(fullfile(folder,d(k).name)); 
end 
data 

данные =

[22x5 double] [22x5 double] 

данных {1}

ANS =

1  1  1  1  1 
2  2  2  2  2 
3  3  3  3  3 
4  4  4  4  4 
5  5  5  5  5 
6  6  6  6  6 
7  7  7  7  7 
8  8  8  8  8 
9  9  9  9  9 
10 10 10 10 10 
11 11 11 11 11 
12 12 12 12 12 
13 13 13 13 13 
14 14 14 14 14 
15 15 15 15 15 
16 16 16 16 16 
17 17 17 17 17 
18 18 18 18 18 
19 19 19 19 19 
20 20 20 20 20 
21 21 21 21 21 
22 22 22 22 22 

Но будьте осторожны с большим количеством больших файлов

+0

странно, почему он говорит: Неопределенная функция или переменная 'spreadsheetDatastore'. когда я пытаюсь запустить функцию? im on 2014a – Corse

+0

Я обновил старые версии matlab, но это не так эффективно – anquegi

+0

Есть ли способ для больших файлов? Кстати, таблица Datastore начинается с какой версии Matlab? – Corse

Смежные вопросы