www.crosshyou.info

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

社会生活基本調査データの分析1 - R言語で基本統計量を算出

今回は社会生活基本調査のデータを分析しようと思います。

f:id:cross_hyou:20190309145833j:plain

e-Stat 政府統計の総合窓口からデータを取得します。「ファイル」をクリックしてみます。

f:id:cross_hyou:20190309145923j:plain

社会生活基本調査は、統計法に基づく基幹統計調査として、生活時間の配分や、余暇時間における主な活動(学習・自己啓発・訓練、ボランティア活動、スポーツ、趣味・娯楽及び旅行・行楽)を調査し、国民の社会生活の実態を明らかにするための基礎資料を得ることを目的として5年ごとに実施しています。とのことです。

f:id:cross_hyou:20190309150206j:plain

この図の表番号1のエクセルをダウンロードしてみました。

f:id:cross_hyou:20190309150246j:plain

こういうファイルでした。これをそのままR言語に読み取るのは大変なので、読み取り安いように加工します。

f:id:cross_hyou:20190309152103j:plain

これをread.csv関数で読込み、str関数で構造を見てみましょう。

f:id:cross_hyou:20190309152532j:plain

データは、45の観測、16の変数です。 n = 45, p = 16 ですね。SexとAgeがファクタで、その他は数値データです。summary関数で基本統計量を算出します。

f:id:cross_hyou:20190309152900j:plain

このような結果が表示されます。ひとつひとつ確認していきます。

そのまえに、attach(df)とコマンド入力して、わざわざdf$Sexとしないで、Sexだけで呼び出せるようにします。

f:id:cross_hyou:20190309153235j:plain

Sexは文字通り性別で、男が15、女が15、男女合計が15です。

f:id:cross_hyou:20190309153448j:plain

Ageは年齢ですね。1014yというのは10歳から14歳という意味です。15歳から19歳、20歳から24歳と5歳ずつ増えていて、最後は7599yとなっているのは75歳以上です。それと男女合計の合計がBoth_total, 男の合計がMale_total、女の合計がFemail_totalです。

Both_total, Male_total, Femail_totalのデータは削除してしまいましょう。あ、それとSexのBothも削除してしまいましょう。

f:id:cross_hyou:20190309155204j:plain



これで、男女別、年齢別の純粋なデータフレームになったはずです。

確認してみましょう。まず、detach関数でdfを初期設定のデータフレームから解除し、attach関数でdfnewを初期設定のデータフレームにします。

f:id:cross_hyou:20190309155243j:plain



それでは、summary関数で確認します。

f:id:cross_hyou:20190309155325j:plainSexのBothが0になりました。AgeのBoth_total, Female_total, Male_totalも0です。

droplevels関数で不要なファクタ水準を削除しましょう。

f:id:cross_hyou:20190309160227j:plain



はい。これで不要なファクタ水準もなくなりました。

改めて、summary(dfnew)を実行してみましょう。

f:id:cross_hyou:20190309160358j:plain

はい、こんな感じです。

今回は以上です。
次回は

 

www.crosshyou.info

 

です。

以下は今回のR言語のコマンドです。

# データファイルの読込み
df <- read.csv("shakaiseikatsukihon.csv")

# データ構造の確認
str(df)

# summary関数で基本統計量
summary(df)

# dfを初期設定のデータフレームにする
attach(df)

# Sex
summary(Sex)

# Age
summary(Age)

# SexのBothを削除
dfnew <- df[df$Sex != "Both", ]

# AgeのBoth_total, Male_total, Female_totalを削除
dfnew <- dfnew[dfnew$Age != "Both_total" &
dfnew$Age != "Male_total" & dfnew$Age != "Female_total", ]

# dfを初期設定のデータフレームから解除する
detach(df)

# dfnewを初期設定のデータフレームにする
attach(dfnew)

# Sex
summary(Sex)

# Age
summary(Age)

# droplevelsで不要なファクタ水準を削除
dfnew$Sex <- droplevels(dfnew$Sex)
dfnew$Age <- droplevels(dfnew$Age)

# tableで確認
table(dfnew$Sex)

table(dfnew$Age)

# summary
summary(dfnew)

宗教統計調査データの分析4 - R言語のaov関数とTukeyHSD関数を使ってみる。前回の分析が間違っていたことに気づく。

 

www.crosshyou.info

 の続きです。

前回の分析で、年ごとに都道府県知事所轄団体 / 文部科学大臣所轄団体 の比率は全て同じではなくて、違う年がある、ということがわかりました。

今回は、R言語のaov関数とTukeyHD関数を使って、どの年とどの年に違いがあるかを調べようと思います。

まず、aov関数でANOVAオブジェクトを作成し、TukeyHSD関数を実行します。

f:id:cross_hyou:20190309134133j:plain

 

あれ?エラーになってしまいました。「因子でないものは無視されました」とエラーメッセージがあります。あ、そうですね。Yearは数値型のままでした。as.factor関数で因子(ファクタ)に変換してからもう一回やってみましょう。

f:id:cross_hyou:20190309134758j:plain

うまくいきました。一番右の p adj が p値なので、上の図ではすべて違いがない年の組み合わせですね。あれ?全部1ですね。年ごとの違いは無い、っていうことですね。

前回と違いますね。。oneway.test関数で確認してみます。

f:id:cross_hyou:20190309135502j:plain

p-value = 1 となりました。前回と違うのはなんででしょう?。。。あ、前回はYearを数値型のままで分析していましたね。今回はYearをファクタにしたので年ごとに有意な差は無いという結果になりました。

ねんのため、Yearを数値型にしたYear2という変数を作成してoneway.test関数で分析してみます。

f:id:cross_hyou:20190309140058j:plain

あれ?やっぱりp-value = 1ですね。。

とここまで考えて、前回のコマンドを見たら、なんと、コマンドがhiritsuとTypeのままでした。つまり、年によって比率の違いは無い、ということだったんですね。

前回の分析が間違っていました。

それでは気をとりなおして、宗派でのANOVAオブジェクトでTukeyHSD関数を使ってみます。

f:id:cross_hyou:20190309140747j:plain

p adjがすべての行で0ですから、全てのペアで比率には有意な違いがある、ということです。

plot関数でグラフで表しましょう。

f:id:cross_hyou:20190309141158j:plain

f:id:cross_hyou:20190309141211j:plain

どの組み合わせも0をまたいでいないので、有意な違いだとわかります。

今回は以上です。

最後に今回のR言語のコマンドを記載しておきます。


# aov関数でANOVAオブジェクトを作成し
m <- aov(chida$hiritsu ~ chida$Year)

# TukeyHSD関数を実行
TukeyHSD(m)

# Yearをファクタに変換
chida$Year <- as.factor(chida$Year)

# aov関数
m <- aov(chida$hiritsu ~ chida$Year)

# TukeyHSD関数
TukeyHSD(m)

# oneway.test関数
oneway.test(chida$hiritsu ~ chida$Year)

# 数値型のYear2を作成
Year2 <- as.numeric(chida$Year)

# oneway.test関数
oneway.test(chida$hiritsu ~ Year2)

# Typeでaov関数
tm <- aov(chida$hiritsu ~ chida$Type)

# TukeyHSD関数
TukeyHSD(tm)

# plot関数
plot(TukeyHSD(tm))

 

宗教統計調査データの分析3 - R言語で一元配置分散分析(oneway.test関数)と交互作用図(interaction.plot関数)をしてみる。

 

www.crosshyou.info

 の続きです。

今回は、

都道府県知事の所轄の団体数と文部科学大臣の管轄の団体数の比率が宗派によって違うのかを調べてみます。分散分析ですね。

まずは、mutate関数で比率を表す変数を作成しましょう。

f:id:cross_hyou:20190309103924j:plain

hiritsuという変数が都道府県知事所轄 / 文部科学大臣所轄 の値です。キリスト教系は13.8ぐらいですね。
tapply関数とmean関数で宗派ごとのhiritsuを計算します。

f:id:cross_hyou:20190309104117j:plain

合計や都道府県知事合計、文部科学大臣合計というこのchidaというデータフレーム内には存在しないファクタ水準が残っていますね。削除しましょう。as.character関数で文字列に変換し、as.factor関数でファクタに変換します。

f:id:cross_hyou:20190309105150j:plain

すっきりした出力になりましたね。

キリスト教系は13.8, 諸教は137.7, 神道系は393.1, 仏教系は177.6と宗派によって全然違いますね。

分散分析で宗派によって比率が違うかどかを検定します。この場合は一元配置分散分析でしょうか。oneway.test関数を使います。

f:id:cross_hyou:20190309105651j:plain

p-value < 2.2e-16 となっていますから、各宗派の比率はすべて等しいという帰無仮説は棄却されました。宗派によって比率はことなるということです。

同じようにYearによってhiritsuが異なるか見てみましょう。

f:id:cross_hyou:20190309110016j:plain

2005年は186、2017年は174と違うようです。グラフにしてみましょうか。barplot関数を使いました。

f:id:cross_hyou:20190309110322j:plain

f:id:cross_hyou:20190309110358j:plain

だんだんと比率が低下しているようですね。

それではoneway.test関数で一元配置分散分析をします。

f:id:cross_hyou:20190309110843j:plain

p-value < 2.2e-16 なので、Yearの違いでhiritsuに違いがあることがわかりました。

hiritsuはType(宗派)にもYear(年)にも影響されているということですね。

それでは次に、TypeとYearの交互作用図を作成してみましょう。

intaraction.plot関数を使います。

f:id:cross_hyou:20190309111542j:plain

f:id:cross_hyou:20190309111618j:plain

4本の線は、ほぼ同じような形状なので年と宗派の交互作用は無いようですね。

今回は

 

Rクックブック

Rクックブック

 

 の「レシピ8.20一元配置分散分析を行う」と「レシピ8.21交互作用図を作成する」を参考にしました。

今回は以上です。

次回は

 

www.crosshyou.info

 

です。

最後に今回のR言語のコマンドを記載しておきます。


# 比率を表す変数を作成
chida <- chida %>%
mutate(hiritsu = Number_chiji / Number_daijin)
chida

# 各宗派ごとのhiritsuの平均値
tapply(chida$hiritsu, chida$Type, mean)

# ファクタ水準の整理
chida$Type <- as.character(chida$Type)
chida$Type <- as.factor(chida$Type)
tapply(chida$hiritsu, chida$Type, mean)

# 一元配置分散分析(hiritsu ~ Type)
oneway.test(chida$hiritsu ~ chida$Type)

# Yearごとのhiritsuの平均値
tapply(chida$hiritsu, chida$Year, mean)

# グラフ
barplot(tapply(chida$hiritsu, chida$Year, mean), ylim = c(0, 200))

# 一元配置分散分析(hirits ~ Year)
oneway.test(chida$hiritsu ~ chida$Type)

# YearとTypeの交互作用図
interaction.plot(chida$Year, chida$Type, chida$hiritsu)

 

 

 

宗教統計調査データの分析2 - R言語で各宗派ごとの団体数の推移を調べたら、キリスト教系だけが増えていた。

 

www.crosshyou.info

 の続きです。

まず、合計だけのデータセットを作成して、全体の宗教法人の数がどのようなトレンドで推移しているかを見てみましょう。R言語のfilter関数を使います。

f:id:cross_hyou:20190307190335j:plain

ggplot関数でグラフを描いてみましょう。

f:id:cross_hyou:20190307190703j:plain

f:id:cross_hyou:20190307190736j:plain


あ、宗教法人は全体としては低下傾向ですね。でも、2005年が18万2641で、2017年が18万1497と1141(率にして0.6%)ほどの低下です。

宗教のタイプ別ではどうでしょうか?合計以外のデータセットを作成して調べてみましょう。

f:id:cross_hyou:20190307192131j:plain

たしか所轄が都道府県知事と文部科学大臣があったんですよね。この二つを合計したいですね。。どうすればいいのかな?とりあえず、都道府県知事だけのデータセットと文部科学大臣だけのデータセットを作成しましょう。

f:id:cross_hyou:20190307193206j:plain

こうしたら、それぞれの所轄を削除しましょう。

f:id:cross_hyou:20190307193740j:plain

両方のNumberを都道府県知事のほうはNumber_chiji, 文部科学大臣のほうはNumber_daijinに変更しましょう。

f:id:cross_hyou:20190307194501j:plain

こうしたら、left_join関数でいけると思います。やってみましょう。

f:id:cross_hyou:20190307195353j:plain

chijiにdaijinを合体させますが、YearとTypeが同じものどうしを合体させるように、ということですね。

途中で気が付いたのですが、Typeに「都道府県知事」が混じっていたので、除外します。

f:id:cross_hyou:20190307200018j:plain

with 42 more rows となっています。さっきは with 55 more rowsでしたので削除されました。

Number_chijiとNumber_daijinを合計します。mutate関数ですね。

f:id:cross_hyou:20190307200334j:plain

これでようやく宗派別の推移をグラフにできます。ggplot関数ですね。

まずはキリスト教系から

f:id:cross_hyou:20190307201345j:plain

 

f:id:cross_hyou:20190307201358j:plain

 

キリスト教系は増加しています。

仏教系はどうでしょうか?

f:id:cross_hyou:20190307201607j:plain

f:id:cross_hyou:20190307201618j:plain

仏教系は減少です。

 

神道系はどうでしょうか?

f:id:cross_hyou:20190307201820j:plain

f:id:cross_hyou:20190307201831j:plain

神道系も減っています。

諸教はどうでしょうか?

f:id:cross_hyou:20190307202032j:plain

f:id:cross_hyou:20190307202045j:plain

諸教も減っていますね。

キリスト教系の団体だけが増えていることがわかりました。

今回は以上です。

次回は

 

www.crosshyou.info

 です。

 

最後に本日のR言語のコマンドを記しておきます。


# 2019-03-07

# 合計だけのデータセットを作成
total <- df %>%
filter(Shokatsu == "合計")
total

# YearとNumberのグラフ
ggplot(data = total, mapping = aes(x = Year, y = Number)) +
geom_line()

# 合計以外のデータセットを作成
ntotal <- df[df$Type != "合計", ]
ntotal

# 都道府県知事のデータセットを作成
chiji <- ntotal[ntotal$Shokatsu == "都道府県知事", ]
chiji

# 文部科学大臣のデータセットを作成
daijin <- ntotal[ntotal$Shokatsu == "文部科学大臣", ]
daijin

# Shokatssu列を削除
chiji <- chiji[ , -2]
chiji

daijin <- daijin[ , -2]
daijin

# 変数名の変更
colnames(chiji)[3] <- "Number_chiji"
chiji

colnames(daijin)[3] <- "Number_daijin"
daijin

# chijiとdaijinを合体
chida <- chiji %>%
left_join(daijin, by = c("Year", "Type"))
chida

# Typeに「都道府県知事合計」が混じっていたので除外
chida <- chida[chida$Type != "都道府県知事合計", ]
chida

# Number_chijiとNumber_daijinを合計
chida <- chida %>%
mutate(Number_total = Number_chiji + Number_daijin)
chida

# 宗派別グラフ:キリスト教系
chida %>%
filter(Type == "キリスト教系") %>%
ggplot(mapping = aes(x = Year, y = Number_total)) +
geom_line() +
labs(title = "キリスト教系")

 

# 宗派別グラフ:仏教系
chida %>%
filter(Type == "仏教系") %>%
ggplot(mapping = aes(x = Year, y = Number_total)) +
geom_line() +
labs(title = "仏教系")


# 宗派別グラフ:神道系
chida %>%
filter(Type == "神道系") %>%
ggplot(mapping = aes(x = Year, y = Number_total)) +
geom_line() +
labs(title = "神道系")


# 宗派別グラフ:諸教
chida %>%
filter(Type == "諸教") %>%
ggplot(mapping = aes(x = Year, y = Number_total)) +
geom_line() +
labs(title = "諸教")

 

 

 

宗教統計調査のデータ分析1 - R言語のread_csv関数でCSVファイルを読み込んでみた。

政府統計の総合窓口、e-Statに「宗教法人統計」というデータが新着でありました。

f:id:cross_hyou:20190306192601j:plain

ちょっと気になったのでクリックしてみました。

f:id:cross_hyou:20190306192741j:plain

宗教統計調査は、毎年の宗教法人数(神社、寺院、教会、布教所など)や宗教法人に関わる教師と信者の人数を調査したもののようです。

データをExcelに出力してみると、

f:id:cross_hyou:20190306193022j:plain

こんなファイルでした。

これを整理して、

f:id:cross_hyou:20190306194550j:plain



このようなファイルを作成しました。

このCSVファイルをR言語で分析してみましょう。

参考にした本は、

 

Rではじめるデータサイエンス

Rではじめるデータサイエンス

  • 作者: Hadley Wickham,Garrett Grolemund,大橋真也,黒川利明
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/10/25
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (2件) を見る
 

 これですね。

この本の8章「readrによるデータインポート」を参考にします。

まずは、library(tidyverse)とコマンドを入力して、tidyverseパッケージを読込みます。

f:id:cross_hyou:20190306193932j:plain

CSVファイルの読込みは、read_csv関数を使うようです。

f:id:cross_hyou:20190306194735j:plain

読込みできたようですね。

YearとNumberは数値列、ShokatsuとTypeは文字列です。

表示してみます。

f:id:cross_hyou:20190306194834j:plain

あれ?日本語はうまく読込めていないようです。。。
parse_character関数で日本語に変換できるようです。やってみます。

f:id:cross_hyou:20190306195415j:plain

おお。うまく日本語になりましたね。

summary関数を使ってみます。

f:id:cross_hyou:20190306195653j:plain

あ、ShokatsuとTypeはファクタではなく文字列なのでsummary関数あまり役に立たないですね。factor関数でファクタに変換します。

f:id:cross_hyou:20190306200006j:plain

うまくいきました。

所轄は都道府県知事と文部科学大臣の2種類、

宗教のタイプは、キリスト教系、神道計、仏教系、諸教、都道府県知事合計、文部科学大臣合計、合計の7つあることがわかります。

今回は以上です。
次回は

 

www.crosshyou.info

 

です。

最後に今回のRコマンドを記載しておきます。

# 宗教統計調査
#tidyverseの読込み
library(tidyverse)

# CSVファイルの読込み
df <- read_csv("shuukyou.csv")
df

# 日本語に変換
df$Shokatsu <- parse_character(df$Shokatsu, locale = locale(encoding = "Shift-JIS"))
df$Type <- parse_character(df$Type, locale = locale(encoding = "Shift-JIS"))
df

# summary関数
summary(df)

# ファクタに変換
df$Shokatsu <- factor(df$Shokatsu)
df$Type <- factor(df$Type)
summary(df)

読書記録 - 「チャレンジャー・セールス・モデル 成約に直結させる「指導」「適応」「支配」」マシュー・ディクソン, ブレント・アダムソン著 海と月社

 

チャレンジャー・セールス・モデル 成約に直結させる「指導」「適応」「支配」

チャレンジャー・セールス・モデル 成約に直結させる「指導」「適応」「支配」

  • 作者: マシュー・ディクソン,Matthew Dixon,ブレント・アダムソン,Brent Adamson,(序文)ニール・ラッカム,Neil Rackham,三木俊哉
  • 出版社/メーカー: 海と月社
  • 発売日: 2015/10/30
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (1件) を見る
 

 普段はこのような分野の本は読まないですが、会社で読めということなので読みました。

B to B の複雑なソリューションを販売するには、顧客の知らない新しい知見を提供し、顧客が気づいていない問題を自覚させ、それを解決するために自社のソリューションを売り込むのがいいらしいです。

私にはできないと思いました。

 

外資系企業動向調査の分析5 - R言語のlm関数で回帰分析の練習。線形単回帰モデルと2乗項を追加したモデル

 

www.crosshyou.info

 の続きです。

今回はR言語のlm関数で回帰分析の練習をしてみたいと思います。

最近、
「An Introduction to Statistical Learning with applications in R」

http://www-bcf.usc.edu/~gareth/ISL/


という本を読みだしているので、その練習です。

まずは、前回作成したtbl_newという名前のtibbleを確認します。

f:id:cross_hyou:20190228193950j:plain

この一番右側の「開業率」のデータを従属変数にしてその他の変数を説明変数にして回帰分析をしてみたいと思います。

まずは、開業率が 0%がいっぱいな感じなので、削除したデータセットで分析しましょう。まず、filter関数で0%の観測を削除します。

f:id:cross_hyou:20190228194513j:plain

tbl_lmという名前で新たなtibbleを作成しました。70観測、9変数です。さきほどのAn Introduction ~~(ISLRと略します)風に書くと、n = 70, p = 9です。

相関マトリックスをcor関数で作成します。

f:id:cross_hyou:20190228194843j:plain

開業率と一番相関があるのは撤退ですね。相関係数が -0.516 です。散布図を描いてみます。ggplot関数ですね。

f:id:cross_hyou:20190228195150j:plain

f:id:cross_hyou:20190228195201j:plain

それでは、

開業率 = β0 + β1 x 撤退 + 撹乱項

という線形単回帰式モデルで分析してみましょう。lm関数ですね。

f:id:cross_hyou:20190228195537j:plain

結果はこうなりました。一番下の行のF検定のp-valueが4.817e-06なので有意なモデル式です。

開業率 = 2.52 - 0.06345 x 撤退 + 撹乱項

ということですね。撤退が、1増加すると開業率が -0.06345下がるということですね。

plot関数で散布図を書いてabline関数で回帰式の直線を追加しましょう。

f:id:cross_hyou:20190228200004j:plain

f:id:cross_hyou:20190228200023j:plain

こんな感じです。そもそも、開業率と撤退の間に線形の関係は無いようですものね。

今度は、

開業率 = β0 + β1 x 撤退 + β2 x 撤退^2 + 撹乱項

という、撤退を2乗した項を追加したモデルで分析してみます。lm関数でI(撤退 ^ 2)すると2乗になります。

f:id:cross_hyou:20190228200633j:plain

一番下のF検定のp-valueがあ7.745e-08と0.05以下なのでモデルは有意です。

Intercept, 撤退, I(撤退^2)の係数のp値もすべて0.05以下で有意です。

それでは同じように散布図を描いて、その上にモデルの回帰線を載せましょう。

f:id:cross_hyou:20190228202910j:plain

f:id:cross_hyou:20190228203028j:plain

線形単回帰よりは少しフィットしてるかな?

Adjusted R-squareは線形単回帰式は、0.2555

撤退^2の項を入れたモデルのAdjusted R-squareは、0.3683ですから良くなっていますね。

上のグラフに単回帰の回帰直線も入れましょう。

f:id:cross_hyou:20190228203848j:plain

f:id:cross_hyou:20190228203859j:plain

今回は以上です。