提问者:小点点

如何从交易数据中返回最佳N个客户的客户ID


我有CSV中的交易数据,其中包含客户ID、交易金额、交易日期等列。我有一个函数,它接受transactions\u csv\u file\u path作为字符串,N作为整数作为参数。我想从事务数据中返回最好的N个客户。注:[最佳客户为连续每日付款时间最长的客户]`。我可以阅读CSV,如下所示:

public static string[,] ProcessCSV(string file_path, int n)
{
List<string> transData = new List<string>();
            using (StreamReader sr = new StreamReader(file_path))
            {
                
                string strResult = sr.ReadToEnd();
                var values = strResult.Split(',');
                transData.Add(values[0]);
                transData.Add(values[1]);

            }
return transData.ToArray();
}

如何从CSV获取阵列数据,并以最长的连续日付款周期获得最佳的N个客户ID?

要考虑:将连续的每日付款定义为每个日历日至少1笔交易。如果有任何联系,请使用升序来打破联系。例如,K20003在K20005之前


共1个答案

匿名用户

我可能会提出一种计算最长运行长度的方法:

int MaxRun(IEnumerable<DateTime> ds){
  int max = 0;
  int current = 0;
  var prev = DateTime.MinValue;

  foreach(var d in ds.Distinct().OrderBy(x => x)){
    if((d - prev).Days == 1)
      current++;
    else 
      current = 0;
    prev = d;
    if(current > max)
      max = current;
  }
  return max;
}

然后使用一点LINQ将人员分组,计算maxrun,按maxrun命令传输,并输出人员:

transactions
  .GroupBy(t => t.Customer, t => t.TransactionDate )
  .Select(g => new { g.Key, MR = MaxRun(g) })
  .OrderBy(at => at.MR)
  .ThenBy(at => at.Key)
  .Select(at => at.Key)
  .ToArray()