Pythonで棒グラフのスキュー/尖度を決定する効率的な方法は何ですか? 棒グラフが (ヒストグラムとは異なり) ビニングされていないことを考えると、この質問はあまり意味がありませんが、私がやろうとしているのは、(頻度とビンではなく) グラフの高さと距離の対称性を判断することです。言い換えると、距離 (x) に沿って測定された高さ (y) の値が与えられると、つまり
y = [6.18, 10.23, 33.15, 55.25, 84.19, 91.09, 106.6, 105.63, 114.26, 134.24, 137.44, 144.61, 143.14, 150.73, 156.44, 155.71, 145.88, 120.77, 99.81, 85.81, 55.81, 49.81, 37.81, 25.81, 5.81]
x = [0.03, 0.08, 0.14, 0.2, 0.25, 0.31, 0.36, 0.42, 0.48, 0.53, 0.59, 0.64, 0.7, 0.76, 0.81, 0.87, 0.92, 0.98, 1.04, 1.09, 1.15, 1.2, 1.26, 1.32, 1.37]
距離(x)で測定した高さ(y)分布(歪度)とピークネス(尖度)の対称性は何ですか? 歪度/尖度は、実際の値の正規分布を決定するための適切な測定値ですか? それとも、scipy/numpy はそのタイプの測定に似たものを提供していますか?
次のようにして、距離 (x) に沿ってビニングされた高さ (y) の頻度値のスキュー/尖度の推定値を達成できます。
freq=list(chain(*[[x_v]*int(round(y_v)) for x_v,y_v in zip(x,y)]))
x.extend([x[-1:][0]+x[0]]) #add one extra bin edge
hist(freq,bins=x)
ylabel("Height Frequency")
xlabel("Distance(km) Bins")
print "Skewness,","Kurtosis:",stats.describe(freq)[4:]
Skewness, Kurtosis: (-0.019354300509997705, -0.7447085398785758)
この場合、高さの分布は中点距離の周りで対称的 (スキュー 0.02) であり、広角 (-0.74 尖度、つまり広い) 分布によって特徴付けられます。
x の各値に高さ y を掛けて頻度を作成することを考慮すると、結果リストのサイズが非常に大きくなることがあります。この問題にアプローチするためのより良い方法があるかどうか疑問に思っていましたか? データセットのスキュー/尖度に関する情報をあまり失うことなく、データセット y をおそらく 0 ~ 100 の範囲に正規化することをいつでも試みることができると思います。