文科生学Python系列13: matplotlib绘图/条形图

第七课 - 数据可视化

本课内容:

matplotlib 绘图基础

      函数曲线的绘制

      图形细节的设置

案例分析:销售记录可视化

      条形图

     绘制多图

     饼图

     散点图

     直方图

seaborn 数据可视化包

     分类数据的散点图

     分类数据的箱线图

     多变量图

回顾:在之前课程中, 我们已经接触到了数据可视化

在第五节课中,我们通过pandas的plot函数对莺尾花数据进行了可视化。我们绘制了根据品种分类的散点图和箱线图。

在第六节课中,我们使用matplotlib绘制了姓名变化趋势图,并通过plt的各种选项对图形进行了美化。

上述例子中可视化都是基于matplotlib来展开的,在本次课程中我们将详细演示如何使用matplotlib

matplotlib 是Python编程语言的一个绘图库,最初由John D. Hunter撰写。

与Python的深度集成

风格与Matlab接近

官网:http://matplotlib.org/

matplotlib例图


老师说,我们为什么今天要上新的 matplotlib 的绘图呢,因为之前学的鸢尾花散点图用的是Pandas里面自带的plot图,在分类数据的分析上,之前学的方法显得冗余了。为了更好的可视化,不冗余!我们来学新的!

matplotlib 绘图基础

导入数据包,设置基础

以上还是一样设置基础数据,每一次都要导入的numpy和 pandas包,不导入后面会跟你说没有定义,识别不了的哦~ 设置图形的格式是 retina 的清晰度。运行之后,我们来正式绘图吧!

在matplotlib 中,绘制一个曲线图,可以使用plt.plot这个函数,在正弦函数中,主要的是x和y轴两个轴的数据。所以我们需要先设置x 和 y 。

我们用numpy中的arange函数,设置的是从0到5,间隔为0.1之间的数据。专业点来讲,0.1好像叫步长。当时上课这个语句一晃而过,我没看懂是什么为什么括号里面有三个数字,回放听终于明白了。。。明明是学过的啊😤😤😤

x, y=sin(x)

突然觉得,中学时代不会Python真可惜,或许时不时用它来解决数学问题,数学成绩就没那么差了。周三上课的时候余老师一讲到正弦函数我就有点头大,幸好不是要我计算呀!

plt.plot(x,y)

看到这里才发现,x 和y 用的都是 np 的函数,在np里面定义赋值。为什么不是pandas呢?

老师说因为我们前面设置过自动显示图片(终于明白第一张图的 “%matplotlib Inline” 的作用了。。。),所以这里直接输入语句,按输出,就可以看到结果了。我们也可以设置成手动显示图片,看下图:

手动显示图片

plt.show( ) 这个语句,设置手动显示图片,而且这里没有 OUT这个显示了。其实这个我不知道有什么用。

接下来又是(我不懂的)美化啦!

增加 color='g',marker='.',linewidth=2

把函数线的颜色设置成绿色,上课的时候我说为什么它知道g就是绿色啊!老师说用的 green 比 grey 多,所以系统会默认 g 是 green。上课讲的时候可没有color=g 啊,老师用的是简写,直接在 plt.plot(x,y) 中的右边括号里面加上逗号和 'g . -' ,然后就是绿色➕点线条了。

现在看到的图两轴还是有些是空白,所以需要美化,缩减空白,这里用的是我们第六课用的方法:

xlim,.ylim

plt.xlim(0,5) 和 plt.ylim(-1.1,1.1) 的使用可以让区间空白改变一点,这次老师教了一种新的方法:

plt.axis([0,5,-1.1,1.1])

plt.axis([0,5,-1.1,1.1]) ,和上节课的xlim, ylim 使用结果一样,这个语句更短,先定义 x 轴的范围从0到5,再定义 y 轴的范围,所以在圆括号里面,有一个方括号,包着四个数字,分别表示两个轴的范围。

要是我们需要清晰看到一个点所在的横纵坐标,需要用网格线进行更精确的定位,在那个点标明文字:

plt.grid(True)

plt.grid(True) 指的是网格线存在哦。

plt.text(3.1,0.3,'sin(x)')  ,指的是在坐标(3.1,0.3)的位置上加上文字说明 sin(x)。

回顾例一,用plot 函数得到一个基本的曲线函数,然后用各种细节设置,让整个图变得更加饱满,包括标题/横轴/纵轴/网格/文本等设置,这样的方法称为函数式的编程,这是模仿matlib的作图方式。与之相对应的还有面向对象的作图,它对细节的控制会更加丰富,但对初学者的掌握能力来说,学会函数式的编程比较适时。


例2:绘制 y=x, y=x^2, y=x^3 三个函数的曲线

y=x, y=x^2, y=x^3

我在看预习资料的时候,看不到运行出来的图,plt.plot(x,x,x,x**2,x,x**3) ,这一句看起来太复杂有点可怕,然而它的意思竟然是,里面的6个数字分为三对xy轴的数。三个函数的x 和 y 竟然可以全部挤在一起,厉害了。

要是想要更好的区分这三个函数曲线,可以用一些设置将它们变得更有辨识度:

plt.plot(x,x,'r--',x,x**2,'bs',x,x**3,'g^')

上课看老师运行这一步的时候,惊呆了。这里就是上面提到过的简写了,具体代表什么,# 后面已经说明了。接下来还是继续美化显示的图片了,大家可以自己做一下啦!这里不展示了。

小结:

上述代码展示了matplotlib的一些基本功能,我们可以通过使用plt自带的各种函数来控制图形的细节,比如是否加网格,坐标的标签等等。

我们在后续课程中还会向大家展示其他常用图形

案例分析:销售记录可视化

导入并观察数据

每次看到数据导入我就特别害怕,因为每次都会卡我很久,久到我会想“要不这文章就这样吧,老子不写了。” 每一次的坑我都记得非常清楚,红酒质量的,鸢尾花的,全美婴儿姓名的,这次是销售数据。

这次卡了多久?

一小时30分钟。

读取数据失败的我,拿起等了我3个小时三明治,一边吃一边苦闷地想,这样的事情真是太丢人了啊,同一个坑,掉第四次。吃完这次终于上网查怎么在jupyter导入excel数据了(以前我都在干嘛?!)但是并没有查到要的答案,终于在我们课程的讨论区,看到一个同学回复的答案!老泪纵横!!!

怎么导入数据到jupyter

试了一下,上载成功的文件在jupyter打开是一片空白,而且把这个空白的文件下载到电脑了,我以为操作出了问题,试了几次,一模一样。把代码敲进去试着运行,竟然!成功运行了。。。诡异!

读取excel数据文件

这是一份一家公司在某个时间段段交易数据。行首对应的分别是客户账号/公司名称/商品货号/每次交易的购货量/每个商品的交易价格/交易总额/交易时间。

要是你是一个数据分析师,想要在这份数据里面得到一些信息,你会从哪方面着手呢?

我们可以用之前学过的一些函数进行对整份数据进行分析:

df.info()

这是一份有1500条信息的数据,没有缺失值。

查看与之交易的公司数量

要是需要看与之交易的公司有哪些,可以把上面运行语句的 len( ) 去除掉。

要是需要看某家公司的交易量,也是可以用函数进行输出的:

Barton LLC交易量(1)
Barton LLC交易量(2)

这个输出比较长,分两张展示首尾,最后一行可以看出,一共82笔交易。

销售额最高的10个公司

交易总额和交易次数的输出

先用语句求出我们要的数。套路都是我们之前学过的:用groupby分组,也就是找到交易量的公司,先圈出范围“name”,然后是“ext price” 。然后使用agg进行聚合运算:sum求交易总额,count计算交易次数。

但是在上面我们可以看到,行首的格式不是很对,这里需要调整一下:

reset_index 重置索引

这里在前面一行加了 ' \ '这样的符号,老师说这样加上去可以让它换行,看了结果,应该是让name 这个词在行首回到了好看的位置。reset_index 重置索引,里面写的 “在这里取消了name作为索引”,我没理解明白,也就是前面是用name来索引的?用name来索引和这一步的操作,作为索引来说,有什么不同?

这时候我们已经得到销售总额的数据了,但是我们的题目是需要销售总额前十的,所以我们需要对销售总额进行排序。

sort_values进行排序

这里学到一个新的函数了,用 sort_values 进行排序。

好吧,前十还没出来:

top10

这一步加了挺多东西上去的。重新再句首赋值 top10,后面输出 top10。在第27条输出了排前的销售额,才能直接在这一步的第二行代码最后直接使用切片的方式 [:10] 来运算。

然后是对行首名称对修改,把首字母都大写了,替换的方式是使用字典的键值对,格式是 {之前的值:替换上的值} ,老师运行的第一遍没有加上inplace=true,结果就是并没有修改成功,然后解释,因为rename那一行算是里面默认的副本,要是没有inplace=true ,那是运行不成功的。

我们总算把销售额前十的公司输出来了!

条形图

top10公司销售总额的条形图

plt.barh(np.arange(10),top10.Sales,height=0.5)

新的图!之前我们学过有scatter散点图,plot折线图,还有啥来着?今天的直方图是bar,哦,垂直的是bar,水平方向的直方图是barh。

所有的代码,其实都能看懂。但是要我自己不偷看打出来,真的是。。。心虚。

添加标题和横纵坐标的说明。并且,为了让图看起来更加知道相对应的值是什么,我们修改了坐标的刻度:

plt.yticks(np.arange(10),top10.Name)

觉得单看这个图好专业啊!这时候余老师讲了上课的第二个“冗余”,就是图和代码之间那串黑体字。这时候终于能够确切理解 冗余 这个词的表达力!要是不想看到这些多余的字,我们可以这样做:

plt.show()

有一种,把多余的毛发剃掉的感觉一样啊!!!!!清爽!

然饿,老师这时候又去改X轴坐标了:

plt.xticks

其实这一段不是很明白,替换掉的值,不像上面用字典来替换,用的是两个列表,后面一个列表里面的元素还是字符串。这是我们之前学过的??疑惑。

这个图的风格是默认的风格,老师说可以让我们尝试一下其他风格,选择之前看看有哪些是可以被选择的。这样的东西竟然都有语法,太可怕了!!!

plt.style.available

然后老师选了 ggplot,据说是 “爱原冢(音译)”的风格,来看看吧

plt.style.use('ggplot')

默认颜色变了,而且还有底版了:浅灰色+网格。


作业7-1:

模仿上面的例子,画出交易总数最高的10个公司的条形图。

提示:可以使用sort_values(by= quantity) 来实现。



啊啊啊,血槽空了,我去补补血,剩下这两天尽快更新!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容