ずいぶん久しぶりの投稿になります。2019年10月から東京大学松尾研ディープラーニング講座 DL4US 3rdを受講し、2020年2月に無事修了しました。
東京大学松尾研 DeepLearning実践開発講座「DL4US」3rd
DL4US コンテンツ公開ページ
私はDL4USの3期生になるようです。講座の内容は上記公開コンテンツで見ることができますが、ただ、コンテンツで自習するのと講座を受講するのでは大きく異なる点があります。
・1受講者 – 1GPUサーバ、ブラウザのみで構築済みの環境が使える。
・毎週の課題提出(コンペ形式)
・SLACKでほかの受講者・TAとのコミュニケーション
・コンペ課題上位者の解法の共有
講座募集のページにも書かれていますが、
第3期では、”受講生コミュニティ” の価値最大化を目指して、1)コンペ形式の課題を通じた競争、2)受講生フォーラムでの議論・助け合い、3)講座期間中・後の交流、に重点を置いた運営を行います。
ということで、この運営が非常に効果的だったと思います。
特に毎週課題提出があることで締め切りに追われながらもスケジュール通りに講座を進めるができる、受講者同士で教えあいや励ましあい、解法の共有など、学習の継続と理解を深める工夫がありました。
正直、仕事をしながらの毎週課題をこなすのはかなりきついものがありましたが、課題コンペでの競いあいや受講者同士でコミュニケーションが取れる場があることで何とか継続できたと思っています。
DL4USの特徴にはもう一つ、最終課題があります。
最終課題
「講座で学んだ技術を利用する独自プロジェクトに取り組み、その結果をレポートせよ」
テーマは自由。データも自分で集める必要があります。
何をするか、自分の実力で何ができるか非常に悩みましたが、私は「LSTMによる電力卸価格(スポット価格)の変化点検知と予測」というテーマにしました。時系列の電力卸価格と気象データ等から変化点とその度合いを見る(さらに予測を行う)というものです。
実は自然言語処理を試してみたかったのですが、テーマも絞り切れず、一からやるには難易度が高すぎることから、やはり少しでもドメイン知識のある分野の方がやりやすいだろうという選択です(これは正解でした)。
最終課題に取り組んだのは1か月弱(一度締め切りが延びた)という短期間で、非常に苦労しましたが何とかレポートにまとめ、提出することができました。予測としての精度はあまりよくなかったものの、最終課題の評価は修了者の平均程度となり個人的には満足しています。
今まで、Andrew先生のcoursera machine learning、edx UCバークレーデータサイエンス基礎講座とデータ解析系の講座を受講しましたが、DL4USは技術の習得はもとより、継続の面でとてもよく設計された講座だと感じました。受講者の修了率は半分程度だったそうですが、オンライン講座でこの修了率は高いと思います。何より、スタッフの方の対応や受講者同士のコミュニケーションが取れる仕組みやよかったです。
修了者の懇親会はコロナの影響で延期となっていますが、開催される場合はぜひ参加したいと思います。
*実はこの後、同じく東京大学松尾研のGCIデータサイエンティスト育成講座も受講しました。こちらについてもそのうち書きます。
追記:2020年7月21日 最終課題について書きました。
LSTMによる卸電力価格(スポット価格)の変化点検知(DL4US最終課題)
https://eneprog.blogspot.com/2020/07/lstmdl4us.html
参考
東京大学松尾研 DeepLearning実践開発講座「DL4US」3rd
https://deeplearning.jp/lectures/dl4us_3rd
DL4US コンテンツ公開ページ
https://weblab.t.u-tokyo.ac.jp/dl4us/
Coursera machine learningコース
https://www.coursera.org/learn/machine-learning
coursera machine learningコース修了しました。
https://eneprog.blogspot.com/2018/06/edx-uc-2python.html
Coursera machine learning コースを始めました。edX UCバークレーFoundations of Data Scienceとの違いなど
https://eneprog.blogspot.com/2018/07/coursera-machine-learning-edx-ucmooc.html
edX UCバークレー Data Science: Computational Thinking with Python
https://www.edx.org/course/foundations-of-data-science-computational-thinking
プログラミング学習:edx UCバークレー データサイエンス基礎講座の紹介(python)
https://eneprog.blogspot.com/2018/04/edx-uc-python.html
プログラミング学習:edx UCバークレー データサイエンス基礎講座、第2弾受講中(python)
https://eneprog.blogspot.com/2018/06/edx-uc-2python.html
2020年6月13日土曜日
2018年9月27日木曜日
pythonで全角⇔半角変換する。unicodedateを使う方法とdict登録で文字種ごとに設定する方法。(文字列操作,正規化,unicodedata,ユニコード)
過去のエネルギー基本計画と最新分を比較しようとしたところ、文字の全角半角にばらつきがあることに気がつきました。
最新の第5次エネルギー基本計画では、略語、数字は全角(CO2、IoT、2030年など)、英単語・熟語、単位は半角(Energy Security、klなど)。第3次エネルギー基本計画では略語、数字(1文字の数字を除く)は半角(CO2、2002 年など)、一桁の数字は全角です(9月、9割など)。各文書内では文字種ごとに全角半角は統一されているようです。
このままでは自然言語処理をする際に別の単語と認識してしまうので統一していきます。
すべて正規化する場合(全角アルファベット・数字・記号→半角、半角カタカナ→全角)はunicodedateを使うと簡単です。
・unicodedateで全角を半角に
unicodedate.nomalizeではformを指定して文字列を正規化します。ここではNFKC(Normalization Form Compatibility Composition)を指定しています。下記に詳しい解説があります。(あまり理解できていません)
unicodedateの正規化(NFKC)を使うと、全角アルファベット・数字・カタカナは半角になります。全角記号も半角になりますが、正規化されて、違う記号になったりするので要注意です。上の例では丸囲み数字①が1に、~は˜に、¥は¥¥になってしまいました。これでは困ることがあるので、違う方法を考えます。
参考にしたのはこちら↓
目的の文字のユニコードを辞書登録して、translateで変換するという方法。
ユニコードを調べるのは下記ページが便利です。逆引きもできます。
数字、英字のユニコード範囲:
---
数字半角[0-9] 0x30~0x39
数字全角[0-9] 0xFF10~0xFF19
英字半角・大文字[A-Z] 0x41~0x5A
英字全角・大文字[A-Z] 0xFF21~0xFF3A
英字半角・小文字[a-z] 0x61~0x7A
英字全角・小文字[a-z] 0xFF41~0xFF5A
---
ユニコードは計算(足し算、引き算)ができるので、これを利用してアルファベット、数字の一覧が生成できます。
・全角アルファベット一覧の作成
大文字全角Aのユニコード[0xFF21]に26までの数字を足して、AからZまでの英字を作りました。次にこれらを辞書に登録します。
・全角半角のセットを辞書に登録
大文字(upper)、小文字(lower)、数字(number)をそれぞれ全角をキーに、半角を値にして辞書を作成し、ひとつに結合しました。変換が必要な文字種だけを辞書登録するのがポイント。辞書の結合は**を使っていますが、これができるのはPython3.5以上のようです。
あとはtranslateで文字列を変換するだけ。
・全角英字、数字を半角に変換
全角英字・数字のみが半角に変換されました(記号・半角カタカナはそのまま)。これを使うと、半角を全角に、全角数字のみを半角数字になどもできます。ただ、記号の場合はユニコードが連続していないので、目的のユニコードを探して辞書登録する必要があります。
参考:
Pythonドキュメント unicodedata — Unicode データベース
https://docs.python.jp/3/library/unicodedata.html
文字コード地獄秘話 第3話:後戻りの効かないUnicode正規化
http://tech.albert2005.co.jp/501/
うにこ~ど2
http://unicode.ninpou.jp/
pythonで半角英数字から全角英数字へ変換
http://cuio.blog2.fc2.com/blog-entry-2165.html
[Java] 全角半角変換(英数字の場合)
https://ameblo.jp/archive-redo-blog/entry-10376390355.html
Python で2つの辞書をマージした新しい辞書を作りたいとき
https://utgwkk.hateblo.jp/entry/2017/08/04/013507
平成30年 第5次エネルギー計画(最新版)
平成22年 第3次エネルギー計画
最新の第5次エネルギー基本計画では、略語、数字は全角(CO2、IoT、2030年など)、英単語・熟語、単位は半角(Energy Security、klなど)。第3次エネルギー基本計画では略語、数字(1文字の数字を除く)は半角(CO2、2002 年など)、一桁の数字は全角です(9月、9割など)。各文書内では文字種ごとに全角半角は統一されているようです。
このままでは自然言語処理をする際に別の単語と認識してしまうので統一していきます。
すべて正規化する場合(全角アルファベット・数字・記号→半角、半角カタカナ→全角)はunicodedateを使うと簡単です。
・unicodedateで全角を半角に
import unicodedata
text = u'ABCabc123カキク①(!%@#$¥~ ABCabc123カキク(!%@#$\~'
unicodedata.normalize("NFKC", text)
'ABCabc123カキクガギグ1(!%@#$¥~ ABCabc123カキクガギグ(!%@#$\\~'
unicodedate.nomalizeではformを指定して文字列を正規化します。ここではNFKC(Normalization Form Compatibility Composition)を指定しています。下記に詳しい解説があります。(あまり理解できていません)
Pythonドキュメント unicodedata — Unicode データベース
文字コード地獄秘話 第3話:後戻りの効かないUnicode正規化
unicodedateの正規化(NFKC)を使うと、全角アルファベット・数字・カタカナは半角になります。全角記号も半角になりますが、正規化されて、違う記号になったりするので要注意です。上の例では丸囲み数字①が1に、~は˜に、¥は¥¥になってしまいました。これでは困ることがあるので、違う方法を考えます。
参考にしたのはこちら↓
目的の文字のユニコードを辞書登録して、translateで変換するという方法。
ユニコードを調べるのは下記ページが便利です。逆引きもできます。
数字、英字のユニコード範囲:
---
数字半角[0-9] 0x30~0x39
数字全角[0-9] 0xFF10~0xFF19
英字半角・大文字[A-Z] 0x41~0x5A
英字全角・大文字[A-Z] 0xFF21~0xFF3A
英字半角・小文字[a-z] 0x61~0x7A
英字全角・小文字[a-z] 0xFF41~0xFF5A
---
ユニコードは計算(足し算、引き算)ができるので、これを利用してアルファベット、数字の一覧が生成できます。
・全角アルファベット一覧の作成
for ch in range(26):
print(chr(0xFF21 + ch))
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
大文字全角Aのユニコード[0xFF21]に26までの数字を足して、AからZまでの英字を作りました。次にこれらを辞書に登録します。
・全角半角のセットを辞書に登録
upper = dict((0xFF21 + ch, 0x0041 + ch) for ch in range(26))
lower = dict((0xFF41 + ch, 0x0061 + ch) for ch in range(26))
number= dict((0xFF10 + ch, 0x0030 + ch) for ch in range(10))
t = {**upper, **lower,**number}
大文字(upper)、小文字(lower)、数字(number)をそれぞれ全角をキーに、半角を値にして辞書を作成し、ひとつに結合しました。変換が必要な文字種だけを辞書登録するのがポイント。辞書の結合は**を使っていますが、これができるのはPython3.5以上のようです。
Python で2つの辞書をマージした新しい辞書を作りたいとき
あとはtranslateで文字列を変換するだけ。
・全角英字、数字を半角に変換
text = u'ABCabc123カキク①(!%@#$¥~ ABCabc123カキク(!%@#$\~' print(text.translate(t))
ABCabc123カキク①(!%@#$¥~ ABCabc123カキク(!%@#$\~
全角英字・数字のみが半角に変換されました(記号・半角カタカナはそのまま)。これを使うと、半角を全角に、全角数字のみを半角数字になどもできます。ただ、記号の場合はユニコードが連続していないので、目的のユニコードを探して辞書登録する必要があります。
参考:
Pythonドキュメント unicodedata — Unicode データベース
https://docs.python.jp/3/library/unicodedata.html
文字コード地獄秘話 第3話:後戻りの効かないUnicode正規化
http://tech.albert2005.co.jp/501/
うにこ~ど2
http://unicode.ninpou.jp/
pythonで半角英数字から全角英数字へ変換
http://cuio.blog2.fc2.com/blog-entry-2165.html
[Java] 全角半角変換(英数字の場合)
https://ameblo.jp/archive-redo-blog/entry-10376390355.html
Python で2つの辞書をマージした新しい辞書を作りたいとき
https://utgwkk.hateblo.jp/entry/2017/08/04/013507
2018年9月24日月曜日
coursera machine learningコース修了しました。(機械学習,オンライン学習)
7月から始めたcoursera machine learningコースを修了しました。
Coursera machine learning コースを始めました。edX UCバークレーFoundations of Data Scienceとの違いなど
約3ヶ月かけて期限のぎりぎりで修了です。何とか終われたというのが感想です。
コースの内容はほかの方が詳しく書かれていますが、機械学習に必要なことは一通り習ったという感じでしょうか。主な項目は単回帰、重回帰、ロジスティック回帰、ニューラルネットワーク、サポートベクターマシン(SVM)、K-means、主成分分析(PCA)、異常値検知など。そのほか、機械学習が上手くいっているかの確認方法、こんなときにはこれを使う、ビッグデータを扱う場合などのコツも教えてくれています。
カリキュラムとしては、5週目までで単回帰からニューラルネットワークまで進み、かなりのスピードと分量でついていくのがやっとという状態でした。私は特に5週目のニューラルネットワークの誤差逆伝播法(Backpropagation)が理解できず、他のHPや本を見て参考にしました(今でも理解できているとは言いがたいですが)。ニューラルネットワークまでは自分でアルゴリズムを組んで実装しますが、その後は既存のライブラリを使ったりするので比較的簡単に感じました(Octave、行列の計算に慣れたというのもある)。
プログラミング課題はOctaveを使いますが、これは特に問題ではなかったです。とてもシンプルで理解しやすい言語だと思います。
機械学習では数学の知識が必要といわれていますが、このコースでは初歩の行列の計算(足し算、引き算、内積など)は最初に解説があります。その他は数式も出てきますが、理解できなくてもいい。覚えなくてもいい(覚える必要はない)などとコメントがありました。もちろん理解できたほうがいいですが、何となく分かった程度でもついていけます。
このコースでは基本的に日本語字幕がついていますが、何項目かは日本語なしのものもありました。日本語字幕は複数人のボランティアが担当して作成されているようで、質にムラがあります。日本語では分かりにくいときがあるので、その場合は英語スクリプトを確認したほうがいいです。
全体としてとてもよくできたコースだと思いますが、なんといっても講師のAndrew先生が人気の秘密だと感じました。これは難しいから理解しなくても大丈夫、僕も最近やっと分かったところだよ。ここまで良く頑張ったね。おめでとう。シリコンバレーの多くのエンジニアより君のほうが機械学習を分かっている。などというコメントがところどころにあり、この言葉に励まされながら受講を続けました。修了して最後の先生の言葉にはちょっと感動しました。
ほぼ感想になりましたが、オンライン学習というのはリタイア率が高く、修了まで続けるのは容易ではありません。興味が続くようなコース設計はもとより、励ましというか声かけ、コーチングが重要なのだと思いました(私はAndrew先生の励ましを受けてなんとか修了できた感じです)。日本のオンライン学習でもこれらの仕組みを取り入れて、続けやすい仕組みを整えてほしいと思います。
最後に。これから受講される方へ
さまざまなブログなどで紹介されている人気コースですが、分量も多く、やさしくはないです。ただ、難易度は3週目までと6週目までが山です。あとは全体に簡単になるので、まずは3週目までやってみることをお勧めします。機械学習とは何なのかという話を平易な言葉を使って解説されていて、興味深く続けられました。なんといってもAndrew先生の言葉と笑顔がよいです。ぜひ受講してみてください。
参考:
Coursera machine learningコース
https://www.coursera.org/learn/machine-learning
Coursera machine learning コースを始めました。edX UCバークレーFoundations of Data Scienceとの違いなど
https://eneprog.blogspot.com/2018/07/coursera-machine-learning-edx-ucmooc.html
edX UCバークレー データサイエンス基礎講座
https://www.edx.org/professional-certificate/berkeleyx-foundations-of-data-science
プログラミング学習:edx UCバークレー データサイエンス基礎講座の紹介(python)
https://eneprog.blogspot.com/2018/04/edx-uc-python.html
プログラミング学習:edx UCバークレー データサイエンス基礎講座、第2弾受講中(python)
https://eneprog.blogspot.com/2018/06/edx-uc-2python.html
Coursera machine learning コースを始めました。edX UCバークレーFoundations of Data Scienceとの違いなど
約3ヶ月かけて期限のぎりぎりで修了です。何とか終われたというのが感想です。
コースの内容はほかの方が詳しく書かれていますが、機械学習に必要なことは一通り習ったという感じでしょうか。主な項目は単回帰、重回帰、ロジスティック回帰、ニューラルネットワーク、サポートベクターマシン(SVM)、K-means、主成分分析(PCA)、異常値検知など。そのほか、機械学習が上手くいっているかの確認方法、こんなときにはこれを使う、ビッグデータを扱う場合などのコツも教えてくれています。
カリキュラムとしては、5週目までで単回帰からニューラルネットワークまで進み、かなりのスピードと分量でついていくのがやっとという状態でした。私は特に5週目のニューラルネットワークの誤差逆伝播法(Backpropagation)が理解できず、他のHPや本を見て参考にしました(今でも理解できているとは言いがたいですが)。ニューラルネットワークまでは自分でアルゴリズムを組んで実装しますが、その後は既存のライブラリを使ったりするので比較的簡単に感じました(Octave、行列の計算に慣れたというのもある)。
プログラミング課題はOctaveを使いますが、これは特に問題ではなかったです。とてもシンプルで理解しやすい言語だと思います。
機械学習では数学の知識が必要といわれていますが、このコースでは初歩の行列の計算(足し算、引き算、内積など)は最初に解説があります。その他は数式も出てきますが、理解できなくてもいい。覚えなくてもいい(覚える必要はない)などとコメントがありました。もちろん理解できたほうがいいですが、何となく分かった程度でもついていけます。
このコースでは基本的に日本語字幕がついていますが、何項目かは日本語なしのものもありました。日本語字幕は複数人のボランティアが担当して作成されているようで、質にムラがあります。日本語では分かりにくいときがあるので、その場合は英語スクリプトを確認したほうがいいです。
全体としてとてもよくできたコースだと思いますが、なんといっても講師のAndrew先生が人気の秘密だと感じました。これは難しいから理解しなくても大丈夫、僕も最近やっと分かったところだよ。ここまで良く頑張ったね。おめでとう。シリコンバレーの多くのエンジニアより君のほうが機械学習を分かっている。などというコメントがところどころにあり、この言葉に励まされながら受講を続けました。修了して最後の先生の言葉にはちょっと感動しました。
ほぼ感想になりましたが、オンライン学習というのはリタイア率が高く、修了まで続けるのは容易ではありません。興味が続くようなコース設計はもとより、励ましというか声かけ、コーチングが重要なのだと思いました(私はAndrew先生の励ましを受けてなんとか修了できた感じです)。日本のオンライン学習でもこれらの仕組みを取り入れて、続けやすい仕組みを整えてほしいと思います。
最後に。これから受講される方へ
さまざまなブログなどで紹介されている人気コースですが、分量も多く、やさしくはないです。ただ、難易度は3週目までと6週目までが山です。あとは全体に簡単になるので、まずは3週目までやってみることをお勧めします。機械学習とは何なのかという話を平易な言葉を使って解説されていて、興味深く続けられました。なんといってもAndrew先生の言葉と笑顔がよいです。ぜひ受講してみてください。
参考:
Coursera machine learningコース
https://www.coursera.org/learn/machine-learning
Coursera machine learning コースを始めました。edX UCバークレーFoundations of Data Scienceとの違いなど
https://eneprog.blogspot.com/2018/07/coursera-machine-learning-edx-ucmooc.html
edX UCバークレー データサイエンス基礎講座
https://www.edx.org/professional-certificate/berkeleyx-foundations-of-data-science
プログラミング学習:edx UCバークレー データサイエンス基礎講座の紹介(python)
https://eneprog.blogspot.com/2018/04/edx-uc-python.html
プログラミング学習:edx UCバークレー データサイエンス基礎講座、第2弾受講中(python)
https://eneprog.blogspot.com/2018/06/edx-uc-2python.html
2018年9月1日土曜日
エネルギー基本計画の特徴を見てみる。その4 複合語を考慮してwordcloud(python,janome,自然言語処理)
前回までに、エネルギー基本計画から複数回出現する単語の組み合わせをgensim Phrasesで取り出し、名詞とみなせるか判定した上で複合語・新語をjanomeのユーザー辞書に登録しました。
今回は、作成したユーザー辞書を使って複合語を考慮した上でwordcloudを作ってみます。
ちなみに、複合語を考慮しない場合はこのようになりました。

エネルギー基本計画(案)の特徴を見てみる。その2 名詞でwordcloudより。 名詞(代名詞、非自立名詞を除く)のみ、連語を考慮せず。
「エネルギー」が大きく表示されていますが、「必要」「利用」「活用」などの普通に使われそうな言葉が目立ち、エネルギー基本計画としての特徴があまり出ていません専門用語として複合語・新語を登録したユーザー辞書を使うことで、どう変化するでしょうか。
・インポートとデータ読み込み
・ユーザー辞書を指定
前回作成したユーザー辞書を指定します。
・形態素解析を行い、指定した品詞のみを取り出す。
出力(一部)
形態素情報から名詞(非自立、代名詞、数を除く)のみを取り出しています。janomeを使った品詞での単語抽出についてはこちらをご覧ください。
・wordcloudの設定・表示
最大フォントを指定せず、連語を考慮せずで作成しています。wordcloudの設定についてはこちらをご覧ください。
出力
(クリックで少し大きく見られます)
「エネルギー」「技術」「開発」「事業」「取組」が大きく表示され、「再生可能エネルギー」「脱炭素化」「水素」「地域」も大きめです。よく見ると「エネルギー需給」「LPガス」「温室効果ガス」などもあります。
作成したユーザー辞書を使うことで、専門用語を考慮することができるようになり、前よりは特徴が見えてきました。
次回以降、「技術」「開発」「取組」などのこういう文書によく使われる単語を除いて、特定の文書での特徴を現す言葉のみの抽出をやってみようと思います。
参考:
資源エネルギー庁:第5次エネルギー基本計画
http://www.enecho.meti.go.jp/category/others/basic_plan/pdf/180703.pdf
Janomeドキュメント:ユーザー定義辞書を使う
http://mocobeta.github.io/janome/#id7
MeCab 単語の追加方法
http://taku910.github.io/mecab/dic.html
コード7区:gensim の Phrases の使い方。頻出する単語ペアを検出-python
http://ailaby.com/phrases/
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる http://ailaby.com/tweet_dict/
Janomeで形態素解析をやってみる。
http://eneprog.blogspot.com/2018/06/janomepython.html
エネルギー基本計画(案)の特徴を見てみる。その1 wordcloud
https://eneprog.blogspot.com/2018/06/wordcloudpythonjanome.html
エネルギー基本計画(案)の特徴を見てみる。その2 名詞でwordcloud
https://eneprog.blogspot.com/2018/06/2-pythonjanomewordcloud.html
gensim Phrasesで新語・複合語を探す(python、自然言語処理、機械学習)
https://eneprog.blogspot.com/2018/07/gensim-phrasespython.html
エネルギー基本計画から新語・複合語を探す。その1
https://eneprog.blogspot.com/2018/07/1-pythongensimphrasesjanome.html
エネルギー基本計画から新語・複合語を探す。その2 複合語を判定する
https://eneprog.blogspot.com/2018/08/2-pythonjanome.html
Janomeでユーザー辞書を使う
https://eneprog.blogspot.com/2018/08/janomepython.html
今回は、作成したユーザー辞書を使って複合語を考慮した上でwordcloudを作ってみます。
ちなみに、複合語を考慮しない場合はこのようになりました。

エネルギー基本計画(案)の特徴を見てみる。その2 名詞でwordcloudより。 名詞(代名詞、非自立名詞を除く)のみ、連語を考慮せず。
「エネルギー」が大きく表示されていますが、「必要」「利用」「活用」などの普通に使われそうな言葉が目立ち、エネルギー基本計画としての特徴があまり出ていません専門用語として複合語・新語を登録したユーザー辞書を使うことで、どう変化するでしょうか。
・インポートとデータ読み込み
from janome.tokenizer import Tokenizer
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text_file = open("enegy_plan.txt")
full_text = text_file.read()
full_text= full_text.replace("\n","")
出力(一部)はじめに2011年3月の東日本大震災及び東京電力福島第一原子力発電所事故を受けて、政府は、2014年4月、2030年を念頭に、第4次エネルギー基本計画を策定し、原発依存度の低減、化石資源依存度の低減、再生可能エネルギーの拡大を打ち出した。第4次エネルギー基本計画の策定から4年、2030年の計画の見直しのみならず、パリ協定の発効を受けた2050年を見据えた対応、より長期には化石資源枯渇に備えた超長期の対応、変化するエネルギー情勢への対応など、今一度、我が国がそのエネルギー選択を構想すべき時期に来ている。
・ユーザー辞書を指定
tokenizer = Tokenizer('energywords_dic.csv', udic_enc='cp932')
tokens = tokenizer.tokenize(full_text)
前回作成したユーザー辞書を指定します。
・形態素解析を行い、指定した品詞のみを取り出す。
word_list=[]
for token in tokens:
word = token.surface
partOfSpeech = token.part_of_speech.split(',')[0]
partOfSpeech2 = token.part_of_speech.split(',')[1]
if partOfSpeech == "名詞":
if (partOfSpeech2 != "非自立") and (partOfSpeech2 != "代名詞") and (partOfSpeech2 != "数"):
word_list.append(word)
words_wakati=" ".join(word_list)
words_wakati
出力(一部)
はじめ 年 3月 東日本大震災 東京電力 福島 原子力発電所 事故 政府 年 4月 年 念頭 次 エネルギー 基本 計画 策定 原発依存度 低減 化石資源 依存度 低減 再生可能エネルギー 拡大 次 エネルギー 基本 計画 策定 年 年 計画 見直し パリ協定 発効 年 対応 長期 化石資源 枯渇 長期 対応 変化 エネルギー情勢 対応 今 度 我が国 エネルギー 選択 構想 時期
形態素情報から名詞(非自立、代名詞、数を除く)のみを取り出しています。janomeを使った品詞での単語抽出についてはこちらをご覧ください。
・wordcloudの設定・表示
stop_words = []
fpath = "C:\Windows\Fonts\msgothic.ttc"
wordcloud = WordCloud(
font_path=fpath,
width=900, height=500, #default width=400, height=200
background_color="white", #default=”black”
stopwords=set(stop_words),
max_words=500, #default=200
# max_font_size=150, #default=None,height of the image
min_font_size=4, #default=4
collocations = False #default = True
).generate(words_wakati)
plt.figure(figsize=(15,12))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
最大フォントを指定せず、連語を考慮せずで作成しています。wordcloudの設定についてはこちらをご覧ください。
出力
(クリックで少し大きく見られます)
「エネルギー」「技術」「開発」「事業」「取組」が大きく表示され、「再生可能エネルギー」「脱炭素化」「水素」「地域」も大きめです。よく見ると「エネルギー需給」「LPガス」「温室効果ガス」などもあります。
作成したユーザー辞書を使うことで、専門用語を考慮することができるようになり、前よりは特徴が見えてきました。
次回以降、「技術」「開発」「取組」などのこういう文書によく使われる単語を除いて、特定の文書での特徴を現す言葉のみの抽出をやってみようと思います。
参考:
資源エネルギー庁:第5次エネルギー基本計画
http://www.enecho.meti.go.jp/category/others/basic_plan/pdf/180703.pdf
Janomeドキュメント:ユーザー定義辞書を使う
http://mocobeta.github.io/janome/#id7
MeCab 単語の追加方法
http://taku910.github.io/mecab/dic.html
コード7区:gensim の Phrases の使い方。頻出する単語ペアを検出-python
http://ailaby.com/phrases/
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる http://ailaby.com/tweet_dict/
Janomeで形態素解析をやってみる。
http://eneprog.blogspot.com/2018/06/janomepython.html
エネルギー基本計画(案)の特徴を見てみる。その1 wordcloud
https://eneprog.blogspot.com/2018/06/wordcloudpythonjanome.html
エネルギー基本計画(案)の特徴を見てみる。その2 名詞でwordcloud
https://eneprog.blogspot.com/2018/06/2-pythonjanomewordcloud.html
gensim Phrasesで新語・複合語を探す(python、自然言語処理、機械学習)
https://eneprog.blogspot.com/2018/07/gensim-phrasespython.html
エネルギー基本計画から新語・複合語を探す。その1
https://eneprog.blogspot.com/2018/07/1-pythongensimphrasesjanome.html
エネルギー基本計画から新語・複合語を探す。その2 複合語を判定する
https://eneprog.blogspot.com/2018/08/2-pythonjanome.html
Janomeでユーザー辞書を使う
https://eneprog.blogspot.com/2018/08/janomepython.html
2018年8月21日火曜日
Janomeのユーザー辞書を作る(python,自然言語処理,エネルギー基本計画)
前回の続きです。前回はエネルギー基本計画からgensim Phrasesを使って、複数回出現する単語の組み合わせを複合語候補として取り出し、名詞とみなせるかどうか判定しリストを作りました。
今回は、このリストを新語としてjanomeのユーザー辞書に登録します。 下記の記事を参考にしました。
Janomeドキュメント:ユーザー定義辞書を使う
http://mocobeta.github.io/janome/#id7
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる
http://ailaby.com/tweet_dict/
・インポートとデータの確認
・データ抽出
判定が"True"、回数が6以上のものを抽出。
このデータの"単語"列をユーザー辞書に登録します。janomeのユーザー辞書はMeCab 辞書と同じです。ユーザー辞書のフォーマットについては下記を参照ください。
MeCab 単語の追加方法
http://taku910.github.io/mecab/dic.html
ユーザー辞書はカンマ区切りCSVファイルで、「表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音」という形式です。
今回は、左文脈ID、右文脈IDを-1、コストを1000に、品詞、品詞細分類1を名詞、一般名詞に固定し、そのほかは"*"にします。
・ユーザー辞書のフォーマットを作る
フォーマットの表層形以外をカンマ区切りでparamater列に格納した後、カンマで列を分割、原形(列名"9")に"単語"列をコピーしています。
これでユーザー辞書のフォーマットが完成。
・ユーザー辞書をCSVで保存
できたユーザー辞書をCSVで保存します。この時、列名、インデックスともにFalseとし、保存しないようにます。
・ユーザー辞書を使う
janomeでユーザー辞書を使ってみます。エネルギー基本計画より、下記の文章を分かち書きします。
・ユーザー辞書なし
・ユーザー辞書あり
ユーザー辞書の設定は、Tokenizerの初期化時にユーザー辞書のCSVファイル名とエンコードを指定するだけ。
ユーザー辞書ありでは、電源構成、依存度、安定的、ベースロード電源、国際的、安定供給、調整力、原子力発電所、需要動向、供給構造、効率化が一つの単語となりました。
一方、予備力、電力需要、ピークカットは「予備 力」「電力 需要」「ピーク カット」と分かれたままです。これはエネルギー基本計画で6回以上出現したものを複合語候補として抽出したためです。複数の資料から辞書に載っていない組み合わせを抽出するようにすれば、新語の検出精度が上がりそうです。
参考:
資源エネルギー庁:第5次エネルギー基本計画
http://www.enecho.meti.go.jp/category/others/basic_plan/pdf/180703.pdf
Janomeドキュメント:ユーザー定義辞書を使う
http://mocobeta.github.io/janome/#id7
MeCab 単語の追加方法
http://taku910.github.io/mecab/dic.html
コード7区:gensim の Phrases の使い方。頻出する単語ペアを検出-python
http://ailaby.com/phrases/
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる http://ailaby.com/tweet_dict/
Janomeで形態素解析をやってみる。
http://eneprog.blogspot.com/2018/06/janomepython.html
janome Analayzerで複合語(複合名詞)を考慮して形態素解析を行う。
http://eneprog.blogspot.com/2018/07/janome-analayzerpython.html
gensim Phrasesで新語・複合語を探す(python、自然言語処理、機械学習)
https://eneprog.blogspot.com/2018/07/gensim-phrasespython.html
エネルギー基本計画から新語・複合語を探す。その1
https://eneprog.blogspot.com/2018/07/1-pythongensimphrasesjanome.html
エネルギー基本計画から新語・複合語を探す。その2 複合語を判定する(python,自然言語処理,janome)
https://eneprog.blogspot.com/2018/08/2-pythonjanome.html
今回は、このリストを新語としてjanomeのユーザー辞書に登録します。 下記の記事を参考にしました。
Janomeドキュメント:ユーザー定義辞書を使う
http://mocobeta.github.io/janome/#id7
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる
http://ailaby.com/tweet_dict/
・インポートとデータの確認
from janome.tokenizer import Tokenizer import pandas as pd words_judge
| 複合語候補 | 回数 | 単語 | 判定 | |
|---|---|---|---|---|
| 0 | 再生_可能_エネルギー | 171 | 再生可能エネルギー | True |
| 1 | する_こと | 154 | すること | False |
| 2 | 。_\r\r\r\r\n | 135 | ||
| 3 | し_た | 128 | し | |
| 4 | 的_な | 118 | 的 | |
| 5 | について_は | 91 | について | |
| 6 | 事業_者 | 78 | 事業者 | True |
| 7 | する_ため | 72 | するため | False |
| 8 | 脱_炭素_化 | 65 | 脱炭素化 | True |
| 9 | し_て | 65 | し |
・データ抽出
words_dic=words_judge[(words_judge["判定"]==True) & (words_judge["回数"] >= 6)] words_dic
判定が"True"、回数が6以上のものを抽出。
| 複合語候補 | 回数 | 単語 | 判定 | |
|---|---|---|---|---|
| 0 | 再生_可能_エネルギー | 171 | 再生可能エネルギー | True |
| 6 | 事業_者 | 78 | 事業者 | True |
| 8 | 脱_炭素_化 | 65 | 脱炭素化 | True |
| 14 | 技術_開発 | 56 | 技術開発 | True |
| 15 | 可能_性 | 55 | 可能性 | True |
| 27 | 安定_供給 | 38 | 安定供給 | True |
このデータの"単語"列をユーザー辞書に登録します。janomeのユーザー辞書はMeCab 辞書と同じです。ユーザー辞書のフォーマットについては下記を参照ください。
MeCab 単語の追加方法
http://taku910.github.io/mecab/dic.html
ユーザー辞書はカンマ区切りCSVファイルで、「表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音」という形式です。
今回は、左文脈ID、右文脈IDを-1、コストを1000に、品詞、品詞細分類1を名詞、一般名詞に固定し、そのほかは"*"にします。
・ユーザー辞書のフォーマットを作る
words_dic["paramater"]="-1,-1,1000,名詞,一般,*,*,*,*,%s,*,*"
words_dic=pd.concat(
[words_dic['単語'],words_dic['paramater']
.str.split(',', expand=True)], axis=1)
words_dic[9]=words_dic["単語"]
words_dic
フォーマットの表層形以外をカンマ区切りでparamater列に格納した後、カンマで列を分割、原形(列名"9")に"単語"列をコピーしています。
| 単語 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 再生可能エネルギー | -1 | -1 | 1000 | 名詞 | 一般 | * | * | * | * | 再生可能エネルギー | * | * |
| 6 | 事業者 | -1 | -1 | 1000 | 名詞 | 一般 | * | * | * | * | 事業者 | * | * |
| 8 | 脱炭素化 | -1 | -1 | 1000 | 名詞 | 一般 | * | * | * | * | 脱炭素化 | * | * |
| 14 | 技術開発 | -1 | -1 | 1000 | 名詞 | 一般 | * | * | * | * | 技術開発 | * | * |
| 15 | 可能性 | -1 | -1 | 1000 | 名詞 | 一般 | * | * | * | * | 可能性 | * | * |
これでユーザー辞書のフォーマットが完成。
・ユーザー辞書をCSVで保存
words_dic.to_csv("energywords_dic.csv", sep=",",index=False,header=False,encoding='cp932')
できたユーザー辞書をCSVで保存します。この時、列名、インデックスともにFalseとし、保存しないようにます。
・ユーザー辞書を使う
janomeでユーザー辞書を使ってみます。エネルギー基本計画より、下記の文章を分かち書きします。
電源構成は、特定の電源や燃料源への依存度が過度に高まらないようにしつつ、低廉で安定的なベースロード電源を国際的にも遜色のない水準で確保すること、安定供給に必要な予備力、調整力を堅持すること、環境への適合を図ることが重要であり、バランスのとれた電源構成の実現に注力していく必要がある。一方、東京電力福島第一原子力発電所事故後、電力需要に変化が見られるようになっている。こうした需要動向の変化を踏まえつつ、節電や、空調エネルギーのピークカットなどピーク対策の取組を進めることで電力の負荷平準化を図り、供給構造の効率化を進めていくことが必要である。
text="電源構成は、特定の電源や燃料源への依存度が過度に高まらないようにしつつ、低廉で安定的なベースロード電源を国際的にも遜色のない水準で確保すること、安定供給に必要な予備力、調整力を堅持すること、環境への適合を図ることが重要であり、バランスのとれた電源構成の実現に注力していく必要がある。一方、東京電力福島第一原子力発電所事故後、電力需要に変化が見られるようになっている。こうした需要動向の変化を踏まえつつ、節電や、空調エネルギーのピークカットなどピーク対策の取組を進めることで電力の負荷平準化を図り、供給構造の効率化を進めていくことが必要である。"
・ユーザー辞書なし
tokenizer = Tokenizer()
words=[]
tokens = tokenizer.tokenize(text)
for word in tokens:
words.append(word.surface)
print(" ".join(words))
電源 構成 は 、 特定 の 電源 や 燃料 源 へ の 依存 度 が 過度 に 高まら ない よう に し つつ 、 低廉 で 安定 的 な ベース ロード 電源 を 国際 的 に も 遜色 の ない 水準 で 確保 する こと 、 安定 供給 に 必要 な 予備 力 、 調整 力 を 堅持 する こと 、 環境 へ の 適合 を 図る こと が 重要 で あり 、 バランス の とれ た 電源 構成 の 実現 に 注力 し て いく 必要 が ある 。 一方 、 東京電力 福島 第 一 原子力 発電 所 事故 後 、 電力 需要 に 変化 が 見 られる よう に なっ て いる 。 こうした 需要 動向 の 変化 を 踏まえ つつ 、 節電 や 、 空調 エネルギー の ピーク カット など ピーク 対策 の 取組 を 進める こと で 電力 の 負荷 平準 化 を 図り 、 供給 構造 の 効率 化 を 進め て いく こと が 必要 で ある 。
・ユーザー辞書あり
tokenizer = Tokenizer('energywords_dic.csv', udic_enc='cp932')
words=[]
tokens = tokenizer.tokenize(text)
for word in tokens:
words.append(word.surface)
print(" ".join(words))
電源構成 は 、 特定 の 電源 や 燃料 源 へ の 依存度 が 過度 に 高まら ない よう に し つつ 、 低廉 で 安定的 な ベースロード電源 を 国際的 に も 遜色 の ない 水準 で 確保 する こと 、 安定供給 に 必要 な 予備 力 、 調整力 を 堅持 する こと 、 環境 へ の 適合 を 図る こと が 重要 で あり 、 バランス の とれ た 電源構成 の 実現 に 注力 し て いく 必要 が ある 。 一方 、 東京電力 福島 第 一 原子力発電所 事故 後 、 電力 需要 に 変化 が 見 られる よう に なっ て いる 。 こうした 需要動向 の 変化 を 踏まえ つつ 、 節電 や 、 空調 エネルギー の ピーク カット など ピーク 対策 の 取組 を 進める こと で 電力 の 負荷 平準 化 を 図り 、 供給構造 の 効率化 を 進め て いく こと が 必要 で ある 。
ユーザー辞書の設定は、Tokenizerの初期化時にユーザー辞書のCSVファイル名とエンコードを指定するだけ。
ユーザー辞書ありでは、電源構成、依存度、安定的、ベースロード電源、国際的、安定供給、調整力、原子力発電所、需要動向、供給構造、効率化が一つの単語となりました。
一方、予備力、電力需要、ピークカットは「予備 力」「電力 需要」「ピーク カット」と分かれたままです。これはエネルギー基本計画で6回以上出現したものを複合語候補として抽出したためです。複数の資料から辞書に載っていない組み合わせを抽出するようにすれば、新語の検出精度が上がりそうです。
参考:
資源エネルギー庁:第5次エネルギー基本計画
http://www.enecho.meti.go.jp/category/others/basic_plan/pdf/180703.pdf
Janomeドキュメント:ユーザー定義辞書を使う
http://mocobeta.github.io/janome/#id7
MeCab 単語の追加方法
http://taku910.github.io/mecab/dic.html
コード7区:gensim の Phrases の使い方。頻出する単語ペアを検出-python
http://ailaby.com/phrases/
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる http://ailaby.com/tweet_dict/
Janomeで形態素解析をやってみる。
http://eneprog.blogspot.com/2018/06/janomepython.html
janome Analayzerで複合語(複合名詞)を考慮して形態素解析を行う。
http://eneprog.blogspot.com/2018/07/janome-analayzerpython.html
gensim Phrasesで新語・複合語を探す(python、自然言語処理、機械学習)
https://eneprog.blogspot.com/2018/07/gensim-phrasespython.html
エネルギー基本計画から新語・複合語を探す。その1
https://eneprog.blogspot.com/2018/07/1-pythongensimphrasesjanome.html
エネルギー基本計画から新語・複合語を探す。その2 複合語を判定する(python,自然言語処理,janome)
https://eneprog.blogspot.com/2018/08/2-pythonjanome.html
2018年8月7日火曜日
エネルギー基本計画から新語・複合語を探す。その2 複合語を判定する(python,自然言語処理,janome)
前回、gensim phrasesを使って、エネルギー基本計画の文章から複数回出現した単語の組み合わせを複合語候補として取り出しました。
今回はここから複合語(名詞)と見なせるかどうか判定し、新語(エネルギー用語)として抽出します。下記のブログを参考にしました。
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる
http://ailaby.com/tweet_dict/
・インポート、janome Tokenizer初期化
・データ確認(一部)
助詞や句読点などが含まれているものがあります。これらを下記のように判定し、名詞と見なせるものを抽出しました。
最後に助詞、助動詞がつくものとは、「安定_的_な」のように、助詞、助動詞も含めて複合語候補となっているものです。この場合は最後の「な」を削除し「安定_的」で判定に回します。
その際、複合語ではなく1単語となってしまった場合、判定せずに空白を返すことにします(「重要_な」で「な」を削除すると「重要」の1単語となり複合語ではなくなる)。
・判定関数
試行錯誤の結果こうなりました。戻り値はpandasのSeriesで、単語と判定結果(True または False)を返します。
・データフレームの列に関数適用
applyで"複合語候補"列にjudge関数を適用し、戻り値2つをpd.concatで新しい列に格納します。複数の戻り値でそれぞれ新しい列を作る方法が分からず苦労しました。。。
・出力(一部)
「再生可能エネルギー」「事業者」「脱炭素化」はTrue、「すること」「するため」はFalseと判定されました。「して」「した」など最後の助詞、助動詞を取り除くと1単語になるものは空白としています。
・重複除去
複合語候補、最後の助詞、助動詞を取り除く処理により、重複が出てくるためこれをgroupbyで取り除き、sum()で回数を足し合わせました。
・抽出
判定がTrue、出現回数が6回以上のものを抽出します。これらを新語・複合語とします。
・出力
計263語が複合語として抽出されました。
積極的、国際的など一般的な言葉も含まれていますが、再生可能エネルギー、脱炭素化、FIT制度、エネルギー安全保障、シェール革命、自家消費などエネルギー用語(新語?)と言えそうな言葉が多く見つかりました。
参考:
資源エネルギー庁:第5次エネルギー基本計画 http://www.enecho.meti.go.jp/category/others/basic_plan/pdf/180703.pdf
gensim Phrase
https://radimrehurek.com/gensim/models/phrases.html
gensim Phrase
https://radimrehurek.com/gensim/models/phrases.html
コード7区:gensim の Phrases の使い方。頻出する単語ペアを検出-python
http://ailaby.com/phrases/
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる http://ailaby.com/tweet_dict/
Janomeで形態素解析をやってみる。
http://eneprog.blogspot.com/2018/06/janomepython.html
janome Analayzerで複合語(複合名詞)を考慮して形態素解析を行う。
http://eneprog.blogspot.com/2018/07/janome-analayzerpython.html
gensim Phrasesで新語・複合語を探す(python、自然言語処理、機械学習)
https://eneprog.blogspot.com/2018/07/gensim-phrasespython.html
エネルギー基本計画から新語・複合語を探す。その1
https://eneprog.blogspot.com/2018/07/1-pythongensimphrasesjanome.html
今回はここから複合語(名詞)と見なせるかどうか判定し、新語(エネルギー用語)として抽出します。下記のブログを参考にしました。
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる
http://ailaby.com/tweet_dict/
・インポート、janome Tokenizer初期化
from janome.tokenizer import Tokenizer import pandas as pd #from tqdm import tqdm import re tokenizer = Tokenizer()
・データ確認(一部)
words_df
| 複合語候補 | 回数 | |
|---|---|---|
| 0 | 再生_可能_エネルギー | 171 |
| 1 | する_こと | 154 |
| 2 | 。_\n | 135 |
| 3 | し_た | 128 |
| 4 | 的_な | 118 |
| 5 | について_は | 91 |
| 6 | 事業_者 | 78 |
| 7 | する_ため | 72 |
| 8 | 脱_炭素_化 | 65 |
| 9 | し_て | 65 |
| 10 | し_て_いく | 65 |
助詞や句読点などが含まれているものがあります。これらを下記のように判定し、名詞と見なせるものを抽出しました。
- 名詞+名詞=名詞
- 接頭詞+名詞=名詞
- 最後に助詞、助動詞がつくものはこれらを削除して判定
- 空白文字が含まれているものは除外
- 最初に「年」または「年度」とつくものは除外
- 数や助数詞が含まれているものは除外
最後に助詞、助動詞がつくものとは、「安定_的_な」のように、助詞、助動詞も含めて複合語候補となっているものです。この場合は最後の「な」を削除し「安定_的」で判定に回します。
その際、複合語ではなく1単語となってしまった場合、判定せずに空白を返すことにします(「重要_な」で「な」を削除すると「重要」の1単語となり複合語ではなくなる)。
・判定関数
def judge(word):
word_list=word.split("_")
word=word.replace("_","")
tokens = tokenizer.tokenize(word)
if len(tokens)==1 or re.search("\s+", word): #空白文字が含まれていたら除外
return pd.Series(["",""])
if word_list[0]=="年" or word_list[0]=="年度": #最初が「年」または「年度」であれば除外
return pd.Series(["",""])
part0 = tokens[-1].part_of_speech.split(',')[0]
if part0 == "助詞" or part0=="助動詞": #最後が助詞または助動詞であればその単語を削除
del tokens[-1]
del word_list[-1]
word="".join(word_list)
if len(tokens)==1:
return pd.Series([word,""])
for num, token in enumerate(tokens):
surFace = token.surface
part0 = token.part_of_speech.split(',')[0]
part1 = token.part_of_speech.split(',')[1]
part2 = token.part_of_speech.split(',')[2]
reading = token.reading
baseForm = token.base_form
inflForm = token.infl_form
if num==0:
if part0 ==u"接頭詞": #最初が接頭詞であれば、次の単語へ
continue
if part0 != u'名詞':
return pd.Series([word,False])
elif part0 =="名詞" and (part1 == u'数' or part2=="助数詞"): #数、助数詞が含まれていれば除外
return pd.Series([word,False])
else:
continue
return pd.Series([word,True])
試行錯誤の結果こうなりました。戻り値はpandasのSeriesで、単語と判定結果(True または False)を返します。
・データフレームの列に関数適用
words_df=(
pd.concat([words_df, words_df["複合語候補"].apply( judge )], axis=1 )
.rename(columns={0:"単語",1:"判定"}))
applyで"複合語候補"列にjudge関数を適用し、戻り値2つをpd.concatで新しい列に格納します。複数の戻り値でそれぞれ新しい列を作る方法が分からず苦労しました。。。
・出力(一部)
| 複合語候補 | 回数 | 単語 | 判定 | |
|---|---|---|---|---|
| 0 | 再生_可能_エネルギー | 171 | 再生可能エネルギー | True |
| 1 | する_こと | 154 | すること | False |
| 2 | 。_\r\r\r\r\n | 135 | ||
| 3 | し_た | 128 | し | |
| 4 | 的_な | 118 | 的 | |
| 5 | について_は | 91 | について | |
| 6 | 事業_者 | 78 | 事業者 | True |
| 7 | する_ため | 72 | するため | False |
| 8 | 脱_炭素_化 | 65 | 脱炭素化 | True |
| 9 | し_て | 65 | し |
「再生可能エネルギー」「事業者」「脱炭素化」はTrue、「すること」「するため」はFalseと判定されました。「して」「した」など最後の助詞、助動詞を取り除くと1単語になるものは空白としています。
・重複除去
words_judge=(words_df.groupby(["単語","判定"])["回数"].sum()
.reset_index()
.rename(columns={0:"回数"})
.sort_values(by="回数", ascending=False))
複合語候補、最後の助詞、助動詞を取り除く処理により、重複が出てくるためこれをgroupbyで取り除き、sum()で回数を足し合わせました。
・抽出
words_judge[(words_judge["判定"]==True) & (words_judge["回数"] >= 6)]
判定がTrue、出現回数が6回以上のものを抽出します。これらを新語・複合語とします。
・出力
| 単語 | 判定 | 回数 | |
|---|---|---|---|
| 250 | 再生可能エネルギー | True | 171 |
| 215 | 事業者 | True | 78 |
| 503 | 脱炭素化 | True | 77 |
| 384 | 技術開発 | True | 56 |
| 291 | 可能性 | True | 55 |
| 162 | エネルギー源 | True | 45 |
| 480 | 積極的 | True | 41 |
| 348 | 安定供給 | True | 38 |
| 581 | 需要家 | True | 38 |
| 266 | 効率的 | True | 37 |
| 351 | 安定的 | True | 36 |
| 474 | 研究開発 | True | 35 |
| 172 | エネルギー需給構造 | True | 35 |
| 366 | 廃炉 | True | 34 |
| 269 | 化石燃料 | True | 32 |
| 338 | 天然ガス | True | 31 |
| 345 | 安全性 | True | 31 |
| 666 | LPガス | True | 29 |
| 385 | 技術革新 | True | 28 |
| 313 | 国際的 | True | 28 |
| 228 | 使用済燃料 | True | 28 |
| 395 | 新興国 | True | 27 |
| 153 | エネルギー供給 | True | 26 |
| 447 | 燃料電池 | True | 26 |
| 264 | 効率化 | True | 25 |
| 440 | 温室効果ガス | True | 25 |
| 208 | 中長期的 | True | 24 |
| 524 | 調整力 | True | 24 |
| 257 | 分散型エネルギーシステム | True | 24 |
| 169 | エネルギー選択 | True | 23 |
| 665 | FIT制度 | True | 23 |
| 160 | エネルギー消費 | True | 22 |
| 573 | 電力システム改革 | True | 22 |
| 332 | 多様化 | True | 22 |
| 173 | エネルギー需要 | True | 22 |
| 359 | 導入拡大 | True | 21 |
| 336 | 大規模 | True | 21 |
| 484 | 競争力 | True | 21 |
| 471 | 石油製品 | True | 21 |
| 187 | パリ協定 | True | 21 |
| 165 | エネルギー転換 | True | 20 |
| 157 | エネルギー安全保障 | True | 20 |
| 177 | サプライチェーン | True | 20 |
| 225 | 低炭素化 | True | 20 |
| 159 | エネルギー政策 | True | 20 |
| 499 | 総合的 | True | 20 |
| 430 | 活性化 | True | 19 |
| 595 | 高度化 | True | 19 |
| 389 | 排出量 | True | 19 |
| 244 | 具体的 | True | 19 |
| 383 | 戦略的 | True | 18 |
| 255 | 分散型 | True | 18 |
| 401 | 最終処分 | True | 17 |
| 152 | エネルギーミックス | True | 17 |
| 155 | エネルギー分野 | True | 17 |
| 164 | エネルギー産業 | True | 17 |
| 230 | 供給構造 | True | 17 |
| 327 | 基本計画 | True | 16 |
| 278 | 原子力発電所 | True | 16 |
| 369 | 強靱化 | True | 16 |
| 465 | 省エネ法 | True | 16 |
| 567 | 長期的 | True | 16 |
| 592 | 高効率 | True | 15 |
| 367 | 建築物 | True | 15 |
| 508 | 自由化 | True | 15 |
| 456 | 発電コスト | True | 15 |
| 176 | コスト低減 | True | 14 |
| 265 | 効率性 | True | 14 |
| 224 | 低炭素 | True | 14 |
| 445 | 災害時 | True | 14 |
| 185 | バイオマス | True | 14 |
| 270 | 化石資源 | True | 14 |
| 528 | 資源国 | True | 14 |
| 495 | 継続的 | True | 14 |
| 492 | 経済性 | True | 14 |
| 324 | 地球温暖化対策 | True | 14 |
| 505 | 脱炭素化エネルギーシステム | True | 14 |
| 312 | 国際展開 | True | 14 |
| 203 | 世界全体 | True | 13 |
| 243 | 具体化 | True | 13 |
| 569 | 関係者 | True | 13 |
| 241 | 先進国 | True | 13 |
| 386 | 抜本的 | True | 13 |
| 388 | 排出削減 | True | 13 |
| 274 | 原子力事業者 | True | 13 |
| 263 | 効果的 | True | 13 |
| 150 | エネルギーシステム | True | 13 |
| 444 | 火力発電 | True | 13 |
| 449 | 環境整備 | True | 13 |
| 171 | エネルギー需給 | True | 12 |
| 232 | 依存度 | True | 12 |
| 158 | エネルギー情勢 | True | 12 |
| 510 | 自給率 | True | 12 |
| 397 | 方向性 | True | 12 |
| 229 | 供給体制 | True | 12 |
| 586 | 風力発電 | True | 12 |
| 182 | トップランナー制度 | True | 12 |
| 408 | 東日本大震災 | True | 12 |
| 337 | 大量導入 | True | 12 |
| 292 | 各エネルギー源 | True | 12 |
| 566 | 鉱物資源 | True | 11 |
| 247 | 再処理 | True | 11 |
| 170 | エネルギー関連 | True | 11 |
| 396 | 新規参入 | True | 11 |
| 398 | 日米 | True | 11 |
| 493 | 経済成長 | True | 11 |
| 470 | 石油産業 | True | 11 |
| 393 | 放射性廃棄物 | True | 11 |
| 582 | 需要量 | True | 11 |
| 523 | 課題解決 | True | 11 |
| 463 | 相手国 | True | 11 |
| 387 | 持続可能 | True | 11 |
| 457 | 発電効率 | True | 11 |
| 267 | 包括的 | True | 10 |
| 557 | 運輸部門 | True | 10 |
| 565 | 金属鉱物 | True | 10 |
| 277 | 原子力発電 | True | 10 |
| 321 | 地熱発電 | True | 10 |
| 308 | 国民生活 | True | 10 |
| 574 | 電気料金 | True | 10 |
| 319 | 地政学的リスク | True | 10 |
| 482 | 立地地域 | True | 10 |
| 441 | 温室効果ガス排出 | True | 10 |
| 509 | 自立化 | True | 10 |
| 591 | 高レベル放射性廃棄物 | True | 10 |
| 202 | 不確実性 | True | 10 |
| 585 | 顕在化 | True | 10 |
| 530 | 資源開発 | True | 10 |
| 576 | 電源構成 | True | 10 |
| 489 | 系統制約 | True | 10 |
| 584 | 革新的 | True | 10 |
| 469 | 石油化学 | True | 9 |
| 473 | 石炭火力発電 | True | 9 |
| 333 | 多角化 | True | 9 |
| 459 | 発電設備 | True | 9 |
| 496 | 緊急時 | True | 9 |
| 506 | 自主開発 | True | 9 |
| 450 | 環境負荷 | True | 9 |
| 405 | 本格化 | True | 9 |
| 350 | 安定性 | True | 9 |
| 402 | 有効利用 | True | 9 |
| 403 | 有効活用 | True | 9 |
| 349 | 安定化 | True | 9 |
| 339 | 太陽光発電 | True | 9 |
| 411 | 柔軟性 | True | 9 |
| 415 | 核燃料サイクル | True | 9 |
| 531 | 賦存 | True | 9 |
| 306 | 国家備蓄 | True | 9 |
| 189 | ベースロード電源 | True | 9 |
| 214 | 事業環境 | True | 9 |
| 273 | 危機時 | True | 9 |
| 259 | 利活用 | True | 9 |
| 564 | 野心的 | True | 9 |
| 572 | 電力システム | True | 9 |
| 204 | 世界的 | True | 9 |
| 498 | 総合エネルギー企業 | True | 9 |
| 309 | 国民負担 | True | 9 |
| 578 | 需給調整 | True | 9 |
| 234 | 信頼性 | True | 9 |
| 311 | 国際協力 | True | 9 |
| 223 | 低コスト化 | True | 9 |
| 222 | 低コスト | True | 8 |
| 211 | 主要国 | True | 8 |
| 526 | 貯蔵施設 | True | 8 |
| 210 | 主力電源化 | True | 8 |
| 412 | 核セキュリティ | True | 8 |
| 423 | 気候変動 | True | 8 |
| 316 | 国際連系線 | True | 8 |
| 494 | 経済的 | True | 8 |
| 479 | 科学的レビューメカニズム | True | 8 |
| 476 | 社会的 | True | 8 |
| 154 | エネルギー供給構造 | True | 8 |
| 468 | 石油コンビナート | True | 8 |
| 462 | 相対的 | True | 8 |
| 453 | 産油国 | True | 8 |
| 180 | デジタル化 | True | 8 |
| 448 | 環境変化 | True | 8 |
| 514 | 製油所 | True | 8 |
| 437 | 消費者 | True | 8 |
| 191 | ロードマップ | True | 8 |
| 392 | 支援策 | True | 8 |
| 251 | 再稼働 | True | 8 |
| 342 | 委員会 | True | 8 |
| 536 | 送配電ネットワーク | True | 8 |
| 379 | 情勢変化 | True | 8 |
| 279 | 原子力規制委員会 | True | 8 |
| 538 | 送電網 | True | 8 |
| 315 | 国際競争力 | True | 8 |
| 534 | 輸送システム | True | 8 |
| 483 | 立地自治体 | True | 7 |
| 179 | システム改革 | True | 7 |
| 186 | バイオ燃料 | True | 7 |
| 515 | 複線シナリオ | True | 7 |
| 570 | 関係自治体 | True | 7 |
| 478 | 科学的 | True | 7 |
| 464 | 省エネルギー対策 | True | 7 |
| 161 | エネルギー消費効率 | True | 7 |
| 174 | ガスシステム改革 | True | 7 |
| 537 | 送配電網 | True | 7 |
| 254 | 分散化 | True | 7 |
| 501 | 脆弱性 | True | 7 |
| 314 | 国際社会 | True | 7 |
| 380 | 情報共有 | True | 7 |
| 356 | 実用化 | True | 7 |
| 220 | 人材育成 | True | 7 |
| 248 | 再構築 | True | 7 |
| 231 | 供給網 | True | 7 |
| 246 | 円滑化 | True | 7 |
| 260 | 制度改革 | True | 7 |
| 593 | 高効率化 | True | 7 |
| 364 | 廃棄物 | True | 7 |
| 357 | 家庭用 | True | 7 |
| 305 | 国内需要 | True | 7 |
| 535 | 送配電 | True | 7 |
| 424 | 水素ステーション | True | 7 |
| 365 | 廃止措置 | True | 7 |
| 542 | 連系 | True | 7 |
| 568 | 関係省庁 | True | 6 |
| 579 | 需要サイド | True | 6 |
| 527 | 貯蔵能力 | True | 6 |
| 529 | 資源外交 | True | 6 |
| 571 | 関係閣僚会議 | True | 6 |
| 580 | 需要動向 | True | 6 |
| 540 | 途上国 | True | 6 |
| 664 | CO2削減 | True | 6 |
| 563 | 重要性 | True | 6 |
| 507 | 自家消費 | True | 6 |
| 221 | 企業群 | True | 6 |
| 184 | ネットワークコスト | True | 6 |
| 200 | 不安定化 | True | 6 |
| 207 | 中下流 | True | 6 |
| 212 | 予見可能性 | True | 6 |
| 235 | 信頼関係 | True | 6 |
| 239 | 元売 | True | 6 |
| 253 | 出力変動 | True | 6 |
| 323 | 地球温暖化問題 | True | 6 |
| 276 | 原子力損害賠償 | True | 6 |
| 280 | 原油価格 | True | 6 |
| 282 | 原発依存度 | True | 6 |
| 283 | 収益力 | True | 6 |
| 294 | 合理的 | True | 6 |
| 297 | 商用化 | True | 6 |
| 178 | シェール革命 | True | 6 |
| 156 | エネルギー協力関係 | True | 6 |
| 151 | エネルギーマネジメント | True | 6 |
| 149 | インフラ輸出 | True | 6 |
| 307 | 国民各層 | True | 6 |
| 358 | 将来世代 | True | 6 |
| 455 | 用燃料 | True | 6 |
| 418 | 機動的 | True | 6 |
| 368 | 式洋上 | True | 6 |
| 420 | 次世代自動車 | True | 6 |
| 422 | 民間企業 | True | 6 |
| 362 | 年度比 | True | 6 |
| 427 | 汚染水対策 | True | 6 |
| 446 | 熱電 | True | 6 |
| 451 | 産業活動 | True | 6 |
| 360 | 小売全面自由化 | True | 6 |
| 452 | 産業界 | True | 6 |
| 381 | 情報提供 | True | 6 |
| 400 | 最優先 | True | 6 |
| 458 | 発電所 | True | 6 |
| 490 | 系統増強 | True | 6 |
| 346 | 安全性向上 | True | 6 |
計263語が複合語として抽出されました。
積極的、国際的など一般的な言葉も含まれていますが、再生可能エネルギー、脱炭素化、FIT制度、エネルギー安全保障、シェール革命、自家消費などエネルギー用語(新語?)と言えそうな言葉が多く見つかりました。
参考:
資源エネルギー庁:第5次エネルギー基本計画 http://www.enecho.meti.go.jp/category/others/basic_plan/pdf/180703.pdf
gensim Phrase
https://radimrehurek.com/gensim/models/phrases.html
gensim Phrase
https://radimrehurek.com/gensim/models/phrases.html
コード7区:gensim の Phrases の使い方。頻出する単語ペアを検出-python
http://ailaby.com/phrases/
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる http://ailaby.com/tweet_dict/
Janomeで形態素解析をやってみる。
http://eneprog.blogspot.com/2018/06/janomepython.html
janome Analayzerで複合語(複合名詞)を考慮して形態素解析を行う。
http://eneprog.blogspot.com/2018/07/janome-analayzerpython.html
gensim Phrasesで新語・複合語を探す(python、自然言語処理、機械学習)
https://eneprog.blogspot.com/2018/07/gensim-phrasespython.html
エネルギー基本計画から新語・複合語を探す。その1
https://eneprog.blogspot.com/2018/07/1-pythongensimphrasesjanome.html
登録:
投稿 (Atom)