直接从Matlab中的url读取csv数据

时间:2013-09-03 12:30:51

标签: r matlab csv import

我在使用Matlab从数据库中读取数据时遇到了一些问题。我用来下载数据的url链接给出了一个分号分隔的文本文件,我需要Matlab来识别这些数据,并以struct格式相应地安排它(例如,因为数据有不同的类)。 我已经使用urlread并且可以成功下载数据,唯一的问题是我将所有数据作为一个单元格中的字符串获取,我需要将这些数据作为表格并且组织良好。

基本上我想知道是否有可能将数据从url加载到Matlab中的方式与R中的read.csv函数相同,只需将url放在文件名所在的位置并定义如何数据是分隔的和中提的,您可以使用data.frame将所有数据完美地组织起来。

我想有很多方法可以在使用urlread后解释字符串并将其转换为有组织的struct变量,但必须有一种方法可以直接从URL中读取它,就像R一样

2 个答案:

答案 0 :(得分:4)

以下是一段代码,用于读取网络上的csv数据(urlread),使用textscan扫描并将数据格式化为单元格(允许使用字符串和标量) ,然后将单元格转换为cell2struct的结构。创建的结构保留textscan格式。

请注意,您必须定义textscan格式和cell2struct输入以适合您的数据。

block = urlread('http://hci.stanford.edu/jheer/workshop/data/florida2000/Florida2000.csv');
C = textscan(block,'%s%s%f%s%f','HeaderLines',1,'EndOfLine','\n');
S = cell2struct(C,{'county','technology','columns','category','ballots'},2)

这是佛罗里达州2000年总统选举结果(.csv,938个数据点)

county,technology,columns,category,ballots
Alachua,Optical,1,under,217
Alachua,Optical,1,over,105
Alachua,Optical,1,Bush,34124
Alachua,Optical,1,Gore,47365
Alachua,Optical,1,Browne,658
Alachua,Optical,1,Nader,3226
Alachua,Optical,1,Harris,6
...

将产生

S = 

    county: {938x1 cell}    %string
technology: {938x1 cell}    %string
   columns: [938x1 double]  %double
  category: {938x1 cell}    %string
   ballots: [938x1 double]  %double

修改

对于双引号文字,您可以使用%q代替%s来调用textscanFormatSpec options),就像那样

C = textscan(fileID,'%q%f');

答案 1 :(得分:0)

查看名为dlmread的函数。这将允许您输入一串数据,告诉它分隔符是什么,它应该抽出你需要的东西。

dlmread

results = dlmread('http://someurl.com/somefile.txt',';')