Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void Main(string[] args)
- {
- Execute(5);
- Execute(8);
- Execute(10);
- Execute(15);
- }
- static void Execute(int n)
- {
- var dict =
- File.ReadLines($@"x{n}.csv")
- .Skip(1) // header
- .Select(l => l.Split(','))
- .ToDictionary(
- parts => new DateTime(year: int.Parse(parts[0].Trim('"')),
- month: int.Parse(parts[1].Trim('"')),
- day: 1),
- parts => int.Parse(parts[2].Trim('"')));
- int Get(DateTime dt) => dict.TryGetValue(dt, out int v) ? v : 0;
- var averagingKernel = new[] { 1, 3, 7, 3, 1 };
- var averagingKernelDict = Enumerable.Range(0, averagingKernel.Length)
- .ToDictionary(idx => idx - averagingKernel.Length, idx => averagingKernel[idx]);
- var kernelTotalWeight = averagingKernel.Sum();
- double GetAve(DateTime dt) => averagingKernelDict.Select(kvp => kvp.Value * Get(dt.AddMonths(kvp.Key))).Sum() / (double)kernelTotalWeight;
- using (var outf = File.CreateText($@"y{n}.csv"))
- {
- outf.WriteLine($"Date\tAveraged {n}+ Users Count");
- foreach (var key in dict.Keys.OrderBy(k => k))
- outf.WriteLine($"{key.Year}-{key.Month}\t{GetAve(key)}");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement