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

remove duplicates rows from csv data in tensorflow.js

我正在尝试使用 tensorflow.js - API 让我在 python 中创建的模型正常工作。现在我陷入了从 csv 文件中获取数据的部分。我能够获取数据,但在 python-Code 之后我更改了数据的布局。我找不到如何在 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

所以我有冗余数据(前 7 列对于 24 小时行中的每一行都是相同的。我想在路径上附加数据,所以我想出了 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   

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

如果该行与前一行相同,则通用解决方案是进行过滤。对于过滤,有条件运算符来区分有特征的情况,没有标签数据的情况(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
    })

如果要在特定时间过滤重复项window,例如在每个n 行上过滤重复项,可以使用另一个变量来计算行数。 filter operator

也会考虑这个变量