python numpy 把数据向量化

某公司的数据处理。

比如有数据:

0 1 20100304 51.14 5 62.2 0 0.0 1 6.82 4.08666666667 4 3
0 0 20100307 2.47333333333 3 75.9333333333 0 0.0 114 13.5666666667 2.86666666667 0 0
0 2 20100318 2.49333333333 3 58.6666666667 0 0.0 1 5.22666666667 1.61333333333 0 0
0 2 20100329 9.14666666667 14 70.6428571429 0 0.0 1 31.84 7.51333333333 11 7
0 0 20100401 3.36666666667 5 71.1 1 75.0 1 1.86 1.29333333333 0 0
0 1 20100401 7.44666666667 11 58.1909090909 0 0.0 51 40.8066666667 12.5066666667 2 1
0 0 20100401 1.0 1 138.0 0 0.0 1 1.0 1.0 0 0
1 0 20100428 1.0 1 85.0 0 0.0 1 0.0 0.0 0 0
1 0 20100429 1.0 1 128.0 0 0.0 1 24.54 3.59333333333 0 0
0 0 20100506 1.92 2 67.0 0 0.0 44 6.65333333333 1.91333333333 4 1

要求:

1、除去第1列和第2列。

2、对剩下的日期列提取特征,以月份为特征,形式:201003

3、对剩下的数字列,用最大值和最小值的区间,划分十份,每一份就是一个特征,形式:[1,5)、[5,9)...[21,25],注意最后一个区间闭合了。

4、用上面获取的特征,把原始数据向量化,形式:

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 

开写:

先下载安装pyExcelerator:http://sourceforge.net/projects/pyexcelerator/,解压后setup.py install

# -*- coding: cp936 -*-

import numpy as np
from numpy import *
import pprint
from pyExcelerator import *

#all_col_feature存放特征们
all_col_feature = []

for i in range(2,13):
    #获取[日期]列特征:201003,201004...201408...
    if i == 2 :
        FILENAME = "lost5"
        date = [e[0:6] for e in loadtxt(FILENAME , delimiter = " " , usecols=(2,) , dtype=str)]
        date = list(set(date)) #去重
        date.sort()
        all_col_feature.append(date)
    #获取[数字]列特征:取最大值,最小值,划分10份,每一份就是一个特征,[1,5),[5,9)..[21,25]
    else:
        digit_col = filter(lambda e:e!=0,loadtxt(FILENAME , delimiter = " " , usecols=(i,) , dtype=float))#获取数据后去0
        digit_col.sort()
        max_num = digit_col[-1]
        min_num = digit_col[0]
        block_size = (max_num - min_num) /10
        col_feature = []
        for i in range(11):
            col_feature.append(min_num+i*block_size)
        all_col_feature.append(col_feature)

w = Workbook() #创建一个工作簿
ws = w.add_sheet('Zero_One_Data') #创建一个工作表
row_index = 0
col_index = 0
for i in range(len(all_col_feature)):
    if i == 0:
        for j in all_col_feature[i]:
            ws.write(row_index,col_index,str(j))
            col_index += 1
    else:
        for j in range(len(all_col_feature[i])-1):
            ws.write(row_index,col_index,str(all_col_feature[i][j])+"~"+str(all_col_feature[i][j+1]))
            col_index += 1
row_index += 1

out = file('out.txt','w')

res = []
for row in loadtxt(FILENAME , delimiter = " " , usecols=(2,3,4,5,6,7,8,9,10,11,12) , dtype=str):
    #数据整理成这个形式:every_row_feature_index = [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1]
    #比如:第一个0表示在[日期]列的特征下标为0,-1表示NONE值
    #比如:第一个1表示在第二列的特征下标为1,心好累,我这都要注释?
    every_row_feature_index = []
    a = [i for i in range(len(all_col_feature[0])) if row[0][0:6] <= all_col_feature[0][i]]
    every_row_feature_index.append(a[0])

    for col in range(1,11):
        b = [i for i in range(len(all_col_feature[col])) if float(row[col]) < float(all_col_feature[col][i])]
        if len(b) == 0:#max_num
            every_row_feature_index.append(len(all_col_feature)-2)
        else:
            every_row_feature_index.append(b[0]-1) #-1表NONE

    #生成向量
    #就是把every_row_feature_index = [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1]转成下面的形式:
    #[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    zero_one_every_row_res = []
    col_index = 0
    for i in range(len(every_row_feature_index)):
        if i == 0: #处理[日期]列
            for j in range(every_row_feature_index[i]):
                out.write('0'+' ')
                ws.write(row_index,col_index,'0')
                col_index += 1
            out.write('1'+' ')
            ws.write(row_index,col_index,'1')
            col_index += 1
            for j in range(every_row_feature_index[i]+1,len(all_col_feature[i])):
                out.write('0'+' ')
                ws.write(row_index,col_index,'0')
                col_index += 1
        else:#处理其他列
            if every_row_feature_index[i] == -1: #-1表NONE值 向量全为0
                for j in range(len(all_col_feature[i])-1):
                    out.write('0'+' ')
                    ws.write(row_index,col_index,'0')
                    col_index += 1
            else:
                for j in range(every_row_feature_index[i]):
                    out.write('0'+' ')
                    ws.write(row_index,col_index,'0')
                    col_index += 1
                out.write('1'+' ')
                ws.write(row_index,col_index,'1')
                col_index += 1
                for j in range(every_row_feature_index[i]+1,len(all_col_feature[i])-1):
                    out.write('0'+' ')
                    ws.write(row_index,col_index,'0')
                    col_index += 1
    out.write('\n')
    row_index += 1
    if row_index == 100:#为了更快看到结果,只设置100行,去掉可得到全部
        break

out.close()
w.save('out.xls')

看看结果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 08:56:17

python numpy 把数据向量化的相关文章

Python/Numpy大数据编程经验

Python/Numpy大数据编程经验 1.边处理边保存数据,不要处理完了一次性保存.不然程序跑了几小时甚至几天后挂了,就啥也没有了.即使部分结果不能实用,也可以分析程序流程的问题或者数据的特点. 2. 及时用 del 释放大块内存.Python缺省是在变量范围(variablescope)之外才释放一个变量,哪怕这个变量在后面的代码没有再被用到,所以需要手动释放大的array. 注意所有对数组的引用都del之后,数组才会被del.这些引用包括A[2:]这样的view,即使np.split也只是

Python Numpy中数据的常用的保存与读取方法

在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件进行介绍: 1.保存为二进制文件(.npy/.npz) numpy.save 保存一个数组到一个二进制的文件中,保存格式是.npy 参数介绍 numpy.save(file, arr, allow_pickle=True, fix_imports=True) file:文件名/文件路径 arr:要存

Python numpy数组扩展效率问题

Numpy库的ndarray数组可以方便地进行各种多维数据处理工作 可是它最大的缺点就是不可动态扩展--"NumPy的数组没有这种动态改变大小的功能,numpy.append()函数每次都会重新分配整个数组,并把原来的数组复制到新数组中."(引用自http://blog.chinaunix.net/uid-23100982-id-3164530.html) 场景: 今天用ndarray处理 42000 条数据时,就遇到了数组扩展的效率问题 文件名:train.csv(后附下载) 文件大

利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(2)

1.索引上的合并 有时候,DataFrame中的连接键位于其索引中.在这种情况下,你可以传入left_index = True或right_index = True(或两个都传)以说明索引应该被用作连接键: In [8]: left1 = pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'], ...: 'value':range(6)}) In [9]: right1 = pd.DataFrame({'group_val':[3.5, 7]},

python numpy教程

python numpy教程 2014-08-10 22:21:56 分类: Python/Ruby 先决条件 在阅读这个教程之前,你多少需要知道点python.如果你想重新回忆下,请看看Python Tutorial. 如果你想要运行教程中的示例,你至少需要在你的电脑上安装了以下一些软件: Python NumPy 这些是可能对你有帮助的: ipython是一个净强化的交互Python Shell,对探索NumPy的特性非常方便. matplotlib将允许你绘图 Scipy在NumPy的基础

python——读取MATLAB数据文件 *.mat

鉴于以后的目标主要是利用现有的Matlab数据(.mat或者.txt),主要考虑python导入Matlab数据的问题.以下代码可以解决python读取.mat文件的问题.主要使用sicpy.io即可.sicpy.io提供了两个函数loadmat和savemat,非常方便. # adapted from http://blog.csdn.net/rumswell/article/details/8545087 import scipy.io as sio #import matplotlib.p

Numpy中数据的常用的保存与读取方法

Numpy中数据的常用的保存与读取方法 小书匠 深度学习 文章目录: 1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy.savetxt numpy.loadtxt 在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件进行介绍: 1.保

易百教程人工智能python修正-人工智能数据准备-标记数据

我们已经知道,某种格式的数据对于机器学习算法是必需的. 另一个重要的要求是,在将数据作为机器学习算法的输入发送之前,必须正确标记数据. 例如,如果所说的分类,那么数据上会有很多标记. 这些标记以文字,数字等形式存在.与sklearn中的机器学习相关的功能期望数据必须具有数字标记. 因此,如果数据是其他形式,那么它必须转换为数字. 这个将单词标签转换为数字形式的过程称为标记编码. 标记编码步骤 按照以下步骤在Python中对数据标记进行编码 - 第1步 - 导入有用的软件包 如果使用Python,

python读入txt数据,并转成矩阵

txt文件的部分数据截图如下图.数据链接:https://pan.baidu.com/s/1_Ce6WLGDTWf7qQIvpP-70Q   提取码:n22a python读入该数据,并转成array,代码如下: import os import numpy as np # 数据文件转矩阵 # path: 数据文件路径 # delimiter: 行内字段分隔符 def file2array(path, delimiter): recordlist = [] fp = open(path, 'r'