タグのネットワーク

sofでグラフ(ネットワーク)を描くためのjavascriptライブラリを見つけたので調べていたら、twitterCytoscapewebを教えてもらったので、cytoscape使い的にはそっちで色々試してからCytoscapewebで描画できるようにすれば効率的であることに気づき、自分のBlogのタグネットワークを描かせてみることにした。

が、色々つまづいて結局そこまでは至らなかったという。まず、networkxはutf8の属性含んだネットワークをgmlで出力仕様とするとエラーはいた。

しょうがないのでigraphでやるかと思ったらigraphの場合はネットワークを組み立てる場合には結構めんどくさかった(隣接行列から構築する場合には楽だけど)基本的に行列用意しておいて読み込ませるのはいいんだけど、sqlalchemyからオブジェクトをひっぱりつつネットワークを組み立てていくってのはnetworkxのほうがやりやすいようだ。 致命的だったのが、mac osxだとsaveしようとするとBus errorが出てセーブできなかった。

心が折れたので、igraphのプロットのスクリーンショット。

描かせたネットワークは僕のブログのエントリに入ってたタグ名をその頻度でノードの半径が大きくなるようにして、エッジは同じエントリに出現した場合(いわゆる共起)に貼るようにしたもの。

本当はこれをベースにして共起頻度の閾値を決めたり、ノードに最後に現れた日の情報を持たせて古いタグは透明度あげたりしようと思っているので、週末にでもSIFで出力してcytoscapeで綺麗にして適当なフォーマットでエクスポートしてcytoscapewebで見れるようにしてみよう。

タグのネットワーク

ちなみにpythonでigraphをいじるのは下のチュートリアルが良かった。

日本語で書籍になっているのはこれ。

ProductName ネットワーク分析 (Rで学ぶデータサイエンス 8)
鈴木 努
共立出版 / ¥ 3,465 ( 2009-09-25 )


from database import db_session
from models import Entry, Tag
from math import log
import igraph

entries = db_session.query(Entry).filter(Entry.publish == 1).order_by(Entry.pubdate.desc()).all()

g=igraph.Graph()

all_tags = []

for entry in entries:
    tags = [tag for tag in entry.tags]
    i = 0
    for tag in tags:
        if tag.name not in all_tags:
            all_tags.append(tag.name)

taghash = dict([(tag,i) for i,tag in enumerate(all_tags)])
tag_count = [0] * len(all_tags)

g.add_vertices(len(all_tags)-1)
g.vs["name"] = all_tags

all_edges = []
for entry in entries:
    tags = [tag for tag in entry.tags]
    num_tags = len(tags)
    if num_tags > 1:
        for i in range(num_tags-1):
            itag = tags[i].name
            tag_count[taghash[itag]] += 1
            for j in range(i+1,num_tags):
                jtag = tags[j].name
                tag_count[taghash[jtag]] += 1
                edge = (taghash[itag],taghash[jtag])
                if edge not in all_edges:
                    all_edges.append(edge)
    else:
        tag_count[taghash[tags[0].name]] += 1

vsizes = [int(log(tc))*5 + 10 for tc in tag_count]

g.add_edges(all_edges)

layout = g.layout("kk")
g.vs["label"] = g.vs["name"]

igraph.plot(g,layout=layout, bbox = (800, 600), edge_color = "#777777",\
vertex_label_size=10, vertex_size=vsizes, vertex_color="#ccff33")
#g.write_gml("tag_network.gml")

マーケットインとかプロダクトアウト

最近、社内の会議とか打ち合わせをしているとげんなりする事が多い。特に多いのが、マインドがプロダクトアウトすぎるということだ。

もともと、なんでゴールから逆算して考えるってことができないのかなぁと常々不思議だったのだが、プロダクトアウトの視点しか知らないからなんだろうなぁと気づいて納得した。

そもそも研究者は、頑張って成果物を出してみて、その後それが役に立つか評価してもらおうという思考のヒトが多いが、それは新しい物をつくるからであって、me-too drugを作っている労働者には全く必要ない思考なのではないか?むしろ、マーケットインの視点ありきでおまけというかタンポポ的にプロダクトアウト色をだしていけばいいんじゃないかなと思った。

逆の立場だったら、あんたの成果物買いたいと思うの?って聞いたら、うーんとか首捻っちゃうんだもん、不思議だよなぁ。

なんかマーケティングの本とか薦めてあげないとあかんよなぁと思ったけど、自分は普通に知っているので、実際どういう本を読んで勉強してもらえばいいかわかんなくて悩んでいる。

もしドラみたいなのあればいいと思うんだけどなぁ。僕はもしドラ読んだことないんだけど、もしドラには標記の内容に触れていますか?

Flaskでカスタムフィルターを使う

FlaskでJinja2のカスタムをフィルターを使いたい。具体的にはテンプレート中で{{ URL | urlencode }}がやりたい。

urlエンコードはwerkzeug.urlsのurl_quote_plusをつかえばいい。

>>> from werkzeug.urls import url_quote_plus
>>> url_quote_plus('http://www.kzfmix.com')
'http%3A%2F%2Fwww.kzfmix.com'

Jinja2だとEnvironmentオブジェクトに新しいフィルターを突っ込めばいい

>>> from jinja2 import Environment, PackageLorder
>>> env = Environment(loader=PackageLoader('testapp', 'templates'))
>>> env.filters['urlencode'] = url_quote_plus
>>> template = env.get_template('template.txt')
>>> template.render(url='http://www.kzfmix.com')
u'URL: http%3A%2F%2Fwww.kzfmix.com'

Flaskの場合にはjinja_envってのが用意されているので、ここからfiltersに突っ込めばいいだけだった。

from flask import Flask,render_template
from werkzeug.urls import url_quote_plus

app = Flask(__name__)

app.jinja_env.filters['urlencode'] = url_quote_plus

Registering Filtersに書いてあった。

ふじ山焼き

前から気になっていたので娘の幼稚園の送り迎えの帰りに寄ってみた。

1293010611

要するにたい焼きの富士山型

1293010614

クリームとカレーはなかなかよかったけど、ピザっぽいのはポークビッツがまるごと入っていて個人的にはイマイチだった。息子はうまそうにバクバク食べてたけど。

Beauty Flow / JAZZTRONIK

最近はrate付けてないのを掘りつつ、Typhoonのためにカテゴライズしつつ聴いてる。

SAMURAIは名曲

ProductName Beauty Flow(DVD付)
Jazztronik
ポニーキャニオン / ¥ 1,980 ( 2007-03-14 )


Acid JazzとかClub Jazzを通過しておいて良かったと思う。

Rで富士山関数

富士山をプロットする関数をみかけたので、Rで描いてみた。

fx <- function(x){x^4-x^2+6}
sfx <- function(x){12/(abs(x)+1)}
gx <- function(x){1/2*cos(6*x)+7/2}

plot(gx,-2,2,xlim=c(-7,7),ylim=c(0,7),xlab="",ylab="")
par(new=T)
plot(sfx,-7,-1,xlim=c(-7,7),ylim=c(0,7),axes=F,xlab="",ylab="")
par(new=T)
plot(sfx,1,7,xlim=c(-7,7),ylim=c(0,7),axes=F,xlab="",ylab="")
par(new=T)
plot(fx,-1,1,xlim=c(-7,7),ylim=c(0,7),axes=F,xlab="",ylab="")

fujisan plot

ggplotで関数だけ描く方法わからんなぁとつぶやいたら、教えてもらったのでggplot2でも描いた。

gx <- function(x){
x[-2>x | x>2] <-NA
1/2*cos(6*x)+7/2
}

fx <- function(x){
x[x<(-1)] <- NA
x[x>1] <- NA
x^4-x^2+6
}

fx <- function(x){
x[-1<x & x<1] <-NA
12/(abs(x)+1)
}

ggplot(data.frame(x=c(-7,7),y=0), aes(x,y))+stat_function(fun=gx) \
+stat_function(fun=fx)+stat_function(fun=sx)

fujisan plot

ggplot2だと線がうまくつながらなかった。

ProductName Ggplot2: Elegant Graphics for Data Analysis (Use R!)
Hadley Wickham
Springer-Verlag New York Inc (C) / ¥ 5,259 ( 2009-08-30 )


SOMA COMPILATION 2011

最初聴いたときは、ちょっとミニマル度が高すぎてつまんないかな?と思ったけど、じわじわくる。最近は毎日かけてる。

ProductName SOMA COMPILATION 2011
オムニバス
SOMA QUALITY RECORDINGS / OCTAVE-LAB / ¥ 2,490 ( 2010-12-08 )


  • CCTV Nation (Slam Mix) / The Black Dog
  • Can You Relate (Joris Voorn Flooding the Market With Mixes) / Samuel L. Session

がお気に入り。AzureはSAMUEL L. SESSIONS REMIXのほうが良かったかな。

これはオリジナル

「即戦力は3年もたない 組織を強くする採用と人事」を読んだ

今の枠組みの中で考えたらそうなんだろうなぁ、となかなか面白く読めた。レビューにもあるようにそもそも人事制度がダメだから企業文化がダメという話はなかったのが気になったけど。

会社という入れ物に労働力を当てはめるという立場に立てば筆者の言うとおりなんだろうけど、個人のスキルを持ち寄って集まったものが会社という形態をとると考えれば主張はあちこち崩んじゃないのかなぁと思ったということです。著者が言うとおり、OJTとか会社が育てるという体力なんてなくなってきてるので、結局のところ社会全体が後者のほうに向かっていると思うんだよなぁ。その状況で今までの会社形態の中でどうにかしようというあたりに違和感を感じるけど。さらに、そのような状況で人事部に求められるものとかは著者の書いてるようなものとは違うと思うし、そもそも人事部ってそんなに重要な部署か?と。

すくなくともうちの人事部は (略)

ProductName 即戦力は3年もたない 組織を強くする採用と人事 (角川oneテーマ21)
樋口 弘和
角川書店(角川グループパブリッシング) / ¥ 760 ( 2010-12-10 )


  • 企業側としては、新卒採用した人材に関しては、数年間は「育てる意識」を持っているものですが、中途採用した人材に対しては「成果をだせるかどうか」という物差しで測る
  • 確かにそうだが、そう簡単に辞めさせることができないので、新卒も中途もそんな変わらない。中途だと、すぐに組合の役員をやるという裏技もあるし(能力なくても大丈夫)。
  • 「3年だけ使えればいい」という現実的な発想をもつ企業が増えている
  • 採用も競争の厳しい「ビジネス」
  • 向上心の強い社員を飽きさせない
  • 会社は社長以上の人材を採用できない
  • 研究所は研究所長以上の人材を採用できないとも言い換えられる
  • そもそも上司というものは部下や顧客の見方が一番ただしい
  • 「これから新たな会社で頑張ろう」と力を発揮できるのは、過去にも頑張ってきたひとだけ
  • 一つの企業に長く勤めていれば「賃金が上がり続ける」という仕組みはどこかで限界に達するのは自明
  • 私たちの賃金低下は、対ドルレートの給与を踏まえ世界ベースで見たときに、労働の付加価値とマッチする段階まで進行していく
  • これからは「資格」「ノウハウ」「経験」はあまり重要ではなくなる

お歳暮と田ぶし沼津店

お歳暮をおくるため、カネトモ沼津店へ。

ちなみに送られてきたお歳暮はカタヤマのセット(美味い。)夏にグロースヴァルトSANOのセットを送ったからだろうな。そういえば、そんなこと言ってた気がする。で、なにを返せばいいのか悩んだ。

もう一件は酒セット。(川中島の幻舞、大信州、斬九郎)斬九郎はわりとすっきりしていて、大信州はピリっと来る感じ。幻舞が好みだったかな。

1292747811

これも美味。こっちは叔母さんにあたる人なんだけど下手な日本酒おくると普通に「美味しくなかった」とか返ってくるから日本酒は選択に超困る上に、夫婦で微妙に好みが違うので。

というわけで、今回は干物をチョイスした。去年は田子までいって潮鰹買ったけどなかなか厳しい感じの味わい(ま さ に し お)だったので、チャレンジはやめて素直に干物を選択した(つまりカネトモ)。

それにしても、干物の美味しい店はどこなんだろうねぇ?誰か知っていたら教えてください(綾市は良いって聞いたけど)。GAEで干物ランクサイトでも作ればいいかな。

干物のあとは沼津のイトーヨーカドーでお買い物。昼は地下の田ぶしで。

卵かけごはんは娘がほとんど食べてしまった。

1292747816

中華そばは田ぶしのメニューの中ではあっさり目なので好み。

1292747819

あと、4階の書店で静岡のB級グルメを見つけた。伊東あたりのチャーハンとか田子の潮鰹うどんとか載っていてちょっと気になった。ぱらっと立ち読みしたら行ってみたいとこが幾つもあったので、そのうち買ってみるかなと。

ProductName B級ご当地グルメ本 (ぐるぐる文庫)

静岡新聞社 / ¥ 840 ( 2010-11 )


蔵出し味味噌麺場 千代商店

ちょっと前に行った。

蔵出し味味噌麺場 千代商店

1292717112

信州味噌味

1292717114

若干濃かったかな。