ML的数据分离

时间:2017-12-30 20:14:21

标签: python python-3.x pandas numpy

我为Machine Learning项目导入了一个数据集。我需要每个"神经元"在我的第一个输入图层中包含一个数字数据。但是,我一直无法做到这一点。这是我的代码:

import math
import numpy as np
import pandas as pd; v = pd.read_csv('atestred.csv', 
error_bad_lines=False).values
rw = 1
print(v)
for x in range(0,10):
    rw += 1
    s = (v[rw])
list(s)
#s is one row of the dataset 
print(s)#Just a debug.
myvar = s
class l1neuron(object):
    def gi():
        for n in range(0, len(s)):
            x = (s[n])
            print(x)#Just another debug 
n11 = l1neuron
n11.gi()

我理想的是这是一个变体,其中代码为从数据中提取的每个新行创建一个新变量(我在第一个循环中尝试做的)以及为每个提取的数据提取的新变量从每一行(我尝试在类和第二循环中做的)。

如果我完全忽略了我的代码,那么请随时指出我正确的方向进行完整的重写。

以下是我的数据集的前几行:

fixed acidity;"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol";"quality"
7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;5
7.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8;5
7.8;0.76;0.04;2.3;0.092;15;54;0.997;3.26;0.65;9.8;5

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你想将csv表中的每一行转换为一个单独的变量,而该变量又包含该行的所有值。 以下是您如何处理此问题的示例。有很多方法可以达到这个目的,其他方法可能更有效,更快,更pythonic,更时髦或其他。但是下面的代码是为了帮助您了解如何将tabellic数据存储到命名变量中而编写的。

两个评论:

  1. 如果您只需要阅读数据就是pandas,那么您可能会寻找一个不那么复杂的解决方案
  2. L1Neuron-class不是很透明,而它的成员不能从代码中读取,而是由attrs中的变量列表创建运行时。您可能需要查看namedTuples以获得更好的可读性。
  3. `

    import pandas as pd 
    from io import StringIO
    import numbers
    
    
    # example data:
    atestred = StringIO("""fixed acidity;volatile acidity;citric acid;\
    residual sugar;chlorides;free sulfur dioxide;total sulfur dioxide;\
    density;pH;sulphates;alcohol;quality
    7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;5
    7.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8;5
    7.8;0.76;0.04;2.3;0.092;15;54;0.997;3.26;0.65;9.8;5
    """)
    
    
    
    # read example data into dataframe 'data'; extract values and column names:
    data     = pd.read_csv(atestred, error_bad_lines=False, sep=';') 
    colNames = list(data)
    
    
    
    class L1Neuron(object):
        "neuron class that holds the variables of one data line"
    
        def __init__(self, **attr):
            """
            attr is a dict (like {'alcohol': 12, 'pH':7.4});
            every pair in attr will result in a member variable 
            of this object with that name and value"""
            for name, value in attr.items():
                setattr(self, name.replace(" ", "_"), value)
    
        def gi(self):
            "print all numeric member variables whose names don't start with an underscore:"
            for v in sorted(dir(self)):
                if not v.startswith('_'):
                    value = getattr(self, v) 
                    if isinstance(value, numbers.Number): 
                        print("%-20s = %5.2f" % (v, value))
            print('-'*50)
    
    
    # read csv into variables (one for each line):        
    neuronVariables = []        
    for s in data.values:
        variables   = dict(zip(colNames, s))
        neuron      = L1Neuron(**variables)
        neuronVariables.append(neuron)
    
    # now the variables in neuronVariables are ready to be used:     
    for n11 in neuronVariables:
        print("free sulphur dioxide in  this variable:", n11.free_sulfur_dioxide, end = " of ")
        print(n11.total_sulfur_dioxide,  "total sulphur dioxide" )
        n11.gi()
    

答案 1 :(得分:1)

如果这是针对机器学习项目的,我建议您将CSV加载到numpy数组中以便于操作。您将表中的每个值存储为其自己的变量,但这会通过阻止您使用向量化操作以及使您的数据更难以使用而使性能受到影响。我建议这个:

from numpy import genfromtxt my_data = genfromtxt('my_file.csv', delimiter=',')

如果您的机器学习问题受到监督,您还需要将标签拆分为单独的数据结构。但是,如果您正在进行无监督学习,那么单个数据结构就足够了。如果您提供有关您尝试解决的问题的其他背景信息,我们可以为您提供其他背景信息和指导。