使用Python进行直方图生成与调整技巧
直方图绘制的基础
在数据分析和科学计算中,直方图是一种常见的可视化工具,它通过柱状的方式展示了数据集中的值分布情况。Python 提供了多种库来实现直方图绘制,比如matplotlib和seaborn等。这些库不仅可以快速生成直方图,还能提供丰富的定制选项,使得我们能够根据实际需求对直方图进行细致调整。
Python 中创建直方图
要开始创建一个简单的直方图,我们首先需要导入所需的库。在Python中,可以使用以下代码片段:
import numpy as np
import matplotlib.pyplot as plt
接下来,我们假设已经有了一个数值数组data,然后可以使用plt.hist()函数来直接生成一个基本的直方图:
# 假设 data 是包含一些数字的一个数组。
data = np.random.randn(1000) # 产生一组随机数
plt.hist(data, bins=30, alpha=0.5, color='blue', edgecolor='black')
plt.title('Histogram Example')
plt.xlabel('Value Range')
plt.ylabel('Frequency')
plt.show()
这里,bins=30表示分成30个箱子,每个箱子的宽度自动确定;alpha=0.5设置透明度;而边缘颜色则是黑色。
调整直方图参数
除了上述基本参数之外,我们还可以进一步定制我们的histogram。例如,要更改每个箱子的宽度,可以通过改变bins数量或指定bin范围:
# 使用指定bin范围:
bin_edges = np.linspace(-4, 4, 20)
hist_data = plt.hist(data, bins=bin_edges)
# 或者修改bins数量:
custom_bins = [i for i in range(-4,-3)]
custom_hist_data = plt.hist(data,bins=custom_bins)
此外,如果我们想更精细地控制每个条形(bar)的高度,可以利用返回值中的相关信息:
# 获取每个bar对应于数据点频率:
x_values = hist_data[1][:-1] # x轴上的各区间中心点
bars_heights = hist_data[0] # 各区间出现次数,即y轴上的条形高度
for i in range(len(x_values)):
print(f'Bar at {x_values[i]} has height of {bars_heights[i]}')
这样就可以看到每个条形对应哪些具体数据,并且它们出现多少次。
直接操作原始数据:手动制作累积曲线与概率密度估计曲线(KDE)
除了直接显示频率之外,我们还可以将单独观察到的事件转换为累积概率。这对于理解某些类型的情况特别有用,如在风险评估时。
累积概率也称作“累积分布函数”(CDF),它描述的是小于或等于给定值发生事件概率。而另一方面,“密度估计”曲线,则用于揭示特定区域内不同类别对象被发现的可能性,这在许多领域都很重要,比如生物统计学、经济学以及社会科学等领域。
要获得累积概率,你只需从最低到最高按照顺序堆叠所有可能结果,然后再按比例缩放这些结果以适应你的需要。为了说明这一概念,让我们看看如何手动制作这两种不同的曲线。
首先,对于累积分布函数,你需要遍历你处理的一系列数并跟踪那些落在给定阈值下的所有样本点。如果你想要得到整个散布区间内所有样本点相对于总体来说占比,那么你就必须计算总体长度,然后除以这个比例,以便将其标准化到介于零和一之间。你会注意到这种方法并不准确,因为它忽略了离散性质,但它足够好作为一种近似方法。在下面是一个简单例子:
def cumulative_distribution_function(values):
sorted_values = sorted(set(values))
n_samples_total=len(sorted_values)
cumulative_counts=[]
for threshold_value in sorted(set([value for value in values])):
lower_bound_index=np.searchsorted(sorted_values,[threshold_value])
upper_bound_index=np.searchsorted(sorted_values,[threshold_value]+1e-10)-lower_bound_index+1
if (upper_bound_index< len(sorted_values)+2):
this_count=n_samples_total*upper_bound_index/n_samples_total
cumulative_counts.append(this_count)
return cumulative_counts
cumulative_cdf=cumulative_distribution_function(np.array(data))
print(cumulative_cdf)
这段代码定义了一個名為 cumulative_distribution_function() 的辅助功能,该功能接受一個數據陣列並計算出一個給定的數據點區間內樣本點對應於總體長度部分占比。我們將這個結果存儲為 cumulative_cdf,然後我們打印出了這個結果列表,其中包括從最低到最高排序後數據點區間內樣本點對應於總體長度部分占比。
至於KDE,这是一种更高级的手法,用来基于当前已知观测到的实例构建关于未知实例出现几何位置的一般知识。这涉及选择合适的小窗口大小,以及选择合适的人工智能算法来学习从输入空间映射到输出空间模式的问题。此外,它允许我们探索任何给定的时间跨段内可能存在但尚未被记录的事实,从而使得研究变得更加深入和广泛。但是,由于这是一个非常复杂的话题,我不会详细讨论如何实施该技术,而只是提一下它存在并且非常强大。如果您感兴趣了解更多,请查阅有关kde技术专门资料或者参考相关文献资源。