直方图,又称质量分布图,用于表示数据的分布情况,是一种常见的统计图表。
一般用横轴表示数据区间,纵轴表示分布情况,柱子越高,则落在该区间的数量越大。
构建直方图时,首先首先就是对数据划分区间,通俗的说即是划定有几根柱子(比如,1980年~2020年的数据,每5年划分一个区间的话,共8个区间)。
接着,对落在每个区间的数值进行统计计算, 最后,绘制矩形,高度由每个区间的统计结果决定。
直方图与柱状图看似相像,实则完全不同。
前者反映数据分布情况,后者则不具备此功能,只能对数值进行比较。
也就是说,柱状图是离散的因此柱子间有空隙;但直方图的数据是连续的数值变量,因此柱子间是没有空隙的。
直方图的主要元素包括:
直方图适用于以下分析场景:
直方图可能不适用于以下分析场景:
本次准备用直方图统计下某个年度我们进出口总额的分布情况。
这次选用国家统计局公开的对外经济贸易数据:
https://databook.top/nation/A06
fp = "d:/share/A06050101.csv"
df = pd.read_csv(fp)
df
数据中有很多年份的数据为0,也就是有很多的缺失值。
所以,只选取了2021年与亚洲各国的进出口总额数据来分析,
其中有2个数据在分析绘图前需要清理,
一个是中国同亚洲其他国家(地区)进出口总额(万美元),与其他值差别很大,所以清理;
另一个是中国同亚洲进出口总额(万美元),这是个汇总数据,也清理了。
data = df[(df["sj"] == 2021) &
(df["zb"] != "A060501011E") &
(df["zb"] != "A0605010101")].copy()
#原始数值太大,单位换成(亿美元)
data["value"] = data["value"] / 10000
data.head()
一共有48条数据,这是前5条。
绘制直方图比较简单,核心是两个参数:
plt.hist(data["value"].tolist(), bins=10)
plt.title("中国与亚洲各国进出口总额(亿美元) 分布")
plt.show()
上面绘图时,分了10个组。(可以试试调整分组个数,看看不同的图形效果)
从图中可以看出,2021年,亚洲各国与中国的进出口总额在 0~300(亿美元)左右的国家最多,有30多个;
还有2,3个国家与中国的进出口总额甚至超过了3500亿美元。