Python数据分析与可视化(Python数据分析与可视化)

【Python数据分析与可视化】期末复习笔记
  • 1. 数据分析与可视化概述
  • 5. pandas数据载入与预处理
  • 10. SciPy科学计算基础
1. 数据分析与可视化概述
  • 数据分析 是一个探索性的过程,通常从特定的问题开始。它需要好奇心、寻找答案的欲望和很好的韧性,因为这些答案并不总是容易得到的。
  • 数据可视化 ,即数据的可视化展示。有效的可视化可显著减少受众处理信息和获取有价值见解所需的时间。
  • 数据分析和数据可视化这两个术语密不可分。在实际处理数据时,数据分析先于可视化输出,而可视化分析又是呈现有效分析结果的一种好方法。

数据可视化:是关于数据视觉表现形式的科学技术研究。其中,这种数据的视觉表现形式被定义为“一种以某种概要形式抽提出来的信息,包括相应信息单位的各种属性和变量”。

数据可视化主要是借助于图形化手段,清晰有效地传达与沟通信息。

常用工具
  1. Microsoft Excel
  2. R语言
  3. Python语言
  4. SAS软件
  5. SPSS
  6. 专用的可视化分析工具

Power BI、Tableau、Gehpi和Echarts

Python常用类库
  1. NumPy
  2. SciPy
  3. Pandas
  4. Matplotlib
  5. Seaborn
  6. Scikit-learn
Jupyter notebook中的常用快捷方式

Python数据分析与可视化(Python数据分析与可视化)(1)

2. Python编程基础

Python是一个结合了 解释性、编译性、互动性和面向对象 的高级程序设计语言,结构简单,语法定义清晰。Python最具特色的就是使用缩进来表示代码块,不需要使用大括号{}。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。

  • Python3 中有六个标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)。其中, 不可变数据类型 有:Number、String、Tuple; 可变数据类型有 :List、Dictionary、Set。
  • Python3支持的数字类型有int(整数)、float(浮点数)、bool(布尔型)、complex(复数)四种类型。
  • Python 中的变量是不需要声明数据类型的,变量的“ 类型 ”是 所指的内存中被赋值对象的类型
  • 同一变量可以反复赋值 ,而且可以是不同类型的变量,这也是Python语言称之为动态语言的原因。
  • 反斜杠为转义符
  • 字典 中的键必须是唯一的,只能使用 不可变的对象 (比如字符串)来作为字典的键,字典中的键/值对是没有顺序的。
  • 集合 是一个由唯一元素组成的非排序集合体。也就是说,集合中的元素没有特定顺序, 集合中没有重复项 。可以使用大括号{ }或者set()函数创建集合,但是, 创建一个空集合必须用 set() ,因为{ }是用来创建一个空字典。

Python第三方包的安装方式较多,本书建议采用以下方式进行安装和管理:

(1)在CMD命令窗口中,使用conda命令进行自动下载安装,用法如下:

conda install <包名称列表> #安装包 conda remove <包名称列表> #卸载包 conda search<搜索项> #搜索包 conda list #查看所有包 conda update<包名称> #升级包

(2)在CMD命令窗口中使用pip命令,用法如下:

pip install <包名> #安装包 pip install--upgrade <包名> #更新包 pip uninstall <包名> #删除包

也可以在 Jupyter notebook 的cell中运行pip命令执行相应的命令,只需在命令前加“!”,如执行 !pip install 包名 进行包的安装。

按 esc 键切换为命令模式,按 enter 键进入编辑模式

3. NumPy数值计算基础NumPy简介

NumPy是在1995年诞生的Python库 Numeric 的基础上建立起来的,但真正促使NumPy的发行的是Python的SciPy库。 但SciPy中并没有合适的类似于Numeric中的对于基础数据对象处理的功能 。于是,SciPy的开发者将SciPy中的一部分和Numeric的设计思想结合,在2005年发行了NumPy。

NumPy是Python的一种开源的数值计算扩展库。它包含很多功能,如 创建n维数组(矩阵)、对数组进行函数运算、数值积分 等。 NumPy的诞生弥补了这些缺陷,它提供了两种基本的对象:

  • ndarray:是储存单一数据类型的多维数组。
  • ufunc:是一种能够对数组进行处理的函数。
NumPy常用函数

通常来说,ndarray是一个通用的同构数据容器,即其中的所有元素都需要相同的类型。利用array函数可创建ndarray数组。

  • np.array(object, dtype,ndmin):利用array函数创建数组对象
    • ndmin:接收int,制定生成数组应该具有的最小维数,默认为None
  • np.arange(start, stop, step, dtype):创建等差一维数组
    • step:步长,可省略,默认步长为1;
    • dtype:设置元素的数据类型,默认使用输入数据的类型。
  • linspace(start, end, count):创建等差数列
    • stop: 结束值;生成的元素不包括结束值
    • num:要生成的等间隔样例数量
  • logspace(start, end, count):创建等比数列
    • start, stop代表的是10的幂,默认基数base为10,第三个参数元素个数。
  • diag:创建对角矩阵,即对角线元素为0或指定值,其他元素为0
    • 格式: np.diag(v, k=0) :np.diag([1,2,3,4])
  • eye:创建一个对角线位置为1,其他位置全为0的矩阵
  • Sort: axis=1 ,沿横轴排序, axis=0 ,沿着纵轴排序.
  • argsort,lexsort:索引数组,索引值表示数据在新的序列中的位置.
  • tile(A, reps):实现数据重复
  • repeat(a, reps, axis=None)
ndarray 对象属性和数据转换ndarray对象属性及其说明:
  • ndim:返回数组的轴的个数(秩)
  • shape:返回数组的维度
  • size:返回数组元素个数
  • dtype:返回数据类型
  • itemsize:返回数组中每个元素的字节大小
生成随机数

在NumPy.random模块中,提供了多种随机数的生成函数。如randint函数生成指定范围的随机整数来构成指定形状的数组。

np.random.randint(low, high = None, size = None)

random模块的常用随机数生成函数:

Python数据分析与可视化(Python数据分析与可视化)(2)

数组变换数组重塑

np.reshape(a, newshape, order='C')

  • a:需要处理的数据
  • newshape:新维度—整数或整数元组
  • reshape的参数中的其中一个可以设置为-1,表示数组的维度可以通过数据本身来推断
数据散开(ravel)数据扁平化(flatten)

数据重塑不会改变原来的数组.

数组合并
  • hstack:左右并在一起
  • vstack:上下并在一起
  • concatenate: axis=1 :按行横向合并, axis=0 :按列纵向合并.
  • hsplit:横向分割(纵着切),横相对于数组本身而言
  • vsplit:纵向分割(横着切)
  • split: axis=1 :按行横向分割, axis=0 :按列纵向分割.
数组转置和轴对换
  • 数组转置是数组重塑 的一种特殊形式,可以通过 transpose 方法进行转置。

数组的切片返回的是原始数组的视图,不会产生新的数据,如果需要的并非视图而是要复制数据,则可以通过 copy 方法实现。

ufunc函数的广播机制
  • ufunc函数:通用函数,是一种能够对数组中所有的元素进行操作的函数,比math库更快
    • np.any函数表示逻辑“or”
    • np.all函数表示逻辑“and”, 运算结果返回布尔值

广播(broadcasting)是指不同形状的数组之间执行算术运算的方式。

需要遵循4个原则:
  1. 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在左边加1补齐。
  2. 如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为1的维度进行扩展,以匹配另一个数组的形状。
  3. 输出数组的shape是输入数组shape的各个轴上的最大值。
  4. 如果两个数组的形状在任何一个维度上都不匹配,并且没有任何一个维度等于1,则引发异常。
条件逻辑运算
  • where的用法:np.where(condition, x, y)满足条件(condition),输出x,不满足则输出y。

w = np.array([2,5,6,3,10]) np.where(w>4) (array([1, 2, 4], dtype=int64),)

where中 若只有条件 (condition),没有x和y,则输出满足条件元素的 坐标 。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。

读写二进制文件
  • NumPy提供了多种文件操作函数存取数组内容。
  • 文件存取的格式分为两类:二进制和文本。而二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型。
  • NumPy中读写二进制文件的方法有:np.load(“文件名.npy")是从二进制文件中读取数据;np.save(“文件名[.npy]", arr) 是以二进制格式保存数据。
  • 读写文本文件np.loadtxt("…/tmp/arr.txt",delimiter = “,”)把文件加载到一个二维数组中;np.savetxt("…/tmp/arr.txt", arr, fmt = “%d”, delimiter = “,”)是将数组写到某种分隔符隔开的文本文件中;np.genfromtxt("…/tmp/arr.txt", delimiter = “,”)是结构化数组和缺失数据。
  • 读取CSV文件np.loadtxt(fname, dtype=, comments=’#’, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding=‘bytes’)
排序

Sort函数对数据直接进行排序, 调用改变原始数组 ,无返回值。

  • 格式: numpy.sort(a, axis, kind, order)order:排序的字段名,可指定字段排序,默认为Noneaxis:axis=1为沿横轴排序;axis=0为沿纵轴排序;axis=None,将数组平坦化之后进行排序
  • np.argsort函数和np.lexsort函数根据一个或多个键值对数据集进行排序。np.argsort(): 返回的是数组值从小到大的索引值;np.lexsort(): 返回值是按照最后一个传入数据排序的结果。

arr = np.array([7,9,5,2,9,4,3,1,4,3]) print('原数组:',arr) print('排序后:',arr.argsort()) #返回值为数组排序后的下标排列 print('显示较大的5个数:',arr[arr.argsort()][-5:]) 原数组: [7 9 5 2 9 4 3 1 4 3] 排序后: [7 3 6 9 5 8 2 0 1 4] 显示较大的5个数: [4 5 7 9 9]

a = [1,5,1,4,3,4,4] b = [9,4,0,4,0,2,1] # 先按照a排序,如果a有相同的数按照b排序 ind=np.lexsort((b,a)) #sort by a,then by b print('ind:',ind) tmp=[(a[i],b[i])for i in ind] print('tmp:',tmp)

ind: [2 0 4 6 5 3 1] tmp: [(1, 0), (1, 9), (3, 0), (4, 1), (4, 2), (4, 4), (5, 4)]

重复数据与去重
  • 在NumPy中,对于一维数组或者列表,unique函数去除其中重复的元素,并按元素由大到小返回一个新的元组或者列表。
  • 统计分析中有时也需要把一个数据重复若干次,使用tile和repeat函数即可实现此功能。
    • tile函数的格式:np.tile(A, reps)其中,参数A表示要重复的数组,reps表示重复次数。
    • repeat函数的格式:np.repeat(A, reps, axis = None)“a”: 是需要重复的数组元素,“repeats”: 是重复次数,“axis”: 指定沿着哪个轴进行重复,axis = 0表示按行进行元素重复;axis = 1表示按列进行元素重复。
常用统计函数

NumPy中提供了很多用于统计分析的函数,常见的有 sum、mean、std、var、min和max 等。

  • 几乎所有的统计函数在针对二维数组的时候需要注意轴的概念。
  • axis=0时表示沿着纵轴进行计算,axis=1时沿横轴进行计算。

Numpy中数组的方法sort、argsort和lexsort分别是指 ___、 将___和___ 直接排序x中的元素从小到大排列,提取其对应的index(索引)对数组或列表按照某一行或列进行排序

4. Pandas统计分析

Pandas(Python Data Analysis Library)是基于NumPy的数据分析模块,它提供了大量标准数据模型和高效操作大型数据集所需的工具, 可以说Pandas是使得Python能够成为高效且强大的数据分析环境的重要因素之一 。

Pandas有三种数据结构:Series、DataFrame和Panel。

  • Series类似于一维数组;
  • DataFrame是类似表格的二维数组;
  • Panel可以视为Excel的多表单Sheet
  • DataFrame是一个表格型的数据结构 ,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
  • DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
  • Series索引的修改: obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
  • 索引对象负责管理轴标签和其他元数据,不能进行修改,保证数据结构之间的安全共享。
  • 重建索引是指对索引重新排序而不是重新命名 ,如果某个索引值不存在的话,会引入缺失值。
  • reindex:默认对行进行重建索引.
    • index:用于索引的新序列
    • method:插值(填充)方式
    • fill_value:缺失值替换值
    • limit:最大填充量
    • level copy:在Multiindex的指定级别上匹配简单索引,否则选取其子集,默认为True,无论如何都复制;如果为False,则新旧相等时就不复制
  • rename:修改列名
  • 如果不希望使用默认的行索引,则可以在创建的时候通过Index参数来设置。
  • 在DataFrame数据中,如果希望将列数据作为索引,则可以通过 set_index 方法来实现。

DataFrame的属性

Python数据分析与可视化(Python数据分析与可视化)(3)

data.rename(columns=({ 'total_bill':'消费总额','tip':'小费','sex':'性别','smoker':'是否抽烟', 'day':'星期','time':'聚餐时间段','size':'人数'}),inplace=True)

fdata['是否抽烟'] === fdata.是否抽烟

  • 查询抽烟男性中人均消费大于15的数据:

data.query( '是否抽烟=="Yes" & 性别=="Male" & 人均消费>15')

  • 删除性别或者聚餐时间为空的行:

data.dropna(subset=['性别','聚餐时间段'],inplace=True) data.isnull().sum()

  • 增加一行直接通过append方法传入字典结构数据即可。 df.append(data, ignore_index=True)
  • 增加列时,只需为要增加的列赋值即可创建一个新的列。若要指定新增列的位置,可以用insert函数。
  • unique():是以数组形式(numpy.ndarray)返回列的所有唯一值(特征的所有唯一值)
  • nunique():返回dataframe中列的唯一值的个数,也可用于series
  • DataFrame.replace(to_replace=None,value=None,inplace=False,limit=None,regex=False,method='pad')
函数应用和映射

df.apply(np.mean) data.dpplymap(lambda x:'%.3f'%x)

对于DataFrame数据排序,通过指定轴方向,使用 sort_index 函数对行或列索引进行排序。如果要进行列排序,则通过 sort_values 函数把列名传给by参数即可。

df.sum() # 按列进行求和 df.sum(axis=1) # 按行进行求和

汇总与统计

利用 describe 方法会对每个数值型的列数据进行统计

Pandas中常用的描述性统计量:

Python数据分析与可视化(Python数据分析与可视化)(4)

对于类别型特征的描述性统计,可以使用频数统计表。Pandas库中通过unique方法获取不重复的数组,利用value_counts方法实现频数统计。

数据分组

groupby方法的参数及其说明:

Python数据分析与可视化(Python数据分析与可视化)(5)

  1. 按Series对象(具体数据)分组
  2. 按列名分组DataFrame数据的列索引名可以作为分组键,但需要注意的是用于分组的对象必须是DataFrame数据本身,否则搜索不到索引名称会报错。
  3. 按列表或元组分组分组键还可以是长度和DataFrame行数相同的列表或元组,相当于将列表或元组看做DataFrame的一列,然后将其分组。
  4. 按字典分组如果原始的DataFrame中的分组信息很难确定或不存在,可以通过字典结构,定义分组信息。
  5. 按函数分组函数作为分组键的原理类似于字典,通过映射关系进行分组,但是函数更加灵活。

data.groupby(data.map(judge)),sum()

数据聚合

Python数据分析与可视化(Python数据分析与可视化)(6)

使用agg方法聚合数据

  • agg、aggregate方法都支持对每个分组应用某个函数,包括Python内置函数或自定义函数。同时,这两个方法也能够直接对DataFrame进行函数应用操作。
  • 在正常使用过程中,agg和aggregate函数对DataFrame对象操作的功能基本相同,因此只需掌握一个即可。
分组运算
  1. transform方法通过transform方法可以将运算分布到每一行。
  2. 使用apply方法聚合数据apply方法类似于agg方法,能够将函数应用于每一列。

数据透视表(Pivot Table)是数据分析中常见的工具之一,根据一个或多个键值对数据进行聚合,根据列或行的分组键将数据划分到各个区域。

pivot_table 函数格式:

pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

Python数据分析与可视化(Python数据分析与可视化)(7)

交叉表是一种特殊的透视表,主要用于计算分组频率。

crosstab的格式:

crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)

Python数据分析与可视化(Python数据分析与可视化)(8)

直方图和密度图
  • 直方图用于频率分布,y轴为数值或比率。绘制直方图,可以观察数据值的大致分布规律。pandas中的直方图可以通过hist方法绘制。
  • 核密度估计是对真实密度的估计,其过程是将数据的分布近似为一组核(如正态分布)。通过plot函数的kind = ‘kde’可以进行绘制。
散点图主要用来表现数据之间的规律。
  • 通过plot函数的kind = 'scatter’可以进行绘制。
Pandas的数据对象在进行算术运算时如果存在不同索引会进行数据对齐,但会引入NAN值5. Pandas数据载入与预处理

对于数据分析而言,数据大部分来源于外部数据,如常用的CSV文件、Excel文件和数据库文件等。Pandas库将外部数据转换为DataFrame数据格式,处理完成后再存储到相应的外部文件中。

1.文本文件读取

文本文件是一种由若干行字符构成的计算机文件,它是一种典型的顺序文件。

  • txt文件:是Windows操作系统上附带的一种文本格式,文件以.txt为后缀。
  • CSV文件:是Comma-Separated Values的缩写,用半角逗号(’,’)作为字段值的分隔符。
Pandas中使用read_table来读取文本文件:

pandas.read_table(filepath_or_buffer, sep=’\t’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)

Pandas中使用read_csv函数来读取CSV文件:

pandas.read_csv(filepath_or_buffer, sep=’,’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)

Python数据分析与可视化(Python数据分析与可视化)(9)

2. 文本文件的存储

DataFrame.to_csv(path_or_buf = None, sep = ’,’, na_rep, columns=None, header=True, index=True, index_label=None, mode=’w’, encoding=None)

1. Excel文件的读取

pandas.read_excel(io, sheetname, header=0, index_col=None, names=None, dtype)

Python数据分析与可视化(Python数据分析与可视化)(10)

JSON数据的读取与存储

JSON(JavaScript Object Notation) 数据是一种轻量级的数据交换格式,因其简洁和清晰的层次结构使其成为了理想的数据交换语言。JSON数据使用大括号来区分表示并存储。

1. Pandas读取JSON数据

Pandas通过read_json函数读取JSON数据。读取代码如下:

import pandas as pd df=pd.read_json(‘FileName’) df=df.sort_index

2. JSON数据的存储

Pandas使用 pd.to_json 实现将DataFrame数据存储为JSON文件。

读取数据库文件
  1. Pandas读取Mysql数据要读取Mysql中的数据,首先要安装Mysqldb包。

import pandas as pd import MySQLdb conn = MySQLdb.connect(host = host,port = port,user = username,passwd = password,db = db_name) df = pd.read_sql('select * from table_name',con=conn) conn.close()

  1. Pandas读取SQL sever中的数据,首先要安装pymssql包。

import pandas as pd import pymssql conn = pymssql.connect(host=host, port=port ,user=username, password=password, database=database) df = pd.read_sql("select * from table_name",con=conn) conn.close()

数据合并

merge函数是通过一个或多个键将两个DataFrame按行合并起来,与SQL中的 join 用法类似,Pandas中的数据合并merge( )函数格式如下:

Python数据分析与可视化(Python数据分析与可视化)(11)

merge合并时默认是 内连接 (inner),即返回交集。通过how参数可以选择连接方法:左连接(left),右连接(right)和外连接(outer)。

在合并时会出现重复列名,虽然可以人为进行重复列名的修改,但 merge 函数提供了 suffixes 用于处理该问题:

concat数据连接:

如果要合并的 DataFrame 之间没有连接键,就无法使用merge方法。pandas中的concat方法可以实现,默认情况下会按行的方向堆叠数据。如果在列向上连接设置axies = 1即可。

Python数据分析与可视化(Python数据分析与可视化)(12)

combine_first合并数据

如果需要合并的两个DataFrame存在重复索引,则使用merge和concat都无法正确合并,此时需要使用combine_first方法。

检测与处理缺失值
  1. 缺失值统计data.info()
  2. 删除缺失值df.dropna()

Python数据分析与可视化(Python数据分析与可视化)(13)

填充缺失值

缺失值所在的特征为数值型时,通常利用其均值、中位数和众数等描述其集中趋势的统计量来填充;缺失值所在特征为类别型数据时,则选择众数来填充。

Python数据分析与可视化(Python数据分析与可视化)(14)

在DataFrame中利用duplicates方法判断各行是否有重复数据。 duplicates 方法返回一个布尔值的series,反映每一行是否与之前的行重复。

Pandas通过drop_duplicates删除重复的行,格式为:

drop_duplicates(self, subset=None, keep=’first’, inplace=False)

Python数据分析与可视化(Python数据分析与可视化)(15)

检测异常值

简单的数据统计方法中常用散点图、箱线图和3σ法则检测异常值。

  • 散点图方法: 通过数据分布的散点图发现异常数据。
  • 箱线图分析: 利用数据中的五个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据。
  • 3σ法则: 在3σ原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。
散点图方法: 通过数据分布的散点图发现异常数据。

箱线图利用数据中的五个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据,它也可以粗略地看出数据是否具有对称性、分布的分散程度等信息。

若数据服从正态分布,在3σ原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值,因为在正态分布的假设下,距离平均值3σ之外的值出现的概率小于0.003。因此根据小概率事件,可以认为超出3σ之外的值为异常数据。

离差标准化数据

离差标准化是对原始数据所做的一种线性变换,将原始数据的数值映射到[0,1]区间。转换公式如下所示。

Python数据分析与可视化(Python数据分析与可视化)(16)

标准差标准化数据

标准差标准化又称零均值标准化或z分数标准化,是当前使用最广泛的数据标准化方法。

Python数据分析与可视化(Python数据分析与可视化)(17)

哑变量( Dummy Variables)是用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。

  • 利用pandas库中的get_dummies函数对类别型特征进行哑变量处理。

Python数据分析与可视化(Python数据分析与可视化)(18)

连续型变量的离散化
  1. 等宽法Pandas提供了cut函数,可以进行连续型数据的等宽离散化。

Python数据分析与可视化(Python数据分析与可视化)(19)

  1. 等频法cut函数虽然不能够直接实现等频离散化,但可以通过定义将相同数量的记录放进每个区间。
  2. 聚类分析法一维聚类的方法包括两步,首先将连续型数据用聚类算法进行聚类,然后处理聚类得到的簇,为合并到一个簇的连续型数据做同一标记。
简述Python中利用数据统计方法检测异常值的常用方法及其原理。

散点图 箱线图分析 3σ法则,

6. Matplotlib可视化
  • Matplotlib 是一个在 python 下实现的类 matlab 的纯 python 的第三方库,旨在用 python实现 matlab 的功能,是python下最出色的绘图库。其风格跟 matlab 相似,同时也继承了 python 的简单明了。
  • 要使用matplotlib得先安装 numpy 库 (一个python下数组处理的第三方库,可以很方便的处理矩阵,数组) 。
  • matplotlib 对于图像美化方面比较完善,可以自定义线条的颜色和样式,可以在一张绘图纸上绘制多张小图,也可以在一张图上绘制多条线, 可以很方便地将数据可视化并对比分析。

在Jupyter notebook中进行交互式绘图,需要执行一下语句 % matplotlib notebook

相关函数简介

figure():创建一个新的绘图窗口。 figtext():为figure添加文字 axes():为当前figure添加一个坐标轴 plot():绘图函数 polar():绘制极坐标图 axis():获取或设置轴属性的边界方法(坐标的取值范围) clf : 清除当前figure窗口 cla : 清除当前axes窗口 close : 关闭当前figure窗口 subplot : 一个图中包含多个axes text(): 在轴上添加文字 title(): 设置当前axes标题 xlabel/ylabel:设置当前X轴或Y轴的标签 hist():绘制直方图 hist2d():绘制二维在直方图 hold :设置当前图窗状态;off或者on imread():读取一个图像,从图形文件中提取数组 legend():为当前axes放置标签 pie():绘制饼状图 scatter():做一个X和Y的散点图,其中X和Y是相同长度的序列对象 stackplot():绘制一个堆叠面积图 acorr():绘制X的自相关函数 annotate():用箭头在指定的数据点创建一个注释或一段文本 bar():绘制垂直条形图 barh():绘制横向条形图 barbs():绘制一个倒钩的二维场

创建子图

创建子图

import matplotlib.pyplot as plt fig = plt.figure() #不能使用空白的figure绘图,需要创建子图 ax1 = fig.add_subplot(2,2,1) ax2 = fig.add_subplot(2,2,2) ax3 = fig.add_subplot(2,2,3)

可以用语句 Fig , axes = plt.subplots(2,3) 创建一个新的图片,然后返回包含了已生成子图对象的NumPy数组。数组axes可以像二维数组那样方便地进行索引,如 axes[0,1] 。也可以通过sharex和sharey表明子图分别拥有相同的x轴和y轴。

fig, axes = plt.subplots(2,3)

调整子图周围的间距: plt.subplots_adjust(wspace=0,hspace=0)

  • plt.savafig :保存绘制的图片,可以指定图片的分辨率、边缘的颜色等参数。
设置pyplot的动态rc参数
  • pyplot使用rc配置文件来自定义图形的各种默认属性,被称为rc配置或rc参数。
  • 在pyplot中几乎所有的默认属性都是可以控制的,例如视图窗口大小以及每英寸点数、线条宽度、颜色和样式、坐标轴、坐标和网格属性、文本、字体等。

查看matplotlib的rc参数:

import matplotlib as plt print(plt.rc_params())

常用参数: Axes:设置坐标轴边界、颜色、坐标 刻度值大小和网格的显示; Figure:设置边界颜色、图形大小和子区; Font:设置字号、字体和样式; Grid:设置网格颜色和线型; Legend:设置图例和其中的文本显示; Lines:设置线条颜色、宽度、线型等; Savefig:对保存图像进行单独设置; Xtick和ytick:X、Y轴的主刻度和次刻度设置颜色、大小、方向和标签大小。

Python数据分析与可视化(Python数据分析与可视化)(20)

Python数据分析与可视化(Python数据分析与可视化)(21)

Python数据分析与可视化(Python数据分析与可视化)(22)

import numpy as np import matplotlib.pyplot as plt fig,ax=plt.subplots() plt.rcParams['font.family']=['SimHei']#用来显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

Python数据分析与可视化(Python数据分析与可视化)(23)

绘图的填充

调用函数fill_between() 实现曲线下面部分的填充:

plt.fill_between(x, 0, y, facecolor='green', alpha=0.3)

x:第一个参数表示覆盖的区域, x,表示整个x都覆盖 0:表示覆盖的下限 y:表示覆盖的上限是y这个曲线 facecolor:覆盖区域的颜色 alpha:覆盖区域的透明度[0,1],其值越大,表示越不透明

绘图注释

绘图时有时需要在图表中加文本注解

这时可以通过text函数在指定的位置(x,y)加入文本注解;

通过 annotate() 在指定位置实现指向型注释。

  1. 指向型注释annotate()
  2. 无指向型注释text()

Python数据分析与可视化(Python数据分析与可视化)(24)

boxplot函数

箱线图利用数据中的五个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据,它也可以粗略地看出数据是否具有对称性、分布的分散程度等信息,特别可以用于对几个样本的比较。

Python数据分析与可视化(Python数据分析与可视化)(25)

Python数据分析与可视化(Python数据分析与可视化)(26)

雷达图也称为网络图,星图,蜘蛛网图,不规则多边形,极坐标图等。雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。轴的相对位置和角度通常是无信息的。雷达图相当于平行坐标图,轴径向排列。

Python数据分析与可视化(Python数据分析与可视化)(27)

绘制词云

(1)WordCloud (2)jieba conda install -c conda-forge jieba

一般生成词云的过程为:

(1)首先使用pandas读取数据并将需要分析的数据转化为列表;

(2)对获得的列表数据利用分词工具jieba进行遍历分词;

(3)使用WordCloud设置词云图片的属性、掩码和停用词,并生成词云图像。

简述Matplotlib全局参数定制的方法。

查找到当前用户的配置文件目录,然后用编辑器打开,修改matplotlibrc文件,即可修改配置参数。

annotate() text()

7. Seaborn
  • Matplotlib 的API比较底层。虽然可以实现复杂的统计数据可视化,但是通常都需要写大量的样板代码;
  • Matplotlib 不支持Pandas的DataFrame数据的可视化,必须先提取每个Series。

Matplotlib绘图基本模仿MATLAB绘图库,其绘图风格和MATLAB类似。由于MATLAB绘图风格偏古典,因此, Python开源社区开发了Seaborn绘图模块,对Matplotlib进行封装,绘图效果更符合现代人的审美 。

Seaborn属于Matplotlib的一个高级接口,使得作图更加容易。在多数情况下使用Seaborn能做出很具吸引力的图,而使用Matplotlib可以制作具有更多特色的图。 应该把Seaborn视为Matplotlib的补充,而不是替代物

Python数据分析与可视化(Python数据分析与可视化)(28)

Seaborn通过set函数实现风格设置绘图的背景色、风格、字型、字体:

seaborn.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1, color_codes=True, rc=None)

  • set_style():设置主题的,darkgrid, whitegrid,dark,white,和 ticks(四周都有刻度线的白背景),默认为darkgrid。
主题设置

Seaborn将matplotlib的参数划分为两个独立的组合。第一组是 设置绘图的外观风格 的,第二组主要 将绘图的各种元素按比例缩放的 ,以至可以嵌入到不同的背景环境中。控制这些参数的接口主要有两对方法:

  • 控制风格: axes_style(), set_style()
  • 缩放绘图: plotting_context(), set_context()
  • despine() :移除绘图中顶部和右侧的轴线offset 参数讲轴线进行偏置,另外,当刻度没有完全覆盖整个坐标轴的的范围时,利用trim参数限制已有坐标轴的范围。

despine()控制哪个脊柱将被移除。 sinplot() sns.despine(left=True)

除了选用预设的风格外,可以利用with 语句使用 axes_style() 方法设置临时绘图参数。

with sns.axes_style("darkgrid"): plt.subplot(2,1,1) sinplot( ) plt.subplot(2,1, 2) sinplot(-1)

seaborn中通过 set_context() 设置缩放参数,预设的参数有 paper, notebook, talk, poster 。默认为 notebook。“paper”、“talk”和“poster” 。

使用 distplot 方法绘制的直方图与matplotlib是类似的。在 distplot 的参数中,可以选择不绘制密度图。其中的 rug 参数绘制 毛毯图 ,可以为每个观测值绘制小细线(边际毛毯),也可以单独用 rugplot 进行绘制。

如果设置 hist 为 False ,则可以直接绘制密度图而没有直方图。

sns.distplot(df_iris['Petal.Width'],hist=False,rug=True)

Python数据分析与可视化(Python数据分析与可视化)(29)

  • kdeplot():绘制密度图
  • rugplot():绘制毛毯图
  • stripplot():绘制散点图,jitter=True,抖动(重复点不会被覆盖)
  • swarmplot():看清每个数据点
  • boxplot():绘制箱线图
  • pairplot():变量两两之间的关系(线性或非线性,有无较为明显的相关关系)
小提琴图

小提琴图其实是箱线图与核密度图的结合,箱线图展示了 分位数 的位置,小提琴图则展示了 任意位置的密度 ,通过小提琴图可以知道哪些位置的密度较高。

在图中, 白点 是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。 外部形状即为核密度估计 (在概率论中用来估计未知的密度函数,属于非参数检验方法之一)。

sns.set_style("whitegrid") df_iris=pd.read_csv('D:\dataset\iris.csv') ax = sns.violinplot(x=df_iris['Petal.Length'])

Python数据分析与可视化(Python数据分析与可视化)(30)

  • countplot():绘制类别的计数柱状图
  • jointplot():多变量图,不仅可以显示两个变量的关系,还可以显示每个单变量的分布情况。
  • 在jointplot函数中,改变 kind 参数为 kde ,但变量的分布就用 密度图 来代替,而 散点图则会被等高线图代替

sns.jointplot(x='Petal.Length',y='Petal.Width' ,data=df_iris,kind='kde')

Python数据分析与可视化(Python数据分析与可视化)(31)

  • regplot() :绘制回归图可以揭示两个变量间的线性关系

Python数据分析与可视化(Python数据分析与可视化)(32)

  • 了解四个课堂后量化表现之间的 相关性

sns.regplot(x='举手次数',y='讨论次数',order =4,data=df)

热力图是数据可视化项目中比较常用的数据显示方式。 热力图通过颜色变化程度直观反应出热点分布,区域聚集等数据信息 。热力图实现过程就是通过简单的数学变化,将离散的点信息映射为图像。

Python数据分析与可视化(Python数据分析与可视化)(33)

Python数据分析与可视化(Python数据分析与可视化)(34)

简述Seaborn绘图风格设置的内容和方法

Seaborn通过set函数实现风格设置。

seaborn.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1, color_codes=True, rc=None)

8. pyecharts可视化

pyecharts是基于Echart图表的一个类库,而Echart是百度开源的一个可视化 JavaScript 库。

pyecharts主要基于web浏览器进行显示,绘制的图形比较多,包括 折线图、柱状图、饼图、漏斗图、地图、极坐标图 等,代码量很少,而且很灵活,绘制出来的图形很美观。

图形绘制过程,基本上所有的图表类型都是这样绘制的:

chart_name = Type() #初始化具体类型图表 chart_name.add() #添加数据及配置项 chart_name.render() #生成本地文件(html/svg/jpeg/png/pdf/gif) chart_name .render_notebook #在jupyter notebook中显示

柱状图

Python数据分析与可视化(Python数据分析与可视化)(35)

全局配置项(Global Option)

Python数据分析与可视化(Python数据分析与可视化)(36)

pyecharts 中通过 Funnel 绘制漏斗图,

Python数据分析与可视化(Python数据分析与可视化)(37)

Python数据分析与可视化(Python数据分析与可视化)(38)

仪表盘

Python数据分析与可视化(Python数据分析与可视化)(39)

平行坐标图

平行坐标图(Parallel Coordinates Plot)是对于具有多个属性问题的一种可视化方法。在平行坐标图中,数据集的一行数据在平行坐标图中用一条折线表示,纵向是 属性值 ,横向是 属性类别 (用索引表示)

Python数据分析与可视化(Python数据分析与可视化)(40)

桑基图(Sankey diagram)即 桑基能量分流图 ,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。 Pyecharts 中利用 Sankey 绘制桑基图。

Python数据分析与可视化(Python数据分析与可视化)(41)

简述pyecharts中图表绘制的步骤。

chart_name = Type() #初始化具体类型图表 chart_name .add() #添加数据及配置项 chart_name .render() #生成本地文件(保存路径) chart_name .render_notebook #在jupyter notebook中显示

9. 时间序列数据分析

Python标准库中包含了用于日期(date)、时间(time)、日历(calendar)等功能的数据类型,主要会用到datetime、time、calendar模块,我们主要介绍一下datetime模块。

time类型数据的用法

time = datetime.time(10,20,15) print(time) print(time.hour,time.minute,time.second)

Datetime类数据是date类和time类数据的组合,通过now函数可以查看当前的时间。

  • datetime -> str:将datetime类数据转换为字符串数据。datetime.strftime()
  • str -> datetime: 将字符串数据转换为datetime类数据。
    • datetime.strptime() :根据string, format 2个参数,返回一个对应的datetime对象

Python数据分析与可视化(Python数据分析与可视化)(42)

重采样是时间序列频率转换的过程,Pandas中的resample函数用于各种频率的转换工作。

Python数据分析与可视化(Python数据分析与可视化)(43)

在做 时间序列分析 时,经常要对时间序列进行平稳性检验。用Python来进行 平稳性检验 主要有 时序图检验、自相关图检验以及构造统计量进行检验 3种方法

1 时序图检验

时序图就是普通的时间序列图,即以时间为横轴,观察值为纵轴进行检验。利用时序图可以粗略观察序列的平稳性。

Python数据分析与可视化(Python数据分析与可视化)(44)

2 自相关图检验

平稳序列通常具有短期相关性,即随着延迟期数k的增加,平稳序列的自相关系数会很快地衰减向零,而非平稳序列的自相关系数的衰减速度会比较慢。画自相关图用到的是 statsmodels 中的 plot_acf 方法。自相关图中横轴表示延迟期数,纵轴表示自相关系数。

Python数据分析与可视化(Python数据分析与可视化)(45)

3. 利用绘图判断序列的平稳性比较直观,但不够精确,ADF(Augmented Dickey-Fuller)法直接通过 假设检验 的方式来验证平稳性。ADF的原假设(H0)和备择假设(H1)如下:

  • H0:具有单位根,属于非平稳序列;
  • H1:没有单位根,属于平稳序列。

Python中可以使用 statsmodels 中的 adfuller 方法进行ADF检验,直接输入数据,即可返回7个数值。

其中的第一个返回值adf就是ADF方法的检验结果,这个值理论上越负越能拒绝原假设;

第二个返回值pvalue以常用的判断标准值0.05作为参考,若其值大于0.05,说明支持原假设,反之拒绝原假设,表明该序列是一个平稳序列。

Python数据分析与可视化(Python数据分析与可视化)(46)

若其值大于0.05,说明支持原假设,反之拒绝原假设,表明该序列是一个平稳序列。

用Python来进行平稳性检验主要有时序图检验、自相关图检验以及构造统计量进行检验3种方法。10. SciPy科学计算基础

Scipy是一款用于数学、科学和工程领域的Python工具包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。

SciPy的constants模块

SciPy的constants模块包含了大量用于科学计算的常数。

from scipy import constants as C print(C.pi) #圆周率 print(C.golden) #黄金比例 print(C.c) #真空中的光速 print(C.h) #普朗克常数 print(C.mile) #一英里等于多少米 print(C.inch) #一英寸等于多少米 print(C.degree) #一度等于多少弧度 print(C.minute) #一分钟等于多少秒 print(C.g) #标准重力加速度

SciPy的special模块

SciPy的special模块包含了大量函数库,包括基本数学函数、特殊函数以及NumPy中的所有函数。

from scipy import special as S print(S.cbrt(8)) #立方根 print(S.exp10(3)) #10**3 print(S.sindg(90)) #正弦函数,参数为角度 print(S.round(3.1)) #四舍五入函数 print(S.round(3.5)) print(S.round(3.499)) print(S.comb(5,3)) #从5个中任选3个的组合数 print(S.perm(5,3)) #排列数 print(S.gamma(4)) #gamma函数 print(S.beta(10,200)) #beta函数 print(S.sinc(0)) #sinc函数

SciPy.linalg

SciPy.linalg 是SciPy中实现线性代数计算的模块,常用的导入方式为: from scipy import linalg

在NumPy中,矩阵有矩阵类型和二维数组两种表示方法。

(1)数组类型下的基本操作

矩阵类型数据可以用 np.mat() 或 mat.matrix() 创建。

from scipy import linalg import numpy as np A = np.mat('[1,2;3,4]') print('A矩阵为:\n',A) print('A的转置矩阵为:\n',A.T) print('A的逆矩阵为:\n',A.I)

矩阵类型下的基本操作

矩阵也可以用二维数组对象表示,数组对象的矩阵操作与矩阵对象有一定的区别。

M = np.array([[1,2],[3,4]]) print('M矩阵为:\n',M) print('M的转置矩阵为:\n',M.T) print('M的逆矩阵为:\n',linalg.inv(M))

线性方程组求解

Python数据分析与可视化(Python数据分析与可视化)(47)

除了通过矩阵的逆求解外可以直接使用 linalg.solve() 函数求解而且效率更高。

from scipy import linalg import numpy as np a = np.array([[1, 3, 5], [2, 5, -1], [2, 4, 7]]) b = np.array([10, 6, 4]) x = linalg.solve(a, b) print(x)

[-14.31578947 7.05263158 0.63157895]

行列式的计算

行列式是一个将方阵映射到标量的函数。linalg.det()可以计算矩阵的行列式。

M = np.array([[1,2],[3,4]]) linalg.det(M) -2.0

范数

范数是数学上一个类似“长度”的概念。 linalg.norm() 函数可以计算向量或矩阵的范数(或者模)。常见范数及其含义见下表。

Python数据分析与可视化(Python数据分析与可视化)(48)

M = np.array([[1,2],[3,4]]) print('M矩阵为:\n',M) print('M矩阵的L范数为:\n',linalg.norm(M,1)) # 6.0 print('M矩阵的2范数为:\n',linalg.norm(M,2))

特征值求解

函数 linalg.eig() 可以用来求解特征值和特征向量。

A = np.array([[1,2],[3,4]]) l,v = linalg.eig(A) print(l) print(v)

[-0.37228132 0.j 5.37228132 0.j] [[-0.82456484 -0.41597356] [ 0.56576746 -0.90937671]]

奇异值分解

奇异值分解是一个能适用于任意的矩阵的一种分解的方法。

scikit-learn的PCA算法的背后真正的实现就是用的SVD。

from numpy import * data = mat([[1,2,3],[4,5,6]]) U,sigma,VT = np.linalg.svd(data) print('U: ',U) print('SIGMA:',sigma) print('VT:',VT)

Python数据分析与可视化(Python数据分析与可视化)(49)

SciPy中的优化

SciPy.optimize 包提供了几种常用的优化算法,包括用来求有/无约束的多元标量函数最小值算法,最小二乘法,求有/无约束的单变量函数最小值算法,还有解各种复杂方程的算法。

方程求解及求极值

使用 SciPy.optimize 模块的root和fsolve函数进行数值求解线性及非线性方程求方程的根。

from scipy.optimize import root def func(x): return x*2 2 * np.cos(x) sol = root(func, 0.3) # 0.3 估计初始值 print (sol)

使用 fmin,fminbound 可以求函数的极值:

import numpy as np from matplotlib import pyplot as plt from SciPy.optimize import fmin,fminbound def f(x): return x**2 10*np.sin(x) 1 x = np.linspace(-10,10,num = 500) min1 = fmin(f,3) #求3附近的极小值 min2 = fmin(f,0) #求0附近的极小值 min_global = fminbound(f,-10,10) #这个区域的最小值 print(min1) print(min2) print(min_global) plt.plot(x,f(x)) plt.show()

数据拟合(1)多项式拟合

Python数据分析与可视化(Python数据分析与可视化)(50)

import matplotlib.pyplot as plt x = np.linspace(-5,5,20) y = 3.5*x 2.1 y_noise = y np.random.randn(20)*2 coeff = np.polyfit(x,y_noise,1) plt.plot(x,y_noise,'x',x,coeff[0]*x coeff[1]) plt.show()

Python数据分析与可视化(Python数据分析与可视化)(51)

最小二乘拟合

最小二乘拟合(Least Squares)是一种常用的数学优化技术,通过最小化误差的平方和在寻找一个与数据匹配的最佳函数。

要使用最小二乘优化,需要先定义误差函数:

def errf(p,x,y): return y-func(x,*p)

其中,p表示要估计的真实参数,x是函数的输入,y表示输入对应的数据值。最小二乘估计对应的函数为 optimize.leastsq() ,可以利用该函数和定义的误差函数,对真实参数进行最小二乘估计。

from scipy import optimize def myfunc(x,a,b,w,t): return a*np.exp(-b*np.sin(w*x t)) x = np.linspace(0,2*np.pi) par = [3,2,1.25,np.pi/4] y = myfunc(x,*par) y_noise = y 0.8*np.random.randn(len(y)) def errf(p,x,y): return y-myfunc(x,*p) c,rv = optimize.leastsq(errf,[1,1,1,1],args = (x,y_noise)) #c返回找到的最小二乘估计 plt.plot(x,y_noise,'x',x,y,x,myfunc(x,*c),':') plt.legend(['data','actual','leastsq']) plt.show()

Python数据分析与可视化(Python数据分析与可视化)(52)

曲线拟合

可以不定义误差函数,用函数 optimize.curve_fit() 直接对函数myfunc的参数直接进行拟合。

p,e = optimize.curve_fit(myfunc,x,y_noise) print('p是对参数的估计值:\n',p) print('e是4个估计参数的协方差矩阵:\n',e)

p是对参数的估计值: [3.28292536 1.90102739 1.2478838 0.78989363] e是4个估计参数的协方差矩阵: [[ 0.17453746 -0.05248031 0.01959142 -0.06158022] [-0.05248031 0.01606779 -0.00572988 0.01801028] [ 0.01959142 -0.00572988 0.00271714 -0.00854062] [-0.06158022 0.01801028 -0.00854062 0.02707182]]

稀疏矩阵的存储

稀疏矩阵(Sparse Matrix)是 只有少部分元素值是非零的矩阵 。如果按照正常方式存储所有元素,则这些矩阵将占用巨大空间,因此,稀疏矩阵只保存非零值及对应的位置。

SciPy.sparse 是SciPy中负责稀疏矩阵的模块。在SciPy中,根据存储方式的不同,可以将稀疏矩阵分为以下几类:

  • bsr_matrix(Block Sparse Row matrix):分块存储,基于行
  • coo_matrix(A sparse matrix in COOrdinate format):坐标形式存储(COO)
  • csc_matrix(Compressed Sparse Column matrix):基于列的压缩存储(CSC)
  • csr_matrix(Compressed Sparse Row matrix):基于行的压缩存储(CSR)
  • dia_matrix(Sparse matrix with DIAgonal storage):对角线存储
  • dok_matrix(Ditictionary Of Keys based sparse matrix):基于键值对的存储
  • lil_matrix(Row-based linked list sparse matrix):基于行的链表存储
稀疏矩阵的运算

由于稀疏矩阵数据量大,一般不使用普通矩阵作为参数来构建,而是采用非零数据点及坐标的形式构建。

import numpy as np from scipy import sparse sparse.coo_matrix((2,3)) #创建空的稀疏矩阵 A = sparse.coo_matrix([[1,2,0],[0,1,0],[2,0,0]]) #将普通矩阵转为稀疏矩阵 print(A) print(type(A)) #查看A的类型 print(type(A.tocsc())) #不同类型的稀疏矩阵可以相互转换 v = np.array([1,3,-3]) print(A*v)

data = [1,2,3,4] rows = [0,0,1,2] cols = [0,1,2,2] W = sparse.coo_matrix(data,(rows,cols)) print('稀疏矩阵W:\n',W) r,c,d = sparse.find(W) #find()函数返回非零元素的行、列和具体数值 print('稀疏矩阵W非零值:\n',r,c,d)

稀疏矩阵W: (0, 0) 1 (0, 1) 2 (0, 2) 3 (0, 3) 4 稀疏矩阵W非零值: [0 0 0 0] [0 1 2 3] [1 2 3 4]

SciPy中的图像处理

简单的介绍一下SciPy在图像处理方面的应用,如果专业做图像处理当然还是建议使用OpenCV。

1 图像平滑

图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法。

图像平滑的方法包括:插值方法,线性平滑方法,卷积法等。

ndimage.median_filter 实现中值滤波。

import numpy as np from scipy import ndimage from scipy import misc import matplotlib.pyplot as plt %matplotlib inline image = misc.ascent() aa = plt.subplot(1,3,1) plt.title("title") plt.imshow(image) plt.axis('off') plt.subplot(1,3,2) plt.title("medi_filter") filter = ndimage.median_filter(image,size=10)

#使用SciPy的中值滤波处理图片 plt.imshow(filter) plt.axis('off') plt.subplot(1,3,3) plt.title("gausfilter") blurred_face = ndimage.gaussian_filter(image, sigma = 7) #高斯滤波 plt.imshow(blurred_face) plt.axis('off')

Python数据分析与可视化(Python数据分析与可视化)(53)

图像旋转和锐化

图像锐化就是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。图像锐化处理的目的是 为了使图像的边缘、轮廓线以及图像的细节变的清晰 。经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变的清晰。从频域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用 高通滤波器来使图像清晰

image = misc.ascent() #显示全部图片 plt.subplot(131) plt.title("title") plt.imshow(image) plt.axis('off') plt.subplot(132) rotate = ndimage.rotate(image,60) plt.title("rotate") plt.imshow(rotate)

plt.axis('off') #边缘检测 plt.subplot(133) prewitt = ndimage.prewitt(image) plt.title("prewitt") plt.imshow(prewitt) plt.axis('off')

Python数据分析与可视化(Python数据分析与可视化)(54)

SciPy中的信号处理

信号处理(signal processing)是指对信号进行提取、变换、分析、综合等处理,以便抽取出有用信息的过程。信号处理基本的内容有变换、滤波、调制、解调、检测以及谱分析和估计等。

Python中的 scipy.signal 模块专门用于信号处理。

1 数据重采样

重采样指将数据序列从一个频率转化为另一个频率进行处理的过程。将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样。SciPy中的 signal.resample() 函数可以将信号重采样成n个点。

Python数据分析与可视化(Python数据分析与可视化)(55)

2 信号的卷积

卷积是两个变量在某范围内相乘后求和的结果。一维卷积常用于序列模型,如自然语言处理领域。二维卷积常用于计算机视觉、图像处理领域。

Python数据分析与可视化(Python数据分析与可视化)(56)

2 信号的卷积

卷积是两个变量在某范围内相乘后求和的结果。一维卷积常用于序列模型,如自然语言处理领域。二维卷积常用于计算机视觉、图像处理领域。

3 信号的时频分析

信号的表示是信息分析与处理的核心问题之一。在信号分析中,最基本的变量是时间和频率。

信号一般用时间作为自变量表示,通过时频变换,信号也可以使用频率作为自变量表示。常用的变换方法有傅里叶变换、小波变换等。

SciPy中利用 fft 方法将信号从时域变换到频率,用 ifft 方法 将频域信号逆变换回时域

11. NoteScipy是一款用于数学、科学和工程领域的Python工具包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。

数据拟合的方法: 多项式拟合,最小二乘拟合,曲线拟合

欧式距离distance的代码:

np.sqrt(np.sum((a-b)**2))

水平堆叠

np.hstack((a,b))

每一行中的最大值的代码。

np.max(array,axis=0)

第二大值的代码(默认升序排序)

np.unique(array)[-2]

ndmin shape numpy 维数 维度 pandas 维度 形状

Pandas的plot绘制直方图时,kind取值为hist 密度 kde 散点 scatter

Pandas通过 DataFrame.rename() 函数,传入需要修改列名的字典形式来修改列名。replace进行数据的替换

Pandas要读取Mysql中的数据,首先要安装 MySQLdb 包

Pandas读取SQL sever中的数据,首先要安装 pymssql 包

Matplotlib配置了配色方案和默认设置。有两种方式可以设置参数,即 全局参数定制rc参数设置方法

Matplotlib中绘图时的参数alpha用于设置点的透明度。

Seaborn中可以通过 despine 方法移除绘图上方和右方坐标上不需要的边框。

在Seaborn中利用 pairplot() 实现数据特征的两两对比。

pyecharts中通过 Funnel 绘制漏斗图。

pyecharts利用 Kline 绘制K线图

pyecharts利用 Gauge 绘制仪表盘。

pyecharts中利用 Sankey 绘制桑基图。

Scipy中的 constants 模块包含大量用于科学计算的常数。

var函数用作方差统计

使用 rcdefault() 函数可以将配置文件重置。

处理数据缺陷的常用方法 dropna fillna isnull或 notnull

  • 单从数据可视化的奥妙来说:想要学好还是需要下更多功夫去钻研实战的。
  • 单从考试角度来说:想考个及格/80 还是不难的,毕竟考试比较水,大家都懂。
  • 考试既然水,分数就无所谓高低,重要的是我们学了多少东西。
  • 如果看到这里,首先恭喜你与我同在,提前祝你考一个好的成绩。
  • 再次感谢大家的支持与陪伴,感谢其他学霸/大佬对此文的贡献,我仅仅是一个文字搬运工,分享快乐。

加油!

感谢!

努力!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页