2017-10-25 14 views
1

사람들의 나이를 묘사하는 더러운 데이터가 있습니다. 간격은 I 아래 그래프는 데이터를 표시일부 데이터를 특정 배포판 다음에 임의로 생성 된 숫자로 바꿉니다.

df_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x)<=1 else x) 
df_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x)>=100 else x) 

하여 값을 변경해야 -7000에서 2015이다.

enter image description here

I는 -99999

enter image description here

방법 I 번째 그림과 같이 분포에 영향을주지 않고 -99999의 값을 대체 할 수있는 값을 제외하여 그래프를 플롯? 나이는 15-50 세이며, 평균은 약 29 세이며 생년월일의 중앙값 = 28.0입니다. 나는 15-50 사이의 임의의 숫자를 생성하려고 계획하고 있지만 원래 배포판을 파괴 할까 걱정입니다.

+0

numpy에서 사용 가능한 배포판의 위치 및 배율 매개 변수를 살펴 보셨습니까? 예를 들어'np.normal '에 대한 [docs] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html#numpy.random.normal)를 살펴보십시오. 무작위'. – ChuHo

+0

음, 실제로 배포를 변경 하시겠습니까? outlier -99999가 포함 된 분포는 오류가 있으며 실제로 샘플에서 발견 된 실제 실제 값을 나타내지 않습니다. 그냥 버리고 재 계산하면 올바른 옵션처럼 보입니다. 원래의 데이터를 유지하는 데 어려움을 겪고 있다면 오류가있는 분포는 그래프의 X 축을 기본 데이터를 변경하는 대신 -99999 이전에 멈추도록 변경하십시오. – Dylan

+0

@Dylan 몇 가지 분류 작업을 수행하므로 나이 열을 버려야합니다. 오류가 있거나 해당 값을 임의의 값으로 대체 할 수 있습니다.이 값은 해당 오류 데이터가없는 모양으로 유지됩니다. –

답변

0

https://stats.stackexchange.com/questions/78063/replacing-outliers-with-mean

이 일반적으로 수행되지 않는 이유에 빠른 뇌관. 관계없이 :

샘플 평균 및 표준 편차를 기준으로 numpy.random.normal 값으로 새 값을 생성하고 우리가 선택한 값을 초과하는 값을 새로운 "임의의 정상"샘플로 바꿉니다.

df_members['bd'] = df_members.bd.apply(lambda x: np.rint((np.random.normal(bd_mean, bd_sd))) if x==-999999 else x) 

"x == - 99999"를 바꾸려면 교체 할 물건을 찾는 데 필요한 로직을 수정하십시오.

그래서, bd_mean 및 bd_sd는 인라인 계산 될 수있다

df_members['bd'] = df_members.bd.apply(lambda x: np.rint((np.random.normal(df_members.bd.mean(),df_members.bd.std())) if x>9999999 else x)) 

당신이 그에게 비 정규 분포를 경험하는 경우에 다양한 샘플 종류가 있습니다! 여기에서보세요 : https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.random.html

편집 해 주셔서 감사합니다!

+0

코드는 모든 행에 임의의 값을 하나 이상 할당합니다> 90, 어떤 아이디어가 그들 자신의 무작위 값을 갖는지? –

+0

예! 나는 위의 답을 편집 할 것입니다. – Dylan