2016-11-24 1 views
-2

植物の病気の重症度は0(無病)〜10(重度の病気)の範囲内で与えられる。例えば、いくつかの12の植物は、それらの疾患のレベルを有するとして同じものを別の方法を使用してPythonでデータを10ポイントの範囲スケールに変換するには?

(1.7、3.7、5.3、7.3、2.3、3.7、5.7、7.3、1、4、5.7、6.7)

植物は、以下の値を割り当てられています。

(186.6377、207.7993、179.8552、225.7226、212.0066、215.8321、218.337、199.9707、179.5959、203.2275、212.2286、212.5489)

私は値の第2セットを変換することができますどのように各プラントに割り当てられた値を比較するために0〜10のスケール? 私が見た最も近いものは、the scale function. Unfortunately, it deals with ranges of 0 to 1

+0

0-10のスケールを使用していますが、その範囲外のデータを表示しています。もしあなたがこのプログラムがこれらの値をどのように変換すると期待しているかの例を挙げたら? –

+4

「レンジ0〜1」の結果に10を掛けます。 –

+1

'' ds'は病気の重症度データで、 '[10 * x/ds] 'のようなものはどうですか? – Mohammad

答えて

0

です。それぞれを平均して、それを乗算して10までスケールします。

set2 = [186.6377, 207.7993, 179.8552, 225.7226, 212.0066, 215.8321, 218.337, 199.9707, 179.5959, 203.2275, 212.2286, 212.5489] 

cset2 = [10*x/max(set2) for x in set2] 

cset2の内容は?例えば

def convert(x,a,b,c=0,d=1): 
    """converts values in the range [a,b] to values in the range [c,d]""" 
    return c + float(x-a)*float(d-c)/(b-a) 

[8.268454288582534, 
9.205958995687627, 
7.967974850546644, 
10.0, 
9.392351496925873, 
9.561829431346263, 
9.672801925903741, 
8.859135062240112, 
7.95648729901215, 
9.003418355096032, 
9.40218657768429, 
9.41637656131907] 
+0

これは 'max(set2)'が可能な限り高い値であることを前提としています。 ** 225.7226 **より大きい値を持つプラントを持っているとどうなりますか? – Gathide

+0

@Gathideドメインの最大値である 'maxd'が分かっていれば、' max2 'を 'maxd'に置き換えることができます。最大値が分からない場合は、 'maxd = max(set2)+ numpy.std(set2)'を作成し、将来この最大値を上回る値があれば、最大スケール10すべての場合、最大値を基準に設定するのはあなた次第です。 (ロジスティックシグモイド(https://en.wikipedia.org/wiki/Logistic_function)を試しても構いませんが、それはあなた次第です)。 –

0

あなたは、変換関数を作ることができ

>>> convert(215.8321,170,230,0,10) 
7.638683333333333 

(自分の問題に与えられていない最小/最大値、で170230を置き換えます説明)。

+1

値の第2のセットには既知の最小値も最大値もありません。 – Gathide

+2

@Gathideもしそれらが一様に分布していると仮定しても、最大値に対する不偏推定量は(n + 1)/ n *(サンプル最大値)であるが、 nは標本サイズであり、同様にminについてである。しかし、いくつかの前提がなければ、意味のあるリンゴを無意味なオレンジに変える危険があります。 –

+0

それは、私が望んだ変換を考える前に、2番目のセットに対応する最大値と最小値を得るように努力すべきであることを意味します。 – Gathide

関連する問題