从tensorflow.js中的csv数据中删除重复行

问题描述 投票:1回答:1

我正在尝试使用tensorflow.js-API使我在python中创建的模型能够正常工作。现在,我陷入了从csv文件中获取数据的部分。我能够获取数据,但是后来在python代码中,我更改了数据的布局。我找不到如何在tensorflow.js中成功实现此示例我当前的数据布局:

hour----|quit----|mNumber-|sleepSum|difAge--|woman---|paytype-|sum1----|sum2----|sum3----|sum4----|sum5----|sum6----|sum7----|sum8
0-------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
1-------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
2-------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
3-------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
4-------|0-------|12345---|5-------|50------|0-------|0-------|1-------|0-------|0-------|0-------|0-------|0-------|0-------|0
5-------|0-------|12345---|5-------|50------|0-------|0-------|0-------|1-------|0-------|0-------|0-------|0-------|10------|5
6-------|0-------|12345---|5-------|50------|0-------|0-------|3-------|2-------|0-------|1-------|10------|7-------|9-------|4
7-------|0-------|12345---|5-------|50------|0-------|0-------|1-------|3-------|2-------|5-------|3-------|0-------|3-------|1
8-------|0-------|12345---|5-------|50------|0-------|0-------|1-------|0-------|0-------|1-------|0-------|0-------|0-------|0
9-------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
10------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
11------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
12------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
13------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
14------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|1-------|0-------|0-------|0-------|0
15------|0-------|12345---|5-------|50------|0-------|0-------|1-------|0-------|0-------|0-------|0-------|0-------|0-------|0
16------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|1-------|0-------|0-------|0-------|0-------|0
17------|0-------|12345---|5-------|50------|0-------|0-------|1-------|0-------|0-------|0-------|0-------|0-------|0-------|0
18------|0-------|12345---|5-------|50------|0-------|0-------|4-------|1-------|0-------|0-------|0-------|0-------|0-------|0
19------|0-------|12345---|5-------|50------|0-------|0-------|4-------|0-------|3-------|0-------|0-------|0-------|0-------|0
20------|0-------|12345---|5-------|50------|0-------|0-------|7-------|0-------|3-------|0-------|0-------|2-------|0-------|0
21------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
22------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
23------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
0-------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
1-------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
2-------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
3-------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
4-------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
5-------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
6-------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
7-------|0-------|67890---|40------|37------|0-------|0-------|2-------|1-------|0-------|0-------|0-------|0-------|0-------|0
8-------|0-------|67890---|40------|37------|0-------|0-------|3-------|9-------|0-------|0-------|1-------|0-------|0-------|3
9-------|0-------|67890---|40------|37------|0-------|0-------|6-------|4-------|1-------|10------|4-------|0-------|0-------|5
10------|0-------|67890---|40------|37------|0-------|0-------|1-------|2-------|0-------|1-------|2-------|0-------|0-------|1
11------|0-------|67890---|40------|37------|0-------|0-------|1-------|0-------|0-------|0-------|0-------|0-------|0-------|0
12------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0
13------|0-------|67890---|40------|37------|0-------|0-------|1-------|0-------|0-------|0-------|0-------|0-------|0-------|0
14------|0-------|67890---|40------|37------|0-------|0-------|0-------|1-------|0-------|0-------|0-------|0-------|0-------|3
15------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|1-------|0-------|0
16------|0-------|67890---|40------|37------|0-------|0-------|1-------|0-------|0-------|0-------|0-------|0-------|0-------|0
17------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|1-------|0-------|0-------|1
18------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|1
19------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|1-------|0-------|0-------|0
20------|0-------|67890---|40------|37------|0-------|0-------|2-------|2-------|0-------|0-------|0-------|0-------|0-------|1
21------|0-------|67890---|40------|37------|0-------|0-------|3-------|4-------|0-------|0-------|0-------|0-------|0-------|0
22------|0-------|67890---|40------|37------|0-------|0-------|2-------|0-------|0-------|0-------|0-------|0-------|0-------|1
23------|0-------|67890---|40------|37------|0-------|0-------|6-------|1-------|0-------|0-------|0-------|0-------|0-------|1

我希望它是:

hour----|quit----|mNumber-|sleepSum|difAge--|woman---|paytype-|sum1----|sum2----|sum3----|sum4----|sum5----|sum6----|sum7----|sum8----|sum9----|sum10----|...|sum191--|sum192
0-------|0-------|12345---|5-------|50------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0--------|...|0-------|0
0-------|0-------|67890---|40------|37------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0-------|0--------|...|0-------|1

所以我有冗余数据(24小时行的前7列都是相同的。我想将数据附加到路径上,所以我想出了2行,每行分别有192个和人员。

我想知道tensorflow.js中是否有用于重新排列数据的功能,或者您建议从csv加载数据后在for循环中手动进行处理?

现在,我正在像这样获取数据:

const csvDataset = tf.data.csv(
  csvUrl,
  {
    hasHeader:false,
    delimiter:';',
    columnNames:['hour','quit','mNumber','sleepSum','difAge','woman','paytype','sum1','sum2','sum3','sum4','sum5','sum6','sum7','sum8']
  });

这是我在python中的操作方式

data = np.genfromtxt("01TendencyDouble.csv",delimiter=';',dtype=np.dtype(np.int32))
HourData = data[:,7:15]
m = HourData.shape[0]//24
TendencyFull = np.zeros((m,24*8), dtype=int)
MetaData = np.zeros((m,6), dtype=int)    
#Rearrange the Data. Stick all 24 hour-Records of the first 3 Months in a row then those of the sedond 3 months...
for i in range(m):
    Tendency = HourData[i*24:i*24+24,:] 
    TendencyFull[i,:] = Tendency.flatten('F')   
    MetaData[i,0] = data[i*24,1] #MetaData[2,0] is Quit of Record 3
    MetaData[i,1] = data[i*24,2] #MetaData[2,1] is MNumber for Record 3   
    MetaData[i,2] = data[i*24,3] #MetaData[2,2] is Sleep for Record 3           
    MetaData[i,3] = data[i*24,4] #MetaData[2,3] is DifAge for Record 3   
    MetaData[i,4] = data[i*24,5] #MetaData[2,4] is Woman for Record 3   
    MetaData[i,5] = data[i*24,6] #MetaData[2,5] is Paycash for Record 3   
python csv flatten tensorflow.js
1个回答
0
投票

tf.data.csv使用引擎盖下的生成器将数据作为流返回。流本身不跟踪已返回的数据。为了跟踪这一点,每个数据都需要存储在一个变量中。

通用解决方案是过滤该行是否与上一行相同。为了进行过滤,使用条件运算符来区分有特征的情况,从没有特征的情况下标记数据(isLabel未设置)

  let latestRow = []
  compareRows = (r1,r2) => {
    const bool = r1.some((x, i) => x !== r2[i])
    console.log(bool)
    return bool
  }

  const flattenedDataset =
    csvDataset
    .filter(r => {
      r = [...(r.ys ? [...Object.values(r.xs), ...Object.values(r.ys)] : Object.values(r))]
      const bool = compareRows(r, latestRow)
      latestRow = r
      return bool
    })

如果要在某个时间窗口上进行重复项过滤,例如在每个n行上进行重复过滤,则可以使用另一个变量来对行进行计数。 filter运算符中还将考虑此变量

© www.soinside.com 2019 - 2024. All rights reserved.