【matplotlib 实战】--直方图

直方图,又称质量分布图,用于表示数据的分布情况,是一种常见的统计图表。

一般用横轴表示数据区间,纵轴表示分布情况,柱子越高,则落在该区间的数量越大。

构建直方图时,首先首先就是对数据划分区间,通俗的说即是划定有几根柱子(比如,1980年~2020年的数据,每5年划分一个区间的话,共8个区间)。

接着,对落在每个区间的数值进行统计计算, 最后,绘制矩形,高度由每个区间的统计结果决定。

直方图柱状图 看似相像,实则完全不同。

前者反映数据分布情况,后者则不具备此功能,只能对数值进行比较。

也就是说,柱状图 是离散的因此柱子间有空隙;但直方图的数据是连续的数值变量,因此柱子间是没有空隙的。

1. 主要元素

直方图的主要元素包括:

  1. 横轴:表示数据的取值范围或分组区间。
  2. 纵轴:表示该区间内数据的频率或数量。
  3. 柱状条高度:表示每个区间内数据的频率或数量,柱状条的高度代表该区间内数据的数量多少。
  4. 柱状条面积:表示不同区间内数据的总和,有时候面积是无意义的,只看高度。
此图片来自 antv 官网

2. 适用的场景

直方图适用于以下分析场景:

  • 数据分布分析:直方图可以帮助我们了解数据的分布情况,包括数据的中心趋势、离散程度和偏斜程度等。通过观察直方图的形状,我们可以判断数据是正态分布、偏态分布还是有其他特殊的分布形式。
  • 异常检测:直方图可以帮助我们识别出数据中的异常情况。通过观察直方图中的离群点或异常值,我们可以发现数据中的异常情况,从而进行数据清洗和异常检测。
  • 数据预处理:直方图可以指导我们选择合适的数据预处理方法。通过观察直方图,我们可以了解数据的分布范围和形态,从而决定是否需要对数据进行归一化、标准化或对数变换等预处理操作。
  • 数据比较:直方图可以帮助我们比较不同数据集之间的差异。通过绘制多个直方图并进行对比,我们可以观察到不同数据集之间的分布差异,从而进行数据分析和解释。

3. 不适用的场景

直方图可能不适用于以下分析场景:

  • 时间序列分析:直方图通常用于表示数据的分布情况,而对于时间序列数据,直方图无法展示数据随时间变化的趋势和模式。
  • 数据关联分析:直方图无法直接展示数据之间的相关性或关联性。
  • 多维数据分析:直方图主要适用于一维数据的分析,无法直接展示多维数据的分布情况。
  • 数据模型拟合:直方图可以展示数据的分布情况,但无法直接拟合数据的概率分布或模型。
  • 数据聚类分析:直方图无法直接展示数据的聚类情况,无法将数据点分组或分类。

4. 分析实战

本次准备用直方图统计下某个年度我们进出口总额的分布情况。

4.1. 数据来源

这次选用国家统计局公开的对外经济贸易 数据:
https://databook.top/nation/A06

python 复制代码
fp = "d:/share/A06050101.csv"

df = pd.read_csv(fp)
df

4.2. 数据清理

数据中有很多年份的数据为0,也就是有很多的缺失值。

所以,只选取了2021年亚洲各国的进出口总额数据来分析,

其中有2个数据在分析绘图前需要清理,

一个是中国同亚洲其他国家(地区)进出口总额(万美元) ,与其他值差别很大,所以清理;

另一个是中国同亚洲进出口总额(万美元),这是个汇总数据,也清理了。

python 复制代码
data = df[(df["sj"] == 2021) & 
        (df["zb"] != "A060501011E") & 
        (df["zb"] != "A0605010101")].copy()

#原始数值太大,单位换成(亿美元)
data["value"] = data["value"] / 10000
data.head()

一共有48条数据,这是前5条。

4.3. 分析结果可视化

绘制直方图比较简单,核心是两个参数:

  1. **x **参数:一个列表,也就是这次示例中就是各个亚洲国家的进出口总额
  2. **bins **参数:设置数据分成几组,直方图会统计每个分组中的数据个数
python 复制代码
plt.hist(data["value"].tolist(), bins=10)
plt.title("中国与亚洲各国进出口总额(亿美元) 分布")
plt.show()

上面绘图时,分了10个组。(可以试试调整分组个数,看看不同的图形效果)

从图中可以看出,2021年,亚洲各国与中国的进出口总额在 0~300(亿美元)左右的国家最多,有30多个;

还有2,3个国家与中国的进出口总额甚至超过了3500亿美元。

相关推荐
DeepVisionary13 分钟前
从 Qwen3.8-27B 把原生多模态、原生 FP8、桌面级 Agent 三件事一次集齐,看开源大模型的“工业化拐点“
python·自动化
固定资产管理系统软件1 小时前
商务局RFID固定资产管理系统的应用价值与落地要点解析
大数据·python
TheBestRucy2 小时前
Python 九阳神功:从零筑基到线程飞升
服务器·开发语言·网络·人工智能·python
lancyu2 小时前
关于多轮对话机器人的上下文Token优化和解决方案
人工智能·python·深度学习·机器学习·chatgpt·机器人·prompt
草莓橙子碗3 小时前
Claude 使用指南
开发语言·python
工具分享3 小时前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI3 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
老郑聊AI业财智造3 小时前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程
程序员三藏3 小时前
自动化测试用例编写详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
230万光年的思念4 小时前
分子动力学模拟参考文献
python