国会議員の発言の長さについて
※本稿は,バーティカルバーの極意 第10回(飯尾 淳,シェルスクリプトマガジン, vol.56, pp.74-79, 2018)をもとに作成.
Ubuntu
WSL(Windows Subsystem for Linux)のインストール
Python, R, nkf など.
国会議員の発言の長さを計測してみよう.
下のような図を作成することが,具体的な目標.
https://gyazo.com/7ef6b37ef6607756d47bfeb675293513
横軸は,1文あたりの単語数.
縦軸は頻度.
この図の描画を得るまでの過程を通し,さまざまな便利ツールの存在とその使い方を学ぶ.
使うツールなど
シェルスクリプト
コマンド: echo, tr, sed, curl, wc, grep, cut
python
BeautifulSoup
XML 形式
R
国会議員の発言とは:
code:kzm.txt
自由民主党の小泉進次郎でございます。
冒頭、議題に入る前に、一点大臣にお伺いします。
三月十五日、原発事故の影響で中国への輸入が禁じられている日本の十都県産の食品が中国国内で販売されていると中国国営中央テレビが批判したとのことです。
番組では、イオンや無印良品の商品について、本社の所在地と製品の産地を混同し、事実誤認に基づいた批判が展開され、報道の結果、現地では日本産食品の販売自粛の動きもあるようです。
両社は既に反論の声明を出していますが、日本の信頼にかかわる問題であり、政府としてもしかるべき対応が必要だと思います。
政府としてどう対応するのか、お聞かせください。
これは全部で 6 文.
それぞれの文を構成している文字数を数える.
code:kozm100.txt
19
24
74
87
59
24
発言をたくさん集めると,頻度分布が描ける.
どうやって国会での議員の発言を集めるか.
https://gyazo.com/4c2fea1daefe7a9d9da841b56a9c0855
なんと API まで公開されている.
https://gyazo.com/46ca5361ba88932243a97a5bb7d03f69
泥臭い作業が必要(数学は必要としない)
XML形式(国会)の例:
code:kzm.xml
<?xml version="1.0" encoding="utf-8"?>
<data>
<numberOfRecords>21</numberOfRecords>
<numberOfReturn>21</numberOfReturn>
<startRecord>1</startRecord>
<records>
<record>
<recordData>
<speechRecord>
<session>193</session>
<nameOfHouse>衆議院</nameOfHouse>
<nameOfMeeting>本会議</nameOfMeeting>
<issue>12号</issue>
<date>2017-03-23</date>
<speechOrder>47</speechOrder>
<speaker>小泉進次郎</speaker>
<speech>○小泉進次郎君 自由民主党の小泉進次郎でございます。(拍手)
冒頭、議題に入る前に、一点大臣にお伺いします。
三月十五日、原発事故の影響で中国への輸入が禁じられている日本の十都県産の食品が中国国内で販売されていると中国国営中
央テレビが批判したとのことです。番組では、イオンや無印良品の商品について、本社の所在地と製品の産地を混同し、事実誤認
に基づいた批判が展開され、報道の結果、現地では日本産食品の販売自粛の動きもあるようです。
両社は既に反論の声明を出していますが、日本の信頼にかかわる問題であり、政府としてもしかるべき対応が必要だと思います
。政府としてどう対応するのか、お聞かせください。
</speech>
</speechRecord>
</recordData>
</record>
</records>
</data>
国会でなにが発言されたかは公開されているので,まずは,何人かの議員の発言を,この xml 形式のファイルをダウンロードし,コンピュータに保存する.
ここまででも,結構,泥臭い作業が必要.
次に,1行1文形式に変換する.つまり,必要のない情報を削除する.
文字数を数える.
グラフに表示.
ひとつひとつ見ていこう
$ echo speaker=小泉進次郎\&maximumRecords=2\&from=2016-05-30\&until=2018-05-30
speaker=小泉進次郎&maximumRecords=2&from=2016-05-30&until=2018-05-30
$ echo speaker=小泉進次郎\&maximumRecords=2\&from=2016-05-30\&until=2018-05-30 | nkf -WwMQ
speaker=3D=E5=B0=8F=E6=B3=89=E9=80=B2=E6=AC=A1=E9=83=8E=26maximumRecords=
=3D2=26from=3D2016=2D05=2D30=26until=3D2018=2D05=2D30
$ echo speaker=小泉進次郎\&maximumRecords=2\&from=2016-05-30\&until=2018-05-30 | nkf -WwMQ | sed 's/=$//g'
speaker=3D=E5=B0=8F=E6=B3=89=E9=80=B2=E6=AC=A1=E9=83=8E=26maximumRecords
=3D2=26from=3D2016=2D05=2D30=26until=3D2018=2D05=2D30
$ echo speaker=小泉進次郎\&maximumRecords=2\&from=2016-05-30\&until=2018-05-30 | nkf -WwMQ | sed 's/=$//g' | tr -d '\n'
speaker=3D=E5=B0=8F=E6=B3=89=E9=80=B2=E6=AC=A1=E9=83=8E=26maximumRecords=3D2=26from=3D2016=2D05=2D30=26until=3D2018=2D05=2D30
$ echo speaker=小泉進次郎\&maximumRecords=2\&from=2016-05-30\&until=2018-05-30 | nkf -WwMQ | sed 's/=$//g' | tr -d '\n' | tr = %
speaker%3D%E5%B0%8F%E6%B3%89%E9%80%B2%E6%AC%A1%E9%83%8E%26maximumRecords%3D2%26from%3D2016%2D05%2D30%26until%3D2018%2D05%2D30
code:tmp.xml
<?xml version="1.0" encoding="utf-8"?>
<data>
<numberOfRecords>21</numberOfRecords>
<numberOfReturn>2</numberOfReturn>
<startRecord>1</startRecord>
<nextRecordPosition>3</nextRecordPosition>
<records>
<record>
<recordData>
<speechRecord>
<session>193</session>
<nameOfHouse>衆議院</nameOfHouse>
<nameOfMeeting>本会議</nameOfMeeting>
<issue>12号</issue>
<date>2017-03-23</date>
<speechOrder>47</speechOrder>
<speaker>小泉進次郎</speaker>
<speech>○小泉進次郎君 自由民主党の小泉進次郎でございます。(拍手)
xml ファイルの中の <speech> </speech> で囲まれた中だけをとってきたい.
python の BeautifulSoup ライブラリを使う.
$ ./get_speech.py kzm.xml
code:tmp.txt
○小泉進次郎君 自由民主党の小泉進次郎でございます。(拍手)
冒頭、議題に入る前に、一点大臣にお伺いします。
三月十五日、原発事故の影響で中国への輸入が禁じられている日本の十都県産の食品が中国国内で販売されていると中国国営中
央テレビが批判したとのことです。番組では、イオンや無印良品の商品について、本社の所在地と製品の産地を混同し、事実誤認
に基づいた批判が展開され、報道の結果、現地では日本産食品の販売自粛の動きもあるようです。
両社は既に反論の声明を出していますが、日本の信頼にかかわる問題であり、政府としてもしかるべき対応が必要だと思います
。政府としてどう対応するのか、お聞かせください。
$ ./get_speech.py kzm.xml | sed -e 's/ / /g'
全角スペースを半角スペースに置換
code:tmp.txt
○小泉進次郎君 自由民主党の小泉進次郎でございます。(拍手)
冒頭、議題に入る前に、一点大臣にお伺いします。
三月十五日、原発事故の影響で中国への輸入が禁じられている日本の十都県産の食品が中国国内で販売されていると中国国営中
央テレビが批判したとのことです。番組では、イオンや無印良品の商品について、本社の所在地と製品の産地を混同し、事実誤認
に基づいた批判が展開され、報道の結果、現地では日本産食品の販売自粛の動きもあるようです。
両社は既に反論の声明を出していますが、日本の信頼にかかわる問題であり、政府としてもしかるべき対応が必要だと思います
。政府としてどう対応するのか、お聞かせください。
$ ./get_speech.py kzm.xml | sed -e 's/ / /g' | cut -d ' ' -f 2-
「○小泉進次郎君 」を削除.
code:tmp.txt
自由民主党の小泉進次郎でございます。(拍手)
冒頭、議題に入る前に、一点大臣にお伺いします。
三月十五日、原発事故の影響で中国への輸入が禁じられている日本の十都県産の食品が中国国内で販売されていると中国国営中
央テレビが批判したとのことです。番組では、イオンや無印良品の商品について、本社の所在地と製品の産地を混同し、事実誤認
に基づいた批判が展開され、報道の結果、現地では日本産食品の販売自粛の動きもあるようです。
両社は既に反論の声明を出していますが、日本の信頼にかかわる問題であり、政府としてもしかるべき対応が必要だと思います
。政府としてどう対応するのか、お聞かせください。
tr コマンド
テキストファイルの文字を置換する/削除する
-d オプションで、指定した文字を削除
cut コマンド
オプション -d(オプション--delimiter) 区切り文字を指定する. -fオプションと組み合わせて使用
オプション -f(オプション--fields) 必要な項目を項目数で指定する
grep コマンド
grep -v '^$' で,空行を削除.
grep -v "test" 文字列「test」を除外し grep。
正規表現
メタ文字: . ^ $ * + ? | ( )
メタ文字を単なる普通の文字として検索したい場合は、それらメタ文字の前に、\を付加
半角の ^ は、行の先頭を意味する
$ は行の終わりを意味
sed
文字列の一括置換 $ sed -e 's/変更前の文字列/変更後の文字列/g' ./data.txt > ./data-new.txt
$ ./get_speech.py kzm.xml | sed -e 's/ / /g' | cut -d ' ' -f 2- | grep -v '^$'
code:tmp.txt
自由民主党の小泉進次郎でございます。(拍手)
冒頭、議題に入る前に、一点大臣にお伺いします。
三月十五日、原発事故の影響で中国への輸入が禁じられている日本の十都県産の食品が中国国内で販売されていると中国国営中
央テレビが批判したとのことです。番組では、イオンや無印良品の商品について、本社の所在地と製品の産地を混同し、事実誤認
に基づいた批判が展開され、報道の結果、現地では日本産食品の販売自粛の動きもあるようです。
両社は既に反論の声明を出していますが、日本の信頼にかかわる問題であり、政府としてもしかるべき対応が必要だと思います
。政府としてどう対応するのか、お聞かせください。
R
lwd (line width)
par()
グラフィックスパラメータを設定す
mfrow = c(3,2) たて 3 x よこ 2
cex
デバイス全体の文字の大きさ。
cex.axis は座標目盛りも文字サイズ、cex.lab は座標軸タイトルの文字サイズ、cex.main と cex.sub は画像タイトルの文字サイズ。
las 座標の目盛りの文字配置。0 は座標軸に平行して配置、1 は両軸とも横書き、2 は x 軸は横書きで y 軸は縦書き、3 は両軸とも縦書きとなる。