python数据可视化分析

首先载入必要的库

import warnings

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

sns.set()

warnings.filterwarnings('ignore')

单变量可视化

单变量(univariate)分析一次只关注一个变量。当我们独立地分析一个特征时,通常最关心的是该特征值的分布情况。下面考虑不同统计类型的变量,以及相应的可视化工具。

一、数值特征

数量特征(quantitative feature)的值为有序数值。这些值可能是离散的,例如整数,也可能是连续的,例如实数。

1、直方图:hist

直方图依照相等的间隔将值分组为柱,它的形状可能包含了数据分布的一些信息,如高斯分布、指数分布等。当分布总体呈现规律性,但有个别异常值时,你可以通过直方图辨认出来。

features = [‘列名1’, ‘列名2’]

df[features].hist(figsize=(10, 4))

其中figsize变量是指每张图片尺寸大小。

2、密度图:plot

密度图(density plots),也叫核密度图( kernel density estimate,KDE)是理解数值变量分布的另一个方法。它可以看成是直方图平滑( smoothed )的版本。相比直方图,它的主要优势是不依赖于柱的尺寸,更加清晰。

features = [‘列名1’, ‘列名2’]

df[features].plot(kind=‘density’, subplots=True, layout=(1, 2),sharex=False, figsize=(10, 4), legend=False, title=features)

其中kind=‘density表示的是类型是密度图,layout=(1, 2)表示呈现一行两列图的格式,sharex=False表示不共享X轴,figsize变量是指每张图片尺寸大小。

当然,还可以使用 seaborn 的 distplot() 方法观测数值变量的分布。例如,Total day minutes 每日通话时长 的分布。默认情况下,该方法将同时显示直方图和密度图。

sns.distplot(df[‘列名’])

上图中直方图的柱形高度已进行归一化处理,表示的是密度而不是样本数

3、箱型图:boxplot()

箱形图的主要组成部分是箱子(box),须(whisker)和一些单独的数据点(离群值),分别简单介绍如下:

箱子显示了分布的四分位距,它的长度由 25th(Q1,下四分位数)25th(Q1,下四分位数) 和

75th(Q3,上四分位数)75th(Q3,上四分位数) 决定,箱中的水平线表示中位数 (50%50%)。

须是从箱子处延伸出来的线,它们表示数据点的总体散布,具体而言,是位于区间

(Q1−1.5⋅IQR,Q3+1.5⋅IQR)(Q1−1.5⋅IQR,Q3+1.5⋅IQR)的数据点,其中

IQR=Q3−Q1IQR=Q3−Q1,也就是四分位距。

离群值是须之外的数据点,它们作为单独的数据点,沿着中轴绘制。

sns.boxplot(x=‘列名’, data=df)

4、提琴型图:violinplot()

提琴形图和箱形图的区别是,提琴形图聚焦于平滑后的整体分布,而箱形图显示了单独样本的特定统计数据。

fig,axes = plt.subplots(1, 2, sharey=True, figsize=(6, 4))

sns.boxplot(data=df[‘列名’], ax=axes[0])

sns.violinplot(data=df[‘列名’], ax=axes[1])

其中:plt.subplots(1, 2, sharey=True, figsize=(6, 4))表示绘制多子图。

sharex, sharey:

设置为 True 或者 ‘all’ 时,所有子图共享 x 轴或者 y 轴

设置为 False or ‘none’ 时,所有子图的 x,y 轴均为独立

设置为 ‘row’ 时,每一行的子图会共享 x 或者 y 轴

设置为 ‘col’ 时,每一列的子图会共享 x 或者 y 轴

二、类别特征和二元特征

类别特征(categorical features

take)反映了样本的某个定性属性,它具有固定数目的值,每个值将一个观测数据分配到相应的组,这些组称为类别(category)。

假如某一数值特征重复值很多,因此,既可以看成数值变量,也可以看成有序类别变量。

二元(binary)特征是类别特征的特例,其可能值有 2 个。即bool类型

条形图:countplot()

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 4))

sns.countplot(x=‘Churn’, data=df, ax=axes[0])

sns.countplot(x=‘Customer service calls’, data=df, ax=axes[1])

其中:nrows,ncols:子图的行列数

子图的行列数。

条形图和直方图的区别如下:

直方图适合查看数值变量的分布,而条形图用于查看类别特征。

直方图的 X 轴是数值;条形图的 X 轴可能是任何类型,如数字、字符串、布尔值。

直方图的 X 轴是一个笛卡尔坐标轴;条形图的顺序则没有事先定义。

多变量可视化

多变量(multivariate)图形可以在单张图像中查看两个以上变量的联系,和单变量图形一样,可视化的类型取决于将要分析的变量的类型。

一、数量与数量

1、相关矩阵

相关矩阵可揭示数据集中的数值变量的相关性。这一信息很重要,因为有一些机器学习算法(比如,线性回归和逻辑回归)不能很好地处理高度相关的输入变量。

首先要丢弃非数值变量

numerical = list(set(df.columns) -set([‘非数量值列名1’, ‘非数量值列名2’,…]))

然后计算相关系数和绘图

corr_matrix = df[numerical].corr()

sns.heatmap(corr_matrix)

2、散点图:scatter()

散点图(scatter plot)将两个数值变量的值显示为二维空间中的笛卡尔坐标(Cartesian coordinate)。通过 matplotlib 库的 scatter() 方法可以绘制散点图

plt.scatter(df[‘列名1’], df[‘列名2’])

seaborn 库的 jointplot() 方法在绘制散点图的同时会绘制两张直方图,某些情形下它们可能会更有用。

sns.jointplot(x=‘列名1’, y=‘列名2’,data=df, kind=‘scatter’)

jointplot() 方法还可以绘制平滑过的散点直方图。

sns.jointplot(‘列名1’, ‘列名2’, data=df, kind=“kde”, color=“g”)

上图基本上就是之前讨论过的核密度图的双变量版本。

3、散点图矩阵

在某些情形下,我们可能想要绘制如下所示的散点图矩阵(scatterplot matrix)。它的对角线包含变量的分布,并且每对变量的散点图填充了矩阵的其余部分

numerical = list(set(df.columns) -set([‘非数量值列名1’, ‘非数量值列名2’,…]))

%config InlineBackend.figure_format = ‘png’

sns.pairplot(df[numerical])

二、数量和类别

sns.lmplot(‘数量列名1’, ‘数量列名2’,data=df, hue=‘类别列名’, fit_reg=False)

三、类别和类别

前面条形图加上hue参数即可。

sns.countplot(x=‘类别1’, hue=‘类别2’, data=df)

全局数据集可视化

上面我们一直在研究数据集的不同方面(facet),通过猜测有趣的特征并一次选择少量特征进行可视化。如果我们想一次性显示所有特征并仍然能够解释生成的可视化,该怎么办?

通过降维:

大多数现实世界的数据集有很多特征,每一个特征都可以被看成数据空间的一个维度。因此,我们经常需要处理高维数据集,然而可视化整个高维数据集相当难。为了从整体上查看一个数据集,需要在不损失很多数据信息的前提下,降低用于可视化的维度。这一任务被称为降维(dimensionality reduction)。降维是一个无监督学习(unsupervised learning)问题,因为它需要在不借助任何监督输入(如标签)的前提下,从数据自身得到新的低维特征。

2种降维方法:

PCA:主成分分析(Principal Component Analysis, PCA)是一个著名的降维方法,但主成分分析的局限性在于,它是线性(linear)算法,这意味着对数据有某些特定的限制。

t-SNE:与线性方法相对的,有许多非线性方法,统称流形学习(Manifold Learning)。著名的流形学习方法之一是 t-SNE。

关于t-SNE:

它的基本思路很简单:为高维特征空间在二维平面(或三维平面)上寻找一个投影,使得在原本的 n 维空间中相距很远的数据点在二维平面上同样相距较远,而原本相近的点在平面上仍然相近。

步骤:

该数据库创建一个 t-SNE 表示,首先加载依赖。

from sklearn.manifold import TSNE

from sklearn.preprocessing import StandardScaler

去除 State 州 和 Churn 离网率 变量,然后用 pandas.Series.map() 方法将二元特征的「Yes」/「No」转换成数值。

(将其他文本特征和目标特征去除)

X = df.drop(['Churn', 'State'], axis=1)

X['International plan'] = X['International plan'].map({'Yes': 1, 'No': 0})

X['Voice mail plan'] = X['Voice mail plan'].map({'Yes': 1, 'No': 0})

使用 StandardScaler() 方法来完成归一化数据,即从每个变量中减去均值,然后除以标准差。

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)

现在可以构建 t-SNE 表示了。

tsne = TSNE(random_state=17)

tsne_repr = tsne.fit_transform(X_scaled)

然后以图形的方式可视化

plt.scatter(tsne_repr[:, 0], tsne_repr[:, 1], alpha=.5)

根据离网情况给 t-SNE 表示加上色彩(蓝色表示忠实用户,黄色表示不忠实用户),形成离网情况散点图

plt.scatter(tsne_repr[:, 0], tsne_repr[:, 1],

c=df['Churn'].map({False: 'blue', True: 'orange'}), alpha=.5)

可以看到,离网客户集中在低维特征空间的一小部分区域。为了更好地理解这一图像,可以使用剩下的两个二元特征,即 International plan 国际套餐 和 Voice mail plan 语音邮件套餐 给图像着色,蓝色代表二元特征的值为 Yes,黄色代表二元特征的值为 No。

_, axes = plt.subplots(1, 2, sharey=True, figsize=(12, 5))

for i, name in enumerate(['International plan', 'Voice mail plan']):

axes[i].scatter(tsne_repr[:, 0], tsne_repr[:, 1],

c=df[name].map({'Yes': 'orange', 'No': 'blue'}), alpha=.5)

axes[i].set_title(name)

最后,了解下 t-SNE 的缺陷

计算复杂度高。如果你有大量样本,你应该使用 Multicore-TSNE

随机数种子的不同会导致图形大不相同,这给解释带来了困难。通常而言,你不应该基于这些图像做出任何决定性的结论,因为它可能和单纯的猜测差不多。当然,t-SNE 图像中的某些发现可能会启发一个想法,这个想法可以通过更全面深入的研究得到确认。

基于python的可视化分析_Python数据的可视化分析,python相关推荐

  1. MIMOSA2: 基于微生物组和代谢组数据的整合分析

    文章目录 MIMOSA2: 基于微生物组和代谢组数据的整合分析 MIMOSA2的工作原理 MIMOSA2分析的主要步骤 软件部署 我们来看看MIMOSA2究竟做了什么? 运行计算 模式1:基于Gree ...

  2. 中文整合包_MIMOSA2: 基于微生物组和代谢组数据的整合分析

    MIMOSA2:基于微生物组和代谢组数据的整合分析 MIMOSA2 升级自MIMOSA1.是 Borenstein 实验室(http://borensteinlab.com/ , 专注宏基因组系统 生 ...

  3. Python爬虫爬取疫情数据并可视化展示

    这篇文章主要介绍了Python利用爬虫爬取疫情数据并进行可视化的展示,文中的示例代码讲解清晰,对工作或学习有一定的价值,需要的朋友可以参考一下.编程资料点击领取 目录 知识点 开发环境 爬虫完整代码 ...

  4. python科学坐标系绘制分析_python数据可视化案例——平行坐标系(使用pyecharts或pandas)...

    平行坐标是可视化高维几何和分析多元数据的常用方法. 为了在n维空间中显示一组点,绘制由n条平行线组成的背景,通常是垂直且等距的.所述的点N 维空间被表示为折线与顶点在平行的轴线: 第i 轴上顶点的位置 ...

  5. python 豆瓣评论数据分析_Python数据可视化分析--豆瓣电影Top250

    Python数据分析–豆瓣电影Top250 利用Python爬取豆瓣电影TOP250并进行数据分析,对于众多爬虫爱好者,应该并不陌生.很多人都会以此作为第一个练手的小项目.当然这也多亏了豆瓣的包容,没 ...

  6. python数据分析图表展示_NBA数据分析_python数据爬取_可视化图形_python数据可视化案例-帆软...

    之前手痒做了一次NBA可视化分析,发个微头条,好多人追着我问教程,这两天终于闲下来了,花时间整理这篇NBA可视化分析教程,手把手教大家做一次炫酷的数据可视化分析! 先部分展示本次教程的作品: 数据获取 ...

  7. python前端框架实例_Python数据可视化:PyQt5 + ECharts框架实例

    引言 对于Python下桌面软件的开发已经有了很多数据可视化的库,如Matplotlib.Seaborn.Pyqtgraph.Plotly等等,但这些库更适合于后端程序员的软件开发. 实际上在前端网页 ...

  8. python蜡烛图预测_Python数据可视化:如何用mplfinance创建蜡烛图

    一图胜千言,使用Python的matplotlib库,可以快速创建高质量的图形. 我们团队推出一个新的系列教程:Python数据可视化,针对初级和中级用户,将理论和示例代码相结合,使用matplotl ...

  9. python 财务分析可视化方法_Python数据可视化的四种简易方法

    Python数据可视化的四种简易方法 作者:PHPYuan 时间:2018-11-28 03:40:43 摘要: 本文讲述了热图.二维密度图.蜘蛛图.树形图这四种Python数据可视化方法. 数据可视 ...

最新文章

  1. 在DataTable中添加行和列数据
  2. move函数c语言,C++11 move()函数:将左值强制转换为右值
  3. 你知道面试必问的AOP吗(1),2021吊打面试官系列
  4. debian 文件夹中文件大小_Linux下查看文件和文件夹大小 删除日志
  5. 通过ssl调用远程WebService
  6. 百度飞桨和Imagination宣布在全球AI生态系统方面开展合作
  7. 上海市城镇廉租住房申请条件
  8. [XSY] 最长公共子串对(后缀自动机)
  9. html表格全屏显示,tableView滑动全屏显示
  10. php 连接sap rfc 乱码,[RFC] sap rfc调用时判断连接状态
  11. Navicat for MySQL 1130 - Host ‘DeskTop-**‘ is not allowed to connect to this MySQL-server错误解决
  12. python3.8.5-Python 3.8.5 正式发布
  13. 【论文】NAACL2019 抽取式摘要之 SUMO
  14. 亿阳防火墙-命令行指令参考手册
  15. 在Flask程序中实现GitHub登录和GitHub资源交互
  16. MATLAB卷积动画演示
  17. idea 如何查看jdk源码
  18. 拼多多砍价小程序源码-带搭建教程-可开流量主
  19. 想学python网课哪个好过_python入门:想学python网课哪个好?
  20. android导航功能介绍,百度导航功能介绍

热门文章

  1. 攻防世界007 伪造xff_referer
  2. 比较五种搜索Rapidshare的方法
  3. OC xcode 两个view重叠,先后层次关系的调整
  4. STM32WL LoRaWAN节点设备学习记录(一)
  5. Laya 实操二:原始宽高+反转+九宫格+Handler
  6. 浅谈为什么倒序遍历List删除元素没有问题
  7. 线性代数系列(十一)--正交矩阵和正交化
  8. etc/xinetd.d目录介绍
  9. 【矩阵论】线性空间与线性变换(6)
  10. EasyExcel · 写excel