Program.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using Azure;
  2. using Bogus;
  3. using HTEX.Test.Service;
  4. using MathNet.Numerics;
  5. using System;
  6. using System.Configuration;
  7. using System.Diagnostics;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Reflection;
  11. using System.Text.RegularExpressions;
  12. using TEAMModelOS.SDK;
  13. using TEAMModelOS.SDK.DI;
  14. using TEAMModelOS.SDK.Extension;
  15. using TEAMModelOS.SDK.Models;
  16. using TEAMModelOS.SDK.Models.Cosmos.Student;
  17. using static HTEX.Test.Controllers.LessonRecordController;
  18. using static Microsoft.Azure.Amqp.Serialization.SerializableType;
  19. using static System.Runtime.InteropServices.JavaScript.JSType;
  20. namespace HTEX.Test
  21. {
  22. public class Program
  23. {
  24. public static void Main(string[] args)
  25. {
  26. Test();
  27. var builder = WebApplication.CreateBuilder(args);
  28. // Add services to the container.
  29. builder.Services.AddControllers();
  30. builder.Services.AddAzureStorage(builder.Configuration.GetValue<string>("Azure:Storage:ConnectionString"));
  31. builder.Services.AddAzureRedis(builder.Configuration.GetValue<string>("Azure:Redis:ConnectionString"));
  32. builder.Services.AddAzureCosmos(builder.Configuration.GetValue<string>("Azure:Cosmos:ConnectionString"));
  33. builder.Services.AddAzureServiceBus(builder.Configuration.GetValue<string>("Azure:ServiceBus:ConnectionString"));
  34. builder.Services.AddAzureSignalR(builder.Configuration.GetValue<string>("Azure:SignalR:ConnectionString"));
  35. builder.Services.AddSnowflakeId(Convert.ToInt64(builder.Configuration.GetValue<string>("Option:LocationNum")), 1);
  36. builder.Services.AddHttpClient();
  37. var app = builder.Build();
  38. // Configure the HTTP request pipeline.
  39. app.UseHttpsRedirection();
  40. app.UseAuthorization();
  41. app.MapControllers();
  42. app.Run();
  43. }
  44. public static string Test2()
  45. {
  46. // 创建一个包含三万个元素的数组
  47. int[] data = Enumerable.Range(1, 30000).Select(i => new Random().Next(1, 31)).ToArray();
  48. // 设置聚类的数量
  49. int k = 2;
  50. // 初始化质心,可以选择数据中的k个随机点作为初始质心
  51. List<int> centroids = new List<int>();
  52. Random rand = new Random();
  53. for (int i = 0; i < k; i++)
  54. {
  55. centroids.Add(rand.Next(1, 31));
  56. }
  57. centroids.Sort(); // 对质心进行排序以避免重复
  58. Dictionary<int, List<int>> clustersD= new Dictionary<int, List<int>>();
  59. // 迭代次数
  60. int maxIterations = 100;
  61. for (int iteration = 0; iteration < maxIterations; iteration++)
  62. {
  63. // 将数据点分配给最近的质心
  64. Dictionary<int, List<int>> clusters = new Dictionary<int, List<int>>();
  65. foreach (int point in data)
  66. {
  67. int nearestCentroid = centroids.OrderBy(c => Math.Abs(point - c)).First();
  68. if (!clusters.ContainsKey(nearestCentroid))
  69. {
  70. clusters[nearestCentroid] = new List<int>();
  71. }
  72. clusters[nearestCentroid].Add(point);
  73. }
  74. // 更新质心位置
  75. List<int> newCentroids = new List<int>();
  76. foreach (KeyValuePair<int, List<int>> cluster in clusters)
  77. {
  78. int sum = cluster.Value.Sum();
  79. int count = cluster.Value.Count;
  80. int newCentroid = sum / count; // 计算均值
  81. newCentroids.Add(newCentroid);
  82. // 输出当前聚类的信息
  83. Console.WriteLine($"Cluster with centroid {cluster.Key}:");
  84. Console.WriteLine($"Min: {cluster.Value.Min()}, Max: {cluster.Value.Max()}, Average: {sum / count}");
  85. }
  86. // 检查质心是否改变
  87. newCentroids.Sort();
  88. clustersD=clusters;
  89. if (newCentroids.SequenceEqual(centroids))
  90. {
  91. break;
  92. }
  93. centroids = newCentroids;
  94. }
  95. return "";
  96. }
  97. public static string Test()
  98. {
  99. string jsons = System.IO.File.ReadAllText( $"F:\\lesson-local\\analysis.json");
  100. LessonDataAnalysis lessonDataAnlysis = jsons.ToObject<LessonDataAnalysis>();
  101. var n = 5;
  102. //聚类分数量大和数量小的类群。判断当前出题数在两个类群的最大范围内,再取其质心。
  103. var m = n<=lessonDataAnlysis.clustersInteract.First().Value.Max() ? lessonDataAnlysis.clustersInteract.First().Value: lessonDataAnlysis.clustersInteract.Last().Value;
  104. var persent = GetPersent(lessonDataAnlysis.interactNormal, n);
  105. //Console.WriteLine(persent);
  106. return "Hello World!";
  107. }
  108. static bool[] MarkAnomalies(List<int> array)
  109. {
  110. if (array.Count == 0) return new bool[0];
  111. double average = array.Average();
  112. double variance = array.Average(x => Math.Pow(x - average, 2));
  113. double standardDeviation = Math.Sqrt(variance);
  114. // 定义异常值的阈值,这里使用2倍标准差
  115. double threshold =3* standardDeviation;
  116. bool[] anomalies = new bool[array.Count];
  117. for (int i = 0; i < array.Count; i++)
  118. {
  119. double deviation = Math.Abs(array[i] - average);
  120. anomalies[i] = deviation > threshold;
  121. }
  122. return anomalies;
  123. }
  124. /// <summary>
  125. /// 计算当前元素在集合中超过了多少百分比的值
  126. /// </summary>
  127. /// <param name="nums"></param>
  128. /// <param name="curr"></param>
  129. /// <returns></returns>
  130. public static double GetPersent(IEnumerable<double> nums, int curr)
  131. {
  132. int count = 0;
  133. foreach (var op in nums.OrderBy(x => x))
  134. {
  135. if (op < curr)
  136. {
  137. count++;
  138. }
  139. else if (op == curr)
  140. {
  141. count++;
  142. }
  143. else
  144. {
  145. break;
  146. }
  147. }
  148. return count *1.0/ nums.Count() * 100;
  149. }
  150. public class KeyCount
  151. {
  152. public int count { get; set;}
  153. public int key { get; set;}
  154. }
  155. class WeightedItem
  156. {
  157. public int Value { get; set; }
  158. public double Weight { get; set; }
  159. }
  160. }
  161. }