У меня есть знания по обработке Dataframes в Python, но я сталкиваюсь с приведенной ниже проблемой при написании в scala.
case class Transaction(
transactionId: String,
accountId: String,
transactionDay: Int,
category: String,
transactionAmount: Double)
Я создал такой список:
val transactions: List[Transaction] = transactionslines.map {
line => val split = line.split(',')
Transaction(split(0), split(1), split(2).toInt, split(3),split(4).toDouble)
}.toList
Содержание списка:
Transaction(T000942,A38,28,EE,694.54)
Transaction(T000943,A35,28,CC,828.57)
Transaction(T000944,A26,28,DD,290.18)
Transaction(T000945,A17,28,CC,627.62)
Transaction(T000946,A42,28,FF,616.73)
Transaction(T000947,A20,28,FF,86.84)
Transaction(T000948,A14,28,BB,620.32)
Transaction(T000949,A14,28,AA,260.02)
Transaction(T000950,A32,28,AA,600.34)
Может ли кто-нибудь помочь мне с тем, как рассчитать статистику для каждого номера счета за предыдущие пять дней транзакций, не считая транзакций за день, для которого рассчитывается статистика.Например, на 10-й день вы должны рассматривать только транзакции с 5-го по 9-й (это называется скользящим временным окном в пять дней).Мне нужно рассчитать следующие статистические данные:
• Общая стоимость транзакции типа транзакции «AA» за предыдущие 5 дней для одного аккаунта
• Средняя стоимость транзакции за предыдущие 5 дней транзакцийна счет
В идеале выходные данные должны содержать одну строку в день для идентификатора счета, а каждая строка должна содержать каждую из рассчитанных статистических данных:
Мой код за первые 5 дней выглядит следующим образом:
val a = transactions.
filter(trans => trans.transactionDay <= 5).
groupBy(_.accountId).
mapValues(trans => (trans.map(amount =>
amount.transactionAmount).sum/trans.map(amount =>
amount.transactionAmount).size,trans.filter(trans =>
trans.category == "AA").map(amount =>
amount.transactionAmount).sum)
a.foreach{println}
Я хотел бы знать, есть ли какой-нибудь элегантный способ вычислить эту статистику.Обратите внимание, что день трансакции варьируется от [1..29], поэтому в идеале мне нужен код, который рассчитывает эти скользящие статистические данные до 29-го дня, а не только для первых 5 дней.
Большое спасибо !!