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) - 小文字にして返す
参考資料
Anaconda環境設定
準備
$ bash Anaconda3-4.0.0-Linux-x86.sh $ /usr/local/anaconda #既存のディレクトリを選択してはいけない
- .bash_profile
export PATH="/usr/local/anaconda/bin:$PATH"
$ source .bash_profile
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")
- scale_colour_brewer. ggplot2 2.1.0 - グラデーション指定
#カラーパレットの表示 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グラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集 : Winston Chang, 石井 弓美子, 河内 崇, 瀬戸山 雅人, 古畠 敦 : 本 : Amazon.co.jp
- Rで解析:geom_pointへのテキストやラベルの付与に便利な「ggrepel」パッケージ - テキストプロット
- ggplot2で積み重ね棒グラフに値を表示させたい - Qiita - テキスト位置の参考になった
- ggplotでの軸ラベル, タイトルの扱い方 | Memo on the Web
- scale_colour_brewer. ggplot2 2.1.0 - fillグラデーションは関数を使い分ける必要があるらしい
- Rとウェブ解析:MACでグラフの日本語文字化けを防ぐ簡単な方法 - [gg]plotの文字化け防止
- 政治学方法論 I - ggplot文字化け防止、あらかじめ指定
- Tokyor42 ggplot2 - カラーパレット
- RPubs - ggplot2でヒストグラムと箱ひげ図を同時に描く&グラフを一括出力する - 複数のグラフを描く
- r - Using coord_flip() with facet_wrap(scales = "free_y") in ggplot2 seems to give unexpected facet axis tick marks and tick labels - Stack Overflow - facet(xy)
- ggplot2で複数グラフ表示 - 盆栽日記 - 様々な複数グラフ表示
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
準備
- Twitter Developers - keyの取得などで必要
- とりあえずこれ試してみる Rのバージョン足りないとかで入らなかった。 www.karada-good.net
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'))
形態素解析
- 5分でMacにMecabをインストールする方法 | Brainvalley 人工知能と脳科学のアーカイブサイト。
- install.packages("RMeCab", repos = "http://rmecab.jp/R")
- RパッケージRMeCabで用意されている関数 - RMeCabの利用方法
メモ
- バイグラム -> ネットワークプロット p68
参考資料
- RでTwitterのデータを分析するための準備(2015年6月現在のやり方) - StatsBeginner: 初学者の統計学習ノート - 引数が見れる
- twitteR公式ドキュメント
- RでTwitterのデータを分析するための準備(2015年6月現在のやり方) - StatsBeginner: 初学者の統計学習ノート - twListToDF()
- r - Rate Limit in Twitter REST API - a clarification needed - Stack Overflow - twitteRで制限情報を確認する
- 日付、時間関数Tips大全 - RjpWiki
- install - rmecab
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")