python - 带有对数轴的 Pandas 直方图

标签 python numpy pandas histogram

我有一个以秒为单位的时间长度数据的 pandas DataFrame。长度从几秒到几个月不等,因此在记录日志后绘制直方图很方便,因为它可以更好地覆盖范围。这是一个示例代码

%matplotlib inline
import numpy as np
import pandas as pd

x=np.random.lognormal(mean=10, sigma=1, size=10000)
df=pd.DataFrame(x, range(10000), columns=['timeLength'])

np.log10(df.timeLength).hist()

但是,x 轴上的标签是对数标度的。有没有办法将它们设置为 10^1 等等。或者更好,如果我可以将它们表示为 1 秒、10 秒、1 分钟、10 分钟、1 小时、1 天等等。

最佳答案

非均匀直方图

而不是记录值,

np.log10(df.timeLength)

在计算直方图时尝试创建非均匀分箱。这可以通过 np.histogram's bins argument 来完成.

基于

if I could put them as 1 second, 10 seconds, 1 minute, 10 minute, 1 hours, 1 day and so on.

可以创建以下bin数组

# Bin locations (time in seconds)
bins = np.array([0, 1, 10, 60, 60*10, 60*60, 24*60*60])

例子

原始数据集被扩大以填充更多的 bins(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]

non-uniform bin histogram

如果这不是预期的结果,请告知。

关于python - 带有对数轴的 Pandas 直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857689/

相关文章:

python - 从 subprocess.communicate() 读取流输入

python - 如何在 python 中按两列对 csv 文件进行排序?

python - Pandas 中的日期到持续时间

python - 如何在numpy中沿轴执行外减法

python - 使用 Scikit-learn 使用日期变量进行回归

python - 如何删除指定行的 Pandas 数据框

python - 是什么导致 Pandas 出现 "indexing past lexsort depth"警告?

python - “元组”对象没有属性 'layer'

python - 使用静态 openssl 构建 Python

python - 厄米特矩阵的特征向量