Educoder Basemap和Seaborn 第2关:Seaborn图形介绍

第2关:Seaborn图形介绍(代码看下边)


任务描述

本关任务:编写一个使用Seaborn来绘制散点图的程序。

相关知识

Seaborn的主要思想是用高级命令为统计数据探索和统计模型拟合创建各种图形,下面将介绍一些Seaborn中的数据集和图形类型。

虽然所有这些图形都可以用Matplotlib命令实现(其实Matplotlib就是Seaborn的底层),但是用 Seaborn API会更方便。

频次直方图、KDE和密度图

在进行统计数据可视化时,我们通常想要的就是频次直方图和多变量的联合分布图。在Matplotlib里面我们已经见过,相对比较简单:

 
  1. data = np.random.multivariate_normal([0, 0], [[5, 2], [2, 2]], size=2000)
  2. data = pd.DataFrame(data, columns=['x', 'y'])
  3. for col in 'xy':
  4. plt.hist(data[col], normed=True, alpha=0.5)

除了频次直方图,我们还可以用KDE获取变量分布的平滑估计。在seaborn通过sns.kdeplot来实现:

 
  1. for col in 'xy':
  2. sns.kdeplot(data[col], shade=True)

使用distplot可以将频次直方图和KDE结合起来:

 
  1. sns.distplot(data['x'])
  2. sns.distplot(data['y'])

如果向kdeplot输入的是二维数据集,那么就可以获得一个二维数据可视化图:sns.kdeplot(data)

矩阵图

当我们需要对多维数据进行可视化是,最终都要使用矩阵图,矩阵图对于探索多维数据不同维度间的相关性非常有效。

下面将用鸢尾花数据集来演示,其中有三种鸢尾花的花瓣与花萼数据:

 
  1. data = pd.read_csv("iris.csv")
  2. sns.pairplot(data,hue="species") #hue 选择分类列

分面频次直方图

有时观察数据最好的方法就是借助数据子集的频次直方图,SeabornFacetGrid函数让这件事变得非常简单。

来看看某个餐厅统计的服务员收取小费的数据:

 
  1. tips = pd.read_csv('tips.csv')
  2. g = sns.FacetGrid(tips, col="time", row="smoker")
  3. g = g.map(plt.hist, "total_bill", color="r")

条形图

对于时间序列数据可以使用sns.factorplot画出条形图,下面将使用行星数据来演示:

 
  1. planets = pd.read_csv('planets.csv')
  2. with sns.axes_style('white'):
  3. g = sns.factorplot("year", data=planets, aspect=2,
  4. kind="count", color='steelblue')
  5. g.set_xticklabels(step=5)

还可以对用不同方法发现行星的数量:

 
  1. with sns.axes_style('white'):
  2. g = sns.factorplot("year", data=planets, aspect=4.0, kind='count',
  3. hue='method', order=range(2001, 2015))
  4. g.set_ylabels('Number of Planets Discovered')

折线图

seaborn绘制折线图使用lineplot函数,该函数所传数据必须为一个pandas数组,这一点跟matplotlib里有较大的区别,并且一开始使用较为复杂。

首先sns.lineplot里有几个参数值得注意:

  • x:plot图的xlabel

  • y:plot图的ylabel

  • ci:与估计器聚合时绘制的置信区间的大小;

  • data: 所传入的pandas数组。

 
  1. x = np.linspace(100, 50, 6)
  2. y = np.array([0.194173876, 0.161086478, 0.138896531, 0.129826697, 0.133716787, 0.152458326])
  3. summary = []
  4. for i in range(6):
  5. x_t = x[i]
  6. y_t = y[i]
  7. summary.append([x_t, y_t])
  8. data =pd.DataFrame(summary )
  9. sns.lineplot(x=0,y=1,ci=None,data=data)

编程要求

本关的编程任务是补全右侧上部代码编辑区内的相应代码,根据输入的文件路径读取文件并使用factorplot绘制关于smoker字段的条形图以统计吸烟和不吸烟的人数,具体可视化要求如下:

  • 设置Seaborn样式为white

  • 设置颜色为steelblue

  • 设置kindcount

  • 图形的figsize(10, 10)

  • 文件名为Task2/img/T1.png

  • 具体要求请参见后续测试样例。

请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!

测试说明

平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。

测试输入:

无测试输入

预期输出: 生成图片与预期图片一致


开始你的任务吧,祝你成功!

import matplotlib
matplotlib.use("Agg")
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
def student(file_path):
    # ********* Begin *********#
    plt.figure(figsize=(10,10))
    tips = pd.read_csv(file_path)
    with sns.axes_style('white'):
        sns.factorplot("smoker", data=tips, kind="count",  color='steelblue')
    plt.savefig("Task2/img/T1.png")
    plt.show()
    # ********* End *********#

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值