123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- using Azure;
- using Bogus;
- using HTEX.Test.Service;
- using MathNet.Numerics;
- using System;
- using System.Configuration;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Text.RegularExpressions;
- using TEAMModelOS.SDK;
- using TEAMModelOS.SDK.DI;
- using TEAMModelOS.SDK.Extension;
- using TEAMModelOS.SDK.Models;
- using TEAMModelOS.SDK.Models.Cosmos.Student;
- using static HTEX.Test.Controllers.LessonRecordController;
- using static Microsoft.Azure.Amqp.Serialization.SerializableType;
- using static System.Runtime.InteropServices.JavaScript.JSType;
- namespace HTEX.Test
- {
- public class Program
- {
- public static void Main(string[] args)
- {
- Test();
- var builder = WebApplication.CreateBuilder(args);
- // Add services to the container.
- builder.Services.AddControllers();
- builder.Services.AddAzureStorage(builder.Configuration.GetValue<string>("Azure:Storage:ConnectionString"));
- builder.Services.AddAzureRedis(builder.Configuration.GetValue<string>("Azure:Redis:ConnectionString"));
- builder.Services.AddAzureCosmos(builder.Configuration.GetValue<string>("Azure:Cosmos:ConnectionString"));
- builder.Services.AddAzureServiceBus(builder.Configuration.GetValue<string>("Azure:ServiceBus:ConnectionString"));
- builder.Services.AddAzureSignalR(builder.Configuration.GetValue<string>("Azure:SignalR:ConnectionString"));
- builder.Services.AddSnowflakeId(Convert.ToInt64(builder.Configuration.GetValue<string>("Option:LocationNum")), 1);
- builder.Services.AddHttpClient();
- var app = builder.Build();
- // Configure the HTTP request pipeline.
- app.UseHttpsRedirection();
- app.UseAuthorization();
- app.MapControllers();
- app.Run();
- }
- public static string Test2()
- {
- // 创建一个包含三万个元素的数组
- int[] data = Enumerable.Range(1, 30000).Select(i => new Random().Next(1, 31)).ToArray();
- // 设置聚类的数量
- int k = 2;
- // 初始化质心,可以选择数据中的k个随机点作为初始质心
- List<int> centroids = new List<int>();
- Random rand = new Random();
- for (int i = 0; i < k; i++)
- {
- centroids.Add(rand.Next(1, 31));
- }
- centroids.Sort(); // 对质心进行排序以避免重复
- Dictionary<int, List<int>> clustersD= new Dictionary<int, List<int>>();
- // 迭代次数
- int maxIterations = 100;
- for (int iteration = 0; iteration < maxIterations; iteration++)
- {
- // 将数据点分配给最近的质心
- Dictionary<int, List<int>> clusters = new Dictionary<int, List<int>>();
- foreach (int point in data)
- {
- int nearestCentroid = centroids.OrderBy(c => Math.Abs(point - c)).First();
- if (!clusters.ContainsKey(nearestCentroid))
- {
- clusters[nearestCentroid] = new List<int>();
- }
- clusters[nearestCentroid].Add(point);
- }
- // 更新质心位置
- List<int> newCentroids = new List<int>();
- foreach (KeyValuePair<int, List<int>> cluster in clusters)
- {
- int sum = cluster.Value.Sum();
- int count = cluster.Value.Count;
- int newCentroid = sum / count; // 计算均值
- newCentroids.Add(newCentroid);
- // 输出当前聚类的信息
- Console.WriteLine($"Cluster with centroid {cluster.Key}:");
- Console.WriteLine($"Min: {cluster.Value.Min()}, Max: {cluster.Value.Max()}, Average: {sum / count}");
- }
- // 检查质心是否改变
- newCentroids.Sort();
- clustersD=clusters;
- if (newCentroids.SequenceEqual(centroids))
- {
-
- break;
- }
- centroids = newCentroids;
- }
- return "";
- }
- public static string Test()
- {
-
- string jsons = System.IO.File.ReadAllText( $"F:\\lesson-local\\analysis.json");
- LessonDataAnalysis lessonDataAnlysis = jsons.ToObject<LessonDataAnalysis>();
- var n = 5;
- //聚类分数量大和数量小的类群。判断当前出题数在两个类群的最大范围内,再取其质心。
- var m = n<=lessonDataAnlysis.clustersInteract.First().Value.Max() ? lessonDataAnlysis.clustersInteract.First().Value: lessonDataAnlysis.clustersInteract.Last().Value;
- var persent = GetPersent(lessonDataAnlysis.interactNormal, n);
- //Console.WriteLine(persent);
- return "Hello World!";
- }
- static bool[] MarkAnomalies(List<int> array)
- {
- if (array.Count == 0) return new bool[0];
- double average = array.Average();
- double variance = array.Average(x => Math.Pow(x - average, 2));
- double standardDeviation = Math.Sqrt(variance);
- // 定义异常值的阈值,这里使用2倍标准差
- double threshold =3* standardDeviation;
- bool[] anomalies = new bool[array.Count];
- for (int i = 0; i < array.Count; i++)
- {
- double deviation = Math.Abs(array[i] - average);
- anomalies[i] = deviation > threshold;
- }
- return anomalies;
- }
-
-
-
- /// <summary>
- /// 计算当前元素在集合中超过了多少百分比的值
- /// </summary>
- /// <param name="nums"></param>
- /// <param name="curr"></param>
- /// <returns></returns>
- public static double GetPersent(IEnumerable<double> nums, int curr)
- {
- int count = 0;
- foreach (var op in nums.OrderBy(x => x))
- {
- if (op < curr)
- {
- count++;
- }
- else if (op == curr)
- {
- count++;
- }
- else
- {
- break;
- }
- }
- return count *1.0/ nums.Count() * 100;
- }
- public class KeyCount
- {
- public int count { get; set;}
- public int key { get; set;}
- }
- class WeightedItem
- {
- public int Value { get; set; }
- public double Weight { get; set; }
- }
- }
- }
|