2017年6月15日星期四

archlinux: 发布aur自定义安装包PKGBUILD

https://wiki.archlinux.org/index.php/Arch_User_Repository


$ git clone ssh://aur@aur.archlinux.org/package_name.git

编辑PKGBUILD文件。。。

$ makepkg --printsrcinfo > .SRCINFO
$ git add PKGBUILD .SRCINFO  
$ git commit -m "useful commit message"  
$ git push

2017年6月14日星期三

树莓派 raspberrypi 3b 笔记

1、下载刻录

下载镜像:https://www.raspberrypi.org/downloads/raspbian/

解压缩zip文档,得到img镜像文件,假设为xxx.img

假设sd卡已被识别为/dev/sdb

dd if=xxx.img of=/dev/sdb

2、允许ssh登录

挂载sd卡到pc,打开/boot文件夹,在其中新建子文件夹 ssh

否则会提示ssh refuse connect

3、用网线连接 raspberrypi ,启动

默认用户名为pi,默认密码为raspberry

在路由器查看,或在局域网里ping测出raspberrypi的ip地址,假设为 192.168.1.123

ssh pi@192.168.1.123

修改默认密码

4、设置wifi

sudo ifconfig查看网卡信息

假设无线网卡为wlan0,wifi名称为myssid,密码为mypasswd,网关为192.168.1.1,固定设置raspberry的ip为192.168.1.112

编辑/etc/network/interfaces对应的wlan0段落

allow-hotplug wlan0
iface wlan0 inet static
wpa-ssid  myssid
wpa-psk  mypasswd
address 192.168.1.112
netmask 255.255.255.0
gateway 192.168.1.1
network 192.168.1.1

5、重启连接

ssh pi@192.168.1.112

6、安装vnc

sudo apt-get install xorg tightvncserver xfce4

安装完毕后

tightvncserver :1000

设置访问密码

在pc上远程vnc访问 192.168.1.112:6900 即可登录raspberry的xfce4桌面

2017年3月23日星期四

笔记:Data Science at the Command Line

查询db,写入csv
sql2csv --db 'sqlite:///data/song.db' --query 'SELECT * FROM song_info WHERE rate > 4'
xlsx 转 csv
in2csv some.xlsx > out.csv
从csv取出指定的列
小写 -c 选中,大写 -C 去掉
$ cat song.csv | csvcut -c artist,song,id | csvlook
$ echo 'a,b,c,d,e,f,g,h,i\n1,2,3,4,5,6,7,8,9' | > csvcut -c $(seq 1 2 9 | paste -sd,)
a,c,e,g,i
1,3,5,7,9
从csv取出指定的行
csvgrep -c size -i -r "[1-4]" tips.csv     csvlook
< tips.csv csvsql –query "SELECT * FROM stdin WHERE bill > 40 AND day LIKE '%S%'"     csvlook
< names.csv csvsql –query "SELECT id, first_name           ' '           last_name AS full_name, born FROM stdin"     csvlook
大小写转换
tr '[:upper:]' '[:lower:]'
命令行处理 oauth 认证
curlicue
打印偶数行
< some.txt awk '(NR+1)%2'
取样
seq 1000     sample -r 1%
首行添加列名
cat word_cnt.txt     header -a word,count
删掉首行
< some.txt header -d
针对csv执行sql查询
seq 5     header -a value     csvsql –query "SELECT SUM(value) AS sum FROM stdin"
把长字符串按指定宽度截成多行
echo "lsajdflasdjfieqoiutoqedksgfkdj"     fold -w 8
命令行抽网页数据
$ < wiki.html scrape -b -e 'table.wikitable > tr:not(:first-child)' > table.html
$ < table.html xml2json > table.json
$ < table.json jq -c '.html.body.tr[] | {country: .td[1][],border: .td[2][], surface: .td[3][]}' > countries.json
$ < countries.json json2csv -p -k border,surface > countries.csv
xml2json 把html/xml转化为json
json2csv 把 json 转为 csv
按行合并多个csv
#每个文件用 filenames => species 区分
$ csvstack Iris-*.csv -n species --filenames
#每个文件用 a,b,c => class 区分
csvstack Iris-*.csv -n class -g a,b,c
按列合并多个csv
paste -d, {bills,customers,datetime}.csv
指定列名,关联合并
csvjoin -c species iris.csv
csvsql –query 'SELECT i.sepal_length, i.sepal_width, i.species, m.usda_id FROM iris i JOIN irismeta m ON (i.species = m.species)'
drake控制数据流
drake,用drip加速启动
统计每列取值的去重个数
csvstat some.csv –unique
支持针对各列内容的统计,例如 unique / max / min / sum / mean / median / stdev(标准差)/ nulls(是否有空值)/ freq(频率)/ len(取值的最大字符串长度)
用Rio做增强计算
下载:Rio
< data/tips.csv Rio -e 'df$tip / df$bill * 100'     head
< data/tips.csv Rio -e 'df$percent <- df$tip / df$bill * 100; df'     head
< data/iris.csv Rio -e 'summary(df$sepal_length)'
< dat/iris.csv Rio -e 'cor(df$bill, df$tip)'
安装moments包,并在Rio源码中改一行REQUIRES="require(moments);"
$ < data/iris.csv Rio -e 'skewness(df$sepal_length)' 偏态
$ < data/iris.csv Rio -e 'kurtosis(df$petal_width)' 峰态
用Rio调用ggplot2画图
比如画多个国家的折线对比图
< data/immigration-long.csv Rio -ge 'g+geom_line(aes(x=Period, y=Count, group=Country, color=Country)) + theme(axis.text.x = element_text(angle = -45, hjust = 0))' | display
用parallel做批量处理
-print0 / -0 是为了处理文件名带空格之类的特殊情况
-j 指定并行数
-k 按顺序执行
–tag 输出结果的时候同时打印输入参数
find data -name '*.csv' -print0 | parallel -0 echo "Processing {}"
seq 5 | parallel "echo {}^2 | bc"
#每行只输出第一列
< t.csv parallel -C, echo {1}
#读入首行做为列名,输出其中{name}列
< t.csv parallel -C, --header : echo {name}
#重复执行5次
seq 5 | parallel -N0 "echo The command line rules"
#在指定节点列表执行ifconfig,--nonall表示不传参数执行
#注意:这些节点可以不输入密码,直接在当前机器ssh登陆
parallel --nonall --slf node_list.txt ifconfig
用tapkee降维
降维一般是无监督的
#标准化
< wine-both-clean.csv cols -C type Rio -f scale > wine-both-scaled.csv
#pca降维
< wine-both-scaled.csv cols -C type,quality body tapkee --method pca | header -r x,y,type,quality | Rio-scatter x y type | display
用weka聚类
#csv转arff
weka core.converters.CSVLoader a.csv > a.arff
#arff转csv
weka core.converters.CSVSaver -i a.arff -o b.csv
#EM聚类
weka filters.unsupervised.attribute.AddCluster -W "weka.clusterers.EM -N 5" -i a.arff -o em.arff
用scikit-learn回归
配置文件
[General]
experiment_name = Wine
task = cross_validate
[Input]
train_directory = train
featuresets = [["features.csv"]]
learners = ["LinearRegression","GradientBoostingRegressor","RandomForestRegressor"]
label_col = quality
[Tuning]
grid_search = false
feature_scaling = both
objective = r2
[Output]
log = output
results = output
predictions = output
#生成3个文件,每个文件为对应回归算法的prediction值与原始数据quality值对比
parallel "csvjoin -c id train/features.csv <(cat output/Wine_features.csv_{}.predictions | tr '\t' ',') | csvcut -c id,quality,prediction > {}" :::  RandomForestRegressor GradientBoostingRegressor LinearRegression
#3个文件合并,加一列learner区分不同算法
csvstack *Regres* -n learner --filenames > predictions.csv
用bigml分类
要花钱的

ansible : ssh batch 自动化批量操作

参考:http://docs.ansible.com

以debian为例: apt-get install ansible

配置
/etc/ansible/hosts,可以配置多个分组,每个分组有多台机器
还可以批量指定分组机器的变量
[grpx]
xxx.qqq.cn ansible_ssh_user=root ansible_ssh_pass=xxx ansible_ssh_port=2233
yyy.qqq.cn ansible_ssh_user=root ansible_ssh_pass=xxx ansible_ssh_port=2233
[grpy]
aaa.ttt.cn ansible_ssh_user=root ansible_ssh_pass=xxx ansible_ssh_port=4455
bbb.ttt.cn ansible_ssh_user=root ansible_ssh_pass=xxx ansible_ssh_port=4455
[grpy:vars]
ansible_sudo_pass=xxx
远程机器批量操作
#执行指定命令
ansible grpx -a "date"
ansible grpx -a "date" --sudo
ansible grpx -a "date" --sudo --sudo-pass=12345
#执行shell指令
ansible grpx -m shell -a '/bin/echo "nameserver 8.8.8.8" > /etc/resolv.conf' --sudo
#上传本地文件到远程机器
ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"