Jupyter notebook による検索から3Dグラフ構築(2022年度)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[技術メモ]]
このサイトは[[スクレイピング・自然言語処理・3Dグラフ]]を...
#contents
* 行うこと [#vbb3086e]
-WEBサイトから文章を自動取得(スクレイピング)
-自然言語処理(形態素解析)で取得した文章を単語に分解
-単語間の共起頻度を計算し、隣接行列を作成する
-隣接行列から3Dグラフを生成する
** キーワード [#y158d4a1]
-スクレイピング
--Webサイトから何かしらのデータを自動で取ってくる技術のこと
-テキストマイニング
--文章中の単語どうしのつながりなどを分析し、有用な情報を...
- Jupyter notebook
--ブラウザ上で開発する統合開発環境
--プログラム(主にPython)を対話的に実行できる
*前準備 [#t210542d]
**(1)添付フォルダのダウンロード [#p76f8c3c]
#ref(Websc3D.zip,,添付フォルダ1)
#ref(neologd.zip,,添付フォルダ2)
フォルダ内のファイルについて
-keywords.csv
--スクレイピングする際に必要なキーワードを入れるcsvファイル
-stopwprd.txt
--文章から除外する指示語や代名詞を載せたリスト
-4つのjavascript(js)ファイル
--3Dグラフがhtml上で動作するのに必要なもの
-Server.py
--Jupyterで作成したグラフ情報をhtmlに送るためのもの
-web3D.html
--3Dグラフを描画する場所
-web_tmining3dg.jpynb
--テキストマイニングを行うJupyterファイル
-(neologd内)NEologd.20200820-u.dic
--文章を単語に分解する際に参照する辞書
**(2)pythonからjupyterインストール [#p8f1dfa4]
(anacondaを使ってる場合はanacondaから開く)
-コマンドプロンプトでpythonのパスの通りを確認
python -V
-jupyterをインストール
pip install jupyter environment_kernels
-jupyter起動
jupyter notebook
**(3)プログラム編集ページの起動 [#q1ea3350]
***1.起動後のホーム画面からDLしたフォルダをたどって、web_...
#ref(3DGraph-pre.png,,40%)~
-開くと今回実行するプログラムが出てくる
~
#ref(3DGraph-pre2.png,,40%)
-jupyterではプログラムを分割し、一行単位でプログラムの挙...
→システム開発をするときに便利
-今回はプログラムを1番~21番まで分割してあるので、順番に...
***jupyterについて [#l7f5c18a]
-Shift + Enterで実行できる
-処理中は[*]となり、終わると左上に番号が出るのでそれまで...
-プロンプトで動いているjupyterプログラムを停止or閉じると...
~
~
*プログラム実行手順 [#d2478c54]
*プログラム実行手順 [#z218aebc]
-基本はプログラムを一つずつ実行することになる[#ef1e755a]
**実行前にやること、実行時のエラー対応+プログラムの補足説...
~
***2. 1番目のプログラム実行時 [#r53ffa6b]
<!-- -importでno moduleエラーが出ると思うのでpip install...
-jupyter画面左上の+でコードを書くセルを出せるので、そこに...
-入れるもの
scipy
requests_oauthlib
------------スクレイピング用
selenium
chromedriver_binary
bs4
lxml
------------自然言語処理用
emoji
nltk
MeCab
------------3Dグラフ用
networkx
------------Server.py起動用
flask
flask_cors ->>
何かのモジュールがないと出るたびにpipで入れていく
~
***3. 3つ目のプログラムを実行する前 [#v0c92b07]
配布フォルダ中のcsvを編集する
#ref(3DGraph0.png,,40%)
--属性データ(大学生・夫婦など)、検索キーワード、地名デー...
--4行目を編集したcsvがあるディレクトリにする~
例
rd = pd.read_csv(C:/Users/iiela/Desktop/keywords.csv', e...
~
***4. 4つ目のプログラム(スクレイピング)実行時 [#ibf3ac9e]
--下のエラーが出る場合(pipのseleniumとchrome.exeのバージ...
selenium.common.exceptions.SessionNotCreatedException: M...
Current browser version is 92.0.4515.131 with binary pat...
言われているバージョンをpip install(ver.88→ver.92へ)
pip install chromedriver-binary==92.0.4515.131
おそらく赤字でエラーが出る
ERROR: Could not find a version that satisfies the requi...
ERROR: No matching distribution found for chromedriver-b...
バージョンが列記されると思うので一番近いバージョンをイン...
pip install chromedriver-binary==92.0.4515.107.0
~
--逆パターンでchrome.exe(クローム本体)のver.が(例)92.0.45...
→その場合、chrome.exeのバージョンと同じchromedriver-binar...
pip install chromedriver-binary==92.0.4515.107.0
------
◎4行目について
-csvに入れたキーワードで自動検索するソースコード~
-htmlで検索窓を実装しているタグ(qというnameタグ)を探し,...
#ref(3DGraph1.png,,40%)
~
--#2のrankinng関数を呼び出し,検索結果のwebサイトのリンク...
(→どちらもtF2Cxcというclassタグに入っているので,そこを見...
~
------
#ref(3DGraph2.png,,40%)
~
***5. 5つ目のプログラム [#r0f3d2c7]
保存したリンク先のWebサイトに飛び,文章をスクレイピングす...
→最終的に1つのテキストファイルに文章は保存される
--linkdir,txtdirを添付フォルダ内のディレクトリにする
~
**この後もファイルの保存・呼び出しで、パスを指定する箇所...
**1番下のファイル名は変えず、C:からWebsc3Dまでを自分のも...
~
**(4)形態素解析、共起頻度計算 [#t7b5c738]
形態素解析:文章を意味のある最小単位の単語(形態素)に分解...
***6. 8つ目のプログラム実行前1~ [#hf17a28b]
-Mecab(形態素分析を行うモジュール)をインストールする(リン...
https://github.com/ikegami-yukino/mecab/releases/tag/v0....
-パスを通しておく(システム環境変数の編集で変数Pathを編集...
~
#ref(3DGraph3-1.png,,60%)~
~
新規でmecab.exeがあるパスを追加する
C:\Program Files\MeCab\bin\
~
#ref(3DGraph3.png,,60%)
-mecabと打った後、「形態素解析」と打ってみる~
何か出てEOSが表示されていればOK
-pythonでもmecabを試す
--下図の4行を1行ずつ打ち込んで形態素解析結果が出ればOK
import sys
import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse ("東京特許許可局"))
#ref(3DGraph3-2.png,,40%)
~
***7. 8番目のプログラム実行前2→辞書の更新~ [#q0bc128b]
#8でやっていること:文章から不必要な文字列を除去し,Mecab...
----
-辞書について
--どのような単位で単語を区切るかなどのルールを記したもの
--辞書はなるべく頻繁に更新したほうがいい~
デフォルトの辞書(2007年版?)では「進撃の巨人」に対して「...
→辞書を日々更新することで流行語などを正確に1つの単語とし...
インストールしたMecabには古い辞書しか入っていないので、NE...
----
--C:\Program Files\MeCab\dic 内に配布フォルダ内dicの中のn...
#ref(3DGraph4.png,,40%)
--Program Files/MeCab/etcの中にあるmecabrcをメモ帳で開き...
; userdic = /home/foo/bar/user.dic
userdic = C:\Program Files\MeCab\dic\neologd\NEologd.202...
***8. mecabrcを上書き保存する際、アクセス許可がないという...
右クリックでmecabrcのプロパティを開き、Usersの「書き込み...
#ref(3DGraph4-1.png,,60%)
***12番目のプログラムの補足~ [#r0608430]
隣接行列を生成(まだ要素は0のまま)~
-3Dグラフの基となる
-行の単語から列の単語に向かって矢印が描かれ,値がエッジ(...
***13番目の補足[#tecdfe58]
共起頻度を計算する
-word_list(重複している単語リスト)を基に順序関係を見る
#ref(3DGraph5.png,,40%)
例えば、単語'あ'の次に'う'が来ているので隣接行列の'あ'行'...
(文章中の単語'あ'から'う'が1回共起されたとみなす)
***15番目の補足 [#pde39fbb]
--全ての行の共起頻度の合計を計算する
--合計値の大きい順に単語を並び替える(列に対しても同じ操作...
--上位数十件(DfNumで調整)の単語だけ切り取った隣接行列を作る
***16番目の補足 [#v604d322]
--単語の重み(正規化した共起頻度)を出す
***17番目の補足 [#bb94ca83]
--閾値以下の単語を除外して,新しい隣接行列を作る
**(5)Jupyterで3Dグラフを開く [#we4ecc57]
***18番目の補足~ [#db7f2224]
今pandasのデータフレーム型になっている隣接行列をpythonの...
→この辞書を参考に3Dグラフが作られる
--"nodes"にはノード(頂点)に入れる単語の情報が入る(csvのキ...
--"links"にはエッジ(辺)の情報(矢印の出発ノードから到着ノ...
-19番目の補足~
辞書型のデータをjson形式にする
--サーバとデータをやり取りするときはjson形式にすることが...
-20,21番目の補足~
サーバ経由でデータを送って,htmlで3Dグラフを描画する
***Internet Explorerで開かれる場合、#21_2と#21_3を使って...
BackgroundBrowser()の中にはchrome.exeが保存されているパ...
(windows画面左下でchrome.exeを検索する)
終了行:
[[技術メモ]]
このサイトは[[スクレイピング・自然言語処理・3Dグラフ]]を...
#contents
* 行うこと [#vbb3086e]
-WEBサイトから文章を自動取得(スクレイピング)
-自然言語処理(形態素解析)で取得した文章を単語に分解
-単語間の共起頻度を計算し、隣接行列を作成する
-隣接行列から3Dグラフを生成する
** キーワード [#y158d4a1]
-スクレイピング
--Webサイトから何かしらのデータを自動で取ってくる技術のこと
-テキストマイニング
--文章中の単語どうしのつながりなどを分析し、有用な情報を...
- Jupyter notebook
--ブラウザ上で開発する統合開発環境
--プログラム(主にPython)を対話的に実行できる
*前準備 [#t210542d]
**(1)添付フォルダのダウンロード [#p76f8c3c]
#ref(Websc3D.zip,,添付フォルダ1)
#ref(neologd.zip,,添付フォルダ2)
フォルダ内のファイルについて
-keywords.csv
--スクレイピングする際に必要なキーワードを入れるcsvファイル
-stopwprd.txt
--文章から除外する指示語や代名詞を載せたリスト
-4つのjavascript(js)ファイル
--3Dグラフがhtml上で動作するのに必要なもの
-Server.py
--Jupyterで作成したグラフ情報をhtmlに送るためのもの
-web3D.html
--3Dグラフを描画する場所
-web_tmining3dg.jpynb
--テキストマイニングを行うJupyterファイル
-(neologd内)NEologd.20200820-u.dic
--文章を単語に分解する際に参照する辞書
**(2)pythonからjupyterインストール [#p8f1dfa4]
(anacondaを使ってる場合はanacondaから開く)
-コマンドプロンプトでpythonのパスの通りを確認
python -V
-jupyterをインストール
pip install jupyter environment_kernels
-jupyter起動
jupyter notebook
**(3)プログラム編集ページの起動 [#q1ea3350]
***1.起動後のホーム画面からDLしたフォルダをたどって、web_...
#ref(3DGraph-pre.png,,40%)~
-開くと今回実行するプログラムが出てくる
~
#ref(3DGraph-pre2.png,,40%)
-jupyterではプログラムを分割し、一行単位でプログラムの挙...
→システム開発をするときに便利
-今回はプログラムを1番~21番まで分割してあるので、順番に...
***jupyterについて [#l7f5c18a]
-Shift + Enterで実行できる
-処理中は[*]となり、終わると左上に番号が出るのでそれまで...
-プロンプトで動いているjupyterプログラムを停止or閉じると...
~
~
*プログラム実行手順 [#d2478c54]
*プログラム実行手順 [#z218aebc]
-基本はプログラムを一つずつ実行することになる[#ef1e755a]
**実行前にやること、実行時のエラー対応+プログラムの補足説...
~
***2. 1番目のプログラム実行時 [#r53ffa6b]
<!-- -importでno moduleエラーが出ると思うのでpip install...
-jupyter画面左上の+でコードを書くセルを出せるので、そこに...
-入れるもの
scipy
requests_oauthlib
------------スクレイピング用
selenium
chromedriver_binary
bs4
lxml
------------自然言語処理用
emoji
nltk
MeCab
------------3Dグラフ用
networkx
------------Server.py起動用
flask
flask_cors ->>
何かのモジュールがないと出るたびにpipで入れていく
~
***3. 3つ目のプログラムを実行する前 [#v0c92b07]
配布フォルダ中のcsvを編集する
#ref(3DGraph0.png,,40%)
--属性データ(大学生・夫婦など)、検索キーワード、地名デー...
--4行目を編集したcsvがあるディレクトリにする~
例
rd = pd.read_csv(C:/Users/iiela/Desktop/keywords.csv', e...
~
***4. 4つ目のプログラム(スクレイピング)実行時 [#ibf3ac9e]
--下のエラーが出る場合(pipのseleniumとchrome.exeのバージ...
selenium.common.exceptions.SessionNotCreatedException: M...
Current browser version is 92.0.4515.131 with binary pat...
言われているバージョンをpip install(ver.88→ver.92へ)
pip install chromedriver-binary==92.0.4515.131
おそらく赤字でエラーが出る
ERROR: Could not find a version that satisfies the requi...
ERROR: No matching distribution found for chromedriver-b...
バージョンが列記されると思うので一番近いバージョンをイン...
pip install chromedriver-binary==92.0.4515.107.0
~
--逆パターンでchrome.exe(クローム本体)のver.が(例)92.0.45...
→その場合、chrome.exeのバージョンと同じchromedriver-binar...
pip install chromedriver-binary==92.0.4515.107.0
------
◎4行目について
-csvに入れたキーワードで自動検索するソースコード~
-htmlで検索窓を実装しているタグ(qというnameタグ)を探し,...
#ref(3DGraph1.png,,40%)
~
--#2のrankinng関数を呼び出し,検索結果のwebサイトのリンク...
(→どちらもtF2Cxcというclassタグに入っているので,そこを見...
~
------
#ref(3DGraph2.png,,40%)
~
***5. 5つ目のプログラム [#r0f3d2c7]
保存したリンク先のWebサイトに飛び,文章をスクレイピングす...
→最終的に1つのテキストファイルに文章は保存される
--linkdir,txtdirを添付フォルダ内のディレクトリにする
~
**この後もファイルの保存・呼び出しで、パスを指定する箇所...
**1番下のファイル名は変えず、C:からWebsc3Dまでを自分のも...
~
**(4)形態素解析、共起頻度計算 [#t7b5c738]
形態素解析:文章を意味のある最小単位の単語(形態素)に分解...
***6. 8つ目のプログラム実行前1~ [#hf17a28b]
-Mecab(形態素分析を行うモジュール)をインストールする(リン...
https://github.com/ikegami-yukino/mecab/releases/tag/v0....
-パスを通しておく(システム環境変数の編集で変数Pathを編集...
~
#ref(3DGraph3-1.png,,60%)~
~
新規でmecab.exeがあるパスを追加する
C:\Program Files\MeCab\bin\
~
#ref(3DGraph3.png,,60%)
-mecabと打った後、「形態素解析」と打ってみる~
何か出てEOSが表示されていればOK
-pythonでもmecabを試す
--下図の4行を1行ずつ打ち込んで形態素解析結果が出ればOK
import sys
import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse ("東京特許許可局"))
#ref(3DGraph3-2.png,,40%)
~
***7. 8番目のプログラム実行前2→辞書の更新~ [#q0bc128b]
#8でやっていること:文章から不必要な文字列を除去し,Mecab...
----
-辞書について
--どのような単位で単語を区切るかなどのルールを記したもの
--辞書はなるべく頻繁に更新したほうがいい~
デフォルトの辞書(2007年版?)では「進撃の巨人」に対して「...
→辞書を日々更新することで流行語などを正確に1つの単語とし...
インストールしたMecabには古い辞書しか入っていないので、NE...
----
--C:\Program Files\MeCab\dic 内に配布フォルダ内dicの中のn...
#ref(3DGraph4.png,,40%)
--Program Files/MeCab/etcの中にあるmecabrcをメモ帳で開き...
; userdic = /home/foo/bar/user.dic
userdic = C:\Program Files\MeCab\dic\neologd\NEologd.202...
***8. mecabrcを上書き保存する際、アクセス許可がないという...
右クリックでmecabrcのプロパティを開き、Usersの「書き込み...
#ref(3DGraph4-1.png,,60%)
***12番目のプログラムの補足~ [#r0608430]
隣接行列を生成(まだ要素は0のまま)~
-3Dグラフの基となる
-行の単語から列の単語に向かって矢印が描かれ,値がエッジ(...
***13番目の補足[#tecdfe58]
共起頻度を計算する
-word_list(重複している単語リスト)を基に順序関係を見る
#ref(3DGraph5.png,,40%)
例えば、単語'あ'の次に'う'が来ているので隣接行列の'あ'行'...
(文章中の単語'あ'から'う'が1回共起されたとみなす)
***15番目の補足 [#pde39fbb]
--全ての行の共起頻度の合計を計算する
--合計値の大きい順に単語を並び替える(列に対しても同じ操作...
--上位数十件(DfNumで調整)の単語だけ切り取った隣接行列を作る
***16番目の補足 [#v604d322]
--単語の重み(正規化した共起頻度)を出す
***17番目の補足 [#bb94ca83]
--閾値以下の単語を除外して,新しい隣接行列を作る
**(5)Jupyterで3Dグラフを開く [#we4ecc57]
***18番目の補足~ [#db7f2224]
今pandasのデータフレーム型になっている隣接行列をpythonの...
→この辞書を参考に3Dグラフが作られる
--"nodes"にはノード(頂点)に入れる単語の情報が入る(csvのキ...
--"links"にはエッジ(辺)の情報(矢印の出発ノードから到着ノ...
-19番目の補足~
辞書型のデータをjson形式にする
--サーバとデータをやり取りするときはjson形式にすることが...
-20,21番目の補足~
サーバ経由でデータを送って,htmlで3Dグラフを描画する
***Internet Explorerで開かれる場合、#21_2と#21_3を使って...
BackgroundBrowser()の中にはchrome.exeが保存されているパ...
(windows画面左下でchrome.exeを検索する)
ページ名: