python中从外部读入数据并进行相应转换

在机器学习过程中,离不开大量的数据的训练和测试,而第三方库中所携带的数据库数量又是有限,当我们需要使用自己的数据时,如何将数据从外部读入,并将其转化训练数据测试数据

本文将介绍一种数据读入及转化方式,本文以csv格式的文件为数据集作为例子进行读取测试。iris.csv数据集
(ps,若数据集需要积分,百度云链接)

首先看看iris.csv数据集长什么样子
这里写图片描述

其为150*4的数据集,共150个样本,4个特征,最后一列为所属类别,现在我将取第一列和第三列的特征,作为训练样本。

实现:

import numpy as np

#open the file and read the data
path="E:\pythona\sklearn\iris.csv"  #文件所在路径
f=open(path,'r',encoding='utf-8')
traindata=[]               #存放训练数据
label=[]                   #存放测试数据

for line in f:
    thisline=line.split(",")      
    traindata.append([thisline[0],thisline[3]]) #train sets
    label.append(thisline[4].replace("\n","")) #target sets

至此得到了初始化的数据集,list类型
这里写图片描述

可以看出此时的数据存在几个问题:
1.数据比较乱,不方便观察
2.把开头索引部分也包括进去了,影响数据
3.目前数据是字符型,要将其转化成浮点型才能进行数据的下一步操作

面对这些问题,解决办法如下

1.首先去除无关部分索引 这里写图片描述

2.将列表转化成阵列

3.将阵列中的元素有字符型转化成浮点型

代码实现

traindata=traindata[ 1: ][:]   #去除无关行数据
X=np.array(traindata)          #将列表转化成阵列
n_samples=X.shape[0]           #样本行数
n_features=X.shape[1]          #样本列数
P=np.zeros((n_samples,n_features),np.float32)#存放数据

for i in range(n_samples):
    for j in range(n_features):
        P[i][j]=float(X[i][j])   #转化成float类型

运行结果如下:
这里写图片描述

此时看起来就要舒服很多!

贴上源代码:

import numpy as np

path="E:\pythona\sklearn\iris.csv"
f=open(path , "r" , encoding="utf-8")

traindata=[]
label=[]

for line in f:

    thisline=line.split(",")
    traindata.append([thisline[0],thisline[3]])
    label.append(thisline[4].replace("\n",""))


traindata=traindata[1:][:]
label=label[1:]
X=np.array(traindata)
Y=np.array(label)

#build up the trainset 

n_samples=X.shape[0]
n_features=X.shape[1]
P=np.zeros((n_samples,n_features),np.float)

for i in range(n_samples):
    for j in range(n_features):
        P[i][j] = round(float(X[i][j]),2)
print("trainset:" ,P)


#build up the targetset
Z=np.zeros((n_samples,1))
for i in range(150):
    Z[i]=int(Y[i])

print("------------------------------------")
print("targetset:",Z)

以上便是关于数据读取的一点经验总结,欢迎大家一起交流讨论!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值