2017-12-12 31 views
1

평균 람다식이 정확히 작동하지만 찾을 수없는 방법을 검색했습니다.중립적 인 특정 데이터의 평균을 계산하십시오.

내 문제는 : 나는 다른 방식으로 표현되는 감정 분류가 있습니다. 예를 들어, 긍정적 인 문장은 0보다 큰 수로 표현됩니다. 1에서 무한 (1, 2, 5, 100 ....) 일 수 있고 부정적인 문장은 같은 방식이지만 숫자가 <이고 0 (-1, -2 .....) - 나는 그것을 표현하는 더 좋은 방법이 아니라는 것을 압니다.

그리고 긍정적 인 발생 평균을 계산해야합니다. SOF에 관한 모든 질문에 대한 답은 여기에서 찾았습니다. 모든 값을 합산하고 평균으로 나누면 총계로 나눕니다. 괜찮아.

예를 들어, 11 개의 문장이 있고 10 개가 값 = 1 인 경우 (합계 = 10), 값이 -10 인 하나의 문장이 음수 일 때 평균은 10-10/11 = 0이됩니다.

var average = context.CatchDetails.Where(x => x.Monitoring.Client.Id == custmrid 
      && x.Data.published >= datai2 
      && x.Data.published <= dataf2 
      && x.Monitoring.id == monitoring).ToList().Average(y => y.Sentiment); 

내가하고있는 것은 모든 긍정적 인 문장을 취하여 전체 문장 (수)으로 나눈 것입니다. 예 : 11 =
긍정 카운트

총 개수 = 90,90 % 개의 사건 10

11분의 10 = 0.9090.

var positive = context.CatchDetails.Count(x => (x.Monitoring.Client.Id == custmrid) 
      && x.Data.published >= datai2 && x.Data.published <= dataf2 
      && x.Monitoring.id == monitoring 
      && x.Sentiment > 0); 

var total = context.CatchDetails.Count(x => (x.Monitoring.Client.Id == custmrid) 
      && x.Data.published >= datai2 && x.Data.published <= dataf2 
      && x.Monitoring.id == monitoring); 

double mediaPositive = ((double)positive/(double)total); 

이렇게 할 가능성이 더 있습니까?

검색은 :

How to get words average length using Lambda Expression

Getting an average from a C# array

+0

왜 u는 단순히 항목의 숫자로 모든 긍정적이고 부정적인 값의 합계를 분할하지 않습니다

var count = data.Count(); var total = data.Select(x => x.Sentiment > 0).Sum(x => x.Sentiment); // Avoid divide by zero if no data... var avg = count > 0 ? total/count : defaultValue; 

그러나, 당신은 단지 두 개의 서로 다른 수를 원하는 것? – dotNET

답변

1

당신은 또 다른 하나의 LINQ 연산자에서 전달 된 데이터를 조작 할 수 있습니다

var avg = data.Select(x => x.Sentiment > 0 ? x.Sentiment : 0) 
       .Average(); 

그래서 0으로 모든 음의 값을 취급합니다.

일부 항목의 값만 무시하고 개수에 포함 시키려면 평균 계산을 직접 수행해야합니다.

var totalCount = data.Count(); 
var positiveCount = data.Select(x => x.Sentiment > 0).Count(); 
// Ignore totalCount == 0! But force floating point calc. 
var res = (double)positiveCount/totalCount; 
+0

감사합니다. 한 LINQ 연산자에서 다른 LINQ 연산자로 전달 된 데이터를 조작 할 수 있다는 것을 알지 못했습니다. 내 문제를 해결했다. –