python实现上亿条csv文件或者txt文件数据转化为libsvm格式数据

如果数据量非常大,建议在linux下执行,本地执行可能需要扩充虚拟内存

代码:

#csv文件格式转化为libsvm文件格式
import pandas as pd 
import time
def libsvm(df, fp):
        now = time.time()      
        print('Format Converting begin in time:..........',now)
        columns = df.columns.values               #第一行作为列名[pm2_5,so2,no2,co,o3]
        d = len(columns)                          #d=5,共有5列
        feature_index = [i for i in range(d)]     #feature_index=[0,1,2,3,4]
        field_index = [0]*d                       #field_index=[0,0,0,0,0]     
        field = []               
        for col in columns:
            field.append(col.split(',')[0])      #field=['94', '108', '79', '5', '2'],分隔符
        index = -1
        for i in range(d):
            if i==0 or field[i]!=field[i-1]:
                index+=1
            field_index[i] = index               #field_index=[0,1,2,3,4]


        with open(fp, 'w') as f:
            for row in df.values:                              #一一遍历一行的值,row是一维数组
                line =str(row[0])                                #line等于row的第一个元素值
                for i in range(1, len(row)):                 #i每次都等于1,2,3,4
                    if (row[i] != 0) & (type(row[i])!=str):      #当数据不为0且不为字符串时写入
                        line += " %d:%.3f" % (feature_index[i], row[i])
                line+='\n'
                f.write(line)
        print('finish convert,the cost time is ',time.time()-now)
        print('[Done]')
        print()


def main():
    df = pd.read_csv(r'/home/wanjintao/PM_sourcedata.csv')
    df = df.fillna(0)      #df.fillna(0)用0填充缺失值,df.dropna()删除缺失值
    fp = r'/home/wanjintao/PM2.5_libsvm.txt'
    libsvm(df,fp)


if __name__ == '__main__':
    main()

执行效果:

原数据:

生成的libsvm数据:

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要安装libsvm软件包。可以通过以下命令在终端中安装: ``` pip install -U libsvm ``` 接下来,导入所需的库和模块: ```python import pandas as pd from svmutil import * # 导入libsvmpython接口svmutil ``` 读取数据文件seeds.csv并将其转换为libsvm支持的格式: ```python df = pd.read_csv('seeds.csv') y = df.pop('Type').values.tolist() # 提取标签列,并转换为列表 x = df.values.tolist() # 将特征列转换为列表 # 将数据转换为libsvm支持的格式 prob = svm_problem(y, x) ``` 接下来,使用交叉验证法选择最优的SVM模型参数: ```python param = svm_parameter('-s 0 -t 2 -c 1 -g 0.1') # 设置SVM参数 acc = svm_train(prob, param) # 进行交叉验证 print('交叉验证准确率:{:.2f}%'.format(acc * 100)) ``` 最后,可以使用训练好的模型进行预测: ```python model = svm_train(prob, param) # 训练模型 y_pred, _, _ = svm_predict(y, x, model) # 进行预测 ``` 完整代码如下: ```python import pandas as pd from svmutil import * # 读取数据文件 df = pd.read_csv('seeds.csv') # 提取标签列,并转换为列表 y = df.pop('Type').values.tolist() # 将特征列转换为列表 x = df.values.tolist() # 将数据转换为libsvm支持的格式 prob = svm_problem(y, x) # 使用交叉验证法选择最优的SVM模型参数 param = svm_parameter('-s 0 -t 2 -c 1 -g 0.1') acc = svm_train(prob, param) print('交叉验证准确率:{:.2f}%'.format(acc * 100)) # 训练模型并进行预测 model = svm_train(prob, param) y_pred, _, _ = svm_predict(y, x, model) print('预测结果:', y_pred) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值