“一图胜千言。”
----ArthurBrisbane
听说这个最近很火! 在这个信息爆炸的时代,科技虽然使得数据获取变得简单了许多,但同时我们也面临着新的问题:怎么筛选数据(通常,得到的大数据需要进行清洗),怎么分析获得数据背后的隐藏信息? “一图胜千言”,Arthur Brisbane 老早就告诉我们了。通过数据可视化,可以更直观地看到信息本身。准备开小店的你,可能正对着“选址”这个大难题头疼不已;年底做总结的你,可能正对着一堆的数据苦恼着:“怎么才能做出令上级满意的报告”……身处大数据时代的我们,学会数据分析这个必备的技能已经迫在眉睫了。 数据较少的情况下,Excel 基本能满足大多数人的需求,毕竟 Excel 也在进步。但是如果数据特别庞大,Excel 也会经常崩溃的!不晓得你们是否遇到过,反正我是遇到过,那时的我,内心是崩溃的。 下雨天 ,哦,不,通常,Excel 跟 Python 也很是般配的。本文将简单介绍 numpy 和 matplotlib库,旨在让大家学会运用代码呈现数据可视化,从而达到获取大数据背后的隐藏信息。(废话有点多,但我坚持不删!) 「干货目录」 1.二维绘图 2.其它绘图样式 3.3D 图 4.小彩蛋 01 二维绘图1.1二维绘图
—— 创建第一个jupyter notebook
我觉得,快速学会python的最好方法:实操(实践、操练)。当你学会应用了,基本上你就掌握了基本的用法。如果你能举一反三,那基本是理解了;如果你能教别人怎么用,我想你已经不是小白了。"( ̄y▽, ̄)╭ " 所以请查看你的电脑是否安装好了两个神器(可翻阅之前的文章--欲练神功,必先自……自己去下载俩神器)。如果没有,建议安装完再来。不然,即便看完了,真正记在脑子里的却不多。 首先,在vs code或者pycharm编译器终端输入“pip install jupyter”(当然,推荐用镜像安装哦pip/pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple),安装完成后,在终端里输入"jupyter notebook"按回车,一般正常情况下,即可自动跳转到jupyter界面。尽量不要占用8888或8889端口,因为可能导致jupyter运行不了。 点击“新建-->Python3”即可创建新的notebook,如下图所示: —— 创建第一张折线图 学了python,只需要几行代码,就可以绘制一张简单的折线图。不信你自己试试啊! pyplot 子库中的 ”plot“函数是最基础的绘图函数,但是也相当强大。原则上,它需要两组数值,且两组数组必须一一对应。 x 值:包含 x 坐标(横坐标)的列表或者数组 y 值:包含 y 坐标(纵坐标)的列表或者数组 如果你只提供 y 值,“plot`”会默认以索引值作为对应的 x 值。—— 装饰你的图表
一般来说,默认绘图样式不能满足报表、出版等的典型要求。例如,你可能希望自定义所使用的字体、在坐标轴上有自定义标签或者为了更好的可辨认性而绘制网格等等。Matplotlib 很贴心地提供了大量函数以自定义绘图样式。有些函数容易理解,有些则需要更深入一步研究。 比较容易理解的几个参数:figure、xlabel、ylabel、title、grid以及xlim、ylim等,这些也比较常用。另外,线条属性的设置,可以记住一些常用的,不常用的等到需要的时候再查一下资料即可。关于axis的其他选项,呃,目前我认为比较好用的就是“tight”,可以使轴线紧凑分布。 plt.plot 支持的标准颜色缩写有: 'b'--blue,'r'--red,'w'--white,'g'--green,'y'--yellow,'k'--black 常用的线、点样式有如下表: 备注:由于大部分 ndarray 方法返回的仍然是一个 ndarray 对象,也可以附加一个方法(有些时候甚至可以附加多个方法)传递对象。我们用样板数据调用 ndarray 对象上的 cumsum() 方法,可以获得这些数据的依次累加之和。 —— 进阶版折线图1 折线图很简单啊,用Excel也能画。确实,简单的图表,少量的数据是凸显不出python的厉害之处的。嗯,所以先来学个进阶版折线图吧。 与单条折线图相比,此图多了两条折线图,并且加了图例。y[:,0]表示取第一列数据,对了,补充一句,设置label和title的时候,如果需要用到中文,则需要加两句代码。如果想一劳永逸,请打开下面的链接查看:—— 进阶版折线图2 多个具有类似刻度的数据集可以用单一的 y 轴绘制。但是,数据集往往是有不同的刻度,用单一 y 轴刻度绘制这种数据的图表通常会导致 可视化信息的显著丢失 。就好比,把上图的任一组数据扩大100倍,甚至1000倍。如果还是按上图的做法,效果是这样的--根本无法识别其他两组数据的真实变化(第一组数据扩大100倍-->plt.plot(y[:, 0]*100, lw=1.5, label=u'冒号'))。 方法一 : 当你的多组数据的刻度可以大致分为两组时,可以用 双Y轴 方式--如下图: 方法二 : 当你的数据刻度连大大大致都无法将他们分成两组的时候,那么就试试用子图吧。你可以横着、竖着、既横着又竖着、还可以花式横竖着。 废话不多说,先 上菜 ,哦,不对,上图(差点儿暴露了我吃货的本性): 有没有感jio逼格高了一丢丢呢?做好子图的关键在于管理坐标轴的代码行,其实,不瞒你说,方法一的双Y轴也是建立在子图的基础上的。只不过是用它生成和第一个子图共享 x 轴的第二个子图,他们是相互重叠的子图。 matplotlib figure 对象中子图的定位通过使用一种 特殊的坐标系 来实现。plt.subplot 有3个整数参数,numrows 指定行数,numcols 指定列数,fignum 指定子图编号(从 1 到 numrows×numcols)。例子参见四小图的图例。 这里稍微细提一句(有些知识点,我也只会生搬硬套,毕竟还太年轻): fig, ax1 = plt.subplots() ,它其实可以等价于fig = plt.figure(),ax1 = fig.add_subplot(),又比如 ax2 = ax1.twinx() ,我只知道它可以让2个子图的共用一个x轴,却不理解为什么要这么写。 以后用的时候就可以这样子-->>fig, ax = plt.subplots(1,3,figsize=(15,7)),这样就会有1行3个15x7大小的子图。 plt.tight_layout() 会自动调整子图参数,使之填充整个图像区域。这是个实验特性,可能在一些情况下不工作。它仅仅检查坐标轴标签、刻度标签以及标题的部分。 下面是上图的代码哦(下面代码不能单独 服用 ,咳, 是使 用,因为有些数据在上面)。 小结: 子图的用处:可能大多时候选择两个不同的图表类型来可视化数据会更为理想。利用子图方法,就可以 自由地组合 Matplotlib提供的 任意图表 类型,比如组合了线图/点图/柱状图等等。将不同的透视结果呈现在一张图表里也是很不错的样子。 关键的地方:用 subplot 函数的时候,你需要指明网格的行列数量,以及你希望将图样放在哪一个网格区域中(上图例子中,我是将三个表格分块来写,我想应该有更偷懒的方式,等我发现了就来分享)。 可以进阶的地方:此外, gridspec 的功能更强大,你也可以选择它来实现这个功能,下面就放个图让你过过眼瘾。https://segmentfault.com/a/1190000005144275
https://www.jianshu.com/p/445a027c9f8c
02 其他绘图样式https://matplotlib.org/tutorials/intermediate/gridspec.html
2.1 其他绘图样式
比较常见的图表函数名如下: specgram--光谱图,scatter--散点图,polar--极坐标图,pie--饼图,Hist2d--2D直方图,hist--直方图,barh--水平条形图,barh--水平条形图。 ——散点图 首先介绍散点图,这种图表中一个数据集的值作为其他数据集的 x 值。下图展示了一个这种图表。例如,这种图表类型可用于绘制一个金融时间序列的收益和另一个时间序列收益的对比。在下面的例子中,我们将使用二维数据集和其他一些数据: y是随机生成了1000组二维数组,形式大致如下: 如果把plt.plot(y[:, 0], y[:, 1], 'ro')注释掉,执行plt.scatter(y[:, 0], y[:, 1], marker='o'),则生成上图所示的蓝色散点图,如果对调一下,注释掉后者,则生成的是红色的散点图(‘ro'是指红色圆点)。 ——散点图进阶版 scatter 绘图函数可以加入第三维,通过不同的颜色进行可视化,并使用彩条加以描述。为此,我们用随机数据生成第三个数据集,这次使用的是 0 和 10 之间的整数,长度与y相等: 这种没有子图的操作特别简单,一句 plt.colorbar() 就搞定了。 下图是给子图配不同的colorbar: 相关参数如下: plt.Figure.colorbar(self, mappable, cax=None, ax=None, use_gridspec=True, **kw) 第一种情况:当在没有子图的时候,也就是 plt.colorbar() 可以不用输入参数。 当有子图的时候,参数 mappable 是必须的,参数 mappable 理解起来就是我们需要提供一个可以 映射颜色的对象 ,这个对象就是我们作的图所需获的子图对象,然后将其传给colorbar(),colorbar 则会获取这个图所用的渐变颜色种类,之后的一个参数ax用来指示 colorbar() 获取到的渐变色条在哪里显示,我们设置ax=[ax[0],ax[1]](如果 传入多个对象 ,请用 列表方式 ,不然会报错),那它就在ax[0]和ax[1]的区域显示,我们也可以改变渐变色条出现的位置,比如将ax的表达式对调一下,就会出现以下结果:colorbar的颜色库很丰富多彩,简直富得瞎了眼,引用的时候注意大小写和‘s'哟!
——直方图
说到直方图,大家应该都不陌生,一般情况下都会用到它。plt.hist()就可以画出以下直方图: hist参数详情如下图所示: 这里主要提一下 stacked参数 :默认情况下,stacked参数值是False,当改为True时,就会产生下图叠加效果: ——水平柱状图 柱状图和直方图有什么不同呢? 直方图展示数据的分布,柱状图比较数据的大小。这是直方图与柱状图最根本的区别。举个栗子,有10个苹果,每个苹果重量不同。如果使用直方图,就展示了重量在0-10g的苹果有多少个,10-20g的苹果有多少个;如果使用柱状图,则展示每个苹果的具体重量。 barh()和bar()的用法基本一样,这哥俩一个喜欢竖着,一个横着,基本掌握了一个就等于掌握了另一个。 03 3D绘图 3.1 3D绘图本期内容有点儿太多了些,整理了两天,感觉都没整理全,又怕小伙伴们看得烦,所以下一期继续接着整理。如有错误之处,欢迎指出。
04 小彩蛋 4.1 小彩蛋 ——关于直方图和柱状图的区别 1.直方图展示数据的分布,柱状图比较数据的大小; 2.直方图X轴为定量数据,柱状图X轴为分类数据;3.直方图柱子无间隔,柱状图柱子有间隔; 4.直方图柱子宽度可不一,柱状图柱子宽度须一致。 ——使用直方图的小技巧 1.注意组距 放在python中,相当于plt.hist()方法中的bins参数,可以自己改变参数看看区别。 2.X轴上为左闭右开区间 3.注意Y轴所代表的变量 以上小知识摘自知乎,链接如下: https://zhuanlan.zhihu.com/p/61433510冒号出品|必属精品 关注回复? ◆回复“代码”可获取相应资源哦! ◆回复“编译器”,可获取相应资源哦! ◆回复“Python电子书”可获取相应资源哦! 作者:冒号说py “冒号说:发着小光小热的小点点。” 个人公众号: 冒号说py Follow Me
觉得有用请给个在看小花花吧~
???