【问题标题】:Data separation for ML机器学习的数据分离
【发布时间】:2018-06-10 18:35:04
【问题描述】:

我为机器学习项目导入了一个数据集。我需要我的第一个输入层中的每个“神经元”都包含一个数字数据。但是,我一直无法做到这一点。这是我的代码:

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

提前致谢。

【问题讨论】:

  • 请发布一些数据,即您的数据集的最小示例。
  • 我正要这么做@Cleb
  • 预期输出是什么?
  • 恐怕你还不清楚你想做什么。如上所述,您的所有数据都已存储在v 中,您可以通过索引轻松访问每个值。例如,v['citric acid'][2] 在v 的第三行为您提供柠檬酸的值。如果您想为每个行列对创建一个不同的变量,您希望如何命名它们以及您以后的代码如何知道这些名称?
  • 也许这只是另一个xy problem,而不是试图解决你制定的问题,你应该告诉我们你实际上想要做什么,我们可以告诉你如何解决那个实际问题。

标签: python python-3.x pandas numpy


【解决方案1】:

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

两个备注:

  1. 如果读取数据是您唯一需要 pandas 的事情,您可能会寻找一个不太复杂的解决方案
  2. L1Neuron 类不是很透明,它的成员不能从代码中读取,而是由 attrs 中的变量列表在运行时创建。您可能想查看namedTuples 以获得更好的可读性。

`

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()

【讨论】:

  • 谢谢,我实际上希望表中的每个数字都是它自己的变量,但我确信我可以通过扩展您的代码来做到这一点。
【解决方案2】:

如果这是用于机器学习项目,我建议将 CSV 加载到 numpy 数组中以便于操作。您将表中的每个值都存储为它自己的变量,但这会阻止您使用矢量化操作,从而使您的性能受到影响,并使您的数据更难处理。我建议这样做:

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

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

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2019-03-06
    • 2017-06-21
    • 2017-05-16
    • 2018-03-09
    • 2017-03-26
    • 2020-05-04
    • 2011-06-09
    • 2019-08-24
    相关资源
    最近更新 更多