前言
华罗庚说过
数缺形时少直观,形少数时难入微.
这句话第一次听还是初中数学老师上二次方程课时说的.
最近看到了3blue1brown对线性代数的直观解释感觉豁然开朗,于是我又捡起了儿时对美妙数学的兴趣. 发现一个博客,数据可视化很好的例子,决定花些时间和大家一起解读一下
例程来自:https://www.machinelearningplus.com/plots/matplotlib-histogram-python-examples//
感谢b站UP "菜菜TsaiTsai" 分享这个博客.
在正式开始“50图”的学习前先引出2个前例,目的是提醒自己。学会是从有限的例子中推论出没有见过的问题的答案。这也是2000年前对孔子对学会的理解“温故而知新,可以为师已”
前例1
import numpy as np
x = np.random.randint(low=0, high=100, size=100)
# Compute frequency and bins
frequency, bins = np.histogram(x, bins=10, range=[0, 100])
# Pretty Print
for b, f in zip(bins[1:], frequency):
print(round(b, 1), ' '.join(np.repeat('*', f)))
解析
首先在0-100里产生一些随机的整数 histogram 直方图统计函数:
- bins 均匀分成的区间数量,10表示分成10个区间
- range 统计的范围,这里与原数据的定义域相同,但也可以是不同的。
最后画出来像是这样
应用
事实上,我们生活中更多的用的直方图,或是折现图往往表示一个趋势的记录。比如房价走势
我们直觉上总是更容易理解时间相关的表达。因为我的大脑的生产逻辑是基于过去的经验的。引用一句名言“你用永远成为不了你没见过的人。” 不过科学家们,特别是物理学家们,更常用另一种表达方式就是本例中的计次,他事实上是一种时频域转换,这在许多问题是非常有效,我们继续看下去。
前例2
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams.update({'figure.figsize':(7,5), 'figure.dpi':100})
# Plot Histogram on x
x = np.random.normal(size = 1000)
plt.hist(x, bins=50)
plt.gca().set(title='Frequency Histogram', ylabel='Frequency');
解析
rcParams 设定一些图像的大小等参数;
random.normal 产生一个 符合标准正态分布的集合,loc 中心默认为0。
plt.hist 与例1相同,2个参数,数据集合x,间隔数bins。不同的是他帮忙画出了一些有颜色矩形,矩形的高度代表次数的大小,宽度代表间隔的长度
应用
不得不说,我们人类的构造就是适合处理这些颜色和形状,我们会不自觉的把目光投降这些有规律的色块,就行我们看一幅美术作品一样
来想一想这中频次图,适合表达什么?
比如同一时间下,不同地区的房价,我们可以想象,主城区不少房子价值高昂但是黄金地段有些数量不会太多,这些房子出现在上图的右边。而稍远一些的大部分房子在横轴的0值附件。这里我们举了一个例子,那么我们倒过来想一下,一个现象符合某种条件规律,反过来某个条件能否推出一个现象?
上例我们知道不同地区房价不同,反过来,根据房价不同不就能知道房子的地段的了吗?当然这里有个前提,这种关系需要是对应的。就想数学中的函数与反函数 。可以科学实验中的常用手段。观察现象、总结规律,然后得到背后的结论。
下期预告
图1 散点图