我想从CSV文件导入数据以用于scikit-learn。它混合了数值数据分类数据,例如
someValue,color,someOtherValue
1.2,red,55.6
1.9,blue,20.5
3.2,red,16.5
我需要将此表示转换为纯数字表示,其中分类数据点转换为多个二进制列,例如。
someValue,colorIsRed,colorIsBlue,someOtherValue
1.2,1,0,55.6
1.9,0,1,20.5
3.2,1,0,16.5
是否有任何实用程序可以为我执行此操作,或者是一种简单的方法来迭代数据并获得此表示形式?
答案 0 :(得分:4)
converters
参数可用于加载csv并指定每列的类型。但它不会将您的第二列二值化。
答案 1 :(得分:2)
在此回答中,我假设您尝试将CSV转换为LibSVM,LIBLINEAR或scikit-learn
可以加载的文件。
您可以使用csv2libsvm
,它是作为Ruby gem vector_embed
的一部分提供的:
$ gem install vector_embed
Successfully installed vector_embed-0.1.0
1 gem installed
你需要Ruby 1.9 + ...
$ ruby -v
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin12.2.0]
如果您没有Ruby 1.9,则可以使用rvm
轻松安装,但不需要(或建议使用)root:
$ curl -#L https://get.rvm.io | bash -s stable
$ rvm install 1.9.3
成功运行gem install vector_embed
后,请确保您的第一列名为“label”:
$ cat example.csv
label,color,someOtherValue
1.2,red,55.6
1.9,blue,20.5
3.2,red,16.5
$ csv2libsvm example.csv > example.libsvm
$ cat example.libsvm
1.2 1139043:55.6 1997960:1
1.9 1089740:1 1139043:20.5
3.2 1139043:16.5 1997960:1
请注意,它处理分类和连续数据,并使用MurmurHash版本3生成要素名称(“colorIsBlue”对应于1089740,“colorIsRed”为1997960 ...虽然Ruby代码是真的哈希像“color \ 0red”)。
如果您使用的是svm,请务必按照"A practical guide to SVM classification"中建议的方式扩展数据。
最后,假设您正在使用scikit-learn
's svmlight/libsvm loader:
>>> from sklearn.datasets import load_svmlight_file
>>> X_train, y_train = load_svmlight_file("/path/to/example.libsvm")