Matlab中的日期和时间

1. Matlab中的三种日期/时间格式

1.1 字符串式(Date String)。

如“14-Apr-2015 10:54:00”,“2015-04-14 10:54”,“2015-04-14 10:54 AM”等等。

具体的格式可以自由定义,但是需要遵从Matlab中的相关规则。

规则1,日期/时间的各组成部分的符号标识(Symbolic Identifier)。

Symbolic Identifier Description Example
yyyy Year in full 1990, 2002
yy Year in two digits 90, 02
QQ Quarter year using letter Q and one digit Q1
mmmm Month using full name March, December
mmm Month using first three letters Mar, Dec
mm Month in two digits 03, 12
m Month using capitalized first letter M, D
dddd Day using full name Monday, Tuesday
ddd Day using first three letters Mon, Tue
dd Day in two digits 05, 20
d Day using capitalized first letter M, T
HH Hour in two digits
(no leading zeros when symbolic identifier AM or PM is used)
05, 5 AM
MM Minute in two digits 12, 02
SS Second in two digits 07, 59
FFF Millisecond in three digits 057
AM or PM AM or PM inserted in date string 3:45:02 PM

可以使用以上标识符自由定义显示出来的字符串式的日期。

规则2,Matlab中预定义的字符串式日期/时间格式,即Matlab中有现成的预定义的(predefined)显示格式,共33种,每一种以一个数字标识(Numeric Identifier)指示,如下表。

Numeric Identifier Date String Format Example
-1 (default) 'dd-mmm-yyyy HH:MM:SS' or 'dd-mmm-yyyy' if'HH:MM:SS'= 00:00:00 01-Mar-2000 15:45:17 or 01-Mar-2000
0 'dd-mmm-yyyy HH:MM:SS' 01-Mar-2000 15:45:17
1 'dd-mmm-yyyy' 01-Mar-2000
2 'mm/dd/yy' 03/01/00
3 'mmm' Mar
4 'm' M
5 'mm' 03
6 'mm/dd' 03/01
7 'dd' 01
8 'ddd' Wed
9 'd' W
10 'yyyy' 2000
11 'yy' 00
12 'mmmyy' Mar00
13 'HH:MM:SS' 15:45:17
14 'HH:MM:SS PM' 3:45:17 PM
15 'HH:MM' 15:45
16 'HH:MM PM' 3:45 PM
17 'QQ-YY' Q1-01
18 'QQ' Q1
19 'dd/mm' 01/03
20 'dd/mm/yy' 01/03/00
21 'mmm.dd,yyyy HH:MM:SS' Mar.01,2000 15:45:17
22 'mmm.dd,yyyy' Mar.01,2000
23 'mm/dd/yyyy' 03/01/2000
24 'dd/mm/yyyy' 01/03/2000
25 'yy/mm/dd' 00/03/01
26 'yyyy/mm/dd' 2000/03/01
27 'QQ-YYYY' Q1-2001
28 'mmmyyyy' Mar2000
29 'yyyy-mm-dd'
(ISO 8601)
2000-03-01
30 'yyyymmddTHHMMSS'
(ISO 8601)
20000301T154517
31 'yyyy-mm-dd HH:MM:SS' 2000-03-01 15:45:17

1.2 向量式(Date Vector)。

日期时间向量是由1*6个双精度型(double-precision)数值组成的一个行向量。其中除“秒”对应的元素可为分数外,其余值均为整型。时间表示为24小时制,无AM/PM表示信息。

日期时间向量中的各元素按如下顺序表示:

year month day hour minute second

如,10:45:07 AM on October 24, 2012 按向量式则为:

[2012 10 24 10 45 07]

1.3 连续日期数(Serial Date Number)。

连续日期数的意义是,一个代表了相对January 0, 0000的天数的数值。注意,该数值不可表示公元前,其负值并不表示公元前而表示相对公元10000-Jan-00前的天数。

比如,数值0表示公元0000年01月00日,数值1表示0000年01月01日,数值1.5表示0000年01月01日12:00:00,2015-04-14 12:00用连续日期数表示为:736068.5000。

当然使用这个数值还有一个问题,就是时区,该数值以ISO 8601下0时区为标准,如果需要转换为当地时间则要加上或减去响应的时区差对应的天数,比如,中国处于东八区,即UTC +08:00时区,那么在此数值上需要加上8/24=0.3333这样一个值,因为提前的八个小时相当于0.3333天。

2. Matlab中各种日期时间格式之间的转换

2.1 转换为连续日期数(to serial date number):datenum

datenum这个函数可以将其他两种形式的日期时间格式转换为连续日期数的形式,语法规则如下:

DateNumber = datenum(DateString)

这个函数将字符串式转换为连续日期数式

DateNumber = datenum(DateString,formatIn)

这个函数将字符串式转换为连续日期数式,同时通过”formatIn“这个变量明确了字符串式的具体形式,”formatIn“变量本身也是一个字符串,须对应1.1中的相关规则

DateNumber = datenum(DateVector)

这个函数将向量式转换为连续日期数式

DateNumber = datenum(Y,M,D)/datenum(Y,M,D,H,MN,S)

这个函数将向量式转换为连续日期数式。同时指定信息完整度,可见最少要完整到天

2.2 转换为向量式(to vector of components):datevec

datevec这个函数可以将其他两种形式的日期时间格式转换为向量式的形式,语法规则如下:

DateVector = datevec(DateNumber)

这个函数将连续日期数式转换为向量式

DateVector = datevec(DateString)

这个函数将字符串式转换为向量式

DateVector = datevec(DateString,formatIn)

这个函数将字符串式转换为向量式,同时通过”formatIn“这个变量明确了字符串式的具体形式

2.3 转换为字符串式(to string format):datestr

datestr这个函数可以将其他两种形式的日期时间格式转换为字符串式的形式,语法规则如下:

DateString = datestr(DateVector)

这个函数将向量式转换为字符串式

DateString = datestr(DateNumber)

这个函数将连续日期数式转换为字符串式

DateString = datestr(___,formatOut)

这个函数将其他形式转换为字符串式,同时通过”formatOut“变量指定转化后的字符串的具体形式,”formatIn“变量本身也是一个字符串,须对应1.1中的相关规则

DateString = datestr(DateStringIn)

这个函数将通过”DateStringIn“变量表示的一种字符串式转换为以”day-month-year hour:minute:second“形式表示的字符串式

DateString = datestr(___,’local’)

这个函数将其他形式转换为字符串式,同时以当前使用的系统日期时间显示标准来显示,如:

 >>datestr(now,'local')

ans =

14-4月-2015 12:39:38

 


本文结束。

主成分分析(PCA)及其在MATLAB中的实现

主成分分析 Principal Component Analysis(PCA)

 1. 什么是主成分分析? What is PCA?

以下是Wikipedia英文Principal component analysis词条的叙述:

Principal component analysis (PCA) is a statistical procedure that uses an orthogonal transformation to convert a set of observations of possibly correlated variables into a set of values of linearly uncorrelated variables called principal components. The number of principal components is less than or equal to the number of original variables.

意为:

主成分分析(PCA)是一种统计过程,通过一种正交变换将一组可能相关联的参数的观测值转换成一组线性互不关联的参数值,转换后的参数即被称为主成分。主成分的个数小于等于原参数的数目。

This transformation is defined in such a way that the first principal component has the largest possible variance (that is, accounts for as much of the variability in the data as possible), and each succeeding component in turn has the highest variance possible under the constraint that it is orthogonal to (i.e., uncorrelated with) the preceding components.

意为:

还定义这种变换具有如下特点:第一个主成分具有可能的最大方差值(也就是,它尽可能地包含数据中的变化性),随后的主成分依次具有可能的最大方差,且满足与之前的成分正交这一限制。

The principal components are orthogonal because they are the eigenvectors of the covariance matrix, which is symmetric. PCA is sensitive to the relative scaling of the original variables.

意为:

主成分是正交的,因为它们是协方差矩阵的特征向量,而协方差矩阵是一个对称矩阵。主成分分析对原参数的相关度比较敏感。

2. 主成分分析能做什么?What can PCA do?

以下是Wikipedia中文 主成分分析 词条的叙述:

在多元统计分析中,主成分分析(英语:Principal components analysis,PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。由于主成分分析依赖所给数据,所以数据的准确性对分析结果影响很大。

关键词:简化数据,减少数据集的维数

PCA是最简单的以特征量分析多元统计分布的方法。通常情况下,这种运算可以被看作是揭露数据的内部结构,从而更好的解释数据的变量的方法。如果一个多元数据集能够在一个高维数据空间坐标系中被显现出来,那么PCA就能够提供一幅比较低维度的图像,这幅图像即为在讯息最多的点上原对象的一个‘投影’。这样就可以利用少量的主成分使得数据的维度降低了。

关键词:数据的内部结构,解释数据

3.怎么做主成分分析?How to conduct/perform PCA?

这里需要说明:在Matlab和Wikipedia的Principal component analysis词条中,都将原数据矩阵的行定义为不同的实验/观测,将列定义为不同的参数/变量,这与其他一些文献中的定义方法刚好相反,所以会产生误解,比如,Wikipedia中covariance matrix词条中将行定义为参数/变量,本文中以Matlab和Wikipedia的Principal component analysis词条中的定义为准。

在维基百科英文词条下有具体的推导过程,本文不作详述,只介绍具体的计算方法,但所用的符号和数据的设定与英文词条下一致。

Consider a data matrix, X, with column-wise zero empirical mean (the sample mean of each column has been shifted to zero), where each of the n rows represents a different repetition of the experiment, and each of the p columns gives a particular kind of datum (say, the results from a particular sensor).

首先,假设有一个矩阵X,列向经验均值为零(即每列的样本均值移动到零),其n行表示被重复的n次实验,共p列的每一列表示一种特别种类的数据(比如说一种传感器的输出)。

The full principal components decomposition of X can therefore be given as

T=XW

where W is a p-by-p matrix whose columns are the eigenvectors of XTX。

于是,X的完整的主成分分解可由 T=XW 得出,其中W是一个pxp的矩阵它的列是矩阵XTX的特征向量。注意,这里的XTX与其他情况下协方差矩阵算式中的XXT其实是同一个矩阵,只不过两种情况下X的行列定义刚好相反。

具体的,先定义源数据矩阵如下:

PCA-orignal-matrix-definition

注意,此处Xi为行向量。

此后,计算过程如下:

PCA-calculation-procedure

具体的:

  • 第一步,计算Rx,即XTX,或XT的协方差矩阵(无1/(n-1)的系数)。
  • 第二步,求解Rx的特征值和特征向量。
  • 第三步,将特征值按从大到小顺序排列,同时将特征矩阵中的各列按对应特征值的顺序重新排列得到矩阵W
  • 第四步,计算排序完成后的特征值的累积贡献率accumulative contribution rate(ACR),设定阈值,如0.9,得到满足阈值的主成分数目。
  • 第五部,以L个主成分代替了p个变量,实现降维,且计算出源数据转换后的主成分的值。

主成分分析在Matlab中的实现 Perform PCA in Matlab

1. PCA算法的检验

首先我们根据PCA的定义算法进行计算,所用的源数据13*4的double表,13个观测4个变量,该数据通过matlab的hald数据获得,为ingredients矩阵。

load hald;
ingredients =
     7    26     6    60
     1    29    15    52
    11    56     8    20
    11    31     8    47
     7    52     6    33
    11    55     9    22
     3    71    17     6
     1    31    22    44
     2    54    18    22
    21    47     4    26
     1    40    23    34
    11    66     9    12
    10    68     8    12

在开始PCA前,首先需要将此矩阵列中心归零化,得到X

X = ingredients - repmat(mean(ingredients),13,1);
X =
   -0.4615  -22.1538   -5.7692   30.0000
   -6.4615  -19.1538    3.2308   22.0000
    3.5385    7.8462   -3.7692  -10.0000
    3.5385  -17.1538   -3.7692   17.0000
   -0.4615    3.8462   -5.7692    3.0000
    3.5385    6.8462   -2.7692   -8.0000
   -4.4615   22.8462    5.2308  -24.0000
   -6.4615  -17.1538   10.2308   14.0000
   -5.4615    5.8462    6.2308   -8.0000
   13.5385   -1.1538   -7.7692   -4.0000
   -6.4615   -8.1538   11.2308    4.0000
    3.5385   17.8462   -2.7692  -18.0000
    2.5385   19.8462   -3.7692  -18.0000

第一步,计算Rx

Rx = X'* X;
Rx =
   1.0e+03 *
    0.4152    0.2511   -0.3726   -0.2900
    0.2511    2.9057   -0.1665   -3.0410
   -0.3726   -0.1665    0.4923    0.0380
   -0.2900   -3.0410    0.0380    3.3620

第二步,求解特征值和特征向量:

[V,Lambda] = eig(Rx);
V =
    0.5062    0.5673    0.6460   -0.0678
    0.4933   -0.5440    0.0200   -0.6785
    0.5156    0.4036   -0.7553    0.0290
    0.4844   -0.4684    0.1085    0.7309
Lambda =
   1.0e+03 *
    0.0028         0         0         0
         0    0.1489         0         0
         0         0    0.8100         0
         0         0         0    6.2136

第三步,按特征值由大到小调整特征向量的列的顺序:

Lambda(4) > Lambda(3) > Lambda(2) > Lambda(1)
Lam(1) = Lambda(4,4);
Lam(2) = Lambda(3,3);
Lam(3) = Lambda(2,2);
Lam(4) = Lambda(1,1);
Lam =
 1.0e+03 *
 6.2136 0.8100 0.1489 0.0028
W(:,1) = V(:,4);
W(:,2) = V(:,3);
W(:,3) = V(:,2);
W(:,4) = V(:,1);
W =
   -0.0678    0.6460    0.5673    0.5062
   -0.6785    0.0200   -0.5440    0.4933
    0.0290   -0.7553    0.4036    0.5156
    0.7309    0.1085   -0.4684    0.4844

第四步,设定阈值为0.9,根据ACR值确定主成分数目:

ACR = cumsum(Lam)./sum(Lam);
ACR =
    0.8660    0.9789    0.9996    1.0000

由ACR的值可知,当主成分数目L=2时,ACR值>0.9的阈值,所以主成分数目为2即可。

第五步,计算源数据在主成分上的值:

T = X*W(:,1:2);
T =
   36.8218    6.8709
   29.6073   -4.6109
  -12.9818    4.2049
   23.7147    6.6341
   -0.5532    4.4617
  -10.8125    3.6466
  -32.5882   -8.9798
   22.6064  -10.7259
   -9.2626   -8.9854
   -3.2840   14.1573
    9.2200  -12.3861
  -25.5849    2.7817
  -26.9032    2.9310

至此,PCA计算过程结束。

2. Matlab函数的实现

在Matlab中进行PCA可通过princomp这一函数实现。

语法如下:

[COEFF,SCORE] = princomp(X)
[COEFF,SCORE,latent] = princomp(X)
[COEFF,SCORE,latent,tsquare] = princomp(X)
[...] = princomp(X,'econ')

其中COEFF表示变换系数,即W矩阵,SCORE表示源数据在主成分上的数值,即T矩阵,latent表示X的协方差矩阵的特征值,与之前的PCA定义中稍有不同,即相差1/(n-1)的倍数。

此外,princomp函数会自动对源数据矩阵进行列中心归零化,所以直接执行命令即可:

[pc,score,latent,tsquare] = princomp(ingredients);
pc =
   -0.0678   -0.6460    0.5673    0.5062
   -0.6785   -0.0200   -0.5440    0.4933
    0.0290    0.7553    0.4036    0.5156
    0.7309   -0.1085   -0.4684    0.4844
score =
   36.8218   -6.8709   -4.5909    0.3967
   29.6073    4.6109   -2.2476   -0.3958
  -12.9818   -4.2049    0.9022   -1.1261
   23.7147   -6.6341    1.8547   -0.3786
   -0.5532   -4.4617   -6.0874    0.1424
  -10.8125   -3.6466    0.9130   -0.1350
  -32.5882    8.9798   -1.6063    0.0818
   22.6064   10.7259    3.2365    0.3243
   -9.2626    8.9854   -0.0169   -0.5437
   -3.2840  -14.1573    7.0465    0.3405
    9.2200   12.3861    3.4283    0.4352
  -25.5849   -2.7817   -0.3867    0.4468
  -26.9032   -2.9310   -2.4455    0.4116
latent =
  517.7969
   67.4964
   12.4054
    0.2372
cumsum(latent)./sum(latent)
ans =
      0.86597
      0.97886
       0.9996
            1

可见,该结果与之前的五步法结果一致。

Matlab的使用方法之总体介绍

Matlab从使用的角度来说,更像是把一般的编程软件和办公软件结合了起来。我们可以像很多的编程软件一样,通过指令、代码编写算法程序,可以通过代码显示出结果,也可以像使用excel这样的办公软件一样,通过导入数据,进行可视化的编辑,进而绘制图形。

从数据的获得、导入到分析、处理再到结果的显示、输出整个流程都可以用Matlab实现,而实现的方法可以是基于程序代码的,也可以是基于可视化操作的。

所以,主要将Matlab的用法分成两个部分,一种为代码的方法,一种为可视化的方法。

1.1 代码的方法

Matlab程序界面中有command window窗体,可以直接在其中输入代码实现所有可能的操作,每一行的代码都会自动保存在边上的command history窗体内,双击其中的一行,相当于再次执行该行代码一次。

为了系统地管理我们的代码,我们可以建立Matlab中被称为script的以“.m”为扩展名的文件,这个文件就是一个代码的合集,文件中的所有代码按行依序执行,和C语言类似,以分号分隔各行。

1.2 可视化的方法

如果遇到大量重复性的工作,并且各自需要不同的认为干预时,可视化的操作是非常必要的。

在Matlab中,可以通过Graphical User Interface(GUI)非常直观地来编辑程序界面,GUI类似于VC中的对话框,内置了常用的“控件”,如按钮/编辑框/列表框等等,可以直接拖拽到fig上。

非常有趣的一点是,GUI也是一个fig,和Matlab中显示图形结果的fig没有本质不同,所以理解Matlab的fig对学习好Matlab至关重要。

学术、科研、发文章的三件利器(3)

3.3 利器三:Matlab

这第三个利器就是一个好用的数据处理软件了。

从获得实验数据到数据的处理分析,再到输出图形化的结果,这一过程离不开数据处理软件,一个好的数据处理软件无疑可以产生事半功倍的效果。

3.3.1 Why Matlab?

第一个问题是,为什么选择Matlab?

首先,我们要了解一下所谓的数据处理软件都有哪些,各自都有什么特点。非常庆幸的是这个工作已经有人做了,那就是人见人爱的Wikipedia,这里有详细的列表,包括了很多常见的和不常见的软件。

既然这些candidates的方方面面的信息我们都已掌握了,而且数量又是如此之多,那么下面的工作就是,设定一些标准、择优选用。那么这些标准又应该包括哪些内容?问题来了,因为这些标准本身并没有一个标准,这些标准是应该根据需求量身定制的,而需求是多样的、变化的。所以,这里设定一个尽可能通用的、相对严格的的标准,主要包括以下几项:

1. 多平台支持

可以在Windows、Mac OS和Linux上运行。

2. 支持创建GUI

可以建立GUI,进行可视化操作。

3. 科学、高效的数据结构

变量、数据的定义、产生、赋值简便。

4. 便捷、丰富的功能模块

调用一个现成的功能模块就可以完成一个复杂工作。

5. 代码自动生成

通过可视化操作自动生成代码。

6. 语法高亮、纠错

能够明晰地显示语句结构、提示语法错误。

毫无疑问地,Matlab可以满足以上要求。基本上能够满足以上要求的软件就已经非常好用了,剩下的就是个人喜好的问题了。

3.3.2 The advantages of Matlab

1. Matlab可以运行在Windows、Mac OS、Linux等平台上,这样,在自己的MBP和办公室的Windows电脑上可以同步工作,再配合google drive这样的云硬盘,非常方便!

2. Matlab可以创建用户界面,这让它从一个数据分析的软件几乎变成了一个通用的编程工具,它的Graphical User Interface创建的fig对话框与MFC的对话框类似,功能非常强大,就一些小程序而言,基本可以和庞大臃肿的VS系列say goodbye了。

3. Matlab的数据结构非常得科学、清晰、易用。在Matlab里,所有的数据都在workspace中列出,一目了然,并且可以双击查看其内容;此外,Matlab有一个非常厉害的变量类型,叫cell(元胞),可以定义一个元胞数组(cell array),次数组的各个元素可以是不同的数据类型!比如一个2*2的cell array,第一个cell可以是一个常规变量(比如一个浮点值),第二个cell则可以是一个数组(比如一个整形的2维数组),第三个cell则可以是一个字符串,第四个cell则可以是另一个cell类型的数据。

4. Matlab有众多非常好用的ToolBox,这里是各种ToolBox的列表。通过ToolBox,可以非常方便、快速地得到分析结果,图形界面的操作也非常容易理解使用。

5. Matlab有非常强的代码生成功能,几乎每一步的图形界面的操作都可以生成这一步骤的代码,这样通过若干自动生成代码的步骤,很快就可以编写出非常复杂的程序。

6. Matlab的script编写界面也改进了不少,特别是2012版之后,改进特别大,语法高亮更加明晰、美观,而且新增了很多易用的功能,比如一键全部collapse,shift+enter全部替换等等。

总之,Matlab是个非常不错的数据处理软件,甚至已经不能仅仅算是一个数据处理软件了。跟Mathematica等一样,这些计算软件已经不能算是一个计算工具或者一门语言了,大概将世界数字化才是它们的最终目的吧。

想到《黑客帝国》(The Matrix),不禁森然。


此篇简单介绍Matlab的优点,下篇着重介绍如何使用。

 

学术、科研、发文章的三件利器(2)

3.2.4 Mendeley文献文件的组织方法

之前有提到,文献池文件夹是可以清理的,因为被Mendeley检测到的新添加的文件会被转移到Mendeley自己指定的文件夹下。那么它是怎么组织这些文件的,文件目录的层次结构是怎样的,文件和数据库中的内容又是如何对应关联的,这就是这一节需要说明的内容。

首先,文件被导入进来并且已被识别,一些基本信息比如标题、作者等等已经显示出来,与此同时,Mendeley会复制一份文件到自己的文件目录下,这个目录的位置我们是可以定制的,甚至于文件目录的层次结构也是可以设定的。具体方法如下图。

Mendeley - file organize

上图是Mendeley选项界面的file organizer标签。第一个框中所显示的即是所指定的Mendeley的文件根目录。第二个框中所表示的是目录下子文件夹的层次结构,这里我采用了两层结构,第一层为期刊名,第二层为年份,这样,在根目录下会为每一个期刊创建一个文件夹,然后在每一个期刊文件夹下再创建不同年份的文件夹,怎么样,很有条理吧,当然可以自己随意定制,而且只需拖拽不同的标签(fields)到文件路径(folder path)栏就可以了,改动后文件会被自动重新整理。第三个框中所显示的是定制文件名的形式的内容,每个文件被移动到对应的文件夹下后,还可以指定文件名的组织形式,这里我使用的是“年份 – 标题”的形式,同样的,可以自由拖拽定制。

通过以上设定,大量的文件可以被有序地组织起来,真的是赏心悦目。

 3.2.5 Mendeley的数据库结构

这一部分是纯理性探究的内容,对使用没有影响,只是出于好奇,想弄清楚它的运作原理,理解了原理之后当然会能更好地使用它。

Mendeley所使用的数据库是SQLite,从这个SQLite的Lite可以看出,这是一个轻量的服务器,的确如此,SQLite的最大特点是它是没有服务器客户端这样的说法的,它的运行无需外部依赖,不需要安装各种服务,不需要配置,于是响应速度很快,特别适合Mendeley这种管理本地内容的程序。

SQLite数据库的数据库文件以“.sqlite”为扩展名,可以使用SQLite Database Browser等应用程序打开,不过不建议改动Mendeley程序目录下的sqlite文件,感兴趣的话可以复制出来再研究,可以发现很多有趣的东西。

3.2.6 推荐的Mendeley的一些使用方法

对文献的研究主要方法有分类、标签、标注等等。这里介绍我觉得比较好用的方法。

首先,Mendeley将所有导入的文献构成的集合叫做“my library”,并且在软件界面的左侧显示出整个“my library”的文献情况,我们可以在其中建立不同的文件夹,将文献进行各种分类。下图说明了一种利用的情况。

Mendeley - tips

如上图,“my library”下默认有几个常用的分类标签,比如“All Documents”、“Recently Added”、“Unsorted”等,点击这些标签,会在右侧的文献信息显示栏中将其中的文件列出来,比如这里点击了“All Documents”,右侧显示的就是所有文献。

可以自行增减分类,并形成目录层次,比如上图框中显示的。这里我新建了一个叫做“Dissertation”的分类,也就是博士论文中所有引用、参考的文献的合集,然后可以在此类下按照章节等,构建出一个文献目录来。

当然有些人会问,这里新建的这种文件目录会不会对文件的存放位置等等做出改变,或者说这样做会不会在磁盘上新建如此结构的文件树?当然不会,每个文献在Mendeley中只对应一个文件,在存储上也只存储一个文件,并只会按照上上一节的方法组织文件。上面所说的分类目录并不会对文件在磁盘上的存储产生影响。

此外,一个文献可以被添加到多个自定的分类目录中,比如它在博士论文中被引用了,同时又在发表的文章中被引用了,又比如在第一章中然后又在第二章中被引用了,等等。

还有要说明的是,对文献的引用,可以安装一个叫WordPlugin的插件,这样在Word中的参考文献工具下会出现Mendeley的文献引用工具菜单,然后就可以非常方便地添加参考文献了。如果对引用的格式不满意的,可以自行定义引用格式,但是需要一定的编程基础,不过常用的格式偏差不大,Mendeley中也自带了多种,基本够用。

最后Mendeley的文献可以同步到云端,并且提供了2G的免费空间,可以说绰绰有余了,这样就可以在手机、平板电脑和其他电子设备上同步内容了。这样在喝咖啡等公车等女朋友下楼时都可以看上一会儿文献,是不是很酷。


感觉好久没有写这么多东西了,写起来有点挡不住啊。下一篇再说Matlab吧,文献相关的内容到此为止吧。

欢迎提出意见建议,欢迎评论分享。

此外,求关注。桌面用户请点击左侧、移动设备用户点击下方的微博关注按钮,谢谢。

下课。

 

学术、科研、发文章的三件利器(1)

1. 引言

博士论文已经写完了,答辩也进入了最后的准备阶段,有必要将博士期间的一些收获总结一下。

博士论文的撰写总共花了整整一个月的的时间,从4月初到5月中旬左右,自己觉得效率还是蛮高的。特别是博士论文中的很多内容都是新写进去的,之前发表的文章内容毕竟很少,而且为了使通篇更流畅,之前的文章其实可用的内容并不多。

特别是在论文的第二章,做了之前不敢做的一件事情,就是整理出了一个review。单单review部分就参考了50篇左右的文章,并且还对它们的研究内容、方法、结论等等做了不同角度的归纳,说实话工作量还是相当大的。如果在平时,干干停停,个把月的时间写这么一篇文章,都可以说是很厉害了,这次只用了10天左右的时间,还是很自豪的。所以说,人的潜力都是很大的,就是看有没有这样的决心了。好啦,自我表扬到此结束。下面开始正题。

2. 背景

在写博士论文的过程中发现了这样一个问题,对于以前没有好好做review感到惋惜和后怕,甚至惊出一身冷汗。由于下定决心要写出一个像样的review来,的确还是下了狠功夫的。而且,的确在此过程中发现了一些好的方法和经验,于是斗胆献拙,与大家共勉。

此外,还有一些感慨与领悟也一并讲出来,为博士生涯做一个结吧。

这篇文章主要还是以“学术、科研、发文章的三大利器”为主要内容,毕竟题目叫这个嘛,至于题目为何叫这个,主要还是觉得高大上一点能吸引眼球啊。

OK,背景到此结束,下面开始正题。(终于开始正题了……..)

3. 利器

将要介绍的三大利器分别是Google scholar,Mendeley和Matlab。

前两个是文献相关的工具,最后是数据处理相关的工具。

搞科研,其实应该是从整理文献开始的。这一点非常重要,往往是实验什么早已开始了,文献还没看几篇,然后终于有一天发现,这一步还是跳不过去。可以毫不夸张地说,对文献掌握的水平决定了也标志着科研的水平。

那么如何提高文献水平,就是非常迫切需要解决的问题了。每个人的方法都不一样,甚至会有过目不忘的神人,一篇文章看完一遍,数月甚至数年后仍能如数家珍娓娓道来,但是,对于一般人,如何获取和掌握大量的的文献信息是需要技巧的。

此外,工科的同学们往往需要做大量的实验,并且需要获取大量的信息,然后还要对这些信息进行分析处理,这个过程和文献整理的过程其实非常相似,都是从混沌中获得需要的信息并对其进行处理分析,只不过形态和方法上有些差异。

后面的叙述可能处女座的看起来会比较愉悦,因为涉及了大量的将无序的、混乱的信息梳理、分类、整合的过程,这应该会是一种享受吧。反正对我来说是这样的。

3.1 利器一:Google scholar

首先,谈谈文献的获取。

相关的方法有很多,如果您已近觉得您的方法足以获得大量优质的文献资料了,尽可与众分享,如果您还未开始收集文献或者正为选择何种工具发愁,尽可试试我下面描述的方法。

Google是信息检索领域目前最优秀最领先的公司了,至少我是这么认为的。虽然它也曾在涉足其他领域时铩羽,玩坏了不少项目,不过在信息整理、检索等相关技术上,的确无出其右者。

Google scholar即是专门针对文献类信息的一种检索引擎,它基于Google强大的信息检索引擎技术,覆盖了较广的文献来源,排序机制还算比较合理,而且有多种自定义检索设定和组合,还能将检索到的文献收藏,甚至可以检索专利,当然,还是完全免费的。

我是将Google scholar和下面要说的Mendeley配合使用的,目前效果相当不错。

3.2 利器二:Mendeley

Mendeley是非常好用的一款文献管理软件,它可以运行在Windows、Mac和Linux平台,甚至于iOS设备上,功能十分强大,可以完成从文献获取之后到编辑引用的整个流程,而且它还引入了社交元素,并且建立了文献数据库,文献的基本信息可以被分享、收藏等等。

由于版权等原因,一般地,mendeley不提供文献下载的功能,但是支持多种导入方法。

3.2.1 文献的检索和获取

如前文所述,文件的检索由Google完成,在检索到需要的文献时,一般地,我会选择将这个文献用Google收藏起来,目的是表明,这个文献已经被我添加到我自己的文献数据库中了,当然这个数据库不仅仅指Google的数据库,而且表示我已经将它下载到本地了,下次检索到它是,Google会标明只是已收藏的文献,那么就无需再次下载或者浏览它了,相当于给他加了一个已读标签。

如下图,在Google scholar搜索airplane,第一条结果,点击下方的“保存”链接,即可将其加入个人图书馆,之后再次检索到它的时候会显示为已保存,这样就不需要再次浏览或者下载它了。 屏幕快照 2014-07-02 23.37.24

当然,也可以使用Google scholar的“我的图书馆”功能管理文献,不过最大的问题是它不能显示全文,所以,只是用这个功能做一个标记而已。

文献的下载很方便,如果在学校的话由于ip地址在某个期刊或者出版商的许可范围内,Google scholar会在搜索结果的右侧显示下载的地址或者出版商等的该文献页面,我们只需移步然后点击下载就好。当然如果学校没有买该出版商的版权,那么有可能会下载不了,这样的话就需要移步到Google搜索了。

 3.2.2 文献的存放和导入

当我们从网页下载文献的时候,浏览器会问我们这个文件(一般是pdf格式的)要存放到哪里。我建议在硬盘上建立一个文件夹,可以命名为“document pool”,我们称这个文件夹为文献池,所有下载来的文献都放到这里。

建议这么做的原因是,mendeley软件有一种文件导入的功能叫做“文件夹监视”,顾名思义,即是设定一个文件夹被mendeley监视,当新的文件被添加进来的时候,只要mendeley运行着,它会自动被识别,并添加到mendeley数据库中。当然如果mendeley在下载新文件时没有运行,那么在下次它被运行时会自动添加进来。

这时候处女座要问了,那放在这个监视文件夹下的文件是不是不能移动啊,万一删了在mendeley中是不是就没有了?哈哈,当然不会,而且的确建议你过一段时间就清理一下这个文件夹,毕竟占用磁盘空间不是。那么,mendeley是怎么处理这些监控到的文件的呢。这就要谈论到mendeley的文献组织和数据库了,下下一节中讨论。

当然文献的导入不只有这一种方法,在文件工具栏选择导入、将文件拖拽到mendeley,这些方法都是可以的。

3.2.3 Mendeley中文献文件的识别

导入的pdf文件是会被自动识别的。识别的原理会比较复杂,但是这里需要说明的是“doi”这么一个属性,Mendeley估计是将这一项作为识别的最重要的特征。当然此外论文标题、作者、出版信息等其他项目,可以通过与数据库对比特征进行最终的确认。

“doi”(Digital Object Identifier,简称DOI,注意不是Dio)是一套识别数字资源的机制,涵括的对象有视频、报告或书籍等等。对于文献资源来说,一篇文献对应一个DOI代码,一本书也对应一个DOI码,获得了一个文献的DOI码,就可以在多个不同的数据库中把这个文献的详细信息找出来,怎么样,有没有很厉害。所以我们优先从pdf文件中识别出这个文献的DOI,然后检索这个DOI,这个文献的各种信息就都显示出来啦。

Mendeley也是优先从pdf中找DOI,因为现在很多的出版商还是比较上道的,他们会在文件中包含DOI信息,但是也有很多不靠谱的或者很古老的文献,文件里没有DOI信息,那就只能通过找标题等其他信息了。

Mendeley在识别出文件信息后,在界面右侧的“details”里会列出各种信息,比如标题、作者、期刊名称、年份等等,其中有一项叫做“Catalog IDs”的栏目,该栏目下就包括了“ArXiv ID”、“DOI”和“PMID”这三项,如果DOI被Mendeley识别了,会在这里显示出来。

这时候建议点击DOI这行右侧的搜索按钮,Mendeley会以此作为indicator去文献数据库中搜索,更新一些信息,比如摘要、或者识别有误的项目等等。

如果Mendeley识别一个pdf文件不成功,或者它觉得识别结果不是很可靠的时候,它会建议以文件名在Google中搜索,以获取文献的详细信息。您可以这么做,也可以自己找到这个文献的DOI,输入“Catalog IDs”栏目下的“DOI”项中,然后点击检索,结果也会非常好。

当然还有很坏的情况,现在只有文献pdf文件,没有DOI,Mendeley中也不提示Google搜索,那怎么办。很简单,在对应的栏目中自己输入相应的内容就好了,当然会比较累。


忽然发现竟然写了这么多,果然太唠叨。那么就到此分为第一篇。

欢迎多提意见建议,欢迎评论分享。