python数据可视化工具 pandas_Pandas数据可视化工具——Seaborn用法整理(下)

在前一篇文章 Pandas数据可视化工具——Seaborn用法整理(上),我们了解了如何使用这些Seaborn代码绘制分布图和分类图。在本文中,我们将继续讨论Seaborn提供的一些其他以绘制不同类型统计图的功能,我们将从矩阵图开始讨论。

矩阵图

矩阵图是一种以行和列的形式显示数据的图。Heat maps是矩阵图的一个典型例子。

Heat Maps

Heat Maps通常用于以矩阵形式绘制数值列之间的相关性。这里需要提到的是,要绘制矩阵图,需要有关于行和列的有价值的信息。延续上一篇文章的主题,我们将使用财报数据10-18年的数据,看看行和列标题是否都是有意义的信息。执行以下代码:

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

df = DataSource('financial_statement_CN_STOCK_A').read(start_date='2010-04-01',end_date='2018-04-02')

df.head()

在输出中,可以看到如下结果:

从输出中可以看到,列标头包含有用的信息,如股票代码、日期、固定资产、营业利润等。而行标头只包含索引0、1、2等。一种方法是调用数据集上的corr()方法。函数的作用是:返回数据集中所有数字列之间的相关性。执行以下代码:

df_0 = df[['date','instrument','fs_operating_profit','fs_current_assets','fs_net_profit_ttm','fs_roe','fs_gross_profit_margin','fs_free_cash_flow']]

df_0.corr()

(这里为了使结果图简洁,只选择了六个统计量。)

在输出中,将看到各列之间的相关系数,如下所示:

现在,要创建具有这些相关值的Heat Maps,需要调用heatmap()函数并将相关系数的DataFrame传递给它。请看下面的代码:

sns.heatmap(df_0.corr())

在输出中,将看到如下结果:

从输出中可以看出,heatmap的基本功能是为行和列值的每个组合绘制一个框。图像的颜色取决于渐变。例如,在上面的图像中,如果两个特征之间有很高的相关性,对应的单元格或者方框是白偏向于色的,另一方面,如果没有相关性,对应的单元格是黑色的。

通过为传递参数annot为True,相关系数也可以绘制在heatmap上。执行下面的代码,看看这是否有效:

sns.heatmap(df_0.corr(), annot=True)

还可以通过给cmap传递参数来更改heatmap的颜色。现在,看看下面的代码:

sns.heatmap(df_0.corr(), cmap='winter')

结果如下:

除了仅使用所有列之间的相关性之外,还可以使用pivot_table函数指定索引、列以及希望看到的与索引和列对应的值。为了展示pivot_table函数的运行情况,我们可以观察单个股票的情况。这里我们

执行以下代码导入数据集并查看数据集的前5行:

df_1 = df.ix[df['instrument']=='600760.SHA']#选出某一只股票单独作图(否则图像无意义)

df_2 = df_1.pivot_table(index='fs_quarter_index', columns='fs_quarter_year', values='fs_roe' )

df_2.head()

输出:

(由于财报数据没有类似月份的列,我们选择的时间也相对较短,本图美观度有所欠缺,不过重在总结方法)

现在使用pivot_table函数,我们可以创建一个Heat Maps,显示在特定年份的特定季度特定股票的净资产收益率(fs_roe)。为此,我们将输入季度(fs_quarter_index)作为index参数的值。index属性对应于行。接下来,我们需要将输入年份(fs_quarter_year)作为列参数。最后对于values参数,我们将输入净资产收益率(fs_roe)。执行以下代码:

sns.heatmap(df_2)

结果如下

从结果可以明显看出,该股票在这段时间里净资产收益率的变化

有时候,我们会发现方框或单元格是重叠的,单元格边界之间的区别不是很清楚。要在单元格之间创建清晰的边界,可以使用linecolor和linewidths参数。看看下面的代码:

sns.heatmap(df_2, linecolor='blue', linewidth=1)

在上面的代码中,我们输入了“blue”作为linecolor参数的值,而line width参数被设置为1。在输出中,您将看到每个单元格的蓝色边界:

如果需要更厚的边界,可以增加linewidth参数的值。

Cluster Map

除了Heat Map,另一个常用的矩阵图是Cluster Map。Cluster Map基本上使用层次聚类来对矩阵的行和列进行聚类。

让我们绘制一个Cluster Map,表示在特定季度和特定年份的净资产收益率。执行以下代码:

df_3 = df_1[['fs_quarter_index','fs_roe','fs_quarter_year']]

df_4 = df_3.pivot_table(index='fs_quarter_year', columns='fs_quarter_index', values='fs_roe')

sns.clustermap(df_4)

要绘制集群映射,需要使用clustermap函数,与heat map函数一样,传递的数据集应该具有行和列的有意义的标题。上面代码的结果是这样的:

在输出中,您可以看到根据特定季度和特定年份聚集起来的净资产收益率。

至此,我们结束了关于矩阵图的讨论。在下一节中,我们将开始讨论Seaborn库的网格功能。

Seaborn网格

Seaborn中的网格允许我们根据图中使用的特性操作子图。

Pair Grid

在本系列文章的第1部分中,我们了解了如何使用pair plot绘制数据集中数字列的所有可能组合的散点图。

现在让我们在上述代码的基础上绘制Pair Plot。执行以下代码:

df_5 = df[['fs_account_payable','fs_account_receivable','fs_capital_reserves','fs_construction_in_process','fs_undistributed_profit']]

sns.pairplot(df_5)

该代码输出是这样的:

现在我们来画Pair Grid看看Pair Grid和Pair Plot的区别。要创建对网格,只需将数据集传递给PairGrid函数,如下所示:

sns.PairGrid(df_5)

在输出中,可以看到空网格。这就是pair grid函数的作用。它返回数据集中所有特性的空网格集。

接下来,需要对pair grid函数返回的对象调用map函数,并将希望在网格上绘制的绘图类型传递给它。让我们用对网格绘制一个散点图。

df_5 = df_5.dropna()

df_6 = sns.PairGrid(df_5)

df_6.map(plt.scatter)

输出是这样的:

可以在看到df_5中所有列分别作x、y轴的散点图。

还可以在同一对网格上绘制不同类型的图。例如,如果想在对角线上绘制“分布”图,在对角线的上半部分绘制“kdeplot”图,在对角线的下半部分绘制“散点”图,那么可以分别使用map_diag、map_upper和map_lower函数。将绘制的绘图类型作为参数传递给这些函数。看看下面的代码:

grids = sns.PairGrid(df_5)

grids.map_diag(sns.distplot)

grids.map_upper(sns.kdeplot)

grids.map_lower(plt.scatter)

代码结果如下:

从上面的图像中可以看出pair grid函数的真正威力。对角线上是分布图,上半部分是核密度图,下半部分是散点图。

Facet Grids

Facet Grid用于将两个或两个以上的分类特征与两个或两个以上的数字特征进行绘图。让我们画一个 Facet Grid来展示这几个统计量两两之间的关系。

在本节中,我们将再次使用财报数据的部分列。执行以下代码加载数据集:

df_6 = df[['fs_quarter_index','fs_roe','fs_quarter_year','fs_account_payable','fs_account_receivable','fs_capital_reserves','fs_construction_in_process','fs_undistributed_profit']]

df_6.head()

要绘制Facet Grid,使用FacetGrid()函数。函数的第一个参数是数据集,第二个参数col指定要在列上绘图的特性,而row参数指定行上的特性。函数的作用是:返回一个对象。与pair grid类似,可以使用map函数指定要绘制的绘图类型。

执行以下脚本:(winsorize函数将df_6进行去极值处理,目的是使得结果更加具有表现力)

def winsorize(df, width=3):

df = df.copy()

factor_columns = set(df.columns).difference(['date','instrument'])

for factor in factor_columns:

mean = df[factor].mean()

sigma = df[factor].std()

df[factor] = df[factor].clip(mean-width*sigma,mean+width*sigma)

return df

df_6 = winsorize(df_6)

grid = sns.FacetGrid(data=df_6, col='fs_quarter_year', row='fs_quarter_index')

grid.map(sns.distplot, 'fs_roe')

在上面的代码中,我们在小平面网格上绘制了净资产收益率分布图。输出是这样的:

从输出中,您可以看到4×9个图,单个图上展示了各个股票在特定年份特定季度的净资产收益率(fs_roe)的分布,这由FacetGrid()函数指定。

对于不同的子图之间,子图的位置决定了该子图的时间:第一行第一列的图为2009年第一季度的净资产收益率的分布图,以此类推

除了为一个特征绘制分布图外,我们还可以绘制包含面网格上两个特征的散点图。

例如,下面的代码为年份和季度绘制了应付账款(fs_account_payable)和资本公积金(fs_capital_reserves)的散点图。

grid = sns.FacetGrid(data=df_6, col='fs_quarter_year', row='fs_quarter_index')

grid.map(sns.scatterplot, 'fs_account_payable','fs_capital_reserves')

输出结果如下:

回归图

回归图,顾名思义,是用来进行两个或多个变量之间的回归分析。

在这一节中,我们将研究线性模型图,它根据数据绘制出两个变量之间的线性关系以及最佳拟合回归线。

为了绘制线性模型,使用lmplot()函数。第一个参数是要在x轴上绘制的特征,第二个变量是要在y轴上绘制的特征。最后一个参数是数据集。执行以下代码:

sns.lmplot(x='fs_account_payable', y='fs_capital_reserves', data=df_6)

还可以根据分类特征绘制多个线性模型。特性名作为值传递给hue参数。例如,如果要绘制不同季度的时候应付账款(fs_account_payable)和资本公积金(fs_capital_reserves)之间关系的多个线性模型,根据不同季度的情况,可以使用lmplot函数如下:

sns.lmplot(x='fs_account_payable', y='fs_capital_reserves', data=df_6,hue='fs_quarter_index')

结果如下:

从输出可以看出,对于理想切割的钻石,克拉与价格之间的线性关系是最陡的,而对于合理切割的钻石,线性模型是最浅的。

除了为不同色调的cut feature绘制数据外,我们还可以为每个cut绘制一个plot。为此,需要将列名传递给col属性。看看下面的脚本:

sns.lmplot(x='fs_account_payable', y='fs_capital_reserves', data=df_6,col='fs_quarter_index')

在输出中,将看到钻石数据集的cut列中的每个值都有一个单独的列,如下所示:

还可以使用aspect和size参数更改绘图的大小和纵横比。看看下面的代码:

sns.lmplot(x='fs_account_payable', y='fs_capital_reserves', data=df_6,col='fs_quarter_index',aspect = 0.5,size = 8)

aspect参数定义宽度和高度之间的纵横比。长宽比为0.5意味着宽度是输出中所示高度的一半。

可以看出,图的大小已经发生了变化,字体大小仍然很小。在下一节中,我们将看到如何控制Seaborn图的字体和样式。

图像样式

Seaborn库提供了多种样式选项。在本节中,我们将讲解其中一些。

设置风格

函数的作用是:设置网格的样式。您可以将darkgrid、whitegrid、dark、white和tick作为参数传递给set_style函数。

在本节中,我们将再次使用df_6。执行以下代码以查看darkgrid样式。

df_6 = df_6.dropna()

sns.set_style('darkgrid')

sns.distplot(df_6['fs_roe'])

输出如下:

在输出中,您可以看到我们有带有网格的黑色背景。让我们看看whitegrid是什么样子。执行以下代码:

sns.set_style('whitegrid')

sns.distplot(df_6['fs_roe'])

输出如下:

现在你可以看到我们仍然有网格在背景中,但深灰色的背景是不可见的。我们建议尝试使用其他选项,看看哪种风格适合自己。

改变图大小

由于Seaborn在后台使用Matplotlib函数,可以使用Matplotlib的pyplot包来更改图形大小,如下图所示:

plt.figure(figsize=(8,4))

sns.distplot(df_6['fs_roe'])

在上面的代码中,我们将情节的宽度和高度分别设置为8英寸和4英寸。上面脚本的输出是这样的:

设置 Context

可以使用theset_context()函数,并将poster作为惟一的属性传递给它,如下所示:

sns.set_context('poster')

sns.distplot(df_6['fs_roe'])

在输出中,应该看到一个符合海报标准的图,如下所示。例如,可以看到字体比正常的图形大得多。

小结

Seaborn库是用于数据可视化的高级Python库。本文是关于在Python中使用Seaborn实现数据可视化的系列文章的第2部分。在这篇文章中,我们看到了如何在Seaborn中绘制回归图和矩阵图。我们还了解了如何更改绘图样式和使用网格函数来操作子图。

本文实现代码可直接前往BigQuant平台一键克隆代码进行实践研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm框架里面前端拿HTML写,ssm框架引入Vue,声明式渲染,标签的href拼接字符串

一、引入Vue在官网上下载vue.js。并用1.下载Vue.js,地址:Vue.js下载地址二、通过ajax获取后台参数,使用Vue渲染调用后台control,获取到数据,传到前端,使用Vue进行渲染。//详细分类,使用Vue渲染function fin…

html5 observer api,基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作

MutationObserver介绍MutationObserver给开发者们提供了一种能在某个范围内的DOM树发生变化时作出适当反应的能力.该API设计用来替换掉在DOM3事件规范中引入的Mutation事件.Mutation Observer(变动观察器)是监视DOM变动的接口。当DOM对象树发生任何变动时,Mutation …

Maven(五)使用Nexus搭建Maven私服

文章装载于:http://blog.csdn.net/jun55xiu/article/details/39497089 Nexus介绍 Nexus是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库下载所需要的构件(artifact),但这通常不是一个好的做法&am…

python mean dropna_小丸子踏入python之路:python_day05(用Pandas处理泰坦尼克船员获救数据titanic_train.csv)...

泰坦尼克船员获救数据:titanic_train.csv用excel打开数据集。显示如下:写在前边:为了方便以后运用numpy和pandas的库,分别造它们的别名np和pd.import pandas as pd #造pandas的别名为pdimport numpy as np #造numpy的别名为np一、…

计算机学测打多少字,速度测试,一分钟能打多少字?

六、速度测试——检验学习效果经过一段时间的练习,输入速度提高了不少吧,赶快来测试一下现在一分钟可以输入多少英文或汉字。金山打字通2010的“速度测试”功能不仅有基本的“屏幕对照”速度测试,还有“书本对照”测试及要求较高的“同声录入…

HDFS入门(1)

2015.07.12笔记 1.HDFS Distributed File System(操作系统实现人机交互,最重要的功能是文件管理,使用文件管理系统,windows、Linux文件管理系统有共性:用户可创建文件/夹,删除,修改权限&#xf…

竞赛图 计算机网络 应用题,我校学子获2020年“中国高校计算机大赛-网络技术挑战赛”全国总决赛一等奖(图)...

近日,2020年“中国高校计算机大赛-网络技术挑战赛”全国总决赛在温州浙南科技城落下帷幕。我校计算机与信息安全学院陈俊彦、雷晓春老师指导的“智载车队”团队(成员:林楷浩、陈澳格、黄湖)在创业先锋C系列中获得全国一等奖,在创新创意A系列中…

python string模块template_Python - 定制pattern的string模板(template) 详解

定制pattern的string模板(template) 详解本文地址: http://blog.csdn.net/caroline_wendy/article/details/28625179string.Template的pattern是一个正则表达式, 可以通过覆盖pattern属性, 定义新的正则表达式.如: 使用新的定界符"{{", 把{{var}}作为变量语法.代码:#…

建立远程桌面连接计算机无密码,win7远程桌面空密码的步骤_win7系统如何设置让远程桌面登录无需密码-win7之家...

在日常工作中,可能经常会使用到远程连接桌面功能,我们要远程桌面的话,通常是要输入密码才可以的,但是有些用户觉得麻烦,那么win7系统如何设置让远程桌面登录无需密码呢?带着大家的这个问题,本文…

android 请求网络异步载入

/*** 封装ProecssDialog对话框**/ public class LoadDialog extends ProgressDialog {private String title "进度对话框";private String message "载入数据中....";public LoadDialog(Context context, int theme) {super(context, theme);}/*** 用默认…

tkinter如何lable重复显示到同一行中_如何创建包含 CAD 导入和选择的仿真 App

在使用 COMSOL 软件二次开发的过程中,你可能会遇到这样的问题:如何使用 App 开发器创建可以处理 CAD 导入并能让用户交互式选择边界条件的仿真 App?我需要了解编程吗?今天我们将为您介绍在 COMSOL 软件中创建包含 CAD 导入和选择的…

计算机科学导论课后单词,计算机科学导论课后总结

计算机科学导论课后总结1老师上课给我们演示了一个迷宫的程序,然后我上网查找了一下,大致学习了一下这个程序的思想。迷宫这个题目和数据结构—图有关迷宫的随机生成和路径搜索主要和图的遍历有关,一般来说图的遍历主要有两种方式&#xff1a…

InnerClass内部类

1,内部类概述 定义:把A类定义在B类内部,则A类是内部类。如下所示: class Outer1{外部类String name1;public void show(){System.out.println("Outer1.show()"new Inner1().name);}class Inner1{//内部类String name;pu…

表单内如何直接贴图而不用上传图片_表单如何添加图片?

表单其实就是我们平常经常看到的收集信息的框框,如姓名、电话等,当然易表单就远不止这些哦,还可制作调查问卷,报名登记、投票评选和考试测评。平时大家都擅长于制作表单的文字内容,实际上表单里边添加一些图片会让表单…

Android应用的安全的攻防之战

一、前言 在前两篇破解的文章中,我们介绍了如何使用动态调试来破解apk,一个是通过调试smali源码,一个是通过调试so代码来进行代码的跟踪破解,那么今天我们就这两篇文章的破解方法,来看看Android中开发应用的过程中如何…

标准正态分布表_表达矩阵的归一化和标准化,去除极端值,异常值

我们阅读量破万的综述:RNA-seq这十年(3万字长文综述)给粉丝朋友们带来了很多理解上的挑战,所以我们开辟专栏慢慢介绍其中的一些概念性的问题,上一期:RNA-seq的counts值,RPM, RPKM, FPKM, TPM 的异同在数据挖掘过程&…

html input p,我想在input.phtml中创建下拉框。 (不要使用zend_form)

案例1:在你看来:echo $this->formSelect(name, Option 1, array(),array(Option 1, Option 2));1 ARG:选择,第二个arg的名称:值;第三个参数:attributs,第4 ARG:选择案例2&#xf…

HTML5学习

1. HTML5是W3C和WHCTWG合作的结果。 2. W3C 指 World Wide Web Consortium,万维网联盟。 3. HTML5新规则: 新特性应该基于 HTML、CSS、DOM 以及 JavaScript。减少对外部插件的需求(比如 Flash)更优秀的错误处理更多取代脚本的标记…

计算机网络关于封装成帧题目,上海第二工业大学-计算机网络通信期中试卷答案...

上海第二工业大学 (试卷编号: )2014-2015学年第2学期 计算机网络与通信 期中考试试卷姓名: 学号: 班级: 成绩:一、 填空题 (每空1分,共18分)1. 当前广泛提及的三网融合中的三网分别是 电信网络 、 电视网络…

python全套学习方法_python学习方法总结(内附python全套学习资料)

种一棵树最好的时间是十年前,第二好的时间是现在(文末有资料获取方法)先聊聊互联网转行那些事儿很多人是小白,想从事或转行互联网,想以python为切入口,那么恭喜你,这可能是你离互联网工作最捷径的一条道路了&#xff0…