加载公共的开放数据
通过url链接下载
通常网上有很多开放数据供算法测试。通常要用到urllib从给定的链接下载。例如从UCI机器学习数据仓库中下载的数据:
import numpy as np
import urllib
# url with dataset
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
# download the file 下载文件
raw_data = urllib.request.urlopen(url)
# load the CSV file as a numpy matrix
dataset = np.loadtxt(raw_data, delimiter=",")
# separate the data from the target attributes
X = dataset[:,0:7]
y = dataset[:,8]
加载sklearn的数据集
sklearn提供了常见的很多数据集,可以很方便地直接调用。使用load_*方法导入:
from sklearn.datasets import load_digits
digits = load_iris()
print(iris)
images = digits.images
target = digits.target
加载本地文件
如果是本地的文件,如果是txt格式的,可以使用np.loadtxt加载
import numpy as np
#加载本地工作空间的文件‘iris.txt’
np.loadtxt('iris.txt',delimiter=',', dtype=<type 'float'>, comments='#', converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)
如果是csv格式的,可以用pandas的load_csv()加载:
import pandas ad pd
csv_data = pd.read_csv()
如果数据比较复杂,以一定的目录结构保存的,那么加载这些不同类别的文件该如何操作呢? 假设文件的存放路径为:
container_folder/
category_1_folder/
file_1.txt file_2.txt … file_42.txt
category_2_folder/
file_43.txt file_44.txt …
其中,子文件夹(category_1_folder)的名字区别,作为监督学习的标签区别。
这种情况可以用sklearn.datasets.load_files()函数实现。
sklearn.datasets.load_files(container_path, description=None, categories=None,load_content=True, shuffle=True, encoding=None, decode_error='strict', random_state=0)[source]
上面的参数只解释container_path,load_content=True,encoding=None:
container_path:“container_folder”的路径。
load_content=True:是否真的把文件中的内容加载到内存中,选择true就是了。
encoding=None:string or None (default is None),是否解码文件中的内容(主要针对图片、视频或其他二进制文件,而非文本内容);如果不是None,那么在load_content=True的情况下,就会解码文件中的内容。注意,当前文本文件的编码方式一般为“utf-8”。如果不指明编码方式(encoding=None),那么文件内容将会按照bytes处理,而不是unicode处理,这样模块“sklearn.feature_extraction.tex”中的很多函数就不能用了。
返回值:data : Bunch, 得到与直接加载sklearn的数据集相同的数据结构:
-
Dictionary-like object。我们感兴趣的有:
扫描二维码关注公众号,回复: 5267956 查看本文章 -
data:原始数据,格式参考下图。
-
filenames:每个文件的名字
-
target:类别标签(从0开始的整数索引)
-
target_names:类别标签(数字)的具体含义(由子文件夹的名字category_1_folder决定)
实例:
data_folder/
category_1_folder/
1.txt file_2.txt
category_2_folder/
3.txt 4.txt
from sklearn import datasets
rawData = datasets.load_files("data_folder")
rawData
Out[10]:
{'DESCR': None,
'data': ['5 start, \r\ni like this book.',
'4 start, \r\nthis book is good,\r\ni like it.',
"1 start, \r\npretty bad, don't like it at all.",
"2 start, \r\nwe don't like so much."],
'filenames': array(['data_folder\\positive_folder\\1.txt',
'data_folder\\positive_folder\\2.txt',
'data_folder\\negative_folder\\4.txt',
'data_folder\\negative_folder\\3.txt'],
dtype='|S33'),
'target': array([1, 1, 0, 0]),
'target_names': ['negative_folder', 'positive_folder']}
rawData.data
Out[11]:
['5 start, \r\ni like this book.',
'4 start, \r\nthis book is good,\r\ni like it.',
"1 start, \r\npretty bad, don't like it at all.",
"2 start, \r\nwe don't like so much."]
rawData.target
Out[12]: array([1, 1, 0, 0])
rawData.filenames[rawData.target[0]]
Out[13]: 'data_folder\\positive_folder\\2.txt'
参考:
https://blog.csdn.net/mmc2015/article/details/46852755
http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_files.html