[英]Read csv data directly from url in Matlab
我在从Matlab数据库中读取数据时遇到一些问题。 我用来下载数据的url链接提供了一个以分号分隔的文本文件,例如,我需要Matlab来识别此数据,并以struct
格式对其进行相应的排列(因为数据具有不同的类)。 我已经使用过urlread
并可以成功下载数据,唯一的问题是我将所有数据作为一个字符串存储在一个单元格内,并且需要以表的形式组织这些数据。
基本上,我想知道是否可以像使用R中的read.csv
函数一样,将网址中的数据加载到Matlab中,您只需将网址放在文件名应所在的位置,并定义如何分隔数据,中提琴,您可以将data.frame
和所有数据完美地组织起来。
我想有几种方法可以在使用urlread
之后解释字符串并将其以某种方式转换为有组织的struct
变量,但是必须有一种方法可以像R一样直接从url读取。
这是一段代码,将从网络( urlread
)读取csv
数据,使用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
编辑
对于双引号文本,可以在调用textscan
( FormatSpec options )时使用%q
代替%s
,就像这样
C = textscan(fileID,'%q%f');
查看一个名为dlmread
的函数。 这将允许您放入一串数据,告诉它分隔符是什么,并且它应该输出所需的数据。
results = dlmread('http://someurl.com/somefile.txt',';')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.