2014-11-19 2 views
1

저는 CSV가 약 400,000이고 "점수가 매겨진"행은 1부터 10까지의 선형 분포로 점수를 다시 채우고 5 자리 소수로 반올림됩니다. (위에서부터 행 [0] 열은 10, 9.999997, 9.999995 등입니다.)무작위 분포가 평균 파이썬에 맞게

목록에서 평균 스코어 Y의 X 행을 가져 오는 스크립트를 만들고 싶습니다.

내 기대는 종 모양과 같습니다. X 및/또는 Y 값이 낮거나 높은 경우 어색하거나 불가능할 수도 있지만 평균 점수가 10,000 행 인 경우 매우 낮은 점수에서는 '소수'가 있어야하고 분포를 원활하게하려면 점수가 충분해야합니다.

처음으로 행 [0]의 값을 숫자 목록에로드하고 7의 목표를 향해 숫자 별 근사치를 적용하여 숫자를 다른 목록에 채운 다음 그 목록을 사용하여 CSV를 통해 돌아가서 row [0]이 output_list, out_writer ([row])에 있으면 그러나 추측에 의한 단계적 수학은 아마도 매우 비효율적이며 어떤 라이브러리가 나를 도울 수 있는지 알지 못합니다.

입력과 같이 보인다 :

Score  Name 
10.0  foo 
9.99997 bar 
9.99995 stuff 
9.99992 thing 
9.9999 other 

내가 입력 할 수 있도록하려면

큰 변수 X와 그와 같은 입력 파일에서 점수 Y 출력 X 행의 CSV 자신의 평균은 Y 다. 물론 (물론 그렇지 않으면 입력 파일에서 목표 점수의 양쪽에 X/2 행을 얻을 수 있습니다!) - 더 넓은 분포가 선호됩니다.

이상적으로, 나는 비대칭 적 분포를 허용하는 해결책을 발견 할 것이다. 예를 들어, 평균을 9.0으로하는 100 개의 숫자를 원한다면, 9.0을 초과하는 20 개의 숫자가 1.0에 대응할 것으로 예상됩니다. 확실하게 그것은 지저분해질 수있다. 그러나 나는 또한 1.0이 1/20 일 것으로 예상한다.

+0

이 연습을 위해 작은 샘플 입력 및 예제 출력을 만들 수 있습니까? 내 짐작으로는 "마법"을 사용하는 몇 가지 방법이 있습니다.하지만이 방법은 익숙하지 않습니다. –

+1

아마도 ''numpy.random.normal' (http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html)과 같은 것을 원할 것입니다. 임의의 샘플을 그리고 데이터 세트에서 가장 가까운 샘플을 가져옵니다. –

+0

그것은 내가 원하는 것처럼 보입니다. 그것은 최소값과 최대 값을 가지고 있지 않습니다 - 내 걱정은 항상 대칭 곡선을 그리게된다는 것입니다. 따라서 평균 7 점을 원한다면 4 점 미만의 모든 점을 깎아 내릴 수 있습니까? ((10-X)/3의 표준 편차, 4 - 10에 대해 -3.0으로 끝나는 경우) numpy.random.normal을 나의 필요에 어떻게 적응 시키나요? – Xodarap777

답변

1

발견 된 scipy.stats.truncnorm은 법안에 맞을 것으로 보입니다. 표준 정규 곡선에서 변환 할 작은 래퍼 쓰기 및 꽤 잘 작동합니다.

from scipy.stats import truncnorm 

def my_norm(start, end, mean=0, sdev=1, size=None): 
    a = (start - mean)/sdev 
    b = (end - mean)/sdev 
    rv = truncnorm(a, b) 
    return rv.rvs(size)*sdev + mean 

약간의 표준 편차 (sdev)로 재생하십시오. 가장 가까운 가장자리로부터 1/3 거리가 안전한 내기가 될 것 같습니다 (예 : Y == 8이면 sdev = (10-8)/3).

+0

이것은 작동합니다. 쉽게 상자 밖으로 실행하고 매우 빠릅니다. 이상적으로는, 나는 비대칭 적 분포를 허용하는 해결책을 발견 할 것이다. 예를 들어, 평균을 9.0으로하는 100 개의 숫자를 원한다면, 9.0을 초과하는 20 개의 숫자가 1.0에 대응할 것으로 예상됩니다. 확실하게 그것은 지저분해질 수있다. 그러나 나는 또한 1.0이 1/20 일 것으로 예상한다. – Xodarap777