Mac OSX Lion安装Python环境小结

折腾了很久,网上也找了好些个资料,现在总算是达到一个比较让人满意的状态。

目的:在 MAC OSX 10.7.2上安装Python以及科学计算的相关packages

大部分内容来自于此处

准备工作

首先要有一个干净的Lion环境,然后是Python2.7.2

 

Lion里面已经自带了Python,不过由于系统的关系,总不是最新的,所以还是要手动安装。当然了,在安装Python之前先要安装XCode,然后由于某些package需要手动编译的原因,还要安装gFortran,在网上下载对应XCode版本的就好了,这里可以下载一个编译好的适合Lion的gFortran。

这里推荐使用Homebrew,之前试过鼎鼎大名的MacPort,不过MacPort在安装一个包的时候会附带着安装所有跟这个包有关的东西,弄得不清不楚的不说,下载的时候要花很长时间,安装的时候更要花很长时间。

安装Homebrew很简单,将下面代码贴到命令行就可以了:

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

安装成功之后,Homebrew会有提示的。接下来需要修改一下系统路径,将Homebrew的路径添加到系统可以识别的路径中,修改.bash_profile(如果没有,自己用vim创建一个,放在/Users/[your_user_name]下面)

 export PATH=/usr/local/bin:$PATH

修改好之后,要重启terminal。

Python

首先也要先安装一些东西,最后的pkg-config是iPython需要的,这里先安装了也未尝不可

 brew install readline sqlite gdbm pkg-config

之后安装Python

brew install python --framework --universal

--framework参数让Python成为一个framework,原作者说这会带来好处,就这么用吧;--universial会编译一个通用的(32/64位)版本,这样适用性更广一些。 之后还需要修改一下.bash_profile

export PATH=/usr/local/share/python:$PATH

重启terminal生效。 接下来,下面的任何一个命令如果不成功,记得给权限 sudo 最后需要告诉Lion,将系统链接指向新的Python安装环境。

cd /System/Library/Frameworks/Python.framework/Versions
sudo rm Current
ln -s /usr/local/Cellar/python/2.7.2/Frameworks/Python.framework/Versions/Current

验证是否安装成功了,在terminal中输入which python,如果返回结果是/usr/local/bin/python 那么就说明成功了。 接下来安装pip

easy_install pip

pip和setuptool都是非常好的安装包的方式,选择哪个都好。

virturalenv

这个简直是太棒太棒的工具了,在安装任何包之前,请务必首先安装virtualenv,这会省去你因为Python环境损坏,而无数遍重装系统的时间。最开始的时候看教程,我就没把这东西当回事,事实证明,Python现在还不稳定,所以为了保险,请安装virtualenv。

 

virtualenv是什么呢?简而言之,就是可以虚拟环境。创建了虚拟环境之后,每个Python环境互不干扰,现阶段来说,这个是次要的,主要的是,当你每一次screw up之后,你有了一个重新来过,而不用重装系统的机会。

安装virtualenv

pip install virtualenv

有的地方说还要安装virtualenvwrapper,这个从使用上来看,还好,不装也可以。 安装好之后,使用下面语句创建自己的环境,记得首先到目标文件夹

virtualenv

其实随便起,不过为了方便还是叫成env-##之类的可以和其他文件夹区分开吧。 建立好之后就可以运行了

source /bin/activate

然后就该干嘛干嘛了 做完之后在terminal中输入

deactivate

就好了。 关于virtualenv更多内容可以参考这篇文章

Numpy, Scipy, Matplotlib,iPython and all that

这里提供两种方式安装:第一种是通过python egg安装,这种方式最省时省力,第二种方法是自己通过homebrew和pip手工安装,这种要去网站上取回源代码然后花一些编译的时间,网速允许的话,也未尝不可。

Python egg安装方法

这种方法的起源是网上流传的那个superpack脚本,作者事先编译好了Python Egg文件,然后传到dropbox里面,通过脚本进行安装,这种方式的特点是,直接暴力。下载之后什么东西都装好了,但是也跟virtualenv没什么关系了,也就是违背了我们的初衷。

 

不过我已经将superpack做好的egg文件下载好了,放到了微盘,需要的可以去微盘下载:

 

安装egg的方法:

easy_install -N -Z egg包的名称

比如

easy_install -N -Z numpy-2.0.0.dev_7297785_20111104-py2.7-macosx-10.7-x86_64.egg

此处一定要参数 N Z,如果不加的话,easy_install还是会去从网上下载的,这样也就没什么意义了。

pip安装

另一种方式通过pip安装,依此执行代码就好了

pip install numpy
pip install -e git+https://github.com/scipy/scipy#egg=scipy-dev
pip install -e git+https://github.com/matplotlib/matplotlib#egg=matplotlib-dev
pip install ipython

这里由于很多其他的包都需要scipy的dev版,所以就安装了dev版本的,matplotlib类似。 这里安装的iPython是直接在terminal中原生的,如果要安装QT环境的iPython,还需要下载诺基亚提供的qt库,http://qt.nokia.com/downloads,一定要下载library,而不是sdk

 

安装完之后,就可以用homebrew安装其他的了,依此执行下面代码安装所需文件:

brew install pyqt

然后在.bash_profile中添加如下路径

export PYTHONPATH=/usr/local/lib/python:$PYTHONPATH

然后安装剩下的所需文件

brew install zmq
pip install pyzmq
pip install pygments

用下面命令启动qt下的iPython就好了

ipython qtconsole --pylab=inline

丢人现眼之F-measure再学习

昨天硕士生开题的时候,我知道的同学在汇报的时候说用F1-score衡量分类准确性。

这个是我的授意,因为最近看论文,听讲座都看到听到F1如何的好。其实,这里就很丢人。自己仅仅是听到,但是没有去求甚解,自己根本不知道F1是啥,scikits.learn里面有,就直接拿来用了。查了一下wikipedia,才知道是咋回事。

这个再次提醒自己不能人云亦云,独立思考!

http://en.wikipedia.org/wiki/F1_score

智博的科研分享 邮件列表

广告贴

智博的科研分享 邮件列表

地址:http://list.qq.com/cgi-bin/qf_invite?id=e53d9bcaefda793d254731610aff18fd94b759dbf90b2727

简介:分享Sean在做科研的个人所得,在网上看到的相关资料。内容主要是机器学习算法,数据挖掘,数据分析,Python,R,以及各种其他乱七八糟的东西。订阅者会不定期收到邮件,显示Sean分享的相关内容。

说白了,就是我看GoogleReader的时候分享的东西。

Eric Xing’s advice to Machine Learning students

这是刑波老师去年在上海龙星计划机器学习课程之后给学员们的一封信,今天偶然间又翻出来读,仍旧觉得受益匪浅,转到此处,希望对看到的同学能有帮助。

Dear Students,

It has been a great experience to work with you during the 5-day Dragon Star lectures. I truly appreciate that you have attended all the lectures with patience and enthusiasm, and I am glad most you have enjoyed and liked the lectures. As a teacher, your approval and support are the highest honor I can enjoyed in my career.  I got many questions from you on how to be a good researcher, bellow are some words I wrote to a student i don’t personally know who asked me the same question through email a few years ago. Hopefully this complement Fei-Fei’s excellent essay on how to do good research.

…. as general advices on students interested in pursue a serious science career, I think the following are important:

1) know exactly what your goal is, what is your strength and your weakness, both technical and mental, as they are equally important for success.
Set you goal and plan your moves accordingly.

2) don’t wait if you really believe a change is needed. It is never too late to change career course if the change is serious and a full dedication for the new course is committed. The amount of time wasted in waiting is often longer than the time needed to clinch the new life. For me, I was once at the bottom of my new career because I nearly knew nothing of machine learning when I changed major, but I knew I would love it because of its beauty and power. It took me 5 years starting from that point to
become a professor of machine learning at CMU.

3) you need to work extremely hard. In my graduate and professional career, I worked on average 12 hours per day and 7 days per week, with high concentration and efficiency. (Of course, as I mentioned in our evening chat, I personally do not actually view such activities as “work”, they are fun and exciting, as much as, or better than other entertainments.)

4) you work hard not because you are pushed by your boss, but because you are inspired and you love what you do. Indeed, I often told my students and friends that I “LIVE” my research rather than doing my research. I enjoy doing it more than watching TV and playing card, etc.

5) you can still live a colorful life and be energetic. I am big sports and music fun, and love to do many other things, and I enjoy being with my friends and family.  So I waist no time idling. Whenever I am not working, I play or exercise hard, and be with my family and friends.

6) you need to train yourself to be very creative, and very independent. Honestly almost all the research ideas in my graduate study were not from my advisors, but from myself; what I got from my advisors at Berkeley were moral support, inspiration on research style and taste, sense of honest and pride, and their friendship.

7) being informed of the latest progress in your research area. It is not unusual to read 1 thousand papers per year. Basically, to be on top of the field you need to know EVERYTHING of your field, and in many cases many related fields.

8) when breaking new grounds, on the one hand, you need to respect the intelligence of the authorities in the fields, don’t assume they are stupid and you are smarter, and always ask why they do not do the same as what you want to do years ago. On the other hand, when you can convince yourself that you indeed gain an insight that those authorities had not, you should have the courage to surpass them.

9) Being versatile and flexible. Many problems and techniques are related, don’t hand yourself on a single tree.

10) It is never a bad thing to be a perfectionist and idealist in research. It is absolutely important to have an optimistic character, and to be physically fit and strong. It is very stupid to assume that one can work less because others are less smart. The truth is that, most of the top researchers I know of are not only extremely smart, but also work long hours and are efficient. So even physically you need to have means to compete. I myself used to be a semi-professional athlete when I was in college, and
even now I have no problem consistently working/playing harder and longer than my students 10+ years younger than my age.

11) learn the art of communication. Be ready to discuss and share your ideas with your colleagues and competitors. Learn from not only your colleagues, but also from your competitors.

12) Most importantly, be honest, open, patient, happy, and far-sighted, rather than being sneaky, isolated, anxious, bitter, and short-sighted.

Finally, I wish all of you happy and prosperous in the years to come.

Best regards,
Eric

提高科研效率

早上在GReader上面看到了Matt Might的博文 Boost your productivity: Cripple your technology受益匪浅,自己也经常东逛逛西逛逛然后耽误时间,虽然我自己承认有时候东逛逛西逛逛会发现不少好东西,但是有时候的确耽误事。所以,科学的管理好时间还是很重要的。

P.S. 顺便推荐上面文章中的链接, Matt Might的 Productivity tips, tricks and hacks for academics

 

Tame the beast – 管理参考文献 – BibTeX&Jabref

Tame the beast 管理参考文献系列

BibTeX是什么?

BibTeX其实就是一个文本文件,里面包含着参考文献的相关信息。在使用TeX系统写论文的时候,其实是可以在文章的末尾直接加入相关的参考文献的。但是,如果参考文献一多了的话,这种很原始的方式是行不通的。所以,把这么多的参考文献信息整合起来,放到一个文件中,然后再用一些软件进行管理,进而可以在写文章的时候方便的插入到TeX中,这个就是BibTeX的初衷吧。(我的理解)

BibTeX文件的结尾是.bib,一个bib文件中包含的都是如下的参考文献信息

 @book{companion,
author = "Goossens, Michel and Mittelbach, Franck and Samarin, Alexander",
title = "The {{\LaTeX}} {C}ompanion",
publisher = "Addison-Wesley",
year = 1993,
}

@ARTICLE{Chapelle2008,
author = {Chapelle, O and Sindhwani, V and Keerthi, S. Sathiya},
title = {Optimization techniques for semi-supervised support vector machines},
journal = {The Journal of Machine Learning Research},
year = {2008},
volume = {9},
pages = {203--233},
owner = {Sean},
timestamp = {2010.05.09},
url = {http://portal.acm.org/citation.cfm?id=1390681.1390688}
}

可以看到,不同的参考文献类型对应着不同的格式。

BibTeX还对应着不同的样式,BibTeX的作者Oren Patashnik最开始原创了传统的四种样式。这四种样式分别是plain.bst, alpha.bst, unsrt.bst 和abbrv.bst。下面就从Tame The Beast中文版中摘抄一下这四种样式的异同:

关于文献项内容的次序与排版格式, 这几种传统样式都非常类似. 虽然也跟具体的文献类型有关, 不过大都是先写作者名和文献标题, 然后是文献来源的期刊名称或会议录名称, … 当然最好的理解是亲手试一试, 或者看一下相关目录下的样式文件内容(不过如果你并不清楚BibTEX 样式文件的细节的话, 请先阅读第4 部分的内容).以上都是讲四种传统样式文件的共同点, 它们之间的主要差别在于所使用的标签与排版格式方面不同.

  • plain.bst 样式对文献表条目按作者名进行排序(使用字母序14), 如果作者完全相同, 则按出版年份排序(发表时间早的排在前面). 若作者时间均相同, 再比较标题. 如果还分不出先后, 那么在正文中引用在前的文献排在前面. 引用标签为数字, 从1 开始.
  • alpha.bst 样式的命名是由于它采用了字母- 数字(alphanumerical) 标签: BibTEX 负责为每个文献条目计算标签, 它取作者名的前三个字母(若有多个作者, 则使用作者名的首字母), 后面紧接着是表示出版年份的两位数字. 对文献表条目排序时, 先比较标签值, 若标签值相同, 则使用与plain.bst 相同的规则.
  • unsrt.bst 样式也很简单: 它不对文献表条目进行特别的排序, 而按它们在正文中首次引用的次序自然排列. 除此之外, 它跟plain.bst 的处理完全一样;
  • abbrv.bst 样式则对作者名以及内置的期刊名称、月份名称都进行了缩略处理. 这里要补充一点,文献样式最初应用于计算机科学方面的期刊(Oren Patashnik 本人是一位计算科学家). 因此有许多计算机科学的期刊名缩写被内置到了文献样式文件中, 这是abbrv.bst 与plain.bst 的唯一区别.

以上即是四种传统的文献样式. 这些文献样式有许多不足, 例如, 它们都没有url 字段, 也没有多语种支持, 排序机制异常复杂, 等等. 此外, 出版机构经常会针对文献表的排版提出一些具体精确的排版规则. 基于上述原因, 人们又发展了许多新的文献样式.

关于其他的文献样式,请参考Tame the Beast原版,或者也可以参考这里

关于JabRef,网上已经有很多非常棒的相关教程了,这里我就不再拷贝了,具体的,我推荐这个(作者为JabRef的中文译者)还有这个(作者为CTeX论坛牛人)。

这里关于BibTeX想做一下延伸,clearly,手动创建一个bib文件是一件非常愚蠢的行为。现在的各个学术数据库都有相关的输出功能,下面就介绍一下相关的入口。其实,这些都是多余,放到Mendeley中就好了。不过为了防止有时候Mendeley实在识别不出来,下面的还是很有必要的。

  • Web of Science

在Web of Science上搜索到相关的文献后,到页面的最底端,输出记录的下拉列表中选择“保存到BibTeX”就好。

  • Microsoft Academic Search

这个非常直观,只要点击文章标题旁边的BibTeX按钮,就好了

  • ACM

点击右侧绿色边栏的BibTeX链接然后点选弹出对话框右下角的Download就好了

  • IEEE Xplore

IEEE的也非常直观从 Download Citations中选择BibTeX之后点保存按钮就好了

  • Springer

Springer需要两步,第一步点击文章页的 Export Citation链接

然后再选择BibTeX导出就好了

  • ScienceDirect

ScienceDirect的过程和Springer大体类似,看图


  • ArXiv.org

ArXiv的稍微有些麻烦,需要三步。第一步从最右侧侧边栏中选择 Reference& Citations中唯一的那个链接然后在弹出的页面最下面选择 Bibtex entry for this abstract最后把相关的条目自己复制到文本文件中,另存为一个.bib格式的文件就可以导入到JabRef或者Mendeley中了。这里,作为中国的研究者,我们提CNKI,不是CNKI没有相关的功能,只是CNKI没有提供对BibTeX格式的输入,如果想输出引文的话,可以先输出出来EndNote格式,然后再导入到文献管理软件中。

Tame the beast – 管理参考文献 – Mendeley

Tame the beast 管理参考文献系列

今天正式开始介绍Mendeley。Mendeley可以在http://www.mendeley.com/download-mendeley-desktop/下载。安装都按下一步就行了。

Mendeley名字源于Dmitri Mendeleev(伟大的俄国化学家,元素周期表就是他老人家弄出来的。)

Mendeley的功能异常强大,主要包括:

  1. 自动导入本地文献,可以识别出来pdf文件的metadata,这点超赞的
  2. 监视文件夹
  3. 文献信息的完善,几乎不用手动输入,可以一键google scholar自动完成几乎所有信息,包括DOI,url
  4. 添加右键copy Latex Citation,自动保存数据库为BibTEX格式,非常方便使用LATEX编写文章的人
  5. 可以支持在Mendeley窗口查阅文献,做标记,做笔记。直接保存在窗口右侧,点击就可查看,非常方便。有MS word(Word 2003插入文献遇到问题请看下面解决办法),OpenOffice,MS word for Mac OS插件,方便文献引用和插入(可以直接把要引用文献拖入到编辑器中)
  6. 成千上万的citation style,包括国内的众多杂志
  7. 在云端,数据库网络同步,很好的保护数据库
  8. 数据库分组模式
  9. 可以按照作者,关键词,笔记内容,以及出版杂志进行查找
  10. 数据库本地备份与恢复
  11. 开源免费,跨平台,有windows,  Linux, Mac版本

一 导入本地文献

这个是Mendeley最赞的功能,只要将本地的pdf文件拖动到Mendeley窗口中,Mendeley就可以自动识别出来这个pdf相关的内容,包括文献的类型,题目,作者,发表源,年份,日期,如果是期刊文章,还能识别出来摘要和关键词,DOI,URL等,arxiv上的文章还可以识别出来ID。

如果实在识别不出来,只要点一下Search by Title按钮就好了。一旦识别好了文章之后,在文章上点击右键菜单,还可以选择打开菜单,重命名文件,输出文献信息等操作。其中,Rename Document File可以选择多种格式。二 和Word交互

在Mendeley中选择Tools菜单中的Install MS Word Plugin然后点击OK按钮就好了。

打开Word,然后在加载项中可以看到Mendeley的相关工具。将光标固定在在想要添加参考文献的地方,然后点击Insert Citation按钮,就会出现一个对话框

在可以输入的地方输入作者的名字,Mendeley就会返回搜索结果,选定了之后,点击OK,就可以了。如果这样查找的话有些费劲,还可以点击下面有图标的那个Go To Mendeley按钮,在Mendeley主界面选择相应的文献,然后点击 Send Citations to Word Processor就好了。现在仅仅是插入了引文,文章的结尾处还没有相关的参考文献,这个时候,把鼠标定位到文章的末尾,点击Word加载项中的 Insert Bibliography就可以了。这里仅仅插入了参考文献的内容,并没有“参考文献”这四个大字,这个字还是要自己打上去的。中文的就打“参考文献”,英文的就打Reference。这里值得要提的一点是, Mendeley对中文的支持非常好,如果Mendeley主界面的中文显示正常,在Word中输出出来的就没有乱码!

具体选用什么样的参考文献格式,是IEEE的啊,还是AMA的啊,只要从后面的下拉列表中选择就好,如果下拉列表中没有,点击 More Style… 就好了,Mendeley几乎涵盖了所有的主流参考文献格式,总有你想要的。在作出更改之后,点击最后的 Refresh就可以看到改变后的结果了。

三 其他

使用Mendeley一定要去注册,反正都是免费的,如果不注册,就无法使用Mendeley的云功能。

至于Mendeley的社交功能,没用过,所以也不太好说。

好,关于Mendeley就这么多吧。