プログラマーになりたい。

プログラミングや写真や本や読書会のことや、日常のこと。

どーにかこーにか。

SQLの、?とか:name使うの、バインド値、プレースホルダというのかー。


リンク元ノード数:
sqlite> SELECT count(id) FROM papers WHERE id IN(SELECT id FROM papers GROUP BY pmid);
N=396732

…却下。


とりあえず、これ:
SELECT DISTINCT cited_pmid as pmid FROM papers INTERSECT SELECT DISTINCT pmid as pmid FROM papers;
N=198734について考えることにする


sqlite> CREATE TABLE pmids AS SELECT DISTINCT cited_pmid as pmid FROM papers INTERSECT SELECT DISTINCT pmid as pmid FROM papers;
sqlite> select count(*) from pmids;
198734


※一方、もういっかい、sqliteのDB作り直しも走らせたが……終わってない。

隣接行列じゃなくて、(from, to, value)版のpagerankを考えないと…。


pagerank:
E = e*t(e)/nにより、P = αP + (1−α)Eと修正する(nはノード数)。v=Pv。


行列にしない前提で考えるので、


繰り返しは

  • ゼロ列(outlinkが無い)の要素を見たときは:
    • レコードが存在しない
    • 1/n*Σv[i]とする
  • [x,j]レコードが存在:
    • α*Σv[i]*(score)[i,j]+(1−α)/n

Pの修正:

  1. 各ページに対して、少なくともリンク総数を求める必要がある。
    • 「SELECT count(id) FROM papers GROUP BY cited_pmid WHERE pmid==?」を=n、
    • 「UPDATE papers SET value=(求めた値1/n) WHERE pmid==?」とする
  2. 転置。
    • sqlから呼ぶときは、リンク先(pmid)基準で引いて、これをつかうのでいい。
Creative Commons License ©2007-2021 IIDA Munenori.