精华内容
下载资源
问答
  • Python常见异常分类与处理方法Python常见异常类型大概分为以下类:1.AssertionError:当assert断言条件为假时候抛出异常2.AttributeError:当访问对象属性不存在时候抛出异常3.IndexError:超出对象索引...

    Python常见异常分类与处理方法

    Python常见异常类型大概分为以下类:

    1.AssertionError:当assert断言条件为假的时候抛出的异常

    2.AttributeError:当访问的对象属性不存在的时候抛出的异常

    3.IndexError:超出对象索引的范围时抛出的异常

    4.KeyError:在字典中查找一个不存在的key抛出的异常

    5.NameError:访问一个不存在的变量时抛出的异常

    6.OSError:操作系统产生的异常

    7.SyntaxError:语法错误时会抛出此异常

    8.TypeError:类型错误,通常是不通类型之间的操作会出现此异常

    9.ZeroDivisionError:进行数学运算时除数为0时会出现此异常

    Python异常处理:

    例1:出现异常最简单处理方法

    #!/usr/bin/python

    #coding:utf8

    #try与except结合用法

    a = 1

    b = 2

    try :

    assert a > b     #如果a>b判断为假时将抛出AssertionError异常

    except AssertionError:  #如果捕获到AssertionError异常将执行except下面的代码块

    print ( "a

    上面例子输出结果为 ab为假,这时候会抛出AssertionError异常,当捕获到此异常后就会执行except代码块中的语句

    例2:使用多个except捕获异常

    #!/usr/bin/python

    #coding:utf8

    #try与多个except结合用法,在try代码块中依次执行,只要捕获到异常就停止执行

    a = 1

    b = 2

    c = "1"

    try :

    assert a < b

    d = a + c

    except AssertionError:

    print ( "a

    except TypeError,e:   #这里的 e 为异常信息

    print (e)

    上面执行的结果为 unsupported operand type(s) for +: 'int' and 'str' 不支持整型和字符串型相加,前面断言为真,所以不会出现AssertionError异常,这时候继教执行下面语句,这时候就出现了TypeError异常,这时候就会执行except TypeError下面的代码块,后面的e代表异常的错误信息,所以这里的结果是打印出异常的错误信息

    例3:try与except与else的使用

    #!/usr/bin/python

    #coding:utf8

    a = 1

    b = 2

    c = "1"

    try :

    assert a < b

    d = a + b

    except AssertionError,e:

    print ( "a

    except TypeError,e:

    print (e)

    else :          #当try代码块中执行没有发现任何异常的时候执行这里的语句

    print ( "Program execution successful" )

    上面执行结果为

    例4:try与except与else与finally结合使用(可以没有else)

    #!/usr/bin/python

    #coding:utf8

    #try与多个except结合用法,在try代码块中依次执行,只要捕获到异常就停止执行

    a = 1

    b = 2

    c = "1"

    try :

    assert a < b

    d = a + b

    txt = open ( "/root/1.txt" )

    txt.write( "test" )    #上面打开文件默认以r方式打开,这里会抛出IOError异常

    except AssertionError,e:

    print ( "a

    except TypeError,e:   #这里的 e 为异常信息

    print (e)

    except IOError,e:

    print (e)

    else :          #当没有发现任何异常的时候执行这里的语句

    print ( "Program execution successful" )

    finally :

    #不管有没有民常都会执行finally代码块中的语句,通常用在打开文件,在文件处理过程过中出异常退出,这时候文件没有关闭

    txt.close()

    完 谢谢观看

    展开全文
  • 科研常用的实验数据分析与处理方法对于每个科研工作者而言,对实验数据进行处理是在开始论文写作之前十分常见的工作之一。但是,常见的数据分析方法有哪些呢?常用的数据分析方法有:聚类分析、因子分析、相关分析、...

    科研常用的实验数据分析与处理方法

    687b74c4461fbef5c42c5e82d67d30d9.png

    对于每个科研工作者而言,对实验数据进行处理是在开始论文写作之前十分常见的工作之一。但是,常见的数据分析方法有哪些呢?常用的数据分析方法有:聚类分析、因子分析、相关分析、对应分析、回归分析、方差分析。

    1、聚类分析(Cluster Analysis)

    聚类分析指将物理或抽象对象的集合分组成为由类似的对象组成的多个类的分析过程。聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。聚类分析是一种探索性的分析,在分类的过程中,人们不必事先给出一个分类的标准,聚类分析能够从样本数据出发,自动进行分类。聚类分析所使用方法的不同,常常会得到不同的结论。不同研究者对于同一组数据进行聚类分析,所得到的聚类数未必一致。

    2、因子分析(Factor Analysis)

    因子分析是指研究从变量群中提取共性因子的统计技术。因子分析就是从大量的数据中寻找内在的联系,减少决策的困难。因子分析的方法约有10多种,如重心法、影像分析法,最大似然解、最小平方法、阿尔发抽因法、拉奥典型抽因法等等。这些方法本质上大都属近似方法,是以相关系数矩阵为基础的,所不同的是相关系数矩阵对角线上的值,采用不同的共同性□2估值。在社会学研究中,因子分析常采用以主成分分析为基础的反覆法。

    3、相关分析(Correlation Analysis)

    相关分析(correlation analysis),相关分析是研究现象之间是否存在某种依存关系,并对具体有依存关系的现象探讨其相关方向以及相关程度。相关关系是一种非确定性的关系,例如,以X和Y分别记一个人的身高和体重,或分别记每公顷施肥量与每公顷小麦产量,则X与Y显然有关系,而又没有确切到可由其中的一个去精确地决定另一个的程度,这就是相关关系。

    4、对应分析(Correspondence Analysis)

    对应分析(Correspondence analysis)也称关联分析、R-Q型因子分析,通过分析由定性变量构成的交互汇总表来揭示变量间的联系。可以揭示同一变量的各个类别之间的差异,以及不同变量各个类别之间的对应关系。对应分析的基本思想是将一个联列表的行和列中各元素的比例结构以点的形式在较低维的空间中表示出来。

    5、回归分析

    研究一个随机变量Y对另一个(X)或一组(X1,X2,„,Xk)变量的相依关系的统计分析方法。回归分析(regression analysis)是确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法。运用十分广泛,回归分析按照涉及的自变量的多少,可分为一元回归分析和多元回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。

    6、方差分析(ANOVA/Analysis of Variance)

    又称“变异数分析”或“F检验”,是R.A.Fisher发明的,用于两个及两个以上样本均数差别的显著性检验。由于各种因素的影响,研究所得的数据呈现波动状。造成波动的原因可分成两类,一是不可控的随机因素,另一是研究中施加的对结果形成影响的可控因素。方差分析是从观测变量的方差入手,研究诸多控制变量中哪些变量是对观测变量有显著影响的变量。

    列表法

    实验数据的处理自然离不开绘制成表。那么,常见的实验数据处理表格体现方式分为两种:列表法和作图法。

    列表法就是将一组实验数据和计算的中间数据依据一定的形式和顺序列成表格。列表法可以简单明确地表示出物理量之间的对应关系,便于分析和发现资料的规律性,也有助于检查和发现实验中的问题,这就是列表法的优点。设计记录表格时要做到:

    (1)表格设计要合理,以利于记录、检查、运算和分析。

    (2)表格中涉及的各物理量,其符号、单位及量值的数量级均要表示清楚。但不要把单位写在数字后。

    (3)表中数据要正确反映测量结果的有效数字和不确定度。列入表中的除原始数据外,计算过程中的一些中间结果和最后结果也可以列入表中。

    (4)表格要加上必要的说明。实验室所给的数据或查得的单项数据应列在表格的上部,说明写在表格的下部。

    作图法

    作图法是在坐标纸上用图线表示物理量之间的关系,揭示物理量之间的联系。作图法既有简明、形象、直观、便于比较研究实验结果等优点,它是一种最常用的数据处理方法。作图法的基本规则是:

    (1)根据函数关系选择适当的坐标纸(如直角坐标纸,单对数坐标纸,双对数坐标纸,极坐标纸等)和比例,画出坐标轴,标明物理量符号、单位和刻度值,并写明测试条件。

    (2)坐标的原点不一定是变量的零点,可根据测试范围加以选择。,坐标分格最好使最低数字的一个单位可靠数与坐标最小分度相当。纵横坐标比例要恰当,以使图线居中。

    (3)描点和连线。根据测量数据,用直尺和笔尖使其函数对应的实验点准确地落在相应的位置。一张图纸上画上几条实验曲线时,每条图线应用不同的标记如“+”、“×”、“·”、“Δ”等符号标出,以免混淆。连线时,要顾及到数据点,使曲线呈光滑曲线(含直线),并使数据点均匀分布在曲线(直线)的两侧,且尽量贴近曲线。个别偏离过大的点要重新审核,属过失误差的应剔去。

      (4)标明图名,即做好实验图线后,应在图纸下方或空白的明显位置处,写上图的名称、作者和作图日期,有时还要附上简单的说明,如实验条件等,使读者一目了然。作图时,一般将纵轴代表的物理量写在前面,横轴代表的物理量写在后面,中间用“~”联接。

    0ecf15afc78e865e56ad9efbfaa57510.png

    展开全文
  • 本章将考虑这些问题,在使用算法学习之前,首先需要对数据进行分析,根据数据的不同情况,采用不同的方法数据进行预处理,数据预处理常见的方法如下:1.数据清理:主要是指将数据中缺失的值补充完整、消除噪声数据...

    概况起来,常遇到的数据存在噪声、冗余、关联性、不完整性等。本章将考虑这些问题,在使用算法学习之前,首先需要对数据进行分析,根据数据的不同情况,采用不同的方法对数据进行预处理,数据预处理常见的方法如下:

    1. 数据清理:主要是指将数据中缺失的值补充完整、消除噪声数据、识别或删除离群点并解决不一致性。主要是达到如下目标:将数据格式标准化,异常数据清除,错误纠正,重复数据的清除。

    2. 数据集成:主要是将多个数据源中的数据进行整合并统一存储。

    3. 数据变换:主要是指通过平滑聚集,数据概化,规范化等方式将数据转换成适用于数据挖掘的形式。

    4. 数据归约:数据挖掘时往往数据量非常大,因此在少量数据上进行挖掘分析就需要很长的时间,数据归约技术主要是指对数据集进行归约或者简化,不仅保持原数据的完整性,并且数据归约后的结果与归约前结果相同或几乎相同。

    这些数据处理技术在数据挖掘之前使用,然后才能输入到机器学习算法中进行学习。这样大大提高了数据挖掘模式的质量,降低实际挖掘所需要的时间

    0x00数据集成

    我们日常使用的数据来源于各种渠道,有的是连续的数据,有的是离散数据、有的是模糊数据,有的是定性数据,有的是定量数据。数据集成就是将多文件或者多数据库中的异构数据进行合并,然后存放在一个统一的数据库中进行存储。在进行数据的集成过程中,一般需要考虑以下问题:

    实体识别

    主要指数据源来源不同,其中多的概念定义不一样

    同名异意:数据源A的某个数据特征的名称和数据源B的某个数据特征是一样的但是表示的内容不一样。

    异名同义:数据源A的某个特征的名称和数据源B的某个特征名称不一样,但是表达的内容不一样。

    单位不统一:不同地数据源记录的单位不一样,比如统计身高、一个数据源以m为单位,一个使用英尺

    冗余属性

    指数据中存在冗余,一般分为一下两种

    同一属性出现多次,比如两个数据源都记录每天的最高温度和最低温度,当数据集成时,就出现了两次。

    同一属性命名不一致而导致数据重复

    数据不一致

    编码使用的不一致问题和数据表示的不一致问题,比如旧的***号15位,而新的时18位

    0x01数据变换

    数据变换是指将数据转换或统一成适合于机器学习的形式。就像人类学习一样,需要将采集的外部数据转换成我们可以接收的形式。

    由于实际过程中采集的各种数据,形式多种多样,格式也不一致,这些都需要采用一定的数据预处理,使得他们符合机器学习的算法使用。

    数据变换常用方法如下:

    使用简单的数学函数对数据进行变换

    对采集的原始数据使用各种简单的数学函数进行转换,常见的函数包括平方、开方、取对数、差分运算等(压缩变大或者压缩变小)。

    归一化

    特征归一化也叫做数据无量纲化,主要包括:总和标准化、标准差标准化、极大值标准化、极差标准化。这里需要说明的是,基于树的方法是不需要进行特征归一化的,例如GBDT,bagging、boosting等等,而基于参数的模型或基于距离的模型,则都需要进行特征归一化。

    总和标准化

    总和标准化处理后的数据介于(0,1)之间,并且它们的和为1。总和标准化的步骤和公式也非常简单:分别求出各聚类要素所定义的数据的总和,以各要素的数据除以该要素的数据总和,即:

    1372408762d3ef1436c57a568ebe5abc.png 经过总和标准化处理后所得的新数据满足:

    8f239495f7f5b111088cd5ce95daa0ad.png

    标准差标准化

    标准差标准化公式如:

    8d425cd1e2c8eb4176ec655c22b932ac.png

    其中

    ba5d399afe86ef42670fc9d07080a2d8.png 标准差标准化处理后所得到的新数据,各要素(指标)的平均值0,标准差为1,即:

    12a1bbfc8bc6e555f601496e6a9ac2e2.png

    极大值标准化

    结果极大值标准化的公式如下所示:

    9c391870d5074d99b16048de74b9c1e6.png 极大值标准化后的新数据,各要素的最大值为1,其余各项都小于1。

    对稀疏数据进行中心化会破坏稀疏数据的结构,这样做没有什么意义,但可以对稀疏数据标准化,极大值标准化就是为稀疏数据设计的,同时这也是一种常用的方法,Python中极大值标准化为MaxAbsScaler(),如果要使用Python中标准差标准化(StandardScaler)则需要设置with_centering = False,否则将破坏数据稀疏性。

    极差标准化(区间放缩法,0-1标准化)

    极差标准化的计算公式如下:

    16a325a418235f38cc90a404af34b955.png

    经过极差标准化处理后的新数据,各要素的极大值为1,极小值为0,其余数值均在0与1之间。这里的min{x_ij}和max{x_ij}指的是和x_ij同一列的最小值和最大值。

    如果数据中有离群点,对数据进行均值和方差的标准化效果并不好,这时候可以使用robust_scale和RobustScaler作为代替,它们有对数据中心化和数据的缩放鲁棒性更强的参数。

    连续特征变换

    连续特征变换的常用方法有三种:基于多项式的数据变换、基于指数函数的数据变换、基于对数函数的数据变换。连续特征变换能够增加数据的非线性特征捕获特征之间的关系,有效提高模型的复杂度。

    #encoding=utf-8

    """

    生成多项式特征与自定义函数(如:log等)

    在输入特征中增加非线性特征可以有效提高模型的复杂度,其中最常用的是多项式特征

    matrix =

    [[0 1 2]

    [3 4 5]

    [6 7 8]]

    当degree = 2时,以第二行为例:

    [1 3 4 5 3*3 3*4 3*5 4*4 4*5 5*5]

    当degree = 3时,以第二行为例::

    [1 3 4 5 3*3 3*4 3*5 4*4 4*5 5*5 3*3*3 3*3*4 3*3*5 4*4*3 4*3*5 5*5*3 4*4*4 4*4*5 4*5*5 5*5*5]

    """

    import numpy as np

    from sklearn.preprocessing import PolynomialFeatures

    from sklearn.preprocessing import FunctionTransformer

    """生成多项式"""

    X = np.arange(9).reshape(3,3)

    print(X)

    ploy = PolynomialFeatures(2)

    print(ploy.fit_transform(X))

    ploy = PolynomialFeatures(3)

    print(ploy.fit_transform(X))

    """自定义转换器"""

    X = np.array([[0,1],[2,3]])

    transformer = FunctionTransformer(np.log1p) #括号内的就是自定义函数

    print(transformer.fit_transform(X))

    transformer = FunctionTransformer(np.exp)

    print(transformer.fit_transform(X))

    输出结果:

    (env_default) PS F:\workspace> python .\test.py

    [[0 1 2]

    [3 4 5]

    [6 7 8]]

    [[ 1.  0.  1.  2.  0.  0.  0.  1.  2.  4.]

    [ 1.  3.  4.  5.  9. 12. 15. 16. 20. 25.]

    [ 1.  6.  7.  8. 36. 42. 48. 49. 56. 64.]]

    [[  1.   0.   1.   2.   0.   0.   0.   1.   2.   4.   0.   0.   0.

    0.

    0.   0.   1.   2.   4.   8.]

    [  1.   3.   4.   5.   9.  12.  15.  16.  20.  25.  27.  36.  45.

    48.

    60.  75.  64.  80. 100. 125.]

    [  1.   6.   7.   8.  36.  42.  48.  49.  56.  64. 216. 252. 288. 294.

    336. 384. 343. 392. 448. 512.]]

    [[0.         0.69314718]

    [1.09861229 1.38629436]]

    [[ 1.          2.71828183]

    [ 7.3890561  20.08553692]]

    (env_default) PS F:\workspace>

    连续属性离散化

    1. 离散化技术分类

    连续属性的离散化方法也可以被称为分箱法,即将一组连续的值根据一定的规则分别放到其术语的集合中。

    离散化技术可以根据如何对数据进行离散化加以分类,可以根据是否使用类信息或根据进行方向(即自顶向下或自底向上)分类。

    如果离散化过程使用类信息,则称它为监督离散化(superviseddiscretization);否则是非监督的(unsupervised)。

    如果首先找出一点或几个点(称作分裂点或割点)来划分整个属性区间,然后在结果区间上递归地重复这一过程,则称它为自顶向下离散化或分裂。自底向上离散化或合并正好相反,首先将所有的连续值看作可能的分裂点,通过合并相邻域的值形成区间,然后递归地应用这一过程于结果区间。

    2. 无监督离散化与监督离散化

    根据数据是否包含类别信息可以把它们分成有监督的数据和无监督的数据。有监督的离散化要考虑类别信息而无监督的离散化则不需要。

    无监督离散化

    假设属性的取值空间为

    aa74c76899cd9e369262ebf0d638e5b4.png ,离散化之后的类标号是 

    b3134ff6ca90ee576b6aa2b6ea725930.png ,则无监督离散化的情况就是X已知而Y未知。以下介绍几种常用的无监督离散化方法:

    (1) 等宽算法

    根据用户指定的区间数目K,将属性的值域[Xmin−Xmax]划分成K个区间,并使每个区间的宽度相等,即都等于Xmax−XminK。缺点是容易受离群点的影响而使性能不佳。

    (2) 等频算法

    等频算法也是根据用户自定义的区间数目,将属性的值域划分成K个小区间。他要求落在每个区间的对象数目相等。譬如,属性的取值区间内共有M个点,则等频区间所划分的K个小区域内,每个区域含有MK个点。

    (3) K-means聚类算法

    首先由用户指定离散化产生的区间数目K,K-均值算法首先从数据集中随机找出K个数据作为K个初始区间的重心;然后,根据这些重心的欧式距离,对所有的对象聚类:如果数据x距重心Gi最近,则将x划归Gi所代表的那个区间;然后重新计算各区间的重心,并利用新的重心重新聚类所有样本。逐步循环,直到所有区间的重心不再随算法循环而改变为止。

    监督离散化

    监督离散化就是事先X和Y均为已知,然后找到某个函数,利用X值对Y值做预测。可以建立回归或者分类模型。

    以下介绍的自下而上或者自上而下的分类方法都属于监督离散化方法。

    3. 齐次性的卡方检验

    在介绍两种基于卡方检验的离散化算法之前,先来介绍一下齐次性的卡方检验。

    数据:有rr个总体。

    从每个总体中抽取一个随机变量,记第ii个样本含有的观测数是

    7225d771f8808273bc89ae400ee4ddf5.png, 每个样本的每个观测值可以归为cc个不同类别中的一类。记Oij为样本ii的观测值归入类j的个数,所以, 

    2047cb681ea3ff67001b09e57f7d8913.png 对于所有的样本i,将数据排列成以下的r∗c

    | 类1 | 类2   | ⋯⋯ | 类c    | 总和|

    | -------- | -------- | -------- | -------- | -------- |

    | 总体1|  O11 | O12|  ⋯⋯  | O1c   | n1|

    | 总体2   | O21|  O22 | ⋯⋯|   O21 | n2|

    | ⋯⋯|   ⋯⋯|     ⋯⋯  | ⋯⋯    | ⋯⋯    | ⋯⋯|

    | 总体r   | Or1   | Or2   | ⋯⋯|   Orc | nr|

    | 总和    | C1    | C2    | ⋯⋯    | Cc    | N|

    假设:

    记pijpij为随机取到第ii个总体划分为第jj类的概率,j∈[i,c]i∈[1,r],。

    H0:同一列中所有的概率相等(即对任意的j,p1j=p2j=⋯=prjp1j=p2j=⋯=prj)。

    H1:每列中至少存在两个概率不相等(即给定j,存在i和k,使得pij≠pkj)。

    检验统计量χ2为:

    733a34d7f293f6af183ccee9d7ea1922.png

    零分布:

    0841aff35611bfa305f094556f04e8ab.png

    | 吸烟    | 不吸烟|  总计|

    | -------- | -------- | -------- |

    | 男 | 20    | 5 | 25|

    | 女 | 10|   15  | 25|

    | 总计    | 30|   20  | 50|

    首先假设H0:性别和吸烟相关。

    根据公式求得χ2=8.33,自由度为1,查表可得p值小于0.005,所以拒绝原假设。

    4. 自上而下的卡方分裂算法

    该分裂算法是把整个属性的取值区间当做一个离散的属性值,然后对该区间进行划分,一般是一分为二,即把一个区间分为两个相邻的区间,每个区间对应一个离散的属性值,该划分可以一直进行下去,直到满足某种停止条件,其关键是划分点的选取。

    分裂步骤:

    依次计算每个插入点的卡方值,当卡方值达到最大时,将该点作为分裂点,属性值域被分为两块。

    然后再计算卡方值,找到最大值将属性值域分成三块。

    停止准则:

    当卡方检验显著,即pp值

    当卡方检验不显著,即pp值⩾α⩾α时,停止分裂区间;

    5. ChiMerge算法

    ChiMerge算法是一种基于卡方值的自下而上的离散化方法。和上一种算法正好相反。

    分裂步骤:

    第一步:根据要离散的属性对实例进行排序:每个实例属于一个区间

    第二步:合并区间,计算每一对相邻区间的卡方值

    停止准则:

    当卡方检验不显著,即pp值⩾α时,继续合并相邻区间;

    当卡方检验显著,即pp值

    6. 基于熵的离散化方法

    本方法也是一种自上而下的离散化方法。首先,定义一下熵的概念:

    844e7b5f085fc7433f74ef3a61d0ebc7.png 其中,

    6814676f589ea8db208235510fd3f1d6.png 是第i个区间中类jj的概率。

    该划分的总熵e是每个区间的熵的加权平均:

    c156b0e3f88975da3385dd5c732d243b.png 其中

    027a32718bf83922447140851c77909f.png 是第i个区间的值的比例,n是区间个数。

    划分过程:

    首先将属性的取值值域按照值得大小排序。 把每个值看作是可能的分割点,依次把区间分成两部分计算它们的熵值,取熵值最小的作为第一次划分点。

    然后选取一个区间,通常选择熵值最大的区间重复此过程。

    当区间个数达到用户指定的个数或某个用户指定的终止条件则停止继续分裂。

    本作品采用《CC 协议》,转载必须注明作者和本文链接

    展开全文
  • 点击上方“Datawhale”,选择“星标”...视频数据图像数据非常类似,都是由像素点组成的数据。在视频数据在非音频部分基本上可以视为多帧(张)图像数据的拼接,即三维图像的组合。由于视频数据图像数据的相似性...

    点击上方“Datawhale”,选择“星标公众号

    第一时间获取价值内容

    ec10ffa8bd2048b7069f06ec32f0620d.gif

    视频文件是多媒体数据中比较常见的一种,也是入门门槛比较高的一个领域。视频数据相关的领域任务包括视频物体检测、视频物体追踪、视频分类、视频检索和视频摘要抽取等。

    5772d5df02f8458e83872d6493ca7100.png

    视频数据与图像数据非常类似,都是由像素点组成的数据。在视频数据在非音频部分基本上可以视为多帧(张)图像数据的拼接,即三维图像的组合。由于视频数据与图像数据的相似性,在上述列举的视频领域任务中大都可以借助图像方法来完成。

    文本将讲解视频抽帧的几种方法,具体包括以下几种抽帧方式:

    • 抽取视频关键帧(IPB帧)

    • 抽取视频场景转换帧

    • 按照时间进行均匀抽帧

    • 抽取制定时间的视频帧

    在进行讲解具体的抽帧方式之前,我不得不介绍下FFmpeg。FFmpeg是一套可以用来编码、解码、合成和转换音频和视频数据的开源软件,提供了非常全面的音视频处理功能。如果你的工作内容是视频相关,那么ffmpeg是必须要掌握的软件了。FFmpeg提供了常见音视频和编解码方式,能够对众多的音视频格式进行读取,基本上所有的软件都会借助FFmpeg来完成音视频的读取操作。

    FFmpeg的学习资料可以参考:

    • http://ffmpeg.org/documentation.html

    • https://blog.csdn.net/leixiaohua1020/article/details/15811977

    # 查看视频信息> ffmpeg -i 666051400.mp4Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '666051400.mp4':  Metadata:    major_brand     : isom    minor_version   : 512    compatible_brands: isomiso2avc1mp41    encoder         : Lavf57.56.100  Duration: 00:17:02.00, start: 0.000000, bitrate: 374 kb/s    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,    Metadata:      handler_name    : VideoHandler    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz    Metadata:      handler_name    : SoundHandlerAt least one output file must be specified

    1. 抽取视频关键帧(IPB帧)

    视频关键帧(Video Keyframes)是用于视频压缩和视频编解码的帧,视频关键帧是包含了完整信息的帧,其他的非关键帧将会使用与关键帧的差值进行压缩。视频帧具体可以分为IPB帧三种:

    • I帧表示关键帧,是最完整的帧画面,一般视频封面都选择I帧;

    • P帧单预测帧,利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码;

    • B帧双向预测帧,利用双向帧进行预测编码;

    一般情况下关键帧`I帧`是信息最多的帧,也是用途最多的帧。在视频检索和视频分类任务中一般都借助`I帧`来完成,在一个时长60s的视频中,可以抽取得到16个I帧、84个P帧和184个B,I帧数量少包含的信息却是最多的。

    • 使用ffprobe提取出IPB帧的时间:

    ffprobe -i 666051400.mp4 -v quiet -select_streams v -show_entries frame=pkt_pts_time,pict_type
    • 抽取IPB帧到jpg图片:

    # 抽取I帧ffmpeg -i 666051400.mp4 -vf "select=eq(pict_type\,I)"  -vsync vfr -qscale:v 2 -f image2 ./%08d.jpg# 抽取P帧ffmpeg -i 666051400.mp4 -vf "select=eq(pict_type\,P)"  -vsync vfr -qscale:v 2 -f image2 ./%08d.jpg# 抽取B帧ffmpeg -i 666051400.mp4 -vf "select=eq(pict_type\,B)"  -vsync vfr -qscale:v 2 -f image2 ./%08d.jpg

    由于ffmpeg抽取帧并无法按照时间戳来命名,需要手动将ffprobe提取出来的帧时间与抽取帧的图片进行对应重命名。关键帧具体的定义和用途可以参考:https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Key_frame

    2. 抽取视频场景转换帧

    在视频中可以按照视频的镜头切换可以将视频分为不同的场景(scene boundaries),为了直观感受可以观看下面一个视频。

    http://www.scikit-video.org/stable/_static/scene_cuts.mp4

    视频场景抽取算法一般是使用帧间的相似差异程度来衡量,如果视频帧大于某一个阈值则认为是一个新的场景,否则不是一个新的场景。在scikit-video中提供了颜色相似度和边缘相似度两种度量方式,思路非常简单:

    https://github.com/scikit-video/scikit-video/blob/master/skvideo/measure/scene.py

    但是在我自己试验的过程中发现scikit-video中的场景检测非常慢,一个视频需要几分钟才能计算得到结果。后来在阅读ffmpeg文档过程中发现,ffmpeg早就有场景检测的命令,而且速度飞快。

    # https://ffmpeg.org/ffmpeg-filters.html#select_002c-aselect# 其中0.1表示帧为新场景的概率ffmpeg -i 666051400.mp4 -filter:v "select='gt(scene,0.1)',showinfo" -f null - 2>&1

    scikit-video的场景检测速度慢是以下原因:scikit-video中场景检测的实现方式是读取所有的视频帧,这个步骤非常耗时;而ffmpeg能够根据视频帧的压缩情况来选择性读取帧,速度就非常快了。但是scikit-video库还是很直观的,我也从库源代码学习到了很多。

    如果ffmpeg有对应的功能命令,优先使用ffmpeg来完成。

    3. 均匀抽帧

    # -r 指定抽取的帧率,即从视频中每秒钟抽取图片的数量。1代表每秒抽取一帧。ffmpeg -i 666051400.mp4 -r 1 -q:v 2 -f image2 ./%08d.000000.jpg

    4. 抽取制定时间的帧

    # 耗时0.07sffmpeg -ss 00:00:30 -i 666051400.mp4 -vframes 1 0.jpg# 耗时0.68sffmpeg -i 666051400.mp4 -ss 00:00:30  -vframes 1 0.jpg

    为什么上述两个命令时间差距这么大呢,也就是-i与-ss的位置换了一下。区别就是如果-ss在前面,则会使用关键帧信息来进行索引,则会非常快。

    具体说明参考:https://trac.ffmpeg.org/wiki/Seeking

    c1011dd2f5ded819b5561d7f4f9a9c9b.png

    展开全文
  • 本书在对Excel技术论坛上上百万个提问的分析提炼的基础上,汇集了用户在使用Excel进行数据处理与分析过程中最常见的需求,通过270多个实例的演示讲解,将Excel高手的过人技巧手把手教给读者,并帮助读者发挥创意...
  • 数据丢失是模式识别技术在解决现实生活中的分类任务时需要处理的一个常见缺陷。 本文首先讨论了使用高斯混合模型(GMM)处理缺失值高维样本时遇到问题。 由于由于收敛性和稳定性问题,直接使用高维样本作为输入...
  • 《EXCEL数据处理与分析实战技巧精粹》在对Excel技术论坛上上百万个提问的分析提炼的基础上,汇集了用户在使用Excel进行数据处理与分析过程中最常见的需求,通过270多个实例的演示讲解,将Excel高手的过人技巧...
  • 《EXCEL数据处理与分析实战技巧精粹》在对Excel技术论坛上上百万个提问的分析提炼的基础上,汇集了用户在使用Excel进行数据处理与分析过程中最常见的需求,通过270多个实例的演示讲解,将Excel高手的过人技巧...
  • PaddleX对于图像分类、目标检测、实例分割和语义分割内置了部分常见的数据增强操作,如下表所示, 任务类型 增强方法 图像分类 RandomCrop、RandomHorizontalFlip、RandomVerticalFlip、 RandomRotate、 ...
  • SMOTE算法处理非平衡数据与结果评估算法提出背景:不平衡数据的常见处理方法SMOTE算法原理 算法提出背景: 在实际应用中,针对 分类问题中类别型因变量可能存在严重偏倚,即类别之间比例严重失调。如...
  • 离散型特征的处理方法

    千次阅读 2018-12-25 09:45:07
    机器学习中,常常在数据集中会遇到一些离散特征,对于这些离散特征相比连续特征要用不同的处理方法常见的方法有LabelEncoderOneHotEncoder。 LabelEncoder LabelEncoder用来对离散型分类型特征值进行编码,...
  • 那么,关于医学SCI论文统计学处理与方法的选择,我们应该注意哪些内容? 一、关于统计学处理 在进行统计学处理时,首先要明白研究资料是计数资料还是计量资料,尽管是一个常识性问题,但仍有不少作者搞混...
  • 本书在对Excel技术论坛上上百万个提问的分析提炼的基础上,汇集了用户在使用Excel进行数据处理与分析过程中最常见的需求,通过270多个实例的演示讲解,将Excel高手的过人技巧手把手教给读者,并帮助读者发挥...
  • Excel数据处理和分析

    2018-11-28 09:37:57
    字体高清,书签完美,本书在对Excel技术论坛上上百万个提问的分析提炼的基础上,汇集了用户在使用Excel进行数据处理与分析过程中最常见的需求,通过270多个实例的演示讲解,将Excel高手的过人技巧手把手教给读者...
  • 7.3.5 BFR算法中的数据处理 7.3.6 习题 7.4 CURE算法 7.4.1 CURE算法的初始化 7.4.2 CURE算法的完成 7.4.3 习题 7.5 非欧空间下的聚类 7.5.1 GRGPF算法中的簇表示 7.5.2 簇表示树的初始化 7.5.3 GRGPF算法...
  • 7.3.5 BFR算法中的数据处理 7.3.6 习题 7.4 CURE算法 7.4.1 CURE算法的初始化 7.4.2 CURE算法的完成 7.4.3 习题 7.5 非欧空间下的聚类 7.5.1 GRGPF算法中的簇表示 7.5.2 簇表示树的初始化 7.5.3 GRGPF算法...
  • 逻辑回归(LogisticRegression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理分类问题,它实际上是属于一种分类方法。 概率p因变量往往是非线性的,为了解决该类问题,...
  • 使用深度学习在进行图像分类或者对象检测时候,首先需要对图像做数据预处理,最常见的对图像预处理方法有两种,正常白化处理又叫图像标准化处理,另外一种方法叫做归一化处理,下面就详细的说一下这两种处理方法。...
  • 针对该问题,本次对应遥感图像显著图建立了遥感数据分类标准,分割遥感影像中重要信息。针对遥感影像水体信息提取需求,改良了PCNN神经网络,建立了快速响应PCNN神经网络模型,并实现了基于Matlab验证平台...
  • (3)常见的排序算法分类(如图) 6.3算法的时间复杂度 6.3.1度量一个程序(算法)执行时间的两种方法 (1)事后统计的方法 这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评
  • 逻辑回归逻辑回归(LogisticRegression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理分类问题,它实际上是属于一种分类方法。概率p因变量往往是非线性的,为了解决该类问题...
  • 1、Python数据导入 ...3、数据分类处理的一般思路: 明确需求,对数据进行观察; 确定算法; 确定步骤; 编程实现; 4、常见分类算法: KNN算法: 贝叶斯方法 贝叶斯网络又称信度网络,是Baye...
  • 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理分类问题,它实际上是属于一种分类方法。  概率p因变量往往是非线性的,为了解决该类问题,...
  • 数据结构算法前戏

    2019-09-21 19:18:17
    排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行...常见的排序算法分类 度量一个程序(算法)执行时间的两种方法 事后统计的方法 这种方法可行, 但是有两个问题:一是要想对设计的算法的...
  • 决策树算法 决策树及其变种是一类将输入空间分成不同区域,每个区域有独立参数算法。 决策树算法充分利用了树形模型...此方法的特点是结构简单、处理数据效率较高。 朴素贝叶斯算法 朴素贝叶斯算法是一种分类算...
  • 一般认为,数据挖掘领域所使用的方法均属于机器学习算法、深度学习算法和数据挖掘算法。 一般认为,数据挖掘领域问题主要有分类、回归、聚类、推荐、图像识别、预测。 一般认为,数据挖掘领域所牵扯到底层...
  • 排序算法的介绍排序也称排序算法 (Sort Algorithm),排序是将 一组数据 , 依指定的顺序 进行 排列的过程 。...常见的排序算法分类算法的时间复杂度 度量一个程序(算法)执行时间的两种方法1、事后统计的方法 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 551
精华内容 220
关键字:

常见的数据分类与处理方法