sed & awk

正規表現

  • [0-9a-z?.,;:'"][.?!][^abc] - 3文字条件
  • grep "can[ no']t" sample - 否定文にマッチ
  • *$ - 行末の一つ以上の空白
  • ^... - 行の先頭にdot後に2文字,空白
  • ^ *$ - 空行を探すときに便利
  • ^.*$ - 行全体にマッチ

sed

  • s/CA/California/g
  • /Sebastopol/s/CA/California - アドレスにマッチする行に対してのみ処理
  • /Sebastopol!/s/CA/California - アドレスにマッチしない行に対してのみ処理
  • 1d - 1行目削除
  • $d - 最後の行を削除
  • /^$/d - 空行を削除
  • 1,3d - 1〜3行目まで削除
  • 1,/^$/d - 1行目から最初の空行まで削除
  • 2,$ - 2〜最後の行まで削除
  • s/AB/ABCD/2 - 2番目のABが置き換えられる
  • 's/(.)DELI(.)/\2:\1/' - DELIで区切られた2つの箇所を自在に置き換え

  • sed 'TS/i/PLUS' - TSにマッチした列の上に追加

  • sed 'TS/a/PLUS' - TSにマッチした列の下に追加
  • sed 'TS/c/PLUS' - TSにマッチした行全体を変更

  • y/abc/xyz/ - 変換各文字ごとで変換が行われる文字列ではない

  • 100q - 100行目まで読んで終了する
  • sed -n 1~3,+1p - 1~3のうち1+1の行数を表示する

awk

  • awkは入力駆動型
  • cat test.txt | awk '/^$/{print "this is blank"}' - 空白行のところだけ表示
  • cat test.txt | awk '/1/{print $1"this is blank"}' - 検索行に追加
  • echo a b z d | awk 'BEGIN { one = 1; two = 2 } {print $(one+two)}' - 列を足し算で表すことができる
  • BEGIN{FS=","} - BEGINルールの中でフィールドセパレータを定義することができる
  • cat test.txt | awk 'BEGIN{ FS = "," } { print $2,$1 }' - csv形式のファイルの1,2列目を入れ替える
  • FS="[',:\t]" - フィールドセパレータは複数定義することができる
  • cat test.txt | awk '/^$/{ print x++}' - 空行が来るたびにx++で表示
  • cat test.txt | awk '/^$/{++x} END{print x}' - 空行をカウントし、最後に表示
  • cat test.txt | awk 'BEGIN{FS=","} {total+=$1} END {print total}' - 1行目を加算して表示
  • cat test.txt | awk 'BEGIN{FS=","} {total+=$1} {++x} END {print total/x}' - 1行目の平均を表示
  • cat test.txt | awk 'BEGIN{FS=","} /[0-9]+/{total+=$1} /[0-9]+/{++x} END {print total/x}' - 数値行1列目の平均値
  • cat test.txt | awk 'BEGIN{FS=","} NF==5 {print}' - フィールド数が5の行を表示
  • cat test.txt | awk 'BEGIN{FS=","} BEGIN{state="[0-9]+"} $1~state {total1+=$1} $1~state {++x} $2~state {total2+=$2} $2~/[0-9]+/ {++y} END {print total1/x,total2/y}' - 1行目は一行目の数値列の平均 2行目
  • cat test.txt | awk 'BEGIN{FS=","} {printf("|%4s|%4s|%4s|%4s|\n",$1,$2,$3,$4)}' - csv方式のファイルを綺麗に整列して表示
  • cat test.txt | awk 'BEGIN{FS=","} {if(NF==3) {print $1} else {print $2}}' - 3列なら1列目表示,3列以外なら2列目表示
  • echo 2 5 | awk '{print $1^$2}'
  • cat test.txt | awk 'BEGIN{FS=","} {printf("%s,%s\n",toupper($2),$1)}'
  • cat test.txt | awk 'BEGIN{FS=","} {gsub(/d../,"DSA",$1)} {printf("%s,%s\n",$2,$1)}' - d..をDSAに置き換える
  • cat test.txt | awk 'BEGIN{FS=","} {split($0,a,",")} {for( i = 0; i < length(a); i++ )printf("%s",a[i])} {print '\n'}' - splitで分割を行いばらばらに列の文字を合成して表示
  • cat test.txt | awk 'BEGIN{FS=","} {test[i++]=match($1,/[0-9][0-9]++/)} {one[l++]=$1} END {for( v = 1; v < length(test); v++ )if( test[v] == 1 )printf("%s\n",one[v]) }' - マッチ列のみ表示

  • システム定義変数

 BEGIN : 最初
 END   : 最後
 FS : フィールドセパレータ
 RS : レコードセパレータ
 OFS : デフォルトのフィールド出力セパレータ
 ORS : デフォルトのレコード出力セパレータ
 NF  : フィールド数
 NR  : レコード数
 <  : より小さい
 <= : 以下
 == : 等しい
 != : 等しくない
 ~  : マッチする
 !~ : マッチしない

 || : OR
 && : AND
 !  : NOT
  • 関数
cos(x)
sin(x)
exp(x)
int(x)
log(x)
sqrt(x)
rand()
srand(x) - シードの設定
int(x) - 小数点以下の数を切り捨てる

gsub(r,s,t) - 文字列t中で正規表現rにマッチするものを全てsに置き換える、置き換えた数を返す
index(s,t) - 文字列tの部分文字列sの位置を返す
length(s) - 文字列sの長さを返す
match(s,r) - s中の正規表現rの先頭位置を返す
split(s,a,sep) - 文字列sをフィールドセパレータsepに基づいて配列aの要素に置き換える
sprintf("fmt",exp) - 文字列合成
sub(r,s,t) - 文字列t中で正規表現rに最初にマッチしたものをsに置き換える
substr(s,p,n) - 文字列s中の位置pを先頭とする最大長nの部分文字列を返す
tolower(s) - 大文字にして返す
toupper(s) - 小文字にして返す

参考資料

  • sed & awk プログラミング

Xpress 入門

  • 加算
!buy(p)は配列
MaxCap := sum( p in 1..10) buy(p) <= 100
  • 繰り返し
forall(t in 2..NT) do
    Inven(t) :=
        bal(t) = bal(t-1) + buy(t)
end-do
  • 加算 + 繰り返し
forall( c in 1..10 | IFCAP(c)=true )
    MaxCap(c) :=
        sum(i in 1..10, j in 1..10 | i<>j)
            TECH(i,j,c)*x(i,j,c) <= MAXTECH(c)
a: is_binary
b: is_binary
a = 1 - y

d=max(a,b)

d=min(a,b)=a*b
  • 動的配列
COST: dynamic array(1..NT) of real

use: array(TIME) of mpvar
forall( t in TIME | COST(t)>0)create(use(t))

parameter

モデルの一番初めに記述しなければならない

DEBUG=true
NUM=10

declarations

PRODUCTS = 1..5

モデル構築の順序 * 定数データ * 動的データ * 決定変数 * 制約 * 目的関数

変数名のルール * 既知数 - 大文字 * 未知数 - 小文字 * 制約 - 組み合わせ

ggplot2の使い方

基本的なプロット

#dataは一次元データを想定
par(family="HiraKakuProN-W3")
plot(data,type="p") #散布図
plot(data,type="l") #折れ線グラフ|lines()
barplot(data)       #棒グラフ
hist(res)           #ヒストグラム
boxplot(res)        #箱ヒゲ図
curve(x^2)          #関数曲線をプロット

共通オプション

ggsave("test.png")
+ xlab("Xname") + ylab("Yname)
+ xlim(1,10) + ylim(2,20)
+ stat_smooth(method=lm,se=FALSE)
+ coord_flip() #x,y反転
+ theme_bw() #テーマ変更
+ facet_grid(fac~.) #y軸分割
+ facet_grid(.~fac) #x軸分割
+ guides(fill=FALSE) #塗りの凡例削除
+ theme_gray(base_family="HiraKakuProN-W3")
#カラーパレットの表示
library(RColorBrewer)
display.brewer.all()

棒グラフ

#通常の棒グラフ
ggplot(dat,aes(x=ID,y=res))+geom_bar(stat="identity")
#カラーの指定
ggplot(dat,aes(x=ID,y=res))+geom_bar(stat="identity",fill="lightblue",colour="black")
#棒グラフの軸が連続値で欠損が見られるところをカテゴリかる変数に変換する
ggplot(dat,aes(x=factor(ID),y=res))+geom_bar(stat="identity")
#棒をグループ化する,fill指定で色を分けることができる
ggplot(dat,aes(x=ID,y=res,fill=Cultivar))+geom_bar(stat="dodge")

折れ線グラフ

#通常の折れ線グラフ
ggplot(dat,aes(x=ID,y=res))+geom_line()+geom_point()
#積み上げグラフの作成
library(gcookbook) #sample data
ggplot(uspopage,aes(x=Year,y=Thousands,fill=AgeGroup))+geom_area()

#点 + 点線プロット
p<-ggplot(dat,aes(x=ID,y=res,label=res))+geom_line(linetype="dashed",colour="grey")+geom_point(aes(fill=res),size=3,shape=21)+xlab("packet division")+ylab("transmission delay")+ggtitle("Transmission Delays")+geom_text(aes(y=res+1.1),size=3)
print(p+scale_fill_distiller(palette="Greys")+guides(fill=FALSE))

散布図

ggplot(dat,aes(x=Year,y=Height,colour=sex))+geom_point()

ネットワークグラフ

library(igraph)
set.seed(123)
gd<-graph(c(1,2, 2,3, 2,4, 1,4, 5,5, 3,6))

テキストプロット

ggplot(meisi,aes(x=x,y=y,label=Term))+geom_text(family="HiraKakuProN-W3",size=3)+xlab("タイトル")

Melt

参考資料

Rによる空間データの統計分析(1)

空間データの分類と可視化

library(maptools)
library(classInt)

#shpファイル読み込み(IDvarには、データのID的なものを指定すると後のテーブル合成などの時に役立つ)
jpn_pref<-readShapePoly("jpn_pref.shp",IDvar="PREF_CODE")
jpn_COD<-read.csv("COD.csv")
#属性テーブルと空間データテーブルとの結合(IDvarで指定した列で自動マッチング?)
jpn_pref_code<-spCbind(jpn_pref,jpn_COD)

pa10<-c("white","grey","grey2") #カラーパレット
#等量分類
q_pref<-classIntervals(round(jpn_pref_code$malignant,2),n=5,style="quantile")
plot(q_pref,pal=pa10,cex.axis=1.3,cex.lab=1.2,lwd=2,main="") #累積密度分布図
q_pref_COL<-findColours(q_pref,pa10)
plot(jpn_pref_code,col=q_pref_COL)

参考資料

RでTwitter

準備

library(twitteR)

#FIRST.TIME=TRUE
FIRST.TIME=FALSE

if( FIRST.TIME ){
    consumerKey <- ""
    consumerSecret <- ""
    accessToken <- ""
    accessSecret <- ""
    
    options(httr_oauth_cache = TRUE)
    setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)
    #userTimeline(user="akira4110",n=10)
}

print(searchTwitter("熊本",locale="ja",since='2016-04-18',until='2016-04-19'))

形態素解析

メモ

  • バイグラム -> ネットワークプロット p68

参考資料

Rで地理空間データ分析

事前準備

  • spdep,maptoolsをinstall.packages()
  • libraryで読み込み

基礎操作

  • .shpファイルの読み込み
building<-readShapePoly("building.shp")
  • ポリゴンデータの代表点を抽出
building.cor<-coordinate(building)
  • ポリゴンデータをプロット
plot(building,col="gray",border="black")

日本語データを読み込む時は注意 name<-read.csv(file("buildingname.csv",encoding="Shift_JIS"),stringsAsFactors=F,header=T)

  • テキストを図に追加する
par(family = "HiraKakuProN-W3")
text(building.cor[,1],building.cor[,2],name[,2],cex=0.5,col="black")

shpファイルの入手先

qiita.com

参考資料