8.2 Matplotlib 的应用

原文:matplotlib-applied

译者:飞龙

协议:CC BY-NC-SA 4.0(原文协议:Apache License 2.0)

  • 将 Matplotlib 可视化用于 Kaggle:泰坦尼克
  • 条形图,直方图,subplot2grid
  • 标准化绘图
  • 散点图,子图
  • 核密度估计绘图

将 Matplotlib 可视化用于 Kaggle:泰坦尼克

准备泰坦尼克数据用于绘图:

%matplotlib inline
import pandas as pd
import numpy as np
import pylab as plt
import seaborn# 设置 matplotlib 图形的全局默认大小
plt.rc('figure', figsize=(10, 5))# 将 seaborn 美学参数设为默认值
seaborn.set()df_train = pd.read_csv('../data/titanic/train.csv')def clean_data(df):# 获取性别的唯一值sexes = np.sort(df['Sex'].unique())# 生成性别的映射,从字符串到数值表示genders_mapping = dict(zip(sexes, range(0, len(sexes) + 1)))# 将性别从字符串转换为数值表示df['Sex_Val'] = df['Sex'].map(genders_mapping).astype(int)# 获取出发地的唯一值embarked_locs = np.sort(df['Embarked'].unique())# 生成出发地的映射,从字符串到数值表示embarked_locs_mapping = dict(zip(embarked_locs, range(0, len(embarked_locs) + 1)))# 将出发地从字符串转换为数值表示df = pd.concat([df, pd.get_dummies(df['Embarked'], prefix='Embarked_Val')], axis=1)# 填充出发地的缺失值# 由于大多数乘法都从 'S': 3 出发# 我们将出发地的缺失值赋为 'S'if len(df[df['Embarked'].isnull()] > 0):df.replace({'Embarked_Val' : { embarked_locs_mapping[np.nan] : embarked_locs_mapping['S'] }}, inplace=True)# 使用平均票价填充票价的缺失值if len(df[df['Fare'].isnull()] > 0):avg_fare = df['Fare'].mean()df.replace({ None: avg_fare }, inplace=True)# 为了保留年龄,制作它的副本,叫做 AgeFill# 我们会使用它来填充缺失值df['AgeFill'] = df['Age']# 对于每个乘客的舱位,根据 Sex_Val 决定年龄特点 # 我们将使用中值而不是均值# 因为年龄直方图看起来是右偏的df['AgeFill'] = df['AgeFill'] \.groupby([df['Sex_Val'], df['Pclass']]) \.apply(lambda x: x.fillna(x.median()))# 定义新的特征 FamilySize,它是 # Parch(船上的父母或子女数量)和 # SibSp(船上的兄弟姐妹或配偶数量)的总和df['FamilySize'] = df['SibSp'] + df['Parch']return dfdf_train = clean_data(df_train)

条形图,直方图,subplot2grid

# 包含子图的 matplotlib 图像尺寸
figsize_with_subplots = (10, 10)# 配置绘图网格
fig = plt.figure(figsize=figsize_with_subplots)
fig_dims = (3, 2)# 绘制死亡和生存数量
plt.subplot2grid(fig_dims, (0, 0))
df_train['Survived'].value_counts().plot(kind='bar', title='Death and Survival Counts',color='r',align='center')# 绘制舱位计数
plt.subplot2grid(fig_dims, (0, 1))
df_train['Pclass'].value_counts().plot(kind='bar', title='Passenger Class Counts')# 绘制性别计数
plt.subplot2grid(fig_dims, (1, 0))
df_train['Sex'].value_counts().plot(kind='bar', title='Gender Counts')
plt.xticks(rotation=0)# 绘制出发港口计数
plt.subplot2grid(fig_dims, (1, 1))
df_train['Embarked'].value_counts().plot(kind='bar', title='Ports of Embarkation Counts')# 绘制年龄直方图
plt.subplot2grid(fig_dims, (2, 0))
df_train['Age'].hist()
plt.title('Age Histogram')# <matplotlib.text.Text at 0x11357ac50>

# 获取出发港口的唯一值和最大值
family_sizes = np.sort(df_train['FamilySize'].unique())
family_size_max = max(family_sizes)df1 = df_train[df_train['Survived'] == 0]['FamilySize']
df2 = df_train[df_train['Survived'] == 1]['FamilySize']
plt.hist([df1, df2], bins=family_size_max + 1, range=(0, family_size_max), stacked=True)
plt.legend(('Died', 'Survived'), loc='best')
plt.title('Survivors by Family Size')# <matplotlib.text.Text at 0x1138e6f10>

标准化绘图

pclass_xt = pd.crosstab(df_train['Pclass'], df_train['Survived'])# 标准化 crosstab 并使和为一
pclass_xt_pct = pclass_xt.div(pclass_xt.sum(1).astype(float), axis=0)pclass_xt_pct.plot(kind='bar', stacked=True, title='Survival Rate by Passenger Classes')
plt.xlabel('Passenger Class')
plt.ylabel('Survival Rate')# 根据性别绘制生存率
females_df = df_train[df_train['Sex'] == 'female']
females_xt = pd.crosstab(females_df['Pclass'], df_train['Survived'])
females_xt_pct = females_xt.div(females_xt.sum(1).astype(float), axis=0)
females_xt_pct.plot(kind='bar', stacked=True, title='Female Survival Rate by Passenger Class')
plt.xlabel('Passenger Class')
plt.ylabel('Survival Rate')# 根据舱位绘制生存率
males_df = df_train[df_train['Sex'] == 'male']
males_xt = pd.crosstab(males_df['Pclass'], df_train['Survived'])
males_xt_pct = males_xt.div(males_xt.sum(1).astype(float), axis=0)
males_xt_pct.plot(kind='bar', stacked=True, title='Male Survival Rate by Passenger Class')
plt.xlabel('Passenger Class')
plt.ylabel('Survival Rate')# <matplotlib.text.Text at 0x113ccbc50>

散点图,子图

# 建立绘图网格
fig, axes = plt.subplots(2, 1, figsize=figsize_with_subplots)# 按照 Survived 分组的 AgeFill 的直方图
df1 = df_train[df_train['Survived'] == 0]['Age']
df2 = df_train[df_train['Survived'] == 1]['Age']
max_age = max(df_train['AgeFill'])axes[1].hist([df1, df2], bins=max_age / 10, range=(1, max_age), stacked=True)
axes[1].legend(('Died', 'Survived'), loc='best')
axes[1].set_title('Survivors by Age Groups Histogram')
axes[1].set_xlabel('Age')
axes[1].set_ylabel('Count')# 绘图 Survived 和 AgeFill 的散点图
axes[0].scatter(df_train['Survived'], df_train['AgeFill'])
axes[0].set_title('Survivors by Age Plot')
axes[0].set_xlabel('Survived')
axes[0].set_ylabel('Age')# <matplotlib.text.Text at 0x113f4d710>

核密度估计绘图

# 获取舱位的唯一值
passenger_classes = np.sort(df_train['Pclass'].unique())for pclass in passenger_classes:df_train.AgeFill[df_train.Pclass == pclass].plot(kind='kde')
plt.title('Age Density Plot by Passenger Class')
plt.xlabel('Age')
plt.legend(('1st Class', '2nd Class', '3rd Class'), loc='best')# <matplotlib.legend.Legend at 0x113175ed0>

数据科学 IPython 笔记本 8.2 Matplotlib 的应用相关推荐

  1. 数据科学 IPython 笔记本 8.3 Matplotlib 可视化

    8.3 Matplotlib 可视化 原文:Visualization with Matplotlib 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册> ...

  2. 数据科学 IPython 笔记本 8.15 Matplotlib 中的三维绘图

    8.15 Matplotlib 中的三维绘图 原文:Three-Dimensional Plotting in Matplotlib 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<P ...

  3. 数据科学 IPython 笔记本 8.1 matplotlib

    8.1 matplotlib 原文:matplotlib 译者:飞龙 协议:CC BY-NC-SA 4.0 致谢:派生于 Olivier Grisel 的 sklearn 和 IPython 并行机器 ...

  4. 数据科学 IPython 笔记本 翻译完成

    原文:donnemartin/data-science-ipython-notebooks 译者:飞龙 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以 ...

  5. 数据科学 IPython 笔记本 8.14 自定义 Matplotlib:配置和样式表

    8.14 自定义 Matplotlib:配置和样式表 原文:Customizing Matplotlib: Configurations and Stylesheets 译者:飞龙 协议:CC BY- ...

  6. 数据科学 IPython 笔记本 8.10 自定义颜色条

    8.10 自定义颜色条 原文:Customizing Colorbars 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Data S ...

  7. 数据科学 IPython 笔记本 8.9 自定义图例

    8.9 自定义图例 原文:Customizing Plot Legends 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Data ...

  8. 数据科学 IPython 笔记本 8.7 密度和等高线图

    8.7 密度和等高线图 原文:Density and Contour Plots 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Da ...

  9. 数据科学 IPython 笔记本 8.4 简单的折线图

    8.4 简单的折线图 原文:Simple Line Plots 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Python Data Scienc ...

最新文章

  1. Swift学习总结【持续更新】
  2. ubuntu网卡配置
  3. value_counts()
  4. Linux进程实践(1) --Linux进程编程概述
  5. 协议关键技术_北京理工大学与华为签署战略合作协议
  6. VScode配置java开发环境
  7. 【搬运】卡尔曼滤波详解及实例
  8. PyQt5学习--基本窗口控件--QLabel
  9. android 更新apk 应用为安装,应用未安装!从Android Studio构建安装APK时出错 - java
  10. RAR for Linux 命令详解
  11. 单片机原理及应用课程设计
  12. 螺钉螺母匹配问题---快速排序
  13. RestTemplate.exchange各种用法(包括泛型等 --全)
  14. 小尺寸android 手机推荐,喜欢小屏安卓手机的来看看,这三款便宜又好用
  15. 客户网站中经常用到的英文
  16. Android开发5年,面试问到底层实现原理,被怼得,程序员中年危机
  17. python3.x 实现天气查询
  18. 基于java失物招领系统
  19. NVT | NVT 67X IQ移植
  20. javax.mail.MessagingException: 500 Error: bad syntax问题

热门文章

  1. (14)System Verilog范围随机函数
  2. (05)System Verilog 组合逻辑与时序逻辑区别
  3. (20)System Verilog接口interface设计示例
  4. 基于FPGA实现SDI接口
  5. java python c++比喻图_Java/Python/PHP/C++图文详解它们之间的尿性
  6. STM32使用DMA接收串口数据
  7. python三维图能画地图_Python数据可视化:3D动态图,让你的足迹实现在地图上
  8. ajax nginx 转发 sessionid_「查缺补漏」巩固你的Nginx知识体系
  9. 嵌入式Linux系统编程学习之十七计时器与信号
  10. html是一种用于创建网页的标准标记语言,html