非均匀 Bin 直方图
而不是记录值,
np.log10(df.timeLength)
在计算直方图时尝试创建非均匀分箱。这可以通过np.histogram's bins argument 来完成。
基于
如果我可以将它们设为 1 秒、10 秒、1 分钟、10 分钟、1 小时、1 天等等。
可以创建以下 bin 数组
# Bin locations (time in seconds)
bins = np.array([0, 1, 10, 60, 60*10, 60*60, 24*60*60])
示例
原始数据集被放大以填充更多的 bin(mean=5, sigma=2 而不是 mean=10, sigma=1),这仅是示例。定义非均匀箱,计算直方图并显示绘图。例如,这些垃圾箱可能会被更改。
# Create random data in DataFrame
x = np.random.lognormal(mean=5, sigma=2, size=10000)
df = pd.DataFrame(x, columns=['timeLength'])
print df.describe()
print
# Create non-uniform bins. Unit in seconds.
bins = np.array([0, 1, 10, 60, 60*10, 60*60, 24*60*60])
print 'hisogram bins:', bins
# Get histogram of random data
y, x = np.histogram(df, bins=bins, normed=True)
# Correct bin placement
x = x[1:]
# Turn into pandas Series
hist = pd.Series(y, x)
# Plot
ax = hist.plot(kind='bar', width=1, alpha=0.5, align='center')
ax.set_title('Non-Uniform Bin Histogram')
ax.set_xlabel('Time Length')
ax.set_xticklabels(['1 s', '10 s', '1 Min', '1 Hr', '1 Day', '>1 Day'], rotation='horizontal')
timeLength
count 10000.000000
mean 1014.865417
std 4751.820312
min 0.062893
25% 36.941388
50% 144.081235
75% 556.223797
max 237838.467337
hisogram bins: [ 0 1 10 60 600 3600 86400]
如果这不是预期的结果,请告知。