2017-10-25 10 views
1

人の年齢を表すいくらかの汚いデータがあります。間隔は-7000から2015までです。私は値を変更しました。いくつかのデータを、特定の分布に従うランダムに生成された数値に置き換えてください。

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) 

次のグラフはデータを示しています。

enter image description here

私は、第2の画像のように、私は分布に影響を与えることなく、-99999の値を交換するにはどうすればよい-99999

enter image description here

ある値を除外することで、グラフをプロット?年齢は15〜50歳で平均は約29、生年月日の中央値は28.0です。私は15-50の間で乱数を生成する予定ですが、私は元の分布を破壊することを心配しています。

+0

あなたがnumpyので利用可能なディストリビューションの場所と規模のパラメータを見たことがありますか?例えば、 'np.normalため[ドキュメント](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html#numpy.random.normal)を見てみましょう。ランダム。 – ChuHo

+0

実際、配布を変更したくないのですか?外れ値-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

秒で答えを書きますか? –

+0

はい!私は上記の答えを編集します。 – Dylan

関連する問題