首发于微信公众号东哥夜谈。欢迎关注东哥夜谈,让我们一起聊聊个人成长、投资、电影、音乐、运动等话题。
本帐号所有文章均为原创。文章可以随意转载,但请务必注明作者。如果觉得文章有用,欢迎转发朋友圈分享。
0. 前言
跟着鱼老师的PPT,大致整理了一下图表的相关内容。最后一个问题 RcParams
的设置把我给难住了,无论如何解不出来……
实际上我真想要的也不是RcParams
到底怎么设置这条鱼,而是如何查找相关资料这个渔。
唔,好多鱼……
1. 背景
解密大数据社群在第一节热身之后,直接开讲数据可视化,可见可视化在数据分析之中的重要性。图表的好处在于,把精确的数字用更利于人类识别的方式展现出来,让人类的创造力得意充分释放。所以,用好图表是学习数据统计的第一步。Matplotlib 是 Python 中用的最广泛的图形库之一,值得好好研究。
2. 内容
Matplotlib 图形中,各主要内容如下图所示:
Matplotlib-python根据课程内容,整理最常用的几种图表类型如下。
2.1 直方图(Histogram)和条形图(Bar Chart)
用「Bar Chart Histogram」为关键字搜了一下,出来很多文章讨论 Bar Chart 和 Histogram 的区别。需要这么特殊的讨论说明其区别不大,对我而言都是用来表示一组数据分布的柱状图,没啥大区别。下面就都统一称为柱状图(Bar Chart)罢。
柱状图主要用来把数据集合成一组,然后取其和或平均值之类画图。这样的好处是可以避免数据因上下偏差导致遮盖其规律。最典型的应用应该是年龄分布了吧。
至于在 matplotlib 里面,plt.hist(data)
只需输入数据即可,plt.bar(x, y)
则需要同时给出 x 轴和 y 轴的数据。
2.2 箱图(box diagram)
箱图这个比较高端,可以直接给出数据统计比较关键的一些数据,比如各分位数之类。可惜名字略显低端,俺觉得叫诸如分位图之类的更显得高大上一点。
关于分位数/中位数之类的概念,根据维基百科整理如下
分位数(英语:Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。
至于四分位数,有
四分位数即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。
所以,有如下定义
- 第一四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。
- 第二四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。
- 第三四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。
这个图信息量比较大,我觉得可以用来观察离散值的分散程度。比如最大值和最小值的偏差,Q3-Q1 的间距之类。显然 Q3-Q1 越小数据越密集,越大则分布越分散。
不过貌似是个初期用来观察分析用的,对实际决策并没有太大价值……
2.3 饼状图(Pie Chart)
人家是馅饼,不是普通的饼啦啦~~
饼状图最常用在展示比例上,比如男女比例、投票比例之类。概念简单,形象直观。
2.4 散点图(Scatter diagram)
散点图将数据按照最原始的方式在坐标系中以点集的方式展现,可以说是最原始的图表。这种图表有两种好处,一是可以用最原始、未加工的方式展现图表,最具可靠性;二是直观,给人完全无束缚的发挥空间。
散点图通常可以作为数据分析的第一步,然后需要数据工程师在其中发现下一步可供分析的内容。
2.5 多变量 – 矩阵图(scatter_matrix)
scatter_matrix 不是 matplotlib 包的内容,包含在 pandas 里面。它可以把 pandas 里面的各数据组成矩阵,用以批量生成相关图形。这样便方便一次性很直观的观察到数据之间的关系了。
scatter_matrix.png2.6 图表设置
2.6.1 常用图元设置
图表常用的最主要一些图元设置可以参考如下:
- plt.xlabel()
- plt.ylabel()
这个可以用来设置 x 轴和 y 轴的坐标轴标签。
- plt.title()
设置图形标题。
- plt.xscale(‘log’)
- plt.xticks(tick_val, tick_lab)
设置X轴刻度。轴刻度默认为线性,log
表示对数坐标。呃,尴尬症表示有一次被高大上了。关于 xticks,查文档描述为 matplotlib.pyplot.xticks(*args, **kwargs)
。
说实话,每次看到*args, **kwargs
,我就感觉自己陷入了死胡同。好在后面的代码里有写 locs, labels = xticks()
,也即两个参数分别表示位置和标签。
呃,还能更不直观一些么?
- plt.scatter(x,y,s=size,c=color, alpha=alpha)
散点图,可以设置点的大小、颜色和透明度。
- plt.grid(True)
控制是否显示栅格,默认为关。不明白为什么,显然应该默认显示为开啊。
2.6.2 图表设置
鱼老师在设置中文字体的时候用到了 plt.rcParams
命令。查了一下,这是个动态改变绘图参数的命令。rc settings 被存储在 matplotlib.rcParams 变量里,这个变量类似词典,所以赋值的时候用的是方括号[]
。
不过,谁能知道这个 rc 是什么意思?文档里也没有解释,感觉怪怪的啊。
鱼老师在视频中用rcParams
改变了字体。我试着在文档里找了找,看还能改变些什么以及如何改变,但遍翻文档而不得。
-
matplotlib.rcParams 显示,这个设置时类
RcParams
的一个实例; -
RcParams 显示,
RcParams
里面的东西和matplotlib.rcsetup
相关; - rcsetup 里却给出一些奇怪的验证信息,没有列出我想要的我能改变什么参数及如何改变的相关资料;
至此,没了从文档里面查找资料的路子。遂决定试试Python自带的帮助行不行。
In [1]: import matplotlib as mp
In [3]: dir(mp.RcParams)
Out[3]:
['__class__',
'__contains__',
'__delattr__',
……
'popitem',
'setdefault',
'update',
'validate',
'values']
这里没有直接得出我想要的东西。试试看item里面是不是能有。
In [5]: mp.RcParams.items()
TypeError: descriptor 'items' of 'dict' object needs an argument
貌似items类似dict,需要提供key。那就看看key里面有什么
In [7]: mp.RcParams.keys()
TypeError: keys() missing 1 required positional argument: 'self'
In [8]: mp.RcParams.keys(self)
----> 1 mp.RcParams.keys(self)
NameError: name 'self' is not defined
晕死。self不应该是指自己么?我怎么定义?又陷入了死胡同。看看帮助吧。
In [9]: help(mp.RcParams.keys)
Help on function keys in module matplotlib:
keys(self)
Return sorted list of keys.
这帮助可真简洁,简洁到几乎啥都没说。突然想到,也许items需要的不是key呢?试试items的帮助吧?
In [10]: help(mp.RcParams.items)
Help on method_descriptor:
items(...)
D.items() -> a set-like object providing a view on D's items
囧,这些信息完全没有怎么使用嘛。再试试values?
In [11]: help(mp.RcParams.values)
Help on function values in module matplotlib:
values(self)
Return values in order of sorted keys.
好吧,我承认到现在我败了。在线文档查了,帮助文件试了,但找不到RcParams
的具体内容啊……
我比较好奇,专业人士遇到这类问题都是怎么解决呢?总不能挨个问人吧?按说查文档是最有效的方法。是我的检索方式不对么?
2.7 帮助检索 Update
就在文章发出去后,因为没能搞定挺沮丧的,就坐在那里发呆。
突然间想到,rcParams
是个类似词典的变量,那直接打印不就可以么?结果……
In [1]: import matplotlib.pyplot as plt
In [2]: print(plt.rcParams)
_internal.classic_mode: False
agg.path.chunksize: 0
……
ytick.minor.visible: False
ytick.minor.width: 0.6
ytick.right: False
唉,可惜了我一个晚上加一个早上的时间了……
3. 总结
本以为社群会集中讲解 pandas 这个数据分析之瑞士军刀,谁知鱼博士告知,课程主要讲的是统计与分析,pandas 只不过是手段,需要自己搞定的……
想想也正常。社群的价值在于思考方式、思维模式,而不应该是手把手教大伙怎么用一个工具。毕竟这是个面向成人的再教育,而不是像大学那样坐课堂里面听讲课。
看来还是自己犯懒了。
东哥夜谈
网友评论