毎日テキストマイニング

180日間、毎日テキストマイニングをするブログです

2018/8/22【60日目】NetworkXで言語を処理してみる

とりあえずの画像の出し方と、仕組み自体はわかりましたので、自然言語を使って実戦していきます。 さいきん終電帰りが多く、内容は軽めです。

実践

まずはNetworkXとMatplotlibのimportです。 あと、グラフの作成。

import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline

G = nx.Graph()

次にひとまず、日本地図でも作ろうと思いますので、日本の主要都市をリストにします。

japan = ["北海道","仙台","埼玉","東京","神奈川","石川","京都","大阪","広島","福岡","沖縄"]

それで、これをnodeに代入します。

G.add_node(japan)
TypeError: unhashable type: 'list'

エラー。リストはハッシュの型じゃないよ、というエラーですね。

ハッシュを調べて見ましたら、キーと値の組合せを 1つのかたまりとして管理する方法だそうです。キーと値といいますと、辞書型が当てはまりますので、辞書型で試してみます。

japan = {0:"北海道",1:"仙台",2:"埼玉",3:"東京",4:"神奈川",5:"石川",6:"京都",7:"大阪",8:"広島",9:"福岡",10:"沖縄"}
G.add_node(japan)
TypeError: unhashable type: 'dict'

辞書型でもダメでした。

結局ハッシュエイブルが何なのかがわかりませんでしたが、リストや辞書型を付け加えるには.add_nodes_fromメソッドを使えばいいそうです。

G.add_nodes_from(japan)

次に描写

nx.draw(G)

f:id:rimt:20180823135106p:plain

これといった特徴がないですね。 これを線で結ぶにはpathを追加すればよいそうです。

G=nx.path_graph(11)

f:id:rimt:20180823135236p:plain

とっと変な感じですが線で結べました。

テキストを表示させるのには、nx.draw_networkx_labelsメソッドを使えば良さそうです。

pos=nx.spring_layout(G)
labels=nx.draw_networkx_labels(G,pos)

f:id:rimt:20180823135359p:plain

あー、そっちなんですね。 都市の方を出力するには、引数で指定する必要があるそうです。

nx.draw_networkx_labels(G, pos, japan)

f:id:rimt:20180823135413p:plain

とりあえずテキストの出力までです。

今日の結果

今日のAKBの呟きは67件でした。

'嬉しい': 8, '楽しい': 6, 'すごい': 3, '可愛い': 3, '良い': 2, 'いい': 2, 'よろしい': 2, '面白い': 2, '軽い': 2, '甘い': 1, '短い': 1, '無い': 1, 'ったらしい': 1, '凄い': 1, 'ゆるい': 1})
'今日': 20, '公演': 19, 'お願い': 18, '位': 16, '応援': 11, '回': 9, '嬉しい': 8, '皆さん': 8, '最後': 8, 'チームフォー': 7, '笑': 7, 'さん': 7, '初日': 7, '楽しい': 6, '時': 6, 'キャンペーン': 6, '目': 6, '感謝': 6, 
'する': 40, '今日': 20, '公演': 19, 'お願い': 18, '位': 16, 'くださる': 14, '応援': 11, '頑張る': 10, '回': 9, '嬉しい': 8, '皆さん': 8, '最後': 8, 'チームフォー': 7, '笑': 7, 'さん': 7, '初日': 7, 'てる': 7, '楽しい': 6, '時': 6, 'キャンペーン': 6, '目': 6, '感謝': 6, '来る': 6, 'いる': 6,