数学の分類

数学分類,分岐,学問名,-,数学
数学分類,分岐,分野名,数学,代数学,解析学,幾何学,線型代数学
代数学分類,分岐,亜分野名,代数学,群論,加群,ガロア理論,ホモロジー代数,保型関数,可換環論,数論
線型代数学分類,分岐,亜分野名,線型代数学,線形空間,アフィン幾何,ジョルダン標準形,テンソル代数,二次形式,線型不等式,群の表現論
解析学分類,分岐,亜分野名,解析学,集合,位相,関数解析,解析,複素解析,確率論,現代解析,フーリエ解析,常微分方程式,偏微分方程式,楕円型方程式,非線型発展方程式,超関数論,スペクトル理論
幾何学分類,分岐,亜分野名,幾何学,微分幾何学,多様体論,位相幾何学,代数幾何学,組合せ位相幾何学,微分位相幾何学,Lie群,複素多様体論
  • Rに読み込んでグラフにしてみよう
    • まだまだ、チューニングが必要なのだが

infile <- read.table("input.txt", sep = ",", fill =TRUE)
# 行列の方が好きなので行列にする
infile.m <- as.matrix(infile)
# 1,2,3列目を分離する
feature1 <- infile.m[,1]
feature2 <- infile.m[,2]
feature3 <- infile.m[,3]

# 1,2,3列のユニークを取って、それを連番ID化する
feature1.uni <- unique(feature1)
feature2.uni <- unique(feature2)
feature3.uni <- unique(feature3)
# 連番を取り出す
feature1.val <- apply(outer(feature1,feature1.uni,"=="),1,which,TRUE)
feature2.val <- apply(outer(feature2,feature2.uni,"=="),1,which,TRUE)
feature3.val <- apply(outer(feature3,feature3.uni,"=="),1,which,TRUE)

# エッジに関係するところだけを取り出す
infile.m <- infile.m[,4:length(infile.m[1,])]
# ノードをユニークにする
unique.word <- unique(c(infile.m))
unique.word <- unique.word[which(unique.word != "")]
# ノードの名前に順序idをつける
v.name <- unique.word
# エッジリストを名前と順序idとで作る
el.name <- el.id <- NULL
# エッジの性質をfeature情報から与える
el.type <- NULL
# 行ごとに要素数を数えて
for(i in 1:length(infile.m[,1])){
	num.kids <- length(which(infile.m[i,] != ""))-1
	for(j in 1:num.kids){
		el.name <- rbind(el.name,c(infile.m[i,1],infile.m[i,1+j]))
		el.type <- c(el.type,feature2.val[i])
	}
}
el.id <- matrix(0,length(el.name[,1]),length(el.name[1,]))
for(i in 1:length(v.name)){
	el.id[which(el.name == v.name[i])] <- i
}
library(igraph)
g <- graph.empty(length(v.name), directed =TRUE)
#g <- set.vertex.attribute(g, "name", value = unique.word)
g <- add.edges(g, c(t(el.id)))
plot(g, layout = layout.kamada.kawai(g))


# グラフを絵にするには、ノードの座標を決める必要がある
# layoutはその座標を決めるルールのこと
# 座標決めルールの一つkamada.kawai法を用いることとする
coords <- layout.kamada.kawai(g)

# グラフとして描く
plot(g,layout = coords)

# ノードの名前を文字列にするために別の方法をとる
# ノードに色を付けよう
v.col <- rep(1,length(coords[,1]))
plot(coords,cex = 2, pch = 19, col = v.col)

# エッジを描く
# エッジにも色を付けよう
#e.col <- rep(1,length(el.id[,1]))
# エッジの色はfeature由来の数字とする
e.col <- el.type
segments(coords[el.id[,1],1],coords[el.id[,1],2],coords[el.id[,2],1],coords[el.id[,2],2], col = e.col)

# 文字列を重ねる
par(new =TRUE)
# ノードから少しずらした位置に文字列を描かせる
coords2 <- cbind(coords[,1],coords[,2]-0.1)
text(coords2,unique.word,xlim = range(coords[,1]),ylim=range(coords[,2]))