Thursday, February 13, 2020

R for Beginners

in RStudio console, use ctrl+L to clear console;
in RStudio editor, use ctrl+shift+C to add multiline comments to selected lines.

?lm will show help of function lm()
help.search("tree") will display a list of the functions which help pages mention “tree”. Note that if some packages have been recently installed, it may be useful to refresh the database used by help.search using the option rebuild (e.g., help.search("tree", rebuild = TRUE)).


When R is running, variables, data, functions are stored in the active memory of the computer in the form of objects which have a name. The name of an object must start with a letter and CAN include dots(.)

#The functions available to the user are stored in a library localised on the disk in a directory called R_HOME/library

R.home() will show R_HOME, in Ubuntu 19.10 tested, it's "/usr/lib/R", this directory contains packages of functions.

The package named base is in a way the core of R, each package has a directory called R with a file named like the package , for instance, for the package base, this is the file R_HOME/library/base/R/base, This file contains functions of the package.

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# following example create&shows details of a frame:
# myFrame=data.frame(
#   emp_id = c (1:5),
#   emp_name = c("Rick","Dan","Michelle","Ryan","Gary")
# )
# ls.str(pat="myFrame")
#
# myFrame : 'data.frame':    5 obs. of  2 variables:
# $ emp_id  : int  1 2 3 4 5
# $ emp_name: Factor w/ 5 levels "Dan","Gary","Michelle",..: 4 1 3 5 2

# if there are too many lines, use ls.str(pat="myFrame", max.level = -1) to hide details.

#To delete objects in memory, we use the function rm: rm(x) deletes the
#object x, rm(x,y) deletes both the objects x and y, rm(list=ls()) deletes all
#the objects in memory

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# > A <- "Gomphotherium"; compar <- TRUE; z <- -Inf
# > mode(A); mode(compar); mode(z); length(A)
# [1] "character"
# [1] "logical"
# [1] "numeric"
# [1] 1
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
read table from https://s3.amazonaws.com/assets.datacamp.com/blog_assets/test.txt :
1   6   a
2   7   b
3   8   c
4   9   d
5   10  e

url <- "https://s3.amazonaws.com/assets.datacamp.com/blog_assets/test.txt"
read.table(
 url,
 header = FALSE,
 quote = "\"’",
 colClasses = c("numeric","numeric","character"),
 nrows = 2, #only read some rows
 skip = 0, #start from the first row
 check.names = TRUE, #checks that the variable|column names are valid
 blank.lines.skip = TRUE,
 comment.char = "" # no comment in this file
)

  V1 V2 V3
1  1  6  a
2  2  7  b

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

use scan to read table:

scan(url, n = 2, blank.lines.skip = TRUE, comment.char="#")
Read 2 items
[1] 1 6

#sep = "" , not " "
scan(url, sep = "", what = list(0,0,""), nmax=2)
Read 2 records
[[1]]
[1] 1 2

[[2]]
[1] 6 7

[[3]]
[1] "a" "b"

//into 3 vectors|variables
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sequence(c(3, 2, 4))
[1] 1 2 3 1 2 1 2 3 4

sequence(1:3)
[1] 1 1 2 1 2 3

seq(1, 5, 0.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

The function gl (generate levels) is very useful because it generates regular
series of factors.

> gl(3, 5, length=30)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3

> gl(2, 6, label=c("Male", "Female"))
[1] Male Male Male Male Male Male
[7] Female Female Female Female Female Female
Levels: Male Female

> expand.grid(h=c(60,80), w=c(100, 300), sex=c("Male", "Female"))
   h   w    sex
1 60 100   Male
2 80 100   Male
3 60 300   Male
4 80 300   Male
5 60 100 Female
6 80 100 Female
7 60 300 Female
8 80 300 Female
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> matrix(1:6, 2, 3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> matrix(1:6, 2, 3, byrow=TRUE)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


> fac <- factor(c(1, 10))
> fac
[1] 1 10
Levels: 1 10
> as.numeric(fac)
[1] 1 2
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> x <- matrix(1:6, 2, 3)
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6


> x[, 3]
[1] 5 6

> x[, 3, drop = FALSE]
     [,1]
[1,]    5
[2,]    6
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

> x <- 1:10
> x[x >= 5] <- 20
> x
 [1]  1  2  3  4 20 20 20 20 20 20
> x[x == 1] <- 25
> x
[1] 25  2  3  4 20 20 20 20 20 20












Friday, January 31, 2020

gcc important preprocess , compile and assemble options

-E stop after the preprocessing stage; The output is in the form of preprocessed source code, which is sent to the standard output.
-S Stop after the stage of compilation, don't assemble. The output is in the form of an assembler code file.
-c Compile or assemble the source files
-o If this option is not specified, the default is to put an executable file in ‘a.out’, the object file in ‘source.o’, assembler file in ‘source.s’, a
precompiled header file in ‘source.suffix.gch’, and all preprocessed C source on standard output.

Saturday, December 28, 2019

长日将尽第2章

长日将尽第2章

我有点起生床,所以睡得很少很不好。大概一个小时之前我就醒了,由于天还很黑,而且想到要开一整天的车,所以试着睡个回笼觉,不过真的很难睡着,于是开灯刮胡子。

我刚才拨开窗帘(往外看)的时候,外面还是灰蒙蒙的,有一层薄雾笼罩着,使我很难看清前面的糕点店。我能看见前面朦朦胧胧的小桥,街道上空无一人;远方有锤子击打的声音,近处有后屋偶尔的咳嗽声。此外没有任何声响,没有迹象表明老板娘能在七点半按时提供早点。

我的脑海里此刻又浮现出了肯特小姐的信。其实我们也可以称她为贝恩夫人,我只在她少女时代认识她,之后她嫁给了西部的一个叫做小康普顿村的林场的林场主,也就是贝恩先生,到如今二十个年头了。她信里虽然没有明确提及细节,但是确切地提到即将离婚,所以我任然能称她为肯特小姐。

肯特小姐说她最喜欢二楼的卧室,从那里她能看到远处的草坪,她常常在窗前驻足,对着草坪发呆。她在信中又写到:“那时候我们在二楼总能看到您的父亲低着头在房前踱来踱去,好像在寻找遗失的珠宝一样。

很显然,我俩都还记得这个三十多年前的往事。确实,这事发生在她提到的某一个夏日的晚上,我还清楚地记得当我爬上二楼的楼梯的时候,我看到一束橙色的阳光。阳光照在阴暗的门廊里,使我能看到每一扇半开的卧室的门。我经过一个个卧室,看到肯特小姐的背影,她转过身来对我轻柔地说:史蒂文先生,没在忙啊。

楼下的白杨树影遮过了整个草坪。草坪斜斜地往上延伸,尽头是一个凉亭,父亲在凉亭里踱步,他全神贯注的样子,正如肯特小姐说的,很像是在寻找丢失的珠宝。

家父和肯顿小姐都是1922年的春天来到这里的,因为那时候我手下的女仆和男仆正好决定结婚并离职。男女仆的结合是府里最大的威胁,也是因为这个而不断地有仆人离职。当然了,女仆和男仆发生(恋爱)这种事也是意料之中,一个优秀的管家应该总是考虑到这一点,但是如果这种事在高级雇员中发生的多了,那么对工作的确是有影响的。另外,沉迷于浪漫而疏于工作是可恶的,这种现象是良好职业素养的最大障碍。

但是我这么说的时候其实不太记得肯顿小姐,她没有一直在府里干,而是因为结婚而离开了。但是我确信她在我手底下的时候真的是专心致志地工作,她总是把工作放在第一位。

我可能有点离题了,我之前提到, 我们正缺一个女管家和男佣人,肯顿小姐正好出色地填补了前一空缺。与此同时,由于约翰西佛尔先生的离世,家父不得不终止其在拉夫伯柔夫堡的出色工作。他技能出众,然后年过七旬,并且患着严重的关节炎和其他小病。这真的不好说哦,(我感觉)他很难竞争得赢出色的年轻人吧, 他唯有向达林顿宫展示他伟大的经历和出色的成绩。

Sunday, October 13, 2019

Dogwood Diploma

在不列颠哥伦比亚省的中学毕业之后,学生可获得不列颠哥伦比亚省高中毕业证书(也称为“Dogwood Diploma”)。

Saturday, July 6, 2019

长日将近第一天

很长一段时间以来,协会拒绝公布它的会员标准,后来在 绅士之中的绅士季刊 的一再追问下,它才承认会员须服务于显赫门庭;然而协会并不认为商人和新贵是显赫的,这让我觉得它的权威大打折扣.在读者的进一步质疑下,学会辩称:虽然有些出色的管家来自商人家庭,但他们也即将受到真正的豪门贵族的青睐。如果我记得没错的话,协会最终完整扼要地披露了它的标准:会员申请者首先需要崇高的声望,其次才是成就与职位

虽然我对海斯协会缺乏热情,但它关于尊贵的申明却是基于重要的事实。比如米歇尔先生和莱恩先生,相比于其他仅仅是业务精湛的管家来说,显然是与众不同。

您应该不会否认,查尔维尔宫的马歇尔先生以及布莱堡的莱恩先生算得上近代最伟大的管家.有人会提到布兰伯利城堡的亨德森先生,而我,绝对不是出于私心地认为我父亲也应该被提及,在拉夫博拉夫堡的职业生涯巅峰时期,他简直就是高贵的化身.

客观地说,我父亲缺乏某些所谓的伟大管家具有的特征.这些特征的确吸引人,但是也很不值一提,就像蛋糕表面的糖霜一样肤浅。我父亲从不自夸好的口音、语言能力以及鹰隼或蝾螈交配之类的泛泛的常识。而且他那个年代并不认可这些,这些玩意儿很可能是在马歇尔先生兴起后才火起来的,那时候比他逊色的人争相模仿他并将这些肤浅当成精髓.我们这代人在这些细枝末节上浪费了太多时间,天知道我们在锻炼口才和学习百科知识上花费了多长时间.

我们不能试图逃避肩负的责任,某些雇主却鼓励这样做。近年来有些宅邸,甚至是名门望族,都在争相炫耀本宅管家的这些雕虫小技。管家们经常被当作猴一样耍,我就目睹过一个宅邸把摇铃呼唤管家并问一些荒诞的问题当成节目,这些问题甚至无聊到追问谁是某某年的德贝赛马的胜利者,就好像管家是音乐厅里的神奇记忆人一样。

所幸家父所处的年代没有如此混淆的职业价值观,得益于此,家父没有致力于语言的运用和一般常识的搜罗,反之其专业技能却是与日俱增,以至于在他的巅峰时期能配得上海思协会宣称的才堪其位的尊贵。如果说有什么能令家父如此与众不同,那自然是这个才堪其位,不过我倒要借机向诸位传达什么才是我理解的“尊贵”。

从小到大,我总听家父向访客提及一个故事;到我当上管家,家父又向我提起,要知道他那一代其实不像我们这一代一样喜欢交流,但是既然如此频繁地提及,可见对此事反响有多激烈了。

这个故事显然是真的,故事里有个总管跟着他的主人到了印度并在那里从业很多年,期间维持着与当地员工一样精湛的业务水准,就像他在英格兰时一样。

一天下午,总管去餐厅检查晚餐时发现一只老虎懒洋洋地躺在餐桌下面,他悄悄地关上门,冷静地来到起居室.他的主人正在陪客人喝茶,他优雅地轻咳了一声以便引起主人的注意,然后附耳对他说:“很抱歉先生,有只老虎在餐桌底下,是否可以开枪射击?”

据说几分钟后,雇主和客人就听到了三声枪响。给茶续水的时候雇主问一切是否妥当,他应声答道:“当然了,一切都没问题,晚餐按时开始,刚才的事情不会留下任何蛛丝马迹”

每每提及“届时绝无后顾之忧”的时候,家父总是笑盈盈地点头称赞。他和他的熟人从不声称认识那位管家,但他坚称所言属实。当然了,故事的真假不重要,重要的是家父借此表达他的人生理想,回顾他的职业生涯,他一直努力成为故事中的管家那样的人。他虽然不可能遇到老虎钻到餐桌底下这等巧事,但是我倒可以举几个他的事例,他在应对上堪比故事中的总管。

其中一个例证是查尔斯•雷丁公司的大卫查尔斯讲给我听的。在达林顿勋爵时代,查尔斯先生时不时会访问达林顿宫。有一天晚上我碰巧充当他的贴身男仆,他告诉我他多年前偶遇过一次家父。在家父职业生涯的巅峰时期,他有十五年效力于实业家约翰•席佛尔先生的拉伯拉夫堡。查尔斯先生有一次访问拉博拉夫堡的时候,发生了一件事,那件事使他对家父印象颇为深刻。 有一天下午,查尔斯先生跟另外两位客人,史密斯先生和琼斯先生,一起喝酒,大约一个小时以后,他喝得酩酊大醉,两位数客人却邀他去兜风(那时候兜风还是很稀奇的)并让家父当司机。 他们才刚出发,史密斯和琼斯这两个为老不尊的家伙就唱起了粗俗的歌,还对窗外的所见所闻发出更粗鄙的评论。这两位先生看本地地图的时候,发现了三个村庄:墨菲,塞尔塔什和布里戈恩,确切名字我不太记得了,但这几个名字倒是让二位先生想起了一出叫做墨菲、赛尔特曼和布里吉德猫的音乐剧。注意到这些名字的巧合,加上对剧中演员的敬意,他俩就兴冲冲地张罗着去那几个村庄逛逛。据查尔斯先生说,家父按照他们的要求去了第一个村庄,然后又往第二个赶,二位先生中的不记得是哪一个发现了家父是往他俩指的第三个村庄赶,他们愤怒地要求家父掉头去他俩指定顺序中的第二个,但这意味着家父要回绕很长的一段路,但是查尔斯先生强调说,家父却将其当成合理的要求并彬彬有礼地答应了。

史密斯先生和琼斯先生的注意力被吸引到家父身上,另外他们对窗外的景物显然已经厌烦,他们继续嘲笑家父的"过错"以自娱自乐。查尔斯先生至今仍惊叹于家父竟能不露半点不安和恼怒,而是继续不卑不亢地开着车,其表情既不失体面,又乐于效劳。然而这两位先生在对家父极尽侮辱后,又议论起家父的雇主约翰•希尔佛思来。这两个家伙在约翰先生家里一边做着客,一边贬低主人,这让家父实在忍无可忍,非但如此,连查尔斯先生都连称此等言论非常不堪。可是此等观点却招致了激烈的反驳,以至于查尔斯先生不但担心自己会成为下一个嘲弄对象,甚至有受到人身伤害的可能。让查尔斯先生终身难忘的是,家父终因不堪忍受二位先生恶毒的攻击竟突然停下车来。

父亲打开车后门,站在不远处死死地盯着车里。据查理先生说,三个乘客不约而同地意识到父亲原来是那么的孔武有力。他有着六尺三寸的大高个,他总是表现得乐意效劳,但有时也会让人望而生畏。父亲只是开了一下车门,然而他硕大的身形笼罩着两位先生,却自有一种不怒自威的霸气,吓得那两位像偷苹果被抓住的小学生一样直缩脖子。

家父继续一声不吭地站在那里,手把着车门,直到两位先生中的一位开口问是不是接着走完计划的行程。父亲没有搭腔,既没有让他们下车也没有别的表示。我能想像他那时候的样子, 一个黑黑的他僵硬地立在车门那儿,跟赫特福德的柔美风光形成强烈的反差。

查尔斯先生回忆道,那一刻(的沉默)让所有人都觉得紧张不安,甚至他这个局外人都充满了负罪感。这个无休止的沉默后来被两位先生的其中一个打破,他喃喃自语道:"我想我们有点过了,我们不这样了。"

既然提到这一茬,另一件事就不得不提了。当我还是个孩子的时候,哥哥莱昂纳多就在一次南非战争中丧生了,父亲本该很悲痛,但本以为儿子是为国王和国家的光荣而战死,殊不料实际上却死于一次臭名昭著的军事行动中。虽然不便详细指出是哪一项军事行动,但是如果我这么说列位应该知道我暗指哪一件了:它引起了轩然大波和激烈辩论。当时有人提议涉事将军免职,甚至送交军事法庭,但是军方拒绝了,而且坚持让这位将军指挥完战役。鲜为人知的是,在南非战役结束后, 该将军悄悄退役并转而经商。我提及于此是因为若干年以后,当丧亲之痛已经痊愈(当然只是表面上),(有一天)家父被告知该退役将军将参加一个别墅派对,并且在派对中家父的雇主,约翰.西佛尔先生将与其完成一笔获利颇丰的交易;然而西佛尔先生顾虑于南非战争的往事,决定批给家父几天假以免他俩这几天遇到。

自然而然的,家父对这位将军厌恶已极。但他意识到该派对丹佛尔先生的重要性,因为宴请的人里面有多达差不多十八个地位显赫。家父的反应是一方面他很荣幸西佛尔先生能为他着想,另一方面派对的(服务)标准仍会跟往常一样。

后来的事实证明,家父所受的精神折磨远不止此。家父原以为跟这位将军接触以后或许会对他心生怜悯从而减少对他的恶感,但实际却恰恰相反。这位将军又矮又胖,粗俗不堪。一个更坏的消息是,他贴身男仆病了而且他生活不能自理,家父本可选择伺候另外一个没带仆人的客人的,但他还是选择了伺候将军,并且陪同了这位他厌恶的人四天,同时,这位将军全然不知父亲的感受,逮着机会就跟父亲谈论他在部队里的那些经历,正如别的那些喜欢跟他们的贴身男仆一厢情愿地讲私事的军官一样。父亲很好地控制了自己的情绪,出色地完成了西佛尔先生的嘱托,以至这位先生临别前在西佛尔先生面前对家父大加称赞,并给我大量的小费。父亲毫不犹豫地把这批小费捐献出去了。

我相信诸位能够认可本人所援引的家父职业生涯的两件事,这两件事都精准地表明了家父的确是海思协会所称的德配其位的典范。此时如果各位去比较家父与诸如杰克•内博尔那类技巧型管家,就会发现伟大管家与有竞争力的管家的区别;同时也能领会为什么家父如此喜爱那个在餐桌下发现猛虎还能不慌不乱的管家和他的故事了,那是因为家父理解这里面本身就隐含着尊贵管家之要义。在这里请允许我指出:管家的尊贵与其保持职业能力的能力有关。那些下等的管家就好像演哑剧的小丑,一个不小心的推搡或者趔趄就可能摔落假面;而伟大的管家不会受外部干扰而时刻能保持优雅,他们除非独处,否则总是衣着得体,不论外部环境多么恶劣、多么沮丧、多么令人不安或吃惊,他们总是能保持优雅。

据说真正的管家只存在于英格兰,其他国家只有所谓的男仆。我认为此言不虚,欧洲大陆国家无法造就管家,因为他们不善于管控情绪。欧洲人,甚至包括凯尔特人,在情绪激动时都无法保持职业素养。伟大的管家绝不可能是那种稍遇挑战就抓狂的人。这是我们英格兰人独具的优点,所以伟大的管家一定是英格兰人。

Thursday, March 7, 2019

SQL Joins with On or Using


In a nutshell, you use ON for most things, but USING is a handy shorthand for the situation where the column names are the same.

Consider this example dataset:

mysql> select * from pets;
+---------+---------+--------+-----------+
| pets_id | animal  | name   | owners_id |
+---------+---------+--------+-----------+
|       1 | fox     | Rusty  |         2 |
|       2 | cat     | Fluffy |         2 |
|       3 | cat     | Smudge |         3 |
|       4 | cat     | Toffee |         3 |
|       5 | dog     | Pig    |         3 |
|       6 | hamster | Henry  |         1 |
|       7 | dog     | Honey  |         1 |
+---------+---------+--------+-----------+
7 rows in set (0.00 sec)

mysql> select * from owners;
+-----------+-------+
| owners_id | name  |
+-----------+-------+
|         1 | Susie |
|         2 | Sally |
|         3 | Sarah |
+-----------+-------+
3 rows in set (0.00 sec)

To find out who has which pets, we would join the two tables together like this:
mysql> select owners.name as owner, pets.name as pet, pets.animal
    -> from owners join pets on (pets.owners_id = owners.owners_id);
+-------+--------+---------+
| owner | pet    | animal  |
+-------+--------+---------+
| Sally | Rusty  | fox     |
| Sally | Fluffy | cat     |
| Sarah | Smudge | cat     |
| Sarah | Toffee | cat     |
| Sarah | Pig    | dog     |
| Susie | Henry  | hamster |
| Susie | Honey  | dog     |
+-------+--------+---------+
7 rows in set (0.00 sec)

The example above uses the ON keyword, but since the columns we use to join are called owners_id in both tables, then we can instead put in USING as a shorthand.

mysql> select owners.name as owner, pets.name as pet, pets.animal
    -> from owners join pets using (owners_id);

Here are the different types of the JOINs in SQL:
  • (INNER) JOIN: Returns records that have matching values in both tables
  • LEFT (OUTER) JOIN: Return all records from the left table, and the matched records from the right table
  • RIGHT (OUTER) JOIN: Return all records from the right table, and the matched records from the left table
  • FULL (OUTER) JOIN: Return all records when there is a match in either left or right table

Tuesday, March 5, 2019

practice libsvm

practice the guide.pdf saved in C:\Temp\learn_libsvm\test1_research_the_GUIDE

cd /media/sf_Temp/learn_libsvm/test3_test_libsvm/libsvm-3.23 && make

===========================================================================
this test is for demo purpose(use easy.py in one step):

use the data of project Astroparticle under https://www.csie.ntu.edu.tw/~cjlin/papers/guide/data/ ,
it has training dat as train.1 and test dat as test.1 :
save train.1 into svmguide1
save test.1 into  svmguide1.t

//feature|attr value range [-1, 1], 
./svm-scale -l -1 -u 1 -s range1 svmguide1 > svmguide1.scale
/*
1 1:2.617300e+01 2:5.886700e+01 3:-1.894697e-01 4:1.251225e+02
...
into
1 1:-0.823781 2:-0.783405 3:-0.233795 4:0.361305 
...
0 1:-0.885045 2:-0.949015 3:0.182549 4:-0.519316 

has 2 classes,  class label Infected or Clean
*/

./svm-scale -r range1 svmguide1.t > svmguide1.t.scale

./svm-train svmguide1.scale
/*
*
optimization finished, #iter = 496
nu = 0.202599
obj = -507.307046, rho = 2.627039
nSV = 630, nBSV = 621
Total nSV = 630
*/

./svm-predict svmguide1.t.scale svmguide1.scale.model svmguide1.t.predict
Accuracy = 96.15% (3846/4000) (classification)


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

to achieve better Accuracy, ./svm-train requires cross-validation and specify following args:
-c -g 

the RBF kernel function argument C and galma

//the grid tools is a time consumer
./tools/grid.py svmguide1.scale
2.0 2.0 96.9893

./svm-train -c 2 -g 2 svmguide1.scale
Accuracy = 96.875%
===========================================================================
use easy.py in one step:
apt-get install -y gnuplot
cd tools/ && ./easy.py ../svmguide1 ../svmguide1.t

Scaling training data...
Cross validation...
Best c=2.0, g=2.0 CV rate=96.9893
Training...
Output model: svmguide1.model
Scaling testing data...
Testing...
Accuracy = 96.875% (3875/4000) (classification)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++