第１講

第1講

1

目次
第 1 講 .......................................................................................... 1
記述統計 ............................................................................... 1
データの整理................................................................... 1
特性値の活用 ................................................................. 9
関係の度合い ................................................................. 9
標本調査の考え方 .................................................................. 15
標本調査とは ................................................................ 15
統計を知る ................................................................... 21
推測統計 ............................................................................. 26
確率変数と確率分布 ....................................................... 26
統計的推定と統計的仮説検定 ............................................ 27
ビッグデータの活用と分析 ........................................................... 35
形態素解析によるテキストマイニング ...................................... 35
API で公的統計データを取得 ............................................. 52

i

第１講

第1講
記述統計
本章の Point

統計的な手法を概観した上で、プログラム言語 Python、R 1を用いてデータの特性や関係を可視化する方法を身につけます。
 理科年表「世界の気象データ」

利用 Data

データの整理ヒストグラム
本項における参考情報

総務省 統計局 なるほど統計学園高等部 > 統計の作成・分析 > 統計の企画から発表まで > 分析 > 統計グラフの作成 > ヒストグラム
https://www.stat.go.jp/koukou/howto/process/graph/graph4.html

ヒストグラムとは、量的データの分布を見るために用いられるグラフで、度数分布表から求められます。
データをある区間ごとのグループに分けて、度数を整理した度数分布表を基に、横軸に階級を、縦軸に度数密度 2をとった棒グラフが、ヒストグラムです。階級は、ある区間ごとに分けたグループを指し、これを示すヒストグラムの棒をビンと呼びます。
＜度数分布表＞階級↓
身長＜ヒストグラム＞

度数密度
↓

20
18

人数

5

145cm以上150cm未満

8

150cm以上155cm未満

14

155cm以上160cm未満

18

160cm以上165cm未満

11

165cm以上170cm未満

8

総計

64

↑
度数密度

140cm以上145cm未満

16
14
12
10
8
6
4
2
0
140

145

150

155

↑

160

165

170

階級

1

Python は汎用性の高いプログラム言語で統計解析だけでなくアプリ開発や Web 構築、機械学習まで幅広い分野で使われています。一方、R は統計解析向けに特化されたプログラム言語といえます。
Python：https://www.python.jp/ （環境構築のページへ）
R：https://www.soumu.go.jp/ict_skill/pdf/ict_ev_el_4_3.pdf

2

ヒストグラムは、面積が度数を表すため、高さは度数密度となります。ビンの幅が全て同じヒストグラムでは、縦軸は度数と同じになります。

1

第１講

ヒストグラムは、データの分布を可視化する便利な道具で、ビンの数と幅は任意に決めることができます
が、これによりヒストグラムの見え方が大きく変わる可能性があることに注意が必要です。
＜ビンの数の決め方
階級の数は、データの最大値と最小値、データの範囲、データの度数の合計を参考にして、決定しま
す。
＜ビン幅の変更＞
分布の階級の幅が広すぎてグラフを作成することが難しい場合や、階級を細かく分析したいときなど
は、ビンの幅が異なるヒストグラムを作成して、データの分布を見ることができます。ただし、ビン幅が異なるものがあるヒストグラムを作成する場合は、各ビンの面積が度数に比例するように、ビン幅に応じてビンの高さを変える必要があります。
例えば、特定のビンの幅を、他のビンよりも 2 倍の幅で作成する場合、ビン幅を 2 倍とし、ビンの高さを１/2 倍とします。

出典：総務省統計局『家計調査報告（貯蓄・負債編）－2019 年（令和元年）平均結果－（二人以上の世帯）（2020 年 5 月 15 日公表）』 「Ⅰ貯蓄の状況 6 ページ」
https://www.stat.go.jp/data/sav/sokuhou/nen/pdf/2019_gai2.pdf

2以下の図は、Python で描画した世界の都市 240 地点の年間平均気温（2019 年）のヒストグラムです。

世界の気象データより「世界の平均気温のヒストグラム」

以下の Python コードで作成することができます。また R コードでも同じようなヒストグラムが作成できます。
実施内容

ヒストグラム作成

利用 Data 世界の気象データより「世界の平均気温のヒストグラム」
Python コード（サンプル）# データを視覚化する際に必要なライブラリ
import matplotlib.pyplot as plt
from pylab import rcParams
import matplotlib
import seaborn as sns# データの扱いに必要なライブラリ
import pandas as pd
import numpy as np
import datetime as dt
import math# データセットの読み込み
df = pd.read_csv("xxx.csv", _header=0,index_col=0) #xxx 部分で csv を指定
print(df.head())
n = df['kion'].count()# 度数分布表描画（bins で階級数の設定が可能です）
rcParams['figure.figsize'] = 10, 10
ax= df.plot( y=['kion'], bins=10, alpha=0.5, figsize=(8,4), kind='hist')# 出力
plt.savefig('histgram.png')
plt.close()3

第１講

Python、R でのヒストグラムの作成

第１講

R コード（サンプル）# データセットの読み込み
data <- read.csv("C:/xxx.csv",fileEncoding="UTF-8-_BOM",header=T) #xxx 部分で csv を指定
colnames(data)# 度数分布表描画（breaks=seq(最小値,最大値,階級数の幅)の設定が可能です）
png("C:/histgram.png",width = 500, height = 500)
hist(data$kion ,breaks=seq(0,50,10),)dev.off()

ビンの数や幅の決め方の目安としていくつかの方法があり、ここでは例として、スタージェスの方法と、スコットの方法、平方根選択を取り上げます。ここで、データの大きさを𝑛𝑛、ビンの数を𝑘𝑘、ビンの幅をℎとおきます。
＜スタージェスの方法＞
ビンの数𝑘𝑘は、端数が出たら切り上げます。この方法では、𝑛𝑛が倍になるとビンの数が 1 つ増えます。𝑛𝑛 <30 (𝑘𝑘 < 7) であるような場合など、この方法が適切ではない場合もあることが知られています。
＜スコットの方法＞

ここで𝜎𝜎はデータの標準偏差を表します。

𝑘𝑘 = 1 + log 2 𝑛𝑛
ℎ=

3.5𝜎𝜎
𝑛𝑛1/3

＜平方根選択＞
データの大きさの平方根でビンの数を決めます。
𝑘𝑘 = √𝑛𝑛
では、ビンの決め方による見え方の違いについて、(独)統計センターが作成・公開している一般用ミクロデータのうち、平成 21 年全国消費実態調査の詳細品目データを用いて、実際に R により描画します。このデータは、実際の調査データを模して乱数により合成したもので、実証分析には使用できませんが、誰でも自由に以下のサイトからダウンロードして利用することができます。
https://www.nstac.go.jp/services/ippan-microdata.html

実施内容

ヒストグラム作成 (2)利用 Data (独)統計センターの一般用ミクロデータ「平成 21 年全国消費実態調査(詳細品目)」

4

setwd(“c:/xxxxx”)# ダウンロードしたデータを置いたディレクトリを指定

dat <- read.table("ippan_2009zensho_s_dataset.csv",#読み込むファイル名を指定

header=TRUE,# ヘッダを変数名として使用

sep=",",# 区切り（カンマ）文字

skip=8)# ファイル冒頭の 8 行飛ばし読み

attach(dat) # attach したデータフレームは収録変数名を直接指定できるようになる# ここでは、住居費データを常用対数変換してヒストグラムを描画する
dev.new(width=100, height=30)
par(mfrow=c(1,3))# グラフィック画面の縦横比を指定# 画面分割 1 行 3 列

hist(log10(Housing),# プロットする変数

breaks = sqrt(length(Housing)), # ビンの決め方
xlab="住居費（常用対数）", ylab="度数", # 軸ラベルの指定
main="平方根選択",# プロット図の題目

col="royalblue",# ビンの色border="gray")# ビンの境界の色

hist(log10(Housing), xlab="住居費（常用対数）", ylab="度数", main="スタージェスの方法", col="royalblue",
border="gray")# hist 関数のデフォルトはスタージェスの方法

hist(log10(Housing), xlab="住居費（常用対数）", ylab="度数", breaks="Scott", main="スコットの方法",
col="royalblue", border="gray")# スタージェスの方法によるヒストグラムをベースに、ビン幅を任意に変えてみる# ビンの幅が等幅でない場合、y 軸は自動的に度数密度になる
dev.new(width=20, height=10) # 画面の縦横比を指定
par(mfrow=c(1,2))# 画面分割 1 行 2 列

h2.log <- hist(log10(Housing), col="cyan", border="royalblue") # スタージェス# hist 関数の実行結果を別の変数に保存することにより、# ヒストグラムの情報を取り出すことができる
str(h1.log)# どのような変数が収録されているか確認できる

h2.log$breaks)# ビンの境界# [1] 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5
h2.log$counts# 各ビンに含まれる数# [1] 28 140 504 1861 4373 7640 9089 7719 6819 6637 916 74# スタージェスによる境界を参考にいくつかのビンを統合してみる
bk2 <- c(0, 0.5, 1, 1.5, 2.0, 3.0, 3.5, 4.0, 5, 6, 7)
hist(log10(Housing), breaks=bk2, col="cyan", border="royalblue")detach(dat)# attach したデータフレームは使用後 detach する

5

7

第１講

R コード（サンプル）# データセットの読み込み

第１講

住居費を常用対数変換したデータについて、三種類のビンの決め方によるヒストグラムは、それぞれ次のようになります。

次の図も、前ページの R のサンプルコードにより出力されるもので、左が常用対数変換した
住居費のスタージェスの方法によるヒストグラム、右がそこからいくつかのビンを統合したものです。

箱ひげ図
本項における
参考情報

 データの散らばりを捉える
総務省 統計局 なるほど統計学園高等部 > 統計の作成・分析 > 統計の企画から発表まで > 分析 > 統計グラフの作成 > 箱ひげ図
https://www.stat.go.jp/koukou/howto/process/graph/graph5.html
 「高校からの統計・データサイエンス活用～上級編～」
第２部 統計的探究の実践 Ⅰ ～データから有用な情報を引き出す～箱ひげ図は、四分位数でデータの分布を表した、ヒストグラムを簡略化した図です。複数のデータ分布を比較するために用いられます。他のデータから大きく離れたデータの値を外れ値と呼び、外れ値を見つける簡易的な方法として箱ひげ図が利用できます。四分位範囲と呼ばれる箱ひげ図の箱の長さの 1.5 倍
よりも、外側に離れているデータは外れ値となります。

6

第１講

×

外れ値

1.5×四分位範囲

最大値
第3四分位

四分位範囲

中央値（第2四分位数）
第1四分位数最小値

1.5×四分位範囲×

外れ値

複数の箱ひげ図を横に並べた図は、並列箱ひげ図と呼びます。並列箱ひげ図を利用することで複数データの比較が可能になります。以下は、世界の都市 240 地点の年間平均気温（2019 年）を大陸ごとに箱ひげ図を作成して並べた、並列箱ひげ図です。
年平均気温（℃）

世界の気象データより「大陸別平均気温の並列箱ひげ図」
ユーラシア大陸 アフリカ大陸 北アメリカ大陸 南アメリカ大陸

7

南極大陸

太平洋諸島

オーストラリア大陸

第１講

Python、R での箱ひげ図の作成
７ページの並列箱ひげ図は、以下の Python コードで作成することができます。また、R コードでも同じよ
うな箱ひげ図を作成できます。
実施内容

並列箱ひげ図作成

利用 Data 世界の気象データより「大陸別平均気温」
Python コード（サンプル）# データを視覚化する際に必要なライブラリ
import matplotlib.pyplot as plt
from pylab import rcParams
import matplotlib
import seaborn as sns# データの扱いに必要なライブラリ
import pandas as pd
import numpy as np
import datetime as dt
import math# データセットの読み込み
df = pd.read_csv(“xxx.csv",header=0,index_col=0)
print(df.head())
n = df['kion'].count()# 箱ひげ図の設定
fig = plt.figure()ax = fig.add_subplot(1, 1, 1)
sns.boxplot(x='continent', y='kion', data=df, _showfliers=False, ax=ax)
sns.stripplot(x='continent', y='kion', data=df, _jitter=True, color='black', ax=ax)# 出力
plt.savefig('boxplot_tp_avyear.png')
plt.close()

R コード（サンプル）# データセットの読み込み
data <- read.csv("C:/xxx.csv",fileEncoding="UTF-8-BOM",header=T) #xxx 部分で csv を指定
colnames(data)# 箱ひげ図の描写
png("C:/boxplot_tp_avyear.png", width = 1000, height = 1000)
boxplot(data$tp_avyear~data$continent)
dev.off()8

第１講

特性値の活用分散
本項におけるなるほど統計学園高等部 > 統計の作成・分析 > 統計を使った問題の発見から解決まで> 分析 > データの特性を見よう
https://www.stat.go.jp/koukou/howto/process/proc4_3_1.html

参考情報

分散𝑠𝑠 2 は、データのばらつき具合を表す指標で、以下の数式で求めることができます。分散が大きいほど、データのばらつき具合も大きいことを表します。𝑥𝑥̅ は変数 X のとる値が 𝑥𝑥1 , 𝑥𝑥2 , … 𝑥𝑥𝑛𝑛 のときの平均を表し
ます。

𝑛𝑛

1
分散 𝑠𝑠 2 = �(𝑥𝑥𝑖𝑖 − 𝑥𝑥̅ )2
𝑛𝑛
𝑖𝑖=1

標準偏差
本項におけるなるほど統計学園高等部 > 統計の作成・分析 > 統計を使った問題の発見から解決まで> 分析 > データの特性を見よう
https://www.stat.go.jp/koukou/howto/process/proc4_3_1.html

参考情報

分散𝑠𝑠 2 は各データを 2 乗した値から求めている指標のため、分散と平均の比較ができません。データのばらつきと平均を比較するには、以下の数式のとおり、分散の正の平方根で求める標準偏差𝑠𝑠を使用します。分散と同様に、標準偏差値が大きいほど、データのばらつき具合も大きいことを表します。

関係の度合い

標準偏差𝑠𝑠 = �分散𝑠𝑠 2

散布図
本項における参考情報

なるほど統計学園高等部 > 統計の作成・分析 > 統計の企画から発表まで > 分析
> 統計グラフの作成 > 散布図
https://www.stat.go.jp/koukou/howto/process/graph/graph6.html

散布図は、2 つの変数を横軸と縦軸にとり、データをプロットした（点で打った）グラフです。2 つの変数の間に関連があるかをみるために用いられます。以下は、横軸に緯度、縦軸に年間平均気温（2019年）をとった世界の都市 240 地点の散布図です。

9

第１講

気温（℃）

緯度（度）
図 世界の気象データより「緯度と気温の散布図による比較」

相関関係と因果関係
上記の緯度と気温の散布図をみると、緯度が 0（赤道）に近いほど年間平均気温が高くなり、緯度が高いほど平均気温が低くなっていることが分かります。2 組のデータにおいて、ひとつの変数が増加（減少）するに伴い、もう⼀⽅も増加（減少）する傾向で観測値が分布するとき、相関関係があると言い、「緯度と気温には相関関係がある」と言うことができます。
しかし、相関関係があることが、必ずしも因果関係があることを示すものとはならないことに、注意しなけ
ればなりません。例えば、働いている人について、血圧と給料の散布図を作成した場合、血圧が高くなるにつれて、給料が上がることがみられたとします 3。この場合、年齢が高い人ほど血圧が高く、また年齢が高いほど給料が高くなるという背景が考えられ、「血圧を高くすると、給料が上がる」という因果関係があるとは言えません。

3なるほど統計学園高等部「散布図 3.さらに詳しく 相関関係と因果関係」
https://www.stat.go.jp/koukou/howto/process/graph/graph6.html

1010 ページの散布図は、以下の Python コードで作成することができます。また、R コードでも同じような散布図を作成できます。
実施内容

散布図作成

利用 Data

世界の気象データより「緯度と気温を散布図による比較」
Python コード（サンプル）# データを視覚化する際に必要なライブラリ
import matplotlib.pyplot as plt
from pylab import rcParams
import matplotlib
import seaborn as sns# データの扱いに必要なライブラリ
import pandas as pd
import numpy as np
import datetime as dt
import math# データの読み込み
df = pd.read_csv(“xxx.csv",header=0,index_col=0)
print(df.head())
n = df['kion'].count()# 凡例の設定
markers={"North":"^","South":"o"}# データの変換
for f in df['hogaku'].unique():plt.scatter(df.loc[df.hogaku== f,'ido_calc],df.loc[df.hogaku==f,'kion'],c="white",marker=markers[f],label = f,lw=1,
edgecolors='black')# x 軸、y 軸の設定
plt.xlabel('LATITUDE')
plt.ylabel('TEMPERATURE')# 散布図の出力
plt.legend()
plt.savefig('scatter.png')

11

第１講

Python、R での散布図の作成

第１講

R コード（サンプル）# データの読み込み
data <- read.csv("C:/xxx.csv",fileEncoding="UTF-8-BOM",header=T) #xxx 部分で csv を指定
colnames(data)# 散布図の描画
png("C:/ scatter_tp_avyear.png",width = 500, height = 500)
plot(data$ido_calc,data$kionr,xlab = "LATITUDE", ylab ="TEMPERATURE" , pch = ifelse(data$hogaku=="N",2,1))
legend("topright", legend=c("North","South" ),pch=c(2,1))
dev.off()

相関係数
 ２つの変量の関係
なるほど統計学園高等部 > 統計の作成・分析 > 統計を学ぶ上で必要な基礎数学

本項における参考情報

https://www.stat.go.jp/koukou/howto/math/index.html
 相関係数なるほど統計学園高等部 > 統計の作成・分析 > 統計を使った問題の発見から解決まで> 分析 > 様々な統計分析 > 複数の変数の関係性を見る
https://www.stat.go.jp/koukou/howto/process/p4_3_2_5.html

相関係数は、２つの変数がどのような相関関係があるかを表す指標で、以下の数式により求めることができます。
ｎ𝑥𝑥と𝑦𝑦の相関係数 =�(𝑥𝑥𝑖𝑖 − 𝑥𝑥̅ )(𝑦𝑦𝑖𝑖 − 𝑦𝑦�)
𝑖𝑖=1

ｎ

ｎ

��(𝑥𝑥 − 𝑥𝑥̅ )2 ��(𝑦𝑦 − 𝑦𝑦�)2
𝑖𝑖=1

𝑖𝑖

𝑖𝑖=1

𝑖𝑖

相関係数は、-1 から 1 までの値をとり、値によって２つの変数の相関関係を以下のようによむことがで
きます。
相関係数

相関関係

1 又は-1 に近い

相関が強い

０に近い

相関が弱い

しかし、相関係数とは、あくまでも相関関係がどの程度あるかを表す指標です。相関係数が 0 だとしても、2 つの変数には関係がないと言うことはできません。例えば、以下の散布図 A、散布図 B はどちらも相関係数が 0 となりますが、2 つの変数には何らかの関係があると考えられます。

12

第１講

出典：なるほど統計学園高等部 「相関係数」
https://www.stat.go.jp/koukou/howto/process/p4_3_2_5.html

単回帰分析
本項における
参考情報



回帰分析
なるほど統計学園高等部 > 統計の作成・分析 > 統計を使った問題の発見から解決まで> 分析 > 様々な統計分析 > 複数の変数の関係性を見る
https://www.stat.go.jp/koukou/howto/process/p4_3_2_5.html

単回帰分析は、ある変数𝑥𝑥がもう一方の変数 𝑦𝑦 に影響を与えていると想定されるときに、傾きを a、切片を b とした以下の回帰式を用いて、変数 𝑦𝑦 を変数 𝑥𝑥 で予測する手法です。変数 𝑦𝑦 を従属変数、目的変数などと呼び、変数 𝑥𝑥 を独立変数、説明変数などと呼びます。

𝑦𝑦＝a𝑥𝑥 + b

例えば、A 市のマンションの価格には、A 市のマンションの床面積の広さの影響を受けていると想定される場合を考えてみましょう 4。以下は、A 市のマンション価格と床面積の散布図です。真ん中の赤い直線
が、変数 𝑥𝑥 をＡ市のマンションの床面積、変数 𝑦𝑦 をＡ市のマンション価格とした単回帰分析での直線となります。

出典：なるほど統計学園高等部 「相関係数」
https://www.stat.go.jp/koukou/howto/process/p4_3_2_5.html

4

なるほど統計学園高等部 「相関係数」
https://www.stat.go.jp/koukou/howto/process/p4_3_2_5.html

13

第１講

＜回帰式の当てはまり＞
単回帰分析で、回帰式が実際のデータにどの程度あてはまっているかを示す指標に、決定係数（R2）があります。決定係数（R2）は、変数 𝑦𝑦𝑖𝑖 の平均を 𝑦𝑦� 、変数 𝑥𝑥𝑖𝑖 のとき予測した単回帰分析の回帰式で求められる 𝑦𝑦𝑖𝑖 を 𝑦𝑦�𝚤𝚤 とするとき、以下の数式で求めることができます。
ｎ

𝑅𝑅2 =

�(𝑦𝑦�𝑙𝑙 − 𝑦𝑦�)
𝑙𝑙=1

ｎ

2

ｎ

�(𝑦𝑦𝑖𝑖 − 𝑦𝑦�)

𝑖𝑖=1

＝１－

2

�(𝑦𝑦𝑖𝑖 − 𝑦𝑦�𝑙𝑙 )2
𝑙𝑙=1

ｎ�(𝑦𝑦𝑖𝑖 − 𝑦𝑦�)2𝑖𝑖=1

決定係数（R2）は、0 から 1 までの値をとり、1 に近いほど実際のデータによくあてはまっていることを表します。例えば、以下の 2 つのグラフをみてみましょう。どちらも同じような単回帰式の直線となっていますが、「決定係数の表示 A」は直線の上に実際のデータの値がほぼ重なっています。一方で、「決定係数の表示 B」は、直線から実際のデータが離れています。これにより、単回帰式の直線が実際のデータがよくあてはまっているのは、「決定係数の表示 A」と分かります。決定係数（R2）においても、「決定係数の表示 A」は 0.997、「決定係数の表示 B」は 0.523 で、「決定係数の表示 A」の方が 1 に近く、実際のデータによくあてはまっていることが表されています。なお、単回帰の場合、決定係数は相関係数の二乗に等しくなります。

出典：なるほど統計学園高等部 「相関係数」
https://www.stat.go.jp/koukou/howto/process/p4_3_2_5.html

チャレンジ事項
インターネット上に存在する他のデータの csv ファイルを作成して、同様の図表を描いてみましょう。その際、csv 名は英数字で設定しましょう。
注）コードの”***.csv”という部分を自分で作成した csv ファイルのアドレスにして、出力してみましょう。その際に凡例などの変更もコードを見ながら行ってみましょう。なお、csv を作成する際は 1 行
目をデータ名とすると、読み込んだ際に自動的にヘッダとして認識されて便利です。

14

第１講

標本調査の考え方
標本調査の考え方や統計が作られるまでの流れを理解します。
本章の Point

全数調査や標本調査の理解を通じて、身近に存在するデータの特性を理解します。
また、調査の流れを理解することで統計への理解を深めます。
最後に授業に活用できる公的統計の情報を整理します。

利用 Data 総務省「なるほど統計学園高等部」HP

標本調査とは


本項における
参考情報

全数調査と標本調査
なるほど統計学園高等部 > 統計の作成・分析 > 統計を使った問題の発見から解決まで >調査の計画 > 調査の概要の作成
https://www.stat.go.jp/koukou/howto/process/proc2_1.html

調査の対象となる集団全体のことを母集団と呼びます。調査の対象の範囲の観点では、全数調査 5と標本調査の２種類があります。
全数調査は、母集団の全てを調べる方法です。標本調査は、母集団の一部を抽出して調べる方法です。母集団の一部を抜きとることを標本抽出といい、抽出された集合体を標本 6といいます。
例えば、ある高校の生徒の平均身長を調べる場合、全校生徒の身長を調べるとすれば、全数調査となり、一部の生徒を調査して全校生徒の平均身長などを推定すれば標本調査ということになります。標本を選ぶ際は、各学年から選び出す
標本の割合（標本抽出率）
を一定にするなどの工夫が考えられます。
また、標本調査を行う際は、調査に偏りが出ないように無作為（ランダム）に抽出する必要があります。無作為に抽出するとは、サイコロを振るようにして人間の作為が入らないように抽出することで、具体的には、乱数表
や EXCEL の乱数機能を利用すると良いでしょう。

5

今ではほとんど用いませんが、かつては全数調査のことを悉皆（しっかい）調査とも呼びました。

6

標本調査、標本抽出、標本はそれぞれ英語を使ってサンプル調査、サンプリング、サンプルと呼ぶこともあります。

15

第１講

なるほど統計学園高等部 調査の概要の作成 調査対象の選出（全数調査と標本調査）
https://www.stat.go.jp/koukou/howto/process/proc2_1.html （2020 年 3 月 18 日アクセス確認）＜標本抽出＞
標本調査では、抽出した標本の回答結果から、全体（母集団）の傾向を推測するため、標本抽
出は、標本の偏りをなるべく小さくして、母集団を代表するように行わなくてはなりません。この抽出方法
による標本調査の種類を以下に示します。
標本調査の種類
名称

方法・調査対象を母集団から無作為に抽出する方法。
・標本抽出の最も基本的な手法である。

メリット
・最も単純であるため、標本抽出が容易に行える。

集落抽出

・母集団を集落に分割し、調査対象とする集落を抽出する方法。
・対象となった集落の客体は全て調査する。

・調査員調査を行う場合は、担当する客体をまとめやすい。

・集落の作成方法を複数の段に分けて行う方法。
・例えば、調査区を抽出し、さらに調査区内の世帯を抽出して世帯全体に調査を行う。

・多くの場合、集落調査よりも、調査客体数を減らせることができる。

・標本抽出の方法が複雑化する。

多段抽出

・集団をある特性に基づいていくつかの「層」に分け、各層から抽出単位又は調査対象を抽出する方法。

・各層の特性に合わせて、必要な標本サイズを設定するため、少ない調査対象で誤差の少ない結果が望める。

・母集団を特性ごとに層化するため、事前に情報が必要である。
・標本抽出の方法が複雑化する。

単純任意抽出（単純無作為抽出）

層別抽出

デメリット
・母集団が大きい場合、真に無作為とすることが非常に難しい。
・調査員調査を行う場合は、調査員の負担が偏ってしまう恐れがある。
・標本に偏りが生じてしまう可能性が高い。

＜抽出した標本はどの程度母集団の性質を持っているのか＞
例えば、1 億件の母集団データから 1000 件、1 万件、10 万件のデータを無作為に抽出したとして、そのデータはどの程度母集団を表しているのでしょうか。試しに、正規分布と呼ばれる理論的な分布に従う
平均が 10 となるデータを無作為に 1 億件作り出して仮想の母集団データとした場合、このデータの記述
統計量 7は以下の通りとなります。

記述統計量

最小値

第 1 四分位

中央値

平均

第 3 四分位

最大値

標準偏差

4.545

9.325

10.00010.00010.67415.7711.00

例えば、この母集団から、1,000 件、1 万件、10 万件のデータを抽出した場合その平均値の標準偏差（サンプルデータが母集団の平均 10 の周辺でばらつく範囲）はどのような値になるでしょうか。
サンプルサイズ1,000 件

1 万件

10 万件

標準偏差

0.031

0.010

0.003

サンプルサイズが大きくなればなるほど平均値の標準偏差は小さくなっていることが分かります。

7

記述統計とは、データの平均や分散、標準偏差などを算出してデータの分布を明らかにし、データの示す傾向等を把握することを言います。このときに算出する平均値、分散、標準偏差、中央値、最大値などを記述統計量と言います。

16

第１講

この標準偏差は何度サンプルを取ったとしても同じ数値になります。
100 回サンプルを取った場合
サンプルサイズ1,000 件

1 万件

10 万件

標準偏差

0.031

0.009

0.003

つまり、母集団から無作為にサンプルを取ることは、母集団と基本的な性質が似ている小標本を作ることであり、その小標本を使って母集団の推測を行うことが可能になるということです。また、サンプルサイズを大きくすると、標準偏差が小さくなることも分かります。今回の試行のサンプルサイズの設定については、実際に、世論調査の標本規模は 3,000 標本であることや、労働力調査は 10 万標本規模であることからも、適正な設定であると言えます。
以下に、標準正規分布平均 0、標準偏差 1 の確率密度曲線と、平均 0、標準偏差が 0.5 の確率密度曲線を比較します。標準偏差が小さくなると、分布の中心にデータが集中していることが分かります。

さらに、正規分布に従う、平均が 10、標準偏差 1 の分布を作成します。サンプルサイズを 1 億、5 千万、1
千万とします。

17

第１講
サンプルサイズ 1 億件の場合
記述統計量

最小値

第 1 四分位

中央値

平均

第 3 四分位

最大値

標準偏差

4.545

9.325

10.00010.00010.67415.7711.00

サンプルサイズ 5 千万件の場合
記述統計量

最小値

第 1 四分位

中央値

平均

第 3 四分位

最大値

標準偏差

4.392

9.326

10.00010.00010.67415.2731.00

サンプルサイズ 1 千万件の場合
記述統計量

最小値

第 1 四分位

中央値

平均

第 3 四分位

最大値

標準偏差

4.619

9.325

10.00010.00010.67415.191

1.00

四分位数にはほぼ変化はありませんが、最大値、最小値が変動しています。正規分布に従うデータであっても分布の形に若干の相違があり、また最小値、最大値の部分で差が大きく生じる場合があることが分かります。正規分布に従うという情報だけで判断するのではなく、記述統計量を比較したり、実際にプロットすることがサンプリングで得られたデータを扱う最初の段階で必要とされます。

18

成事例を以下に紹介します。サンプルサイズは、1000(濃い青)、500(青)、100(緑)として抽出しています。ヒストグラムで比較したものをみると、データポイントはゼロに近いところで抽出される数が多いため、サン
プルサイズを変えると中央値、平均が変化することがわかります。

サンプルサイズ1000件の場合
最小値
記述統計量

0.03889

第一四分位 中央値
0.49002平均

1.0353

第三四分位 最大値
1.69082.01775

19.96391

サンプルサイズ500件の場合
最小値
記述統計量

0.03889

第一四分位 中央値
0.49852

平均

1.01661

1.66685

第三四分位 最大値
1.99648

19.96391

サンプルサイズ100件の場合
最小値
記述統計量

0.03889

第一四分位 中央値
0.60787

平均

1.0439819

1.92001

第三四分位 最大値
2.18487

19.96391

第１講

さらに、正規分布以外の分布として右裾の長い分布として知られている対数正規分布からの標本の作

第１講

R コード（サンプル）# P17 のグラフ
#標準正規分布の密度関数曲線
curve(dnorm(x),from=-5, to= 5,ylab="確率密度",ylim=c(0, 0.8), col="blue",lwd=1,lty=2)# 青色破線#平均０、標準偏差０．５の正規分布密度関数曲線
curve(dnorm(x,mean=0,sd=0.5),add=TRUE,from=-5, to= 5,col="green",lwd=1)# 緑色実線
legend( 0.5, 0.75,legend=c("標準正規分布","平均 0,標準偏差 0.5 の正規分布"),
col=c("blue","green"),lty=c(2,1))# P18 のヒストグラム
set.seed(101);par(las=1);hist(rnorm(100000000,10,1),breaks=20,main="平均 10,標準偏差１の正規分布データ",
freq=TRUE,col="darkblue",xlab=" ",ylab="頻 度",xlim=c(4,16),ylim=c(0,25000000))
set.seed(101);par(las=1);hist(rnorm(50000000,10,1),breaks=20,add=TRUE,
freq=TRUE,col="blue",xlim=c(4,16),ylim=c(0,25000000))
set.seed(101);par(las=1);hist(rnorm(10000000,10,1),breaks=20,add=TRUE,
freq=TRUE,col="green",xlim=c(4,16),ylim=c(0,25000000))legend( 11, 23000000,legend=c("サイズ 1 億","サイズ 5 千万","サイズ 1 千万"),
col=c("darkblue","blue","green"), lwd=c(7,7,7) )#P19 のヒストグラム
set.seed(3987);par(las=1);hist(rlnorm(1000),main="対数正規分布からの標本",xlab=" ",ylab="頻 度",
freq=TRUE,col="darkblue",xlim=c(0,20),ylim=c(0,1000))
set.seed(3987);par(las=1);hist(rlnorm(500), add=TRUE,
freq=TRUE,col="blue",xlim=c(0,20),ylim=c(0,1000))
set.seed(3987);par(las=1);hist(rlnorm(100), add=TRUE,
freq=TRUE,col="green",xlim=c(0,20),ylim=c(0,1000))legend( 5, 900,legend=c("標本サイズ 1000","標本サイズ 500","標本サイズ 100"),col=c("darkblue","blue","green"),
lwd=c(7,7,7) )# 上記標本の５数要約
set.seed(3987);summary(rlnorm(1000)) ;set.seed(3987);summary(rlnorm(500)) ;set.seed(3987);summary(rlnorm(100))

20

第１講

統計を知る


統計ができるまでなるほど統計学園 > 学ぶ・知る > 統計のできるまで

本項における参考情報

http://www.stat.go.jp/naruhodo/c2const.html


初めて学ぶ統計– 公務員のためのオンライン講座 –コースポイント集
https://www.stat.go.jp/training/1kenshu/pdf/coursepoint.pdf

 「高校からの統計・データサイエンス活用～上級編～」
第 7 部 統計的思考によって大学入試・統計検定を乗り切ろう！
～大学入試・統計検定問題からみる統計的思考力～

統計ができるまでの流れは、以下のとおりです。
統計調査の流れ①

調査の企画
何のために、どのようなことを、誰を相手にして、いつ、どうやって調査するのか
調査の設計
調査票の設計、調査書類の作成

Step1

調査の企画や
設計

Step2

調査の実施

Step3

調査結果の
集計

①

調査票の集計
調査票の受付整理、調査票の入力、分類符号の格付け、データチェック
結果表の作成、結果表の審査

Step4

調査結果の
公表

①
②

調査結果の分析
調査結果の公表、報告書の作成②①②

調査票の配布・回収
調査票を配る、調査票を記入する、調査表を回収する
調査票の検査・提出
調査票の検査、調査票の提出

出典：「なるほど統計学園」（総務省）（http://www.stat.go.jp/naruhodo/c2const.html）より整理

公的統計とは国の行政機関・地方公共団体などが作成する統計のことを公的統計と言います。行政利用だけではなく、社会の情報基盤として位置づけられる統計で、統計調査により作成される統計（調査統計）のほ
か、業務データを集計することにより作成される統計（業務統計）や他の統計を加工することにより作成される統計（加工統計）も公的統計に該当します。調査統計は、全数調査又は標本調査で作られています。
全数調査は、集団の中をすべて調査しますので、集計した結果には、標本調査では必ず生ずる「標本誤差」が含まれません。したがって、全体の結果はもちろんのこと、男女別の結果や詳細な地域別の結果なども標本誤差を含まない正確な統計が得られます。例えば、我が国で実施されている最も大規模な全数調査である国勢調査では、全国結果だけでなく、都道府県別、市町村別はもちろん、町丁・字などの小地域の結果や、男女別・年齢別などの詳細な結果も公表されています。
なお、ほとんどの公的統計は標本調査でできた統計です。例えば、総務省統計局が実施している、労働力調査や家計調査、社会生活基本調査やサービス産業動向調査などです。標本調査は、選ばれた
一部の標本を対象に調査を行い、すべての対象を調べるわけではありませんので、その結果には誤差（こ

21

第１講

れを「標本誤差」といいます）が含まれますが、標本設計や結果の推定方法が適切であるか留意することにより精度の高い調査となっています。
＜統計法とは＞
公的統計は統計法に基づいて作られています。詳細は以下の「なるほど統計学園」をご確認ください。
【見てみよう！】 なるほど統計学園 https://www.stat.go.jp/naruhodo/c2stt061.html＜政府統計 8の統一ロゴタイプ＞「公的統計は行政利用だけではなく、社会全体で利用される情報基盤として位置付けられています。」（統計法（平成 19 年法律第 53 号）第 1 条より） 総務省では、政府統計のロゴを定め 9、調査票等に掲載することで、政府統計調査であることが一目で分かり、国民が安心して調査等に協力できるようにしています。

身近な統計データ＜身近な統計データ＞
実際に公的統計を用いて分析を行う際に、自分の興味に合ったデータを探すには、「政府統計の総合窓口（e-Stat）（https://www.e-stat.go.jp/）」等を利用してください。e-Stat では、項目別に統計データが整理されていますので、データを探すことがより簡単になっています。
【見てみよう！】 政府統計の総合窓口（e-Stat） https://www.e-stat.go.jp/

8

政府の機関が作る統計を政府統計と呼びます。公的統計はほぼ同じ意味ですが、日銀などの法人が作成する統計も含んでいます（統計法施行令第 1 条）
9

総務省ホームページ 「政府統計の統一ロゴタイプ」について(https://www.soumu.go.jp/toukei_toukatsu/index/seido/logo01.htm）

22

第１講

出典：政府統計の総合窓口（e-Stat）「分野からさがす」(https://www.e-stat.go.jp/statistics-by-theme/)＜「公的統計調査の調査票情報等の学術研究等への活用」について＞
公的統計は、社会全体で利用される情報基盤と位置付けられています。
国の統計調査の結果については、「政府統計の総合窓口（e-Stat）（https://www.e-stat.go.jp/）」等を通じて広く一般の方にご利用いただいていますが、このような通常の調査結果の提供に加え、公益性のある学術研究等にご活用いただくため、委託を受けて新たな集計表を作成して提供するサービス（オーダーメード集計）
や、調査対象の秘密の保護を図った上で、集計していない個票形式のデータ（調査票情報及び匿名データ）を提供するサービスを行っています。
出典：総務省ホームページ「公的統計調査の調査票情報等の学術研究等への活用」について(https://www.soumu.go.jp/toukei_toukatsu/index/seido/2jiriyou.htm)

各種テストにおける統計の出題実例＜大学入試センター試験 数学Ⅰ・A＞
2016 年度の大学入試センター試験「数学Ⅰ・A」では、アイスクリームの平均購入額と気象データの散布図から、「アイスクリームが売れる条件」を分析する問題が出題されました。

23

第１講
＜大学入試センター試験 数学Ⅱ・B＞
2015 年度の大学入試センター試験「数学Ⅱ・B」では、標準正規分布についての問題が出題されました。

24

計学習の指導のために（先生向け）:補助教材「各種テストにおける統計の出題例（大学入試センター試験）」（http://www.stat.go.jp/teacher/c2learn.html）」として紹介されています。統計を用いたテスト問題が、過去にどのような形式で出題されていたかを確認できます。

チャレンジ事項
実際に上記「統計学習の指導のために」へアクセスし教材を確認しましょう。担当している授業によって、扱うデータは異なりますが、授業作成のヒントとなります。
また、教材に関連する公的統計データを e-Stat から収集してみましょう。

25

第１講

他にも、平成 19 年から平成 21 年の大学入試センター試験各科目の統計に関する出題項目は「統

第１講

推測統計
確率や確率分布の概念を理解する。確率的事象に関する理解を深め、標本調査の本章の Point データを用いた分析を行う際に、立てた仮説と得られた結果の確からしさを確認する手法を理解します。
推測統計とは、母集団から抽出した標本の情報を用いて、母集団の情報を推測することです。母集団が非常に大きい場合、母集団の全てを調査することは、手間や費用が膨大にかかります。そのため、標本調査を実施し、標本調査のデータから母集団のデータを統計学的に推測することが多くあります。
統計学的に推測するには、データに当てはまるであろう確率分布を推定し、その確率分布を基に、母集団のデータを推測します。

確率変数と確率分布


本項における
参考情報「指導用 高校からの統計・データサイエンス活用～上級編～」
第４部 統計的探究の実践 Ⅲ ～モデルに基づいて現象を理解する～

なるほど統計学園 > 学ぶ・知る > 統計用語辞典
https://www.stat.go.jp/naruhodo/c2dic_ka.html＜確率変数＞
確率変数とは、どの値をとるか確実には分からず、確率的に決まる変数のことを示します。例えば、サイ
コロを振ったときに 1 から 6 のどの目が出るかは確実には分からず、ゆがみのないサイコロであれば 1/6 の確率で、1 から 6 のいずれかの目が出ます。よって、サイコロを振ったときに 1 から 6 のどの目が出るかが、確率変数です。この場合、確率変数を 𝑥𝑥 とおくと、確率変数 𝑥𝑥 は 1 から 6 までの整数の値をとることになります。

＜確率分布＞
確率分布とは、確率変数がとる値ごとの確率を表したものです。確率変数ごとの確率の合計は、1 となります。例えば、サイコロを振ったとき、1 から 6 のどの目が出るかの確率分布 10は、以下の表のようになり、1 からの 6 の目の確率の合計は 1 となります。
確率変数 (𝑥𝑥 )=サイコロの出る目
確率

10

1

2

3

4

5

6

1/6

1/6

1/6

1/6

1/6

1/6

サイコロを振ったときに出る目の確率分布は一様分布。

26

代表的な確率分布には、正規分布、二項分布、ポアソン分布などがあります。
分布名
正規分布

説明
理論的な確率分布。母集団から標本を無作為に抽出する場
合、標本の大きさが大きくなるほど正規分布に近づく。二項分布の試行回数 n が非常に大きい場合、正規分布に近づく。

二項分布

何かを行った場合に生じる結果が 2 つしかない試行を n 回繰り返す場合に当てはまる分布。例えば、成功・失敗、表・裏、当たり・はずれ等。

ポアソン分布

二項分布で、施行回数 n が非常に大きく、かつ、まれな現象である場合に当てはまる分布。例えば、大量に製造された製品の不良品数、日本の航空事故の発生件数等。

統計的推定と統計的仮説検定
統計的推定とは、母集団の特性値（平均や分散など）を標本のデータから統計学的に推測することを示します。また、統計的仮説検定とは、母集団に関するある仮説が統計学的に成り立つか否かを、標本のデータを用いて判断することです。

統計的推定
本項における
参考情報

「指導用 高校からの統計・データサイエンス活用～上級編～」
第 5 部 統計的探究の実践 Ⅳ ～標本データから全体を推測する～「高校からの統計・データサイエンス活用～上級編～」
第 5 部 統計的探究の実践 Ⅳ ～標本データから全体を推測する～＜推定の方法＞
推定は、母集団の特性値（平均や分散など）を標本のデータから統計学的に推測することで、推定には点推定と区間推定があります。点推定で推定するのは 1 つの値で、区間推定ではある区間（幅）をもって値を推定します。
＜点推定＞
点推定は、母集団の平均や分散などの特性値を、1 つの値で推定します。
例えば母平均（母集団の平均）の点推定は、大数の法則から標本の大きさが大きくなるほど、標本の平均は母平均に近づくため、標本の平均が母平均の推定値となります。ただし、実際の標本の大きさは無限に大きいものではないため、母平均の推定値は、実際の値と完全には一致しないことが考えられます。そのため、推定量がどのくらい正しいものかを表す指標に、標準誤差があります。

27

第１講

＜代表的な確率分布＞

第１講

標準誤差は、推定量の標準偏差のことで、𝑛𝑛：標本の大きさ、𝑥𝑥𝑖𝑖 = (𝑖𝑖 = 1,2, … , 𝑛𝑛) 標本の個々のデータとした場合、以下の数式で求めることができます。

𝑛𝑛

標準誤差＝
＜区間推定＞1��(𝑥𝑥𝑖𝑖 − 𝑥𝑥̅ )2𝑛𝑛 − 1𝑖𝑖=1√𝑛𝑛

区間推定は、母集団が正規分布に従うと仮定できる場合に、標本のデータを用いて母平均などの推定量を、1 つの値ではなく、入る区間（幅）で推定します。推定する区間を信頼区間と呼び、「90%信頼区間」「95%信頼区間」「99%信頼区間」などで求めます。
例えば「95%信頼区間」で求めた場合、「母集団から標本をとりだし、その標本から母平均の 95%信頼区間を求める」ことを 100 回実施したとき、95 回程度はその区間内に母平均が入る」ことを表します
11

11

。

母平均は知られていないだけで確定した値なので、得られた標本のもとで母平均がその区間内にある確率が 95%という意味

ではないことに注意してください。

28

第１講

統計的仮説検定
本項における

参考情報「指導用 高校からの統計・データサイエンス活用～上級編～」
第５部 統計的探究の実践 Ⅳ ～標本データから全体を推測する～

検定は、母集団に関するある仮説が統計学的に成り立つか否かを、標本のデータを用いて判断することで、以下の①～④の手順で実施します。
① 仮説を設定する② 有意水準を決定する③ 検証する④ 背理法を用いて結論を導く
例えば、「駅前のハンバーガー店のフライドポテトの重量が公表値の通りか 12」を検証するため、統計的仮説検定を実施してみましょう。
＜①仮説を設定する＞
仮説は、導き出したい結論とは反対の仮説を設定します。
導き出したい結論
設定する仮説 13

駅前のハンバーガー店のフライドポテトの重量が公表値の 135g ではない。
駅前のハンバーガー店のフライドポテトの重量が公表値の 135g のとおりである。

※公表値の 135g とは、駅前のハンバーガー店が販売している全フライドポテトの平均が 135g と考えます。

＜②有意水準を決定する＞
有意水準とは、設定した仮説が間違っていると判断する（仮説を棄却する）確率のことです。有意水
準 0.05 に設定した場合、5%以下の確率で生じる現象は、非常にまれなことであるとします。有意水準
は、0.05 や 0.01 が多く使われています。ここでは、有意水準 0.05 とします。
＜③検証する＞12「指導用 高校からの統計・データサイエンス活用～上級編～」 第５部 統計的探究の実践 Ⅳ ～標本データから全体を推測する～「高校からの統計・データサイエンス活用～上級編～」 第５部 統計的探究の実践 Ⅳ ～標本データから全体を推測する～

13

この仮説を帰無仮説と呼びます。

29

第１講

設定した仮説が正しいとした場合、データから仮説が実現する確率を導いて、検証します。ただし、設定した仮説の値がどのくらいの確率で起こりうるのという確率かが分からないため、検証するために使用する
値「検定統計量」を算出して、検証します。
今、高校生のグループが手分けして、駅前のハンバーガー店で、M サイズのフライドポテトを 10 個購入
し、各フライドポテトの重量を計測した結果が、以下の表のようになったとします。
購入した 10 個のフライドポテトの重量（各重量を X1、Ｘ２…X10 とします。）
120g

124g

126g

130g

130g

131g

132g

133g

134g

140g

駅前のハンバーガー店で販売しているフライドポテトの重量は正規分布にしたがっているとすると、購入した 10 個のフライドポテトの重量の平均、つまり標本平均は N(μ,σ2/10)に従います。μ は、ハンバーガー

店で販売しているフライドポテト全ての平均、つまり母平均で、σ2 は母分散を示しています。母分散が、既知で σ2=36 とした場合、検定統計量 Z は以下のように求めることができます。（𝑋𝑋�は、購入した 10 個のフライドポテトの重量の平均 130g、n は購入したフライドポテトの個数、つまり標本の大きさ、10 を示します。）

検定統計量 𝑍𝑍 =𝑋𝑋� − 𝜇𝜇𝜎𝜎/√𝑛𝑛=130 − 1356/√10

= −2.64

この検定統計量 Z が、上記で算出した値-2.64 と等しいかそれより極端な値になる確率を P 値や有意確率などと呼びます。P 値は、次のように、Ｒ等で簡単に求められます。

導きたい仮説「駅前のハンバーガー店のフライドポテトの重量が公表値の 135g ではない。」は、公表

値の 135g よりも重い場合と軽い場合の両方が考えられますが、「公表値の 135g ではない」は重い場
合でも軽い場合でもよいため、両側検定と呼ばれる方法を使用します。検定統計量 z は標準正規分布に従うため、標準正規分布表から検定統計量 2.64 に対応する値 0.0042 を、両側検定では 2 倍した値 0.0084 が P 値となります。P 値が小さいほど、算出した検定統計量値とはなりえないことを示すことができ、②に決めた有意水準 0.05 よりも小さいことから、設定した仮説のもとで観察された事象が起こる
ことは非常にまれなことであると判断できます。
＜④背理法を用いて結論を導く＞
検証した結果、設定した仮説「駅前のハンバーガー店のフライドポテトの重量が公表値の 135g のとおりである。」は正しいとは言えないと分かります。よって、設定した仮説とは逆の導き出したかった結論である「駅前のハンバーガー店のフライドポテトの重量が公表値の 135g のとおりではない。」が正しいと判断する
ことできます。

30

仮定して、この仮説が正しいとは言えないことを証明することで、導き出したい結論が正しいとする方法であり、背理法の考え方に基づいています。

チャレンジ事項
様々な分布を使って、「期待値」「分散」等を計算してみましょう。ある事象の期待値や分散は、自分が想像しているほど起こりやすいものでしょうか。また、もしも分布を用いて想定した期待値や分散が想定していたものと違った場合、それは本当に正しい数字なのか、検定してみましょう。

31

第１講

このように、仮説検定は、導き出したい結論正しいと判断するときに、導き出したい結論とは逆の仮説を

第１講

Column
高等学校からみるベイズ統計学の世界
岐阜聖徳学園大学 塩澤 友樹
近年，「ベイズ統計学」という題名の本を書店で多く見かけるようになりました。そこで，統計学辞典を調べると，確率概念の歴史を振り返る中で，主観確率を取り入れた統計学に触れ，「ベイズの定理が主要な役割を果たすこの統計学は，ベイジアン統計学と呼ばれている」(竹内編，p.938)と記しています。また，ベイズ統計に関連し，平成 30 年告示高等学校学習指導要領
解説数学編理数編（以下，解説）では，「数学 A」条件付き確率の説明の中で，次のように述べています。

…（略），次のようなベイズ統計の基本的な考え方を知った上で指導に当たることも，生徒の確率の意味の理解を深めるために有用であると考える。まず，データを観測する前に関心のある事象に主観確率（事前確率）を与え，関心のある事象が生じた下での観測データが出現する客観的条件付き確率（標本確率）を求めて乗法定理に基づき掛け算をする。それを用いて，関心のある事象のデータ観測という条件付き主観確率（事後確率）を推定する。これがベイズ統計の基になる考え方である。(p.95)（下線は筆者による）(1) 条件付き確率の式
事象 A が起こったときに事象 B が起こる条件付き確率 PA(B)は，次の式で表せる。
𝑃𝑃(𝐴𝐴 ∩ 𝐵𝐵)…①
𝑃𝑃𝐴𝐴 (𝐵𝐵) =𝑃𝑃(𝐴𝐴)(2) 乗法定理の式
2 つの事象 A，B がともに起こる確率 P(A∩B)は，次の 2 通りの式で表せる。
𝑃𝑃(𝐴𝐴 ∩ 𝐵𝐵) = 𝑃𝑃𝐴𝐴 (𝐵𝐵)𝑃𝑃(𝐴𝐴) = 𝑃𝑃𝐵𝐵 (𝐴𝐴)𝑃𝑃(𝐵𝐵) … ②①，②は，高校「数学 A」の①に②を代入すると，ベイズの定理の最も単純な形の式が導かれる。
教科書で見かける式だね。
𝑷𝑷𝑩𝑩 (𝑨𝑨)𝑷𝑷(𝑩𝑩)𝑷𝑷𝑩𝑩 (𝑨𝑨)𝑷𝑷(𝑩𝑩)=（ベイズの定理）
𝑷𝑷𝑨𝑨 (𝑩𝑩) =�)
𝑷𝑷(𝑨𝑨)𝑷𝑷𝑩𝑩 (𝑨𝑨)𝑷𝑷(𝑩𝑩)+𝑷𝑷𝑩𝑩� (𝑨𝑨)𝑷𝑷(𝑩𝑩

事後確率
（例）

𝑷𝑷赤い �リンゴである�

=

𝑷𝑷リンゴである �赤い�
𝑷𝑷 �赤い�

事前確率×𝑷𝑷(リンゴである)「赤い」と分かっている方が，「リンゴである」確率が高くなりそうだね。
※上のように確率を更新することを“ベイズ更新”という。

さて，なぜ，ベイズの定理がベイズ統計学の基になる考え方なのでしょうか？ベイズの定理の歴史を紐解くと，ベイズの定理の基礎となる考え方は，イギリスの牧師を務めたトーマス・ベイズ(Thomas Bayes 1702-1761)によって提案されました。250 年以上前に提案されたこの定理の歩みは順当なものではなく，ベイズの定理の考えを記した論文も，彼の死後明るみになったようです。しかし，涌井・涌井(2018)を参考にすると，例えば，現在では，次のような「迷惑メールの分類」にも応用できます。

32

第１講

迷惑メールの分類のイメージ図
新着メール
…無料…，

ベイズフィルター（新着メールが迷惑メールである確率の計算）……当選…。
……………。

【出典】いらすとや，https://www.irasutoya.com/「世の中のメール」
通常メールの確率 0.6
迷惑メールの確率 0.4「無料」あり→→→「１回目のベイズ更新後」「2 回目のベイズ更新後」
通常メールの確率 0.5「当選」あり通常メールの確率 0.14
迷惑メールの確率 0.5→→→
迷惑メールの確率 0.86

〔例題〕
迷惑メールに含まれている用語として「無料」，「当選」がある。これらは通常メールと迷惑メールの中に，それぞれ右表の確率で含まれていることが分かっている。ある新着メールを調べたら「無

用語

通常メール

迷惑メール

無料

0.2

0.3

当選

0.1

0.6

料」
，
「当選」という順番で各用語が見つかった。このとき，このメールを通常メール，迷惑メールのどちらに分類した方がよいか判定せよ。ただし，一般的には新着メールの中で，通常メールと迷惑メールの比率は 6：4 の割合とする。
〔解答例〕
通常メールである事象を T1，迷惑メールである事象を F1，「無料」が見つかる事象を A とする。
「無料」が見つかったとき，通常メール及び迷惑メールである確率は，条件より P(𝑇𝑇1 )=0.6，P(𝐹𝐹1 )=0.4 とすると
𝑃𝑃𝐴𝐴 (𝐹𝐹1 ) =𝑃𝑃𝐹𝐹1 (𝐴𝐴)𝑃𝑃(𝐹𝐹1 )𝑃𝑃𝐹𝐹1 (𝐴𝐴)𝑃𝑃(𝐹𝐹1 )0.3 × 0.4==
= 0.5
𝑃𝑃(𝐴𝐴)
𝑃𝑃𝑇𝑇1 (𝐴𝐴)𝑃𝑃(𝑇𝑇1 ) + 𝑃𝑃𝐹𝐹1 (𝐴𝐴)𝑃𝑃(𝐹𝐹1 ) 0.2 × 0.6 + 0.3 × 0.4

𝑃𝑃𝐴𝐴 (𝑇𝑇1 ) = 1 − 𝑃𝑃𝐴𝐴 (𝐹𝐹1 ) = 0.5「無料」の次に「当選」が見つかったとき，「当選」が見つかる事象を B とする。通常メールである事象
を T2，迷惑メールである事象を F2 とし，上の事後確率を事前確率とみなすと P(T2)=0.5 P(F2)=0.5
𝑃𝑃𝐵𝐵 (𝐹𝐹2 ) =𝑃𝑃𝐹𝐹2 (𝐵𝐵)𝑃𝑃(𝐹𝐹2 )𝑃𝑃𝐹𝐹2 (𝐵𝐵)𝑃𝑃(𝐹𝐹2 )0.6 × 0.5==
≒ 0.86𝑃𝑃(𝐵𝐵)
𝑃𝑃𝑇𝑇2 (𝐵𝐵)𝑃𝑃(𝑇𝑇2 ) + 𝑃𝑃𝐹𝐹2 (𝐵𝐵)𝑃𝑃(𝐹𝐹2 ) 0.1 × 0.5 + 0.6 × 0.5

迷惑メールの確率がおよそ 0.86 であるため，「迷惑メール」に分類した方がよい。

※上の方法とは異なり，迷惑メールの判定では，より簡単に「通常メール」と「迷惑メール」の確率の比を利用する方法が知られている（涌井・涌井，2018，p.133）。

上の例題から読み取れるように，「事前確率」や「事後確率」の立場から式を解釈すると，ベイズの定理を用いることで，確率を更新できます。また，「事前確率の設定」には注意が必要ですが，データに基づく判断や経験を事前確率（下線部）に生かすことができます。この意味で，ベイズの定理に基づく確率は“主観確率”と呼ばれ，歴史的にみても，受け入れられるまでに時間がかかった理由でもあります。現在のベイズ統計学では，適切なモデルとして事前分布を設定
し，データに基づき数学的な処理を施すことで，事後分布を得ます。そして，事後分布に基づき予測を行い，その評価を通してよりよい推定を追求する等，様々なアプローチが試みられていま

33

第１講

す。このモデルの考え方については，例えば，大関(2018)が分かりやすく紹介しています。
以上を踏まえると，解説では，ベイズ統計に向けた”考え方”を高校生なりに理解させることに配慮して，ベイズの定理とベイズ統計の関係について言及されたことが推察できます。

現在の社会は，第 4 次産業革命を迎え，Society5.0 に向けた準備に取り組んでいます。AI（人工知能）やビッグデータの活用に向けて，ベイズ統計学は「花の品種の判別」や「病気の診断」
といった事例にも応用できます（木村編，2019）。また，データに応じて判別や分類の精度を高めることができることに着目すれば，機械学習の仕組みにもベイズ統計学が応用されることにも納得がいくでしょう。
高等学校では，どの教科でも扱う内容が多く，余裕をもって授業を展開できない実態があります。しかし，高校数学での学びの中で，ベイズ統計学の考え方に触れることができれば，より深くデータの「判別」や「分類」 の仕組みを理解できます。学校現場の実態に合わせて，ベイズ
統計学の世界を垣間見てはいかがでしょうか？

引用参考文献大関真之(2018). ベイズ推定入門―モデル選択からベイズ的最適化まで―，オーム社．
木村直之編(2019)．ニュートン別冊数学の世界 現代編．ニュートンプレス．18-35．
竹内啓編(2000)．統計学辞典（第 6 版)．東洋経済新報社．15-17，938.
文部科学省(2019)．高等学校学習指導要領（平成 30 年告示）解説数学編理数編，学校図書．
涌井良幸・涌井貞美(2018)．史上最強図解 これならわかる！ベイズ統計学(第 11 版)．ナツメ社

34

第１講

ビッグデータの活用と分析
ビッグデータの活用と分析の手法を理解する。具体的な手法としては、大量の文字デ
本章の Pointータを分析するテキストマイニングや、省庁などで公開されている統計データを効率的に収拾する API(後述)の仕組みを理解し、実際にデータ分析を行う際のデータ収集を簡略化できるような力をつける。
 外務省 外交青書
https://www.mofa.go.jp/mofaj/gaiko/bluebook/index.html
第 51 号平成 20 年版外交青書（2008 年版）

利用 Data〜第 62 号令和元年版外交青書（2019 年版）
 青空文庫https://www.aozora.gr.jp/
夏目漱石の 6 作品

形態素解析によるテキストマイニング
本項における
参考情報

文部科学省 高等学校情報科「情報Ⅰ」教員研修用教材（本編）https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1416756.htm
第 4 章情報通信ネットワークとデータの活用・巻末

テキストマイニングとはテキストマイニングとは、大量の文章（テキストデータ）から情報を取り出し分析し可視化する手法です。文章を単語や文節に分割し、出現頻度や傾向を分析します。この分析に使われる技術の一つが形態素解析です。形態素解析により、文章を最小単位に区切り、品詞、名詞、動詞などを特定するという事前処理を行うことで単語の出現頻度の計算などが可能になります。

テキストマイニングの流れ
テキストマイニングのプロセスは以下のとおりです。
STEP1
データの準備Web サイトのデータ、アンケート

STEP2
形態素解析
構文解析
単語単位に分割

STEP4

STEP５

分析・

評価・検

クレンジング

可視化

証

表記の揺れの統一

出現頻度の集

評価・検証

クレンジング

計、単語同士のSTEP3
データの自由回答など

相関分析など35

第１講

データの準備は分析者が行う必要がありますが、STEP2 から STEP4 までは、コンピュータが自動で行います。なお、単語頻度の分析結果から、類似の単語、類似の話題などを分析するなど、分析目的や問題意識の理論を反映する工程は分析者が行う必要があります。それらを反映し、上記手順を繰り返すことで、結果を導きます。

テキストマイニングのツール
日本語のテキストマイニングのソフトで代表的なものに、「MeCab（めかぶ）」と「茶筅（ちゃせん）」などがあります。
＜統計解析ソフトウェア R と MeCab を用いた手順＞①

統計解析ソフトウェア「R」をインストールする②

形態素解析システム「MeCab」 をインストールする③

R で MeCab を使うためのソフトウェア「RMeCab」をインストール④「RMeCab」を呼び出す※R、MeCab、RMeCab は、端末ごとにインストールが必要です。

＜RMeCab を実行＞
プログラム
library(RMeCab)unlist(RMeCabc(“学食でランチだ”))

実行結果“学食“ ”で” ”ランチ” ”だ”
名詞 助詞 名詞 助動詞

詳しいプログラムの手順や、単語出現頻度のグラフや、出現頻度に応じた文字の大きさで単語を表示するワードクラウドというパッケージを用いた図表を作成する方法については、文部科学省が公開している「高等学校情報科「情報Ⅰ」教員研修用教材」 14や、この章の後半にあるサンプルプログラムを確認してください。

14

文部科学省 高等学校情報科「情報Ⅰ」教員研修用教材（本編）

第 4 章情報通信ネットワークとデータの活用・巻末 （4）テキストの分析とその可能性 演習 2
https://www.mext.go.jp/component/a_menu/education/micro_detail/__icsFiles/afieldfile/2019/09/24/1416758_
006_1.pdf

36実際に、テキストマイニングの実例として、外務省から発行されている「外交青書 15」を対象とした分析を行います。マイニングの対象は外交青書の第 1 章（主に概要に相当する部分）で、2008 年～
2019 年を分析しています。テキストマイニングを用いることによって、全体を読むことなく、その年の外交的トレンドとなるワードや国名をピックアップすることが可能になります。
分析の試行は 3 段階となります。
対象

外交青書の第 1 章（主に概要に相当する部分） 2008～2019 年

目的テキストマイニングを用いることによって、全体を読むことなく、その年のトレンドとなるワードや国名をピックアップする。

段階
試行１
試行２

実施内容

目 的

何も工夫せず名詞

高い頻度で出てくる単語は定型的なものが多く、トレンドが見え

を取り出す

づらい。

毎年変わらず出てく

1 と比較して違いが見えやすくなる。

る頻出単語を外す
試行３

国名に着目して、頻

年ごとに高い頻度で出てくる国等が分かる。

度を見る
演習

特定のキーワードに

例えば新技術関連語を拾ってみる、あるいは環境問題の関連着目した展開用語を拾ってみる。

各試行の結果とプログラムをそれぞれ示します。

15

外交青書とは、国際情勢の推移および日本が行ってきた外交活動の概観をとりまとめたもので、昭和 32 年（1957 年）9 月の第 1 号以
来、毎年発行されています。（https://www.mofa.go.jp/mofaj/gaiko/bluebook/index.html）

37

第１講

Python、R でのテキストマイニング

第１講

試行 1
分析方針

何も工夫せず名詞を取り出す

結果

高い頻度で出てくる単語は定型的なものが多く、トレンドが見えづらい。

手順 1 の分析結果一覧（R での出力例）
2019

2018

2017

2016

2015

2014

2013

2012

2011

2010

2009

2008

Python での出力例※Python においては、デフォルトで設定されている色が Rと異なるため、左のようになっていますが、色や文字の大きさの設定を R の出力例と同一に設定すれば、上記のような図を出力可能です。

38

外交青書 テキストマイニング試行 1

利用 Data

外交青書 2008~2019 テキストファイル
Python コード（サンプル）# セッションの開始毎に必要
import codecs
import wordcloudimport MeCabpath = 'C:xxx.txt' # ディスク上でのファイル置き場を指定する（場所は任意）
file = codecs.open(path,'r', 'cp932', 'ignore') # ファイル読込
text = file.read()m = MeCab.Tagger('')
text = text.replace('\r','')
parsed = m.parse(text) # 分かち書き、品詞情報抽出#名詞のリストを作成
idx = list()
for i , val in enumerate(parsed.splitlines()[:-1]):
if val.split('\t')[1].split(',')[0] in ['名詞']: # 名詞のみを取り出す
idx.append(val.split('\t')[0])splitted = ' '.join(idx) # リストを一つにまとめる# ワードクラウドを作成
wordc = wordcloud.WordCloud(font_path='HGRGM.TTC',
background_color='white').generate(splitted)
wordc.to_file('wordCloud.png')

39

第１講

実施内容

第１講

R コード（サンプル）#install.packages("RMeCab", repos = "https://rmecab.jp/R")
library(RMeCab)# 最初の一度だけ# セッションの開始毎に必要

setwd("C:xxx") # ディスク上でのファイル置き場を指定する（場所は任意）
fq1 <- RMeCabFreq("xxx.txt") #文章を単語に分割し、各単語の品詞と出現回数をカウントする
str(fq1)(tb.fq1 <- table(fq1$Info1))(nm.fq1 <- names(tb.fq1)) # 品詞情報抽出#品詞別のインデックスを作成
idx <- list()for (i in 1:length(nm.fq1)){
idx[[i]] <- which(fq1$Info1 == nm.fq1[i])}# ワードクラウドを作成するためのパッケージのインストールとロード#install.packages("wordcloud")library(wordcloud)# 最初の一回だけ# セッション開始毎に必要# 名詞
wordcloud(fq1$Term[idx[[9]]], fq1$Freq[idx[[9]]], colors=rainbow(20), min.freq=10)

40

第１講

試行 2
分析方針

毎年変わらず出てくる頻出単語を外す

結果

試行 1 と比較して違いが見えやすくなる。

外す頻出単語リスト 日本, 国際, 的, 経済, 社会, 平和, 強化, 地域, 外交, 世界, 協力, 国,
年, 月, 関係, 化, 日, 主義, 自由, 課題, 戦略, 大臣, 問題, 化, 等, 性,開発, 安全, 貢献, 支援, 安定, 国家, 保障, 国連, 重要, 変化, 分野, こと, ため, 諸国, 取組, 積極, 国民, 連携
手順 2 の分析結果一覧
2019

2018

2017

2016

2015

2014

2013

2012

2011

2010

2009

2008

Python での出力例※Python においては、デフォルトで設定されている色が Rと異なるため、左のようになっていますが、色や文字の大きさの設定を R の出力例と同一に設定すれば、上記のような図を出力可能です。

41

第１講

実施内容

外交青書 テキストマイニング試行 2

利用 Data 外交青書 2008~2019 テキストファイル
Python コード（サンプル）# セッションの開始毎に必要
import codecs
import wordcloudimport MeCabpath = 'C:xxx.txt' # ディスク上でのファイル置き場を指定する（場所は任意）
file = codecs.open(path,'r', 'cp932', 'ignore') # ファイル読込
text = file.read()m = MeCab.Tagger('')
text = text.replace('\r','')
parsed = m.parse(text) # 分かち書き、品詞情報抽出#名詞のリストを作成
idx = list()
for i , val in enumerate(parsed.splitlines()[:-1]):
if val.split('\t')[1].split(',')[0] in ['名詞']: # 名詞のみを取り出す
if val.split('\t')[0] not in ('日本','国際','的','経済','社会','平和','強化','地域','外交','世界','協力','国','年','月','関係','化','日','主義','自由','課題','戦略','大臣','問題','化','等','性','開発','安全','貢献','支援','安定','国家','保障','国連','重要','変化','分野','こと','ため','諸国','取組','積極','国民','連携','2018','2017','2016','2015','2014','2013','2012','2011','2010','2009','2008','2007'):
idx.append(val.split('\t')[0])# import collections# print(collections.Counter(idx)) # 頻度の高い名詞を探す
splitted = ' '.join(idx) # リストを一つにまとめる# ワードクラウドを作成
wordc = wordcloud.WordCloud(font_path='HGRGM.TTC',background_color='white').generate(splitted)
wordc.to_file('wordCloud.png')42

# 以下 R での作業
#install.packages("RMeCab", repos = "https://rmecab.jp/R")
library(RMeCab)# 最初の一度だけ# セッションの開始毎に必要

setwd("C:xxx") # ディスク上でのファイル置き場を指定する（場所は任意）

fq1 <- RMeCabFreq("2018.txt")
fq1 <- RMeCabFreq("2018.txt")#fq2 <- subset(fq1 ,Info1=="名詞")#頻度の高い名詞を探す#fq2[order(-fq2$Freq),]fq2 <- subset(fq1 ,Term != "日本"&Term !="国際"&Term !="的"&Term !="経済"&Term !="社会"&Term !="平和"&Term !="強化"&Term !="地域"&Term !="外交"&Term !="世界"&Term !="協力"&Term !="国"&Term !="年"&Term !="月"&Term !="関係"&Term !="化"&Term !="日"&Term !="主義"&Term !="自由"&Term !="課題"&Term !="戦略"&Term !="大臣"&Term !="問題"&Term !="化"&Term !="等"&Term !="性"&Term !="開発"&Term !="安全"&Term !="貢献"&Term !="支援"&Term !="安定"&Term !="国家"&Term !="保障"&Term !="国連"&Term !="重要"&Term !="変化"&Term !="分野"&Term !="こと"&Term !="ため"&Term !="諸国"&Term !="取組"&Term !="積極"&Term !="国民"&Term !="連携"&Term !="2018"&Term !="2017"&Term !="2016"&Term !="2015"&Term !="2014"&Term !="2013"&Term !="2012"&Term !="2011"&Term !="2010"&Term !="2009"&Term !="2008"&Term !="2007")
str(fq2)(tb.fq2 <- table(fq2$Info1))(nm.fq2 <- names(tb.fq2)) # 品詞情報抽出#品詞別のインデックスを作成
idx <- list()for (i in 1:length(nm.fq2)){
idx[[i]] <- which(fq2$Info1 == nm.fq2[i])}# ワードクラウドを作成するためのパッケージのインストールとロード#install.packages("wordcloud")library(wordcloud)# 最初の一回だけ# セッション開始毎に必要# 名詞
wordcloud(fq2$Term[idx[[9]]], fq2$Freq[idx[[9]]], colors=rainbow(20), min.freq=5)

43

第１講

R コード（サンプル）

第１講

試行 3
分析方針

国名に着目して、頻度を見る

結果

年ごとに高い頻度で出てくる国等が分かる。

手順 3 の分析結果一覧
2019

2018

2017

2016

2015

2014

2013

2012

2011

2010

2009

2008

Python での出力例※Python においては、デフォルトで設定されている色がR と異なるため、左のようになっていますが、色や文字の大きさの設定を R の出力例と同一に設定すれば、上記のような図を出力可能です。

44

年と 2008 年」を比較しました。
「2019 年と 2018 年」
中国や韓国といった近隣諸国､および経済的な協力関係を持っているインドについて多く言及「2009 年と 2008 年」
アフガニスタン邦人拉致事件などが起こるなど、中東地域への注目が高い

どの年においてもアメリカが一定程度言及されており、日本においてアメリカが一貫して重要な相手であることが読み取れる

45

第１講

次に試行 3 で得られた結果を、単語の出現頻度別にグラフに整理し、「2019 年と 2018 年」と「2009

第１講

実施内容

外交青書 テキストマイニング試行 3

利用 Data 外交青書 2008~2019 テキストファイル
Python コード（サンプル）# セッションの開始毎に必要
import codecs
import wordcloudimport MeCabpath = 'C:xxx.txt' # ディスク上でのファイル置き場を指定する（場所は任意）
file = codecs.open(path,'r', 'cp932', 'ignore') # ファイル読込
text = file.read()m = MeCab.Tagger('')
text = text.replace('\r','')
parsed = m.parse(text) # 分かち書き、品詞情報抽出#名詞のリストを作成
idx = list()
for i , val in enumerate(parsed.splitlines()[:-1]):
if val.split('\t')[1].split(',')[1] in ['固有名詞'] and val.split('\t')[0] not in ('日本','日'): # 固有名詞のみを取り出す
idx.append(val.split('\t')[0])splitted = ' '.join(idx) # リストを一つにまとめる# ワードクラウドを作成
wordc = wordcloud.WordCloud(font_path='HGRGM.TTC',
background_color='white').generate(splitted)
wordc.to_file('wordCloud.png')

46

library(RMeCab)# 最初の一度だけ# セッションの開始毎に必要

setwd("C:xxx") # ディスク上でのファイル置き場を指定する（場所は任意）
fq1 <- RMeCabFreq("2019.txt")
fq1 <- RMeCabFreq("2019.txt")
fq2 <- subset(fq1 ,Info2 == "固有名詞"&Term != "日本"&Term != "日")#fq2[order(-fq2$Freq),]str(fq2)(tb.fq2 <- table(fq2$Info1))(nm.fq2 <- names(tb.fq2)) # 品詞情報抽出#品詞別のインデックスを作成
idx <- list()for (i in 1:length(nm.fq2)){
idx[[i]] <- which(fq2$Info1 == nm.fq2[i])}# ワードクラウドを作成するためのパッケージのインストールとロード#install.packages("wordcloud")library(wordcloud)# 最初の一回だけ# セッション開始毎に必要# 名詞
wordcloud(fq2$Term[idx[[1]]], fq2$Freq[idx[[1]]], colors=rainbow(20))

47

第１講

R コード（サンプル）#install.packages("RMeCab", repos = "https://rmecab.jp/R")

第１講

KH_coder でのテキストマイニング 16
次にプログラミング技術がなくともマウスの操作だけで、本格的なテキストマイニングを実施できる事例を紹介します。データとして、「青空文庫 17」に収録されている作品の中から、夏目漱石の 6 作品(三四郎、それから、門、彼岸過迄[ひがんすぎまで]、行人[こうじん]、こころ)を対象とした分析を行います。
対象

夏目漱石の 6 作品のテキストデータ

目的

テキストマイニングを用いることによって、作品ごとの頻出語の抽出と 6 作品の関連性を共起
ネットワークの手法を用いて分析する。

段階

実施内容

目 的

ステップ 1EXCEL ファイルにデ

EXCEL ファイルの 1 列目に本文を入力し、2 列目以降に関連ータを整備する

する外部変数を入力する。

小説全体の頻出単分析したい作家がよく使う単語を把握する。

ステップ 2

語をみる。
ステップ 3

共起ネットワークにより 作家の小説ごとの関連性を分析する。
作家の特徴を分析

演習

ほかの作家が執筆し作家ごとの特徴やその作者の年齢による特徴の推移を分析すた作品を分析

る。

各ステップの手順と推計結果を順番に示します。

16

KH_coder は立命館大学の樋口耕一先生が開発したフリーソフトウェアです。内容については、以下を参照しました。
樋口耕一 2020 『社会調査のための計量テキスト分析 ―内容分析の継承と発展を目指して― 第 2 版』 ナカニシヤ出版

17

青空文庫とは、著作権が消滅した作品や著者が許諾した作品のテキストを公開しているインターネット上の電子図書です。

（ https://www.aozora.gr.jp/ ）

48

第１講

(1)

エクセルファイルでデータを整備する

KH_coder が対応するファイルは、テキストファイル(.txt)、CSV ファイル(.csv)、EXCEL ファイル(.xlsx)を利用できますが、本文以外の「作品タイトル」や「特徴的なワード」といった外部変数を利用できるというメリットがあること等からここでは EXCEL ファイルでの利用を紹介します。
下図のように一番左側の列に本文を入力し、その右にタイトル、部、章、「前期・後期」の別等の順に必要に応じてデータ整備します。

KH_coder を用いることにより、MeCab や ChaSen による形態素解析を簡単に処理できるほか、対応分析、多次元尺度構成法による分析、階層的クラスター分析、共起ネットワークによる分析、自己組織化
マップによる分析等さまざまな分析を視覚的な操作で行うことができます。

49

第１講

(2)

KH_coder を用いた分析

KH_coder は視覚的にタブをクリックし、該当する項目をクリックすることで作業ができます。今回は結果だけを紹介しますが、下図は前の章でも紹介している「頻出語」の結果イメージです。
左側が、「三四郎」の作品の頻出語で、右側は「こころ」からの結果です。

さらに、共起ネットワークという手法を利用すると、6 作品で頻出している語がどのような関連しているか、ビジュアル化された情報を簡単に得ることができます。夏名漱石の上記 6 作品は、「三四郎」「それから」「門」は、前期三部作と呼ばれ、一方、「彼岸過迄」「行人」「こころ」は後期三部作と呼ばれていますが、この共起ネットワークと呼ばれる分析手法からもこの特徴を関連付けてみることができます。特に後期三部作と呼ばれる作品は、特徴的な動詞により関連性の高さがとてもよく推計されていることがわかります。
また、前期三部作と後期三部作にそれぞれ共通によく使われている語として、「嫂」「奥さん」「先生」があり、夏名漱石の小説に頻出する言葉の特徴がとてもよくわかります。

50

すが、文学のような領域でもその効果を発揮することができることなどから、近年、文理の領域を超えてデータを利活用することに関心が高まっています。
このようなテキストマイニングによる分析手法は、アンケートの自由記入欄の分析に用いられるほか、文学作
品や歌詞等さまざまなテキストデータの分析に用いられるようになってきています。

どう
こう

兄

話

母
答える

兄さん
来る

少し

父
米
置く
門

嫂

行人

顔

ぬ

色

行く

助

それから

言葉

する 眼
ない

今日

見る

思う

Degree:

出る
云う
見える

1
2
3

好い

Frequency:

自分
女

ない
そう なる

彼岸過迄

分る

聞く ある

今

先生

こころ
まだ

三四郎

ん

5000

出す

奥さん
言う

2500

頭

7500

男
考える
人
できる
前 いる

つく
10000

帰る
いう

通り
心

知る また

書く

チャレンジ事項
青空文庫には、さまざまな作家が執筆した作家の小説等が収録されています。自分の好きな作家の小説の特徴を分析することや、いろんなジャンルのミュージシャンが作詞した歌詞の特徴を分析することにチャレンジしてみましょう。

51

第１講

このように、数理的な手法を用いた分析手法は、自然科学の領域でその効果を発揮すると思われがちで

第１講

API で公的統計データを取得
本項における

参考情報https://www.soumu.go.jp/ict_skill/pdf/ict_skill_1_5.pdf

総務省 ICT スキル総合習得教材 1-5：API によるデータ収集と利活用

API とは何か
API とは、（Application Programming Interface 18）の略であり、あるコンピュータプログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式を定めたもののことです。
API の最後の I の Interface は、「接点」「接続面」と訳され、「つなぐもの・媒介物」を意味し、API はプログラムによって「様々な機器やアプリケーシ
ョン（ソフトウェア）をつなぐもの」というイメージです。
API には様々な種類がありますが、近年においては Web API が特に注目を集めています。
Web API は、外部機器との通信を行い、API を通じた情報交換がHTTP と呼ばれるウェブサイトの閲覧と同じ通信方式を利用しているため、前に Web とついています。近年、API の前に特定の語句を付けない場合
でも、Web API を指すケースが多く、本項でも Web API に焦点を当てて説明します。
API は「コンピュータ（プログラム）同士が協力する機能・仕組み」を指しています。
API を利用すると、複数のコンピュータ（プログラム）で情報交換・協力することで、単体のコンピュータ（プログラム）では、できなかったことができるようになります。
協力すれば大きなこと、新しいことができるようになるのは人間もコンピュータ（プログラム）も同様です。Web API を利用することで、他者が提供している情報やインターネット上のサービスを自分のウェブサイトや自作アプリに利用することもできます。人間がプログラムを作成することで、API 経由でコンピュータ（プログラム）に情報を与えたり、情報を引き出したりすることもできます。
無関係な外部組織を含めて、第三者による利用が可能な API は「オープン API」と呼ばれます。
オープン API は技術的には REST API 又は RESTful API と呼ばれる「パラメータを指定して特定の URL に HTTP で
アクセスする形式、過去の情報に依存せず各アクセスで要求が完結する形式」をとっているケースが一般的です。
オープン API とは対照的に一般公開されず、同一組織内や予め定められた組織間でのみ利用可能な内部用の API もあります。
出典：総務省 「ICT スキル総合習得教材 1-5：API によるデータ収集と利活用 P3-5」より抜粋
https://www.soumu.go.jp/ict_skill/pdf/ict_skill_1_5.pdf (2020 年 3 月 18 日アクセス確認)

18

Interface はハードウェア面では「機器の接続部分」、ソフトウェア面では情報交換の「（受付部分の）ルール」を指すことが一般的です。

52

第１講

出典：総務省 「ICT スキル総合習得教材 1-5：API によるデータ収集と利活用 P3-5」より抜粋
https://www.soumu.go.jp/ict_skill/pdf/ict_skill_1_5.pdf (2020 年 3 月 18 日アクセス確認)＜e-Stat API＞
公的統計に関する API としては総務省統計局が運営する e-Stat API があります。
一般的な e-Stat のウェブサイトでは、公的統計のデータを定型化された表形式でウェブブラウザに表示したり、EXCEL ファイルをダウンロードしたりすることができます。
e-Stat API を用いることで、公的統計に関する API としては総務省統計局が運営する e-Stat APIがあります。公的統計のデータを細目や期間など対象を絞ってデータを収集できます。この API 機能で取得したデータを商用利用することも可能です。また、この機能を利用したアプリケーションを公開している例も多くみられます。
＜RESAS API＞
内閣府地方創生推進室が運営する RESAS API では、RESAS（リーサス） 19によって可視化されているデータの一部を API を通じて提供しています。RESAS API では、将来人口の予測など、公的統計以外の公的データも提供しています。詳細は、第 4 講 「１．データから見る社会・経済情勢（１）データの変化を読み取る」において、触れています。

19

RESAS とは、地域経済分析システム（以下、RESAS）のことであり、地域に関する官民の様々なデータを搭載し、誰もが分かりやすいように「見える化」したシステムです。このシステムは、自治体職員の方や、地域の活性化に関心を持つ様々な分野の方によって、効果的な施策の立案・実行・検証のためなどに広く利用されています。

53

第１講
【見てみよう！】
ｅ-Stat API 機能 https://www.e-stat.go.jp/api/api-info/api-guide
RESAS API https://opendata.resas-portal.go.jp/

実際に e-Stat の API を活用する場合の手順詳細は e-Stat（https://www.estat.go.jp/api/api-info/api-guide）に記載があります。ユーザー登録や ID 取得をした後に下記のコードでデータを取得してみてください。

Python、R での e-Stat API でデータを取得
政府統計の URL や政府統計コードは、e-Stat 政府統計一覧（https://www.estat.go.jp/stat-search/database）に掲載されています。
CSV 形式のデータ取得はわかりやすく便利ですが、JSON 形式で取得するとデータの関連情報も付
随し、各項目のコードの内容や日本語の項目名などをコードの中で利用することができます。JSON（ジェイソン）とは、JavaScript Object Notation の略で、XML と同様にデータを記述するための言語の一種です。テキストベースでデータ交換ができ、処理も簡単なために、プログラミング言語を問わず広く利用されています。

54

第１講

実施内容

e-Stat API でデータを取得

利用 Data e-Stat データベース
Python コード（サンプル）# 必要なライブラリの読み込み
import csv
from io import StringIO
import requests# estat サイトより取得した appId を指定
appId = 'xxxxx'# 全国消費実態調査 / 平成 26 年全国消費実態調査 / 全国 品目及び購入先・購入地域に関する結果 総世帯 の URL
url = f'http://api.e-stat.go.jp/rest/2.1/app/getSimpleStats_Data?appId={appId}&lang=J&statsDataId_=0003130397&metaGetFlg=Y&cntGetFlg=N&_sectionHeaderFlg=2'# CSV のダウンロード
r = requests.get(url)body = r.text# ダウンロードした CSV をパース
rf = StringIO(body)
reader = csv.reader(rf, delimiter=',')# リスト形式に変換
csv_list = [row for row in reader]# 1 行目を除外（データ部分ではなく、"VALUE" と書かれているため）
csv_list = csv_list[1:]# CSV ファイルとして出力 xxx.csv に csv のファイルパスを記載
with open('xxx.csv', 'w', newline='') as wf:
writer = csv.writer(wf)writer.writerows(csv_list)

55

第１講

R コード（サンプル）# estat サイトより取得した appId を指定
appId = 'xxxxx'# 以下がインストール済みでない場合はインストール#install.packages("estatapi")#install.packages("listviewer")#install.packages("rlist")#install.packages("pipeR")#install.packages("stringr")# 必要なライブラリの読み込み
library("httr")
library("listviewer")
library("rlist")
library("pipeR")library("stringr")
library("dplyr")# E-Stat データを取得# 全国消費実態調査 / 平成 26 年全国消費実態調査 / 全国 品目及び購入先・購入地域に関する結果 総世帯に関する結果
response <- GET(
url = "https://api.e-stat.go.jp/rest/3.0/app/getSimpleStatsData",
query = list(
appId = 'appId',
statsDataId = "0003130397",
cdCat01= "010800130"))
response
res_contents <- content(response)
result <- read.csv(text = sub('"VALUE"\n', "", res_contents))# CSV ファイルとして出力 C:xxx.csv に csv のファイルパスを記載
write.csv(result, "C:xxx.csv", row.names=FALSE)

56

e-Stat API で JSON データを取得し、人口ピラミッドを描画する
e-Stat データベース
R コード（サンプル）# estat サイトより取得した appId を指定
appId = 'xxxxx'# 以下がインストール済みでない場合はインストール# install.packages(c("RCurl", "jsonlite"))# 必要なライブラリの読み込み
require(RCurl)require(jsonlite)# E-Stat データを取得# 人口推計2019 年

001 表

統計表 ID 0003412313#RCurl で読み込み、jsonlite パッケージを使って json 形式のデータを処理する
url <- paste("http://api.e-stat.go.jp/rest/3.0/app/json/getStatsData?appId=",
appId,"&lang=J","&statsDataId=0003412313","&metaGetFlg=Y","&cntGetFlg=N","&sectionHeaderFlg=1", sep="")dt0 <- getURL(url)# ちょっと時間がかかる

dt1 <- fromJSON(dt0)str(dt1)# 取得したデータの構造を確認# 結果出力は後から参照するため、コードの後に参考として添付する#--------------------------------------------------------------# dt1 の構造情報を参考にして、統計数値部分のみを dt2 に抜き出す
dt2 <- dt1$GET_STATS_DATA$STATISTICAL_DATA$DATA_INF$VALUE
colnames(dt2) # データ項目名を確認# [1] "@cat01" "@cat02" "@cat03" "@area" "@time" "@unit" "$"# @で始まる項目名は R 上で変数として参照できないので書き換える
colnames(dt2) <- c("cat01", "cat02", "cat03", "area", "tm", "ut", "dl")str(dt2)#'data.frame': 816 obs. of 7 variables:# $ cat01: chr "001" "001" "001" "001" ...
# $ cat02: chr "001" "001" "001" "001" ...
# $ cat03: chr "01000" "01001" "01002" "01003" ...
# $ area : chr "00000" "00000" "00000" "00000" ...
# $ tm : chr "1201" "1201" "1201" "1201" ...
# $ ut : chr "千人" "千人" "千人" "千人" ...

57

第１講

実施内容

第１講

# $ dl : chr "126167" "894" "941" "962" ...
#--------------------------------------------------------------# dt1 の構造情報から、各項目の情報は以下に収録されていることがわかる# dt1$GET_STATS_DATA$STATISTICAL_DATA$CLASS_INF$CLASS_OBJ$CLASS#・・・$CLASS の中にはリストが 5 つ収録されている。
# 1 番目が男女別、2 番目が国籍、3 番目が年齢、4, 5 番目は単一コードなので無視できる# 必要な項目情報のみを取り出す(sex <- dt1$GET_STATS_DATA$STATISTICAL_DATA$CLASS_INF$CLASS_OBJ$CLASS[[1]])(ctry <- dt1$GET_STATS_DATA$STATISTICAL_DATA$CLASS_INF$CLASS_OBJ$CLASS[[2]])(age <- dt1$GET_STATS_DATA$STATISTICAL_DATA$CLASS_INF$CLASS_OBJ$CLASS[[3]])colnames(sex)#[1] "@code" "@name" "@level" "@unit"

colnames(ctry)#[1] "@code" "@name" "@level"colnames(age)#[1] "@code" "@name" "@level"# @で始まらない名前で置き換える
colnames(sex) <- c("code", "name", "level", "unit")
colnames(ctry) <- c("code", "name", "level")colnames(age) <- c("code", "name", "level")# 人口ピラミッド描画に必要なデータの抽出条件
s.sex <- c("002", "003")# 男女

s.ctry <- "001"# （国籍の）総数(s.age <- age$code[which(age$code > "01000")])# 各歳# ”002”ならば日本人人口# 上で設定した抽出条件に合致するデータのみを dt3 に抜き出す
dt3 <- subset(dt2, (cat01 %in% s.sex) & (cat02 == s.ctry) & (cat03 %in% s.age))dim(dt3)# [1] 202 7# 1 レコード 1 セルから表形式に整形し直す
tb1 <- matrix(NA, nr=length(s.age),nc=2)# 表の枠を作成(rownames(tb1) <- as.vector(age$name[which(age$code %in% s.age)]))# 表側セット(colnames(tb1) <- as.vector(sex$name[which(sex$code %in% s.sex)]))# 表頭セットtb1[,1] <- as.vector(as.integer(dt3$dl[which(dt3$cat01=="002")]))# 男性の各歳データ

tb1[,2] <- as.vector(as.integer(dt3$dl[which(dt3$cat01=="003")]))# 女性の各歳データ# 文字属性を整数値に直してベクトル化している# write.csv(tb1, "table1.csv")# 結果を外部に csv 出力するとき#------------------------------------------------# 人口ピラミッド描画#install.package("pyramid")require(pyramid)
pyramid(data.frame(tb1))58

png(filename="pyramid.png", width=1654, height=2339, pointsize = 20)# par(family="HiraKakuProN-W3")#### A4 縦 200 dpi# Mac 用フォント指定

pyramid(data.frame(tb1), Llab="男（千人）",Rlab="女（千人）",
Clab="年齢", main="2019 年 10 月総人口（人口推計）", Cadj=-0.01)
dev.off()# Cadj は中央の軸ラベルの微調整用

参考: 取得したデータ構造確認結果の出力
List of 1$ GET_STATS_DATA:List of 3..$ RESULT:List of 3.. ..$ STATUS: int 0.. ..$ ERROR_MSG: chr "正常に終了しました。".. ..$ DATE

: chr "2020-06-01T15:48:16.560+09:00"..$ PARAMETER:List of 7.. ..$ LANG

: chr "J".. ..$ STATS_DATA_ID: chr "0003412313".. ..$ DATA_FORMAT: chr "J".. ..$ START_POSITION: int 1.. ..$ METAGET_FLG: chr "Y".. ..$ CNT_GET_FLG: chr "N".. ..$ SECTION_HEADER_FLG: int 1..$ STATISTICAL_DATA:List of 4.. ..$ RESULT_INF:List of 3.. .. ..$ TOTAL_NUMBER: int 816.. .. ..$ FROM_NUMBER : int 1.. .. ..$ TO_NUMBER: int 816.. ..$ TABLE_INF :List of 17.. .. ..$ @id: chr "0003412313".. .. ..$ STAT_NAME:List of 2.. .. .. ..$ @code: chr "00200524".. .. .. ..$ $: chr "人口推計".. .. ..$ GOV_ORG:List of 2.. .. .. ..$ @code: chr "00200".. .. .. ..$ $: chr "総務省".. .. ..$ STATISTICS_NAME.. .. ..$ TITLE: chr "人口推計 2019 年 10 月 1 日現在人口推計":List of 2.. .. .. ..$ @no: chr "001".. .. .. ..$ $ : chr "年齢（各歳），男女別人口及び人口性比－総人口，日本人人口".. .. ..$ CYCLE: chr "-".. .. ..$ SURVEY_DATE: int 201910.. .. ..$ OPEN_DATE: chr "2020-04-14".. .. ..$ SMALL_AREA: int 0.. .. ..$ COLLECT_AREA: chr "該当なし".. .. ..$ MAIN_CATEGORY:List of 2.. .. .. ..$ @code: chr "02".. .. .. ..$ $: chr "人口・世帯".. .. ..$ SUB_CATEGORY:List of 2.. .. .. ..$ @code: chr "01".. .. .. ..$ $: chr "人口"

59

第１講

# 字が潰れるので、A4 縦サイズでファイル出力する

第１講.. .. ..$ OVERALL_TOTAL_NUMBER: int 816.. .. ..$ UPDATED_DATE: chr "2020-04-15".. .. ..$ STATISTICS_NAME_SPEC:List of 2.. .. .. ..$ TABULATION_CATEGORY: chr "人口推計".. .. .. ..$ TABULATION_SUB_CATEGORY1: chr "2019 年 10 月 1 日現在人口推計".. .. ..$ DESCRIPTION: chr "".. .. ..$ TITLE_SPEC:List of 1.. .. .. ..$ TABLE_NAME: chr "年齢（各歳），男女別人口及び人口性比－総人口，日本人人口".. ..$ CLASS_INF :List of 1.. .. ..$ CLASS_OBJ:'data.frame':

5 obs. of 3 variables:.. .. .. ..$ @id : chr [1:5] "cat01" "cat02" "cat03" "area" ...
.. .. .. ..$ @name: chr [1:5] "男女別・性比" "人口" "年齢各歳" "全国" ...
.. .. .. ..$ CLASS:List of 5.. .. .. .. ..$ :'data.frame':

4 obs. of 4 variables:.. .. .. .. .. ..$ @code : chr [1:4] "001" "002" "003" "004".. .. .. .. .. ..$ @name : chr [1:4] "男女計" "男" "女" "人口性比".. .. .. .. .. ..$ @level: chr [1:4] "1" "1" "1" "1".. .. .. .. .. ..$ @unit : chr [1:4] "千人" "千人" "千人" "女性＝100".. .. .. .. ..$ :'data.frame':

2 obs. of 3 variables:.. .. .. .. .. ..$ @code : chr [1:2] "001" "002".. .. .. .. .. ..$ @name : chr [1:2] "総人口" "日本人人口".. .. .. .. .. ..$ @level: chr [1:2] "1" "1".. .. .. .. ..$ :'data.frame':

102 obs. of 3 variables:.. .. .. .. .. ..$ @code : chr [1:102] "01000" "01001" "01002" "01003" ...
.. .. .. .. .. ..$ @name : chr [1:102] "総数" "0 歳" "1 歳" "2 歳" ...

収録された各項目についての情報.. .. .. .. .. ..$ @level: chr [1:102] "1" "1" "1" "1" ...
.. .. .. .. ..$ :List of 3.. .. .. .. .. ..$ @code : chr "00000".. .. .. .. .. ..$ @name : chr "全国".. .. .. .. .. ..$ @level: chr "1".. .. .. .. ..$ :List of 3.. .. .. .. .. ..$ @code : chr "1201".. .. .. .. .. ..$ @name : chr "2019 年 10 月 1 日現在".. .. .. .. .. ..$ @level: chr "1".. ..$ DATA_INF :List of 2.. .. ..$ NOTE :'data.frame': 2 obs. of 2 variables:.. .. .. ..$ @char: chr [1:2] "***" "-".. .. .. ..$ $: chr [1:2] " " "該当数値がないもの ".. .. ..$ VALUE:'data.frame': 816 obs. of 7 variables:.. .. .. ..$ @cat01: chr [1:816] "001" "001" "001" "001" ...
.. .. .. ..$ @cat02: chr [1:816] "001" "001" "001" "001" ...
.. .. .. ..$ @cat03: chr [1:816] "01000" "01001" "01002" "01003" ...
.. .. .. ..$ @area : chr [1:816] "00000" "00000" "00000" "00000" ...
.. .. .. ..$ @time : chr [1:816] "1201" "1201" "1201" "1201" ...
.. .. .. ..$ @unit : chr [1:816] "千人" "千人" "千人" "千人" ...
.. .. .. ..$ $: chr [1:816] "126167" "894" "941" "962" ...

60

統計データ

第１講

61