Skip to content

Commit

Permalink
added mean
Browse files Browse the repository at this point in the history
  • Loading branch information
ignatandrei committed Oct 11, 2024
1 parent 03e0581 commit b9913d0
Show file tree
Hide file tree
Showing 11 changed files with 131 additions and 39 deletions.
6 changes: 6 additions & 0 deletions src/NetPackageAnalyzer/NetPackageAnalyzer.sln
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NuGetInfo", "NuGetInfo\NuGe
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NPA.Resources", "NPA.Resources\NPA.Resources.csproj", "{BA1E9CDB-4241-4910-92F1-4C374D1EE1C7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Statistical", "Statistical\Statistical.csproj", "{32CE4D49-5C69-441D-A002-1CFC182B1B69}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -81,6 +83,10 @@ Global
{BA1E9CDB-4241-4910-92F1-4C374D1EE1C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA1E9CDB-4241-4910-92F1-4C374D1EE1C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BA1E9CDB-4241-4910-92F1-4C374D1EE1C7}.Release|Any CPU.Build.0 = Release|Any CPU
{32CE4D49-5C69-441D-A002-1CFC182B1B69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{32CE4D49-5C69-441D-A002-1CFC182B1B69}.Debug|Any CPU.Build.0 = Debug|Any CPU
{32CE4D49-5C69-441D-A002-1CFC182B1B69}.Release|Any CPU.ActiveCfg = Release|Any CPU
{32CE4D49-5C69-441D-A002-1CFC182B1B69}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
<ProjectReference Include="..\NetPackageAnalyzerDiagram\NetPackageAnalyzerDiagram.csproj" />
<ProjectReference Include="..\NetPackageAnalyzerMetricsMSFT\NetPackageAnalyzerMetricsMSFT.csproj" />
<ProjectReference Include="..\NuGetInfo\NuGetInfo.csproj" />
<ProjectReference Include="..\Statistical\Statistical.csproj" />
</ItemGroup>
<PropertyGroup>

Expand Down
13 changes: 5 additions & 8 deletions src/NetPackageAnalyzer/NetPackageAnalyzerObjects/ProjectsDict.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
using NetPackageAnalyzeHistory;
using NetPackageAnalyzerObjects;

namespace NetPackageAnalyzerObjects;
namespace NetPackageAnalyzerObjects;
public partial class ProjectsDict : Dictionary<string, ProjectData>
{
public ProjectsDict(Dictionary<string, ProjectData> data) : base(data)
Expand Down Expand Up @@ -46,7 +43,7 @@ public int MedianCommits(int? year)
.ToArray();
if ((data?.Length??0) == 0) return 0;
ArgumentNullException.ThrowIfNull(data);
return Statistical<int>.Median(data.Select(it => it.Value).ToArray());
return StatisticalNumbers<int>.Median(data.Select(it => it.Value).ToArray());

}
public KeyValuePair<string, int>[] FilesWithMaxCommits(int? year)
Expand Down Expand Up @@ -86,7 +83,7 @@ public int MedianCommitsForFiles(int? year)
.Where(it => year == null || it.date.Year == year)
.Select(it => it.CountFiles())
.ToArray();
var median=Statistical<int>.Median(data);
var median=StatisticalNumbers<int>.Median(data);
return median;
}
public Commit[] MaxCommits(int? year)
Expand Down Expand Up @@ -116,8 +113,8 @@ public Dictionary<int, int> CommitsMedianFilesPerYear()
.GroupBy(it => it.date.Year)
.Select(it => new {
year = it.Key,
median =
Statistical<int>.Median( it.Select(it=>it.CountFiles()).ToArray())
median =
StatisticalNumbers<int>.Median( it.Select(it=>it.CountFiles()).ToArray())
})
.ToDictionary(it => it.year, it => it.median)
;
Expand Down
30 changes: 0 additions & 30 deletions src/NetPackageAnalyzer/NetPackageAnalyzerObjects/Statistical.cs

This file was deleted.

2 changes: 2 additions & 0 deletions src/NetPackageAnalyzer/NetPackageAnalyzerObjects/globals.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
global using RSCG_ExportDiagram_Import;
global using NetPackageAnalyzerMetricsMSFT;
global using NuGetInfo;
global using NetPackageAnalyzeHistory;
global using Statistical;

public static class GlobalsForGenerating
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
<ItemGroup>
<ProjectReference Include="..\NetPackageAnalyzerWork\NetPackageAnalyzerDocusaurus.csproj" />
<ProjectReference Include="..\NuGetInfo\NuGetInfo.csproj" />
<ProjectReference Include="..\Statistical\Statistical.csproj" />
</ItemGroup>

<ItemGroup>
Expand Down
25 changes: 25 additions & 0 deletions src/NetPackageAnalyzer/NetPackageAnalyzerTests/TestStatistics.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Statistical;

namespace NetPackageAnalyzerTests;
[TestClass]
public class TestStatistics
{

[TestMethod]
public void TestMedian()
{
var values = new int[] { 2, 100, 300, 400, 500 };
var median = StatisticalNumbers<int>.Median(values);
Assert.AreEqual(300, median);
}

[TestMethod]
public void TestMean()
{
var values = new int[] { 5, 100, 300, 400, 500 };
var median = StatisticalNumbers<int>.ArithmeticMean(values);
Assert.AreEqual(261, median);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
return;
};
var values= ordered.Select(x => hist(x.Value).nrCommits??0).ToArray();
var median = Statistical<int>.Median( values.Where(t=>t!=0).Select(it=>it!).ToArray());
var median = StatisticalNumbers<int>.Median(values.Where(t => t != 0).Select(it => it!).ToArray());


var names = ordered.Select(x => x.Value.NameCSproj()).ToArray();
Expand Down
1 change: 1 addition & 0 deletions src/NetPackageAnalyzer/NetPackageAnalyzerWork/globals.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
global using NetPackageAnalyzerDiagram;
global using RSCG_ExportDiagram_Import;
global using NetPackageAnalyzeHistory;
global using Statistical;



80 changes: 80 additions & 0 deletions src/NetPackageAnalyzer/Statistical/Class1.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
using System.Numerics;
namespace Statistical;

public static class StatisticalNumbers<T>
where T : INumber<T>,IDivisionOperators<T, T, T>
{
public static T Median(T[]? values)
{
var size = values?.Length ?? 0;
if (size == 0)
{
return T.Zero;
}
ArgumentNullException.ThrowIfNull(values);
if (size == 1)
{
return values![0];
}
Array.Sort(values);
int mid = size / 2;
T median = values[mid];
if (size % 2 == 0)
{
median = (values[mid] + values[mid - 1]);
median = median / T.CreateChecked(2);
}
return median;
}
public static T ArithmeticMean(T[]? values)
{
var size = values?.Length ?? 0;
if (size == 0)
{
return T.Zero;
}
ArgumentNullException.ThrowIfNull(values);

if(!T.TryParse(size.ToString(), null, out var mid )) {
throw new ArgumentException("Cannot parse the size of the array to T");
};


if (size == 1)
{
return values![0];
}
T res= T.Zero;
foreach (var value in values)
{
res += value;
}

return res / mid;

}

public static Tuple<T[], int> Mode(T[]? values)
{
var size = values?.Length ?? 0;
if (size == 0)
{
return Tuple.Create(new T[] { T.Zero },0);
}
ArgumentNullException.ThrowIfNull(values);

var data = values
.GroupBy(v=>v)
.ToDictionary(v=>v,v=>v.Count());

var max = data.Max(it=>it.Value);
var vals = data
.Where(it => it.Value == max)
.Select(it => it.Key.Key)
.ToArray();

return Tuple.Create(vals ?? [] , max);

}
}

9 changes: 9 additions & 0 deletions src/NetPackageAnalyzer/Statistical/Statistical.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

</Project>

0 comments on commit b9913d0

Please sign in to comment.