趋近智
尽管计算均值、中位数或标准差等统计量能为您提供有用的数据数值概括,但它们无法描绘出全貌。两个数据集可能拥有相同的均值和标准差,但在值的分布方式上可能显得非常不同。数据可视化在此发挥作用,直方图是理解数值数据分布最基本、最有用的工具之一。
直方图提供了数据集频率分布的视觉呈现。可以把它看作是一种条形图,但与表示类别不同,直方图的条形表示数值范围,这些范围通常被称为数据区间或分组区间。每个条形的高度显示了落入该特定范围的数据点数量。
直方图非常适合快速了解数据的基本结构。它们有助于您:
创建直方图涉及以下步骤:
我们将使用NumPy生成一些样本数据(例如,一群人的身高,单位为厘米),并使用Matplotlib(特别是其pyplot模块,通常导入为plt)来绘制直方图。
import numpy as np
import matplotlib.pyplot as plt
import plotly.graph_objects as go
import json # 仅用于格式化下方的JSON字符串以便显示
# 生成一些样本数据(例如,身高,单位厘米)
# 数据服从正态分布,均值约为170厘米,标准差为10厘米
np.random.seed(42) # 为了可重复性
heights = np.random.normal(loc=170, scale=10, size=200)
# --- 使用 Matplotlib(常用于直接绘图) ---
plt.figure(figsize=(8, 5)) # 设置图的大小
plt.hist(heights, bins=10, color='#228be6', edgecolor='white') # 创建包含10个数据区间的直方图
plt.title('Distribution of Heights')
plt.xlabel('Height (cm)')
plt.ylabel('Frequency')
plt.grid(axis='y', alpha=0.75)
# plt.show() # 如果在本地运行,取消此行注释以显示图表
# --- 生成用于网页嵌入的 Plotly JSON ---
# 使用 NumPy 计算直方图数据
counts, bin_edges = np.histogram(heights, bins=10)
bin_centers = 0.5 * (bin_edges[1:] + bin_edges[:-1]) # 用于绘图的数据区间中心
# 创建 Plotly 图形对象
fig = go.Figure(data=[go.Bar(
x=bin_centers,
y=counts,
width=np.diff(bin_edges)[0]*0.95, # 将宽度调整为略小于数据区间宽度
marker_color='#228be6',
marker_line_color='white',
marker_line_width=1
)])
fig.update_layout(
title_text='Distribution of Heights',
xaxis_title_text='Height (cm)',
yaxis_title_text='Frequency',
bargap=0.05, # 如果需要,可设置少量间隙以提高视觉清晰度,理想情况下真直方图应为0
plot_bgcolor='#e9ecef',
yaxis=dict(gridcolor='#adb5bd'),
margin=dict(l=20, r=20, t=40, b=20), # 简洁的边距
width=600, # 调整用于网页显示的宽度
height=400 # 调整用于网页显示的高度
)
# 生成 JSON 字符串(在实际的 Web 应用中,你会传递 fig 对象)
plotly_json_string = fig.to_json()
# 为了在此处显示,我们将按照所需格式打印
# 通常你会直接嵌入此 JSON 或使用库函数
# print(f"```plotly\n{plotly_json_string}\n```") # 如何格式化输出
一个直方图,显示了200个模拟身高测量值的频率分布。X轴显示身高范围(数据区间),Y轴显示每个范围内的人数。
观察上面生成的直方图:
如果直方图有一个向右(更高值)延伸的长尾,我们称之为右偏。如果尾部向左(更低值)延伸,则为左偏。偏度会影响均值和中位数之间的关系。例如,在右偏分布中,均值通常大于中位数。
直方图是初步查看数值数据的重要一步。它们通过提供视觉情境,补充了之前学习的汇总统计量,帮助您以仅凭数字无法传达的方式了解形状、中心和分散度。它们是数据查看和为机器学习模型准备数据的重要工具。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造