私は量的変数(例えば価格)を分類しています。平均値の周りでビンがずっと頻繁になるように分類したいと思います平均から。パンダのデータフレームの列カット - 平均値の周りにもっと多くのビンを追加します
私は、直線的な方法でnumpy.logspaceのおかげで対数的にcut()する可能性があることを知りましたが、平均値をビニングすることは無効であると思われています。非効率的な。
私は量的変数(例えば価格)を分類しています。平均値の周りでビンがずっと頻繁になるように分類したいと思います平均から。パンダのデータフレームの列カット - 平均値の周りにもっと多くのビンを追加します
私は、直線的な方法でnumpy.logspaceのおかげで対数的にcut()する可能性があることを知りましたが、平均値をビニングすることは無効であると思われています。非効率的な。
あなたは直線的にサイズが大きくビン作ることができます。
import numpy as np
def make_progressive_bins(min_x, max_x, mean_x, num_bins=10):
x_rel_lim = max(mean_x - min_x, mean_x - max_x)
num_bins_half = num_bins // 2
bins_right = np.arange(0, num_bins_half + 1)
if num_bins % 2 == 1:
bins_right = bins_right + 0.5
bins_right = np.cumsum(bins_right)
bins = np.concatenate([-bins_right[bins_right > 0][::-1], bins_right])
bins = bins * (float(x_rel_lim)/bins[-1]) + mean_x
return bins
をそしてあなたが好きそれを使用することができます。
import numpy as np
import matplotlib.pyplot as plt
bins = make_progressive_bins(-20, 50, 10, 15)
plt.bar(bins - 0.1, np.ones_like(bins), 0.2)
達成したいスクリプトを作成しましたが、作成した切り抜きオブジェクトをヒストグラムに変換してどのようにしたいかを確認する方法がわからないので、確認して教えてください私はそれが動作する場合:)
# Make normally distributed price with mean 50.
df = pd.DataFrame(data=np.random.normal(50, size=1000), columns=['price'])
df.hist(bins=30)
num_bins = 100
# I used a square function to distribute the bins more around 0 and
# less at the outskirts of the range.
shape_func = lambda x: x**2
bin_loc = [shape_func(i) for i in range(num_bins//2)]
mirrored_bin_loc = [-x for x in bin_loc[::-1]]
bin_loc = mirrored_bin_loc + bin_loc[1:]
# Rescale and translate bins
data_mean = df.price.mean()
data_range = df.price.max() - df.price.min()
final_bin_loc = [(x + data_mean)/(data_range * num_bins) for x in bin_loc]
# display(final_bin_loc)
binned = pd.cut(df.price, bin_loc)
同じことをしているようですが、df.column.min()の反対側にある負の値(値)を削除して、0の周りではなく平均の周りに中央の場所を置きます。 – st6mm
どのようにカット作品見当もつかないが、線形オプションが機能するように、おそらく0の周りのデータセット全体を変換できますか? – Skirrebattie
標準化またはスケーリングを意味しますか?以前と同じ結果が得られますか?正規分布のために非常に人気のあるカテゴリを持つ。 – st6mm
私は以下の答えで意味したことを実行しようとしました。これがあなたの望むものなのかどうかは分かりませんが、あなたの目的のためにはうまくいくでしょう! – Skirrebattie