---
エネルギー基本計画(案)の特徴を見てみる。その3です。前回はエネルギー基本計画(案)をjanomeで形態素解析し、名詞(代名詞、非自立名詞を除く)だけ抽出してwordcloudを作ってみました。

今回は、単語の出現回数を見てみます。
単語の出現回数を数えるやり方はいろいろありますが、3つの方法(python標準ライブラリのCounter、pandasデータフレーム、JanomeのAnalyzer)でやってみます。
まずは一番メジャーな方法、python標準ライブラリのCounterを使う方法。下記ページが参考になりました。
侍エンジニア塾
【Python入門】Counterで文字列や要素の数を数えよう!
・インポートとデータ読み込み
from collections import Counter
from janome.tokenizer import Tokenizer
text_file = open("enegy_plan.txt")
full_text = text_file.read()
・形態素解析と品詞で抽出
word_list=[]
t = Tokenizer()
tokens = t.tokenize(full_text)
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)
word_list[:10]
['はじめ', '年', '3月', '東日本', '大震災', '東京電力', '福島', '原子力', '発電', '所']
counterではリスト内の要素を数えるので、リストを返します。
janomeの使い方(品詞での抽出)についてはこちらを参照ください。今回は非自立名詞、代名詞、数を除いた名詞を抽出しました。
・文字列の出現回数を数える
counts=pd.DataFrame()
counter = Counter(word_list)
for count in counter.most_common():
counts=counts.append([list(count)],ignore_index=True)
counts.columns=["単語","回数"]
Counterで文字列の出現回数を数え上げ、.most_common()で出現回数の多い順にタプルで返します。
pandasデータフレームの形式で保存するため、一旦リストに変換して、データフレームに行追加しています。最後に列名を付けて完成です。(結果は最後に記載します)
次に前回作った形態素情報を丸ごと保存したデータフレームを使って出現回数を数える場合。
・データ読み込みと確認
df = pd.read_csv('energyplan_split.csv',encoding="CP932")
df.head()
| 単語 | 品詞 | 品詞細分類1 | 品詞細分類2 | 品詞細分類3 | 活用型 | 活用形 | 原形 | 読み | 発音 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | はじめ | 名詞 | 副詞可能 | * | * | * | * | はじめ | ハジメ | ハジメ |
| 1 | に | 助詞 | 格助詞 | 一般 | * | * | * | に | ニ | ニ |
| 2 | \n\n | 記号 | 空白 | * | * | * | * | \n\n | * | * |
| 3 | 2 | 名詞 | 数 | * | * | * | * | 2 | ニ | ニ |
| 4 | 0 | 名詞 | 数 | * | * | * | * | 0 | ゼロ | ゼロ |
| 5 | 1 | 名詞 | 数 | * | * | * | * | 1 | イチ | イチ |
| 6 | 1 | 名詞 | 数 | * | * | * | * | 1 | イチ | イチ |
| 7 | 年 | 名詞 | 接尾 | 助数詞 | * | * | * | 年 | ネン | ネン |
| 8 | 3月 | 名詞 | 副詞可能 | * | * | * | * | 3月 | サンガツ | サンガツ |
| 9 | の | 助詞 | 連体化 | * | * | * | * | の | ノ | ノ |
| 10 | 東日本 | 名詞 | 固有名詞 | 地域 | 一般 | * | * | 東日本 | ヒガシニッポン | ヒガシニッポン |
| 11 | 大震災 | 名詞 | 一般 | * | * | * | * | 大震災 | ダイシンサイ | ダイシンサイ |
| 12 | 及び | 接続詞 | * | * | * | * | * | 及び | オヨビ | オヨビ |
| 13 | 東京電力 | 名詞 | 固有名詞 | 組織 | * | * | * | 東京電力 | トウキョウデンリョク | トーキョーデンリョク |
| 14 | 福島 | 名詞 | 固有名詞 | 地域 | 一般 | * | * | 福島 | フクシマ | フクシマ |
| 15 | 第 | 接頭詞 | 数接続 | * | * | * | * | 第 | ダイ | ダイ |
| 16 | 一 | 名詞 | 数 | * | * | * | * | 一 | イチ | イチ |
| 17 | 原子力 | 名詞 | 一般 | * | * | * | * | 原子力 | ゲンシリョク | ゲンシリョク |
| 18 | 発電 | 名詞 | サ変接続 | * | * | * | * | 発電 | ハツデン | ハツデン |
| 19 | 所 | 名詞 | 接尾 | 一般 | * | * | * | 所 | ショ | ショ |
・pandasでデータ抽出とcount
noun = df[df["品詞"]=="名詞"]
noun2=noun[(noun["品詞細分類1"] != "代名詞") & (noun["品詞細分類1"] != "非自立") & (noun["品詞細分類1"] != "数")]
noun2_group=noun2.groupby("単語")[['単語']].count().sort_values(by="単語",ascending=False).rename(columns={'単語': '回数'}).reset_index()
noun2_group
データフレームから必要なデータを抽出後、"単語"列をgroup_byでグループ化しcountで出現回数を数えて多い順に並べ替えしています。
この場合、できた列名は"単語"(マルチインデックス)になっているので、renameで"回数"に変更し、reset_indexでマルチインデックスを解除してインデックスを降りなおししました。(rename以下は必要なければ削除可能)
最後に、janome Analyzer ワードカウントを使う方法。
janomeのAnalyzerでフィルターを使うと、品詞による抽出や単語の数え上げができます。下記記事が大変参考になりました。
janome ドキュメント Analyzerの使い方
け日記:Python janomeのanalyzerが便利
token_filters = [
POSKeepFilter("名詞"),
POSStopFilter(["名詞,代名詞","名詞,非自立","名詞,数"]),
TokenCountFilter()]
POSKeepFilterで取得する品詞を、POSStopFilterで除外する品詞をリストで設定しています。TokenCountFilterが単語の出現回数数え上げです。
・janome TokenFilterの設定
a = Analyzer(token_filters=token_filters)
counts=pd.DataFrame()
for count in a.analyze(full_text):
counts=counts.append([list(count)],ignore_index=True)
Analayzerにフィルターを渡して、単語の数え上げを行います。戻り値は単語(表層形)とその出現回数のタプルです。
・並べ替えと列名変更、データ確認
counts=counts.sort_values(by=1, ascending=False) counts.columns=["単語","回数"] counts[:200]
janome Analyzerを使うと、形態素解析から品詞による抽出、単語の数え上げまで一気にできて便利です。
・単語の出現回数 出力(200位まで)
| 単語 | 回数 | |
|---|---|---|
| 0 | エネルギー | 943 |
| 1 | 的 | 632 |
| 2 | 化 | 571 |
| 3 | 等 | 419 |
| 4 | 技術 | 321 |
| 5 | 可能 | 307 |
| 6 | 性 | 300 |
| 7 | 供給 | 248 |
| 8 | 年 | 210 |
| 9 | 開発 | 210 |
| 10 | 発電 | 207 |
| 11 | 国 | 205 |
| 12 | 事業 | 198 |
| 13 | 原子力 | 191 |
| 14 | 取組 | 187 |
| 15 | 再生 | 181 |
| 16 | 需要 | 166 |
| 17 | ガス | 162 |
| 18 | 我が国 | 161 |
| 19 | 利用 | 161 |
| 20 | 必要 | 155 |
| 21 | 資源 | 154 |
| 22 | 活用 | 150 |
| 23 | 燃料 | 149 |
| 24 | 炭素 | 148 |
| 25 | システム | 145 |
| 26 | 導入 | 143 |
| 27 | 効率 | 137 |
| 28 | 地域 | 137 |
| 29 | 国際 | 137 |
| 30 | 電力 | 136 |
| 31 | 水素 | 133 |
| 32 | 者 | 130 |
| 33 | 実現 | 127 |
| 34 | 確保 | 126 |
| 35 | 石油 | 124 |
| 36 | コスト | 122 |
| 37 | 強化 | 121 |
| 38 | 産業 | 116 |
| 39 | 市場 | 116 |
| 40 | 世界 | 114 |
| 41 | 安定 | 114 |
| 42 | 電源 | 110 |
| 43 | 安全 | 109 |
| 44 | 構造 | 107 |
| 45 | 拡大 | 106 |
| 46 | 課題 | 104 |
| 47 | 環境 | 104 |
| 48 | 重要 | 104 |
| 49 | 整備 | 104 |
| 50 | 制度 | 103 |
| 51 | 推進 | 101 |
| 52 | 対応 | 96 |
| 53 | 熱 | 96 |
| 54 | 企業 | 91 |
| 55 | 源 | 90 |
| 56 | 間 | 89 |
| 57 | 省エネルギー | 89 |
| 58 | 量 | 87 |
| 59 | 関係 | 87 |
| 60 | 協力 | 84 |
| 61 | 競争 | 82 |
| 62 | 力 | 78 |
| 63 | 促進 | 78 |
| 64 | 政策 | 75 |
| 65 | 需給 | 74 |
| 66 | 対策 | 73 |
| 67 | 分野 | 73 |
| 68 | 型 | 71 |
| 69 | 経済 | 69 |
| 70 | 転換 | 69 |
| 71 | 所 | 68 |
| 72 | 低減 | 67 |
| 73 | リスク | 67 |
| 74 | 状況 | 67 |
| 75 | 向上 | 67 |
| 76 | 構築 | 67 |
| 77 | 新た | 66 |
| 78 | 投資 | 65 |
| 79 | 多様 | 63 |
| 80 | 消費 | 62 |
| 81 | 海外 | 60 |
| 82 | 価格 | 60 |
| 83 | 展開 | 60 |
| 84 | 改革 | 59 |
| 85 | 連携 | 59 |
| 86 | 効果 | 58 |
| 87 | 検討 | 57 |
| 88 | 今後 | 57 |
| 89 | 福島 | 56 |
| 90 | 分散 | 56 |
| 91 | 調整 | 56 |
| 92 | 国内 | 54 |
| 93 | LNG | 54 |
| 94 | 化石 | 53 |
| 95 | 炉 | 53 |
| 96 | 国民 | 53 |
| 97 | 情報 | 52 |
| 98 | 系統 | 52 |
| 99 | 研究 | 52 |
| 100 | 社会 | 50 |
| 101 | 革新 | 50 |
| 102 | 排出 | 49 |
| 103 | 支援 | 49 |
| 104 | 期待 | 48 |
| 105 | 電気 | 48 |
| 106 | インフラ | 48 |
| 107 | 年度 | 48 |
| 108 | 変化 | 47 |
| 109 | % | 47 |
| 110 | 事故 | 46 |
| 111 | 変動 | 46 |
| 112 | 削減 | 46 |
| 113 | 物 | 46 |
| 114 | 選択肢 | 45 |
| 115 | 火力 | 45 |
| 116 | 貢献 | 45 |
| 117 | 体制 | 44 |
| 118 | アジア | 43 |
| 119 | 全体 | 42 |
| 120 | 依存 | 41 |
| 121 | 処分 | 41 |
| 122 | 家 | 41 |
| 123 | 下 | 41 |
| 124 | 基本 | 40 |
| 125 | 時 | 40 |
| 126 | 様々 | 40 |
| 127 | 戦略 | 40 |
| 128 | 設備 | 40 |
| 129 | 石炭 | 40 |
| 130 | 観点 | 40 |
| 131 | 計画 | 39 |
| 132 | 度 | 39 |
| 133 | 長期 | 39 |
| 134 | 選択 | 39 |
| 135 | 実施 | 39 |
| 136 | 程度 | 39 |
| 137 | 調達 | 39 |
| 138 | 積極 | 39 |
| 139 | 規制 | 39 |
| 140 | 法 | 39 |
| 141 | 使用 | 38 |
| 142 | 総合 | 38 |
| 143 | 製品 | 38 |
| 144 | 問題 | 37 |
| 145 | 将来 | 37 |
| 146 | 自動車 | 37 |
| 147 | 具体 | 37 |
| 148 | 取引 | 37 |
| 149 | 適切 | 37 |
| 150 | 廃 | 36 |
| 151 | 日本 | 36 |
| 152 | 規模 | 36 |
| 153 | 着実 | 35 |
| 154 | 評価 | 35 |
| 155 | 電 | 35 |
| 156 | 基盤 | 35 |
| 157 | 次 | 34 |
| 158 | 温室 | 34 |
| 159 | 東京電力 | 33 |
| 160 | 抑制 | 33 |
| 161 | 増加 | 33 |
| 162 | 目標 | 33 |
| 163 | 風力 | 33 |
| 164 | 柔軟 | 33 |
| 165 | 政府 | 32 |
| 166 | 情勢 | 32 |
| 167 | 解決 | 32 |
| 168 | 中心 | 32 |
| 169 | 天然 | 32 |
| 170 | 地 | 32 |
| 171 | 既存 | 32 |
| 172 | 廃棄 | 32 |
| 173 | 核 | 32 |
| 174 | シナリオ | 31 |
| 175 | 動向 | 31 |
| 176 | 用 | 31 |
| 177 | 理解 | 31 |
| 178 | 済 | 30 |
| 179 | 普及 | 30 |
| 180 | 自由 | 30 |
| 181 | 影響 | 30 |
| 182 | 蓄電池 | 30 |
| 183 | 網 | 30 |
| 184 | ネットワーク | 30 |
| 185 | 関連 | 30 |
| 186 | 人材 | 30 |
| 187 | 有効 | 30 |
| 188 | 部門 | 30 |
| 189 | LP | 30 |
| 190 | 電池 | 30 |
| 191 | 最終 | 29 |
| 192 | 役割 | 29 |
| 193 | 高度 | 29 |
| 194 | 温暖 | 29 |
| 195 | 管理 | 29 |
| 196 | 備蓄 | 29 |
| 197 | 貯蔵 | 28 |
| 198 | 確実 | 28 |
| 199 | 中長期 | 28 |
結果を見てみると、「エネルギー」「技術」が多く出現し、「原子力」「発電」「炭素」なども比較的上位に入っています。「的」「化」「性」などは複合語が分かれてしまっているようです(安定的、低炭素化、可能性など)。
このままでは何ともいえない感じなので、次回以降、複合語の扱いをやってみます。
つづく
参考:
資源エネルギー庁:エネルギー基本計画(案)
http://www.enecho.meti.go.jp/committee/council/basic_policy_subcommittee/pdf/basic_policy_subcommittee_002.pdf
janome ドキュメント
http://mocobeta.github.io/janome/#id11
け日記:Python janomeのanalyzerが便利
https://ohke.hateblo.jp/entry/2017/11/02/230000
修正:PDFMinerでpdfからtxtを抽出する。
http://eneprog.blogspot.com/2018/05/pdfminerpdftxtpythonpdfminersix.html
正規表現を使って、エネルギー基本計画のテキストを整形する。
http://eneprog.blogspot.com/2018/06/pythonresplit.html
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
janomeの形態素情報を保存する。(python、自然言語処理、形態素解析、pandas)
https://eneprog.blogspot.com/2018/06/janomepythonpandas.html