crosshyou

主にクロス表(分割表)分析をしようかなと思います。

国籍別在留外国人数の分析5 - 増減幅の上位・下位、増減率の上位・下位で二分してクロス表分析

今回は、国籍別在留外国人数のデータを使って、増減幅の上位・下位、増減率の上位・下位で二分したカテゴリカル変数を作成し、クロス表分析をしてみたいと思います。

前回までで、下図のようなR言語のデータフレームを作成しました。

f:id:cross_hyou:20181015115500j:plain

平成26、27、28は国籍別の人数です。幅2627と幅2728は増減幅、率2627と率2728は増減率です。この4項目からカテゴリカル変数を作成します。ifelse関数を使って、中央値以上なら「上位」、中央値よりも小さければ「下位」となるカテゴリカル変数を作成します。

f:id:cross_hyou:20181015115819j:plain

このようになります。table関数で「上位」と「下位」の度数を数えていますが、中央値で二分したので、どちらも19になりますね。

それでは、クロス表を作成しましょう。table関数で作成できます。まずは、地域と幅2627Cです。

f:id:cross_hyou:20181015120239j:plain

アジアは下位が2、上位が13ですね。ちょっと地域が多いので、地域を「アジア」と「アジア以外」の2つにしてみましょう。

f:id:cross_hyou:20181015120517j:plain

これで、data$アジアとdata$幅2627Cのクロス表を作成してみましょう。

f:id:cross_hyou:20181015120722j:plain

アジア以外の地域は下位が多く、アジア地域は上位が多いですね。この傾向は統計的に有意なのか、フィッシャーの正確確率検定で確かめましょう。fisher.test関数です。

f:id:cross_hyou:20181015121027j:plain

p-value = 0.0006288 < 0.05 なので有意ですね。アジア地域の国籍のほうが増減幅が上位の場合が多いといえます。

幅2728Cでも同じ傾向となるかクロス表で確認しましょう。

f:id:cross_hyou:20181015121320j:plain

幅2627Cとまったく同じ度数となりました。こちらも地域と増減幅は関連あり、ということですね。

それでは、率はどうでしょうか?まずは、率2627Cです。table関数です。

f:id:cross_hyou:20181015121548j:plain

増減率でもアジアは上位が多いですね。フィッシャーの正確確率検定で有意かどうか確認します。fisher.test関数です。

f:id:cross_hyou:20181015121741j:plain

p-value = 0.04481 < 0.05 ですから統計的に有意です。アジア地域は増減率上位が多いといえます。

率2728Cとのクロス表はどうでしょうか。

f:id:cross_hyou:20181015122012j:plain

これもアジア地域は上位が10で下位が5と上位が多いですね。フィッシャーの正確確率検定で有意性を検定します。

f:id:cross_hyou:20181015122238j:plain

p-value = 0.1837 > 0.05 ですから有意では無いということですね。アジア地域と増減率の上位・下位に関連がなくても約18%の確率でこういう結果が出るということです。

平成27年よりも平成28年のほうがアジア以外の国籍の増加が目立ったということですね。

 

 

国籍別在留外国人数の分析4 - 地域によって増減率に違いはあるだろうか?

今回は、国籍別在留外国人数のデータを使って、地域によって増減率に違いはあるだろうか?ということを検証したいと思います。

R言語にこんな形でデータフレームを作成しています。

f:id:cross_hyou:20181013170708j:plain

地域としてはアジアが15か国、ヨーロッパが11か国と多いので、この2つの地域で比較してみましょう。

まずは、アジア地域の増減率を表すベクトルを作成しましょう。

f:id:cross_hyou:20181013171117j:plain

次に、ヨーロッパ地域の増減率を表すベクトルを作成します。

f:id:cross_hyou:20181013171433j:plain

アジアのデータは15個、ヨーロッパのデータは11個と30個以下ですから平均値に差があるかではなくて、分布の位置に差があるかを調べましょう。

両方の中央値を見てみます。median関数です。

f:id:cross_hyou:20181013171733j:plain

アジアのほうは12.38%で、ヨーロッパのほうは8.05%ですから、アジアのほうが増減率が高いようですね。

ヒストグラムで確認します。hist関数です。

f:id:cross_hyou:20181013172054j:plain

f:id:cross_hyou:20181013172125j:plain

ヒストグラムの形状は、アジアのほうが右側に重心があるのがわかりますね。

それでは、検定をしましょう。ウィルコクソン=マン・ホイットニー検定です。関数はwilcox.testです。

f:id:cross_hyou:20181013172552j:plain

p-value = 0.443 > 0.05 ですからアジアとヨーロッパの増減率に違いは認められません。

平成27年から平成28年の増減率でも同じようにやってみます。

f:id:cross_hyou:20181013173143j:plain

平成27年から平成28年では、アジアの増減率の中央値は9.23%で、ヨーロッパは6.9%です。アジアのほうが伸びていますね。

ヒストグラムでもみてみます。

f:id:cross_hyou:20181013173534j:plain

hist関数で、breaks=c(-20,-10,0,10,20,30,40,50)というの加えてヒストグラムの範囲を指定しています。

f:id:cross_hyou:20181013173636j:plain

ヒストグラムにするとアジアのほうが伸び率が高い国籍が多いことがわかりますね。

では、wilcox.test関数でウィルコクソン=マン・ホイットニー検定をしてみます。

f:id:cross_hyou:20181013173903j:plain

p-value = 0.09726 > 0.05 ですから平成27年から平成28年でも両者に違いがあるとは言えません。データ数が少ないともっとはっきり違いがないとダメなんですね。

ということで、最後に平成26年から平成27年平成27年から平成28年を結合したベクトルを作成して比較してみましょう。

f:id:cross_hyou:20181013174305j:plain

アジアの増減率の中央値は10.805%で、ヨーロッパは7.655%です。

ヒストグラムでも確認しましょう。

f:id:cross_hyou:20181013174602j:plain

f:id:cross_hyou:20181013174613j:plain

アジアのほうが高い伸び率の観測値が多いことがわかります。

それでは、ウィルコクソン=マン・ホイットニー検定をしてみましょう。

f:id:cross_hyou:20181013174827j:plain

p-value = 0.05716 > 0.05 ですから、両者の分布位置に違いがあるとは言えません。

 

 

 

 

 

国籍別在留外国人数の分析3 - 増減のデータで散布図を描く(plot関数、ggplot関数)

今回は、国籍別在留外国人数のデータを使い、増減の散布図を描いてみましょう。

前回の分析までで、下図のようなR言語のデータフレームを作成しました。

f:id:cross_hyou:20181013094652j:plain

「地域」と「国籍」がカテゴリカル変数で、「平成26」「平成27」「平成28」がそれぞれの年の人数、「幅2627」と「幅2728」が増減幅、「率2627」「率2728」が増減率ですね。

「幅2627」と「幅2728」、「率2627」と「率2728」の組合せで散布図を描いてみましょう。簡単なのはplot関数です。

f:id:cross_hyou:20181013095651j:plain

par(mfrow=c(1,2)) というコマンドで、 1 X 2 のグラフウィンドウを立ち上げて、そのあとにplot関数で散布図を描きます。

 

左が増減幅で、右が増減率です。増減幅のほうは極端に値の大きいデータがあってよくわからないですが、増減率の散布図を見ると、どうやら26年-27年と27年-28年には正の相関関係があるようですね。

cor.test関数で相関係数を見てみましょう。

f:id:cross_hyou:20181013100818j:plain

一番下の行に、cor 0.5059927 とあります。これが率2627と率2728の相関係数です。

p-value = 0.001191 とあります。この値が0.05よりも小さいので、相関関係は有意といことです。

それではggplot関数で増減率の散布図を描いてみましょう。地域別に傾向はあるでしょうか?その前にlibrary(tidyverse)とコマンド入力をして、ggplot関数を使えるようにします。

f:id:cross_hyou:20181013101553j:plain

これでggplot関数が使えるようになりましたので、やってみましょう。

f:id:cross_hyou:20181013101742j:plain

color = 地域 として、地域別にプロット点を色分けします。

f:id:cross_hyou:20181013101830j:plain

アジアの国籍の伸び率が高いようですね。

size = 平成26 というコマンドも加えてみましょう。

f:id:cross_hyou:20181013103214j:plain

f:id:cross_hyou:20181013103228j:plain

プロットの大きさが人数の大きさを表しています。人数の多い国籍は伸び率は低いことがわかりますね。

 

 

国籍別在留外国人数の分析2 - 増減のデータを作成する。人数が増えた国や地域、減った国や地域は?

今回は前回のデータを加工して増減を計算したいと思います。

まずは、CSVファイルに保存してあるデータをread.csv関数でR言語に読み込ませます。

f:id:cross_hyou:20181012055355j:plain

summary関数で基本統計量を表示しています。平成26年平成27年平成28年の3年間のデータがありますので、増減は26年から27年、27年から28年の2データ計算できますね。

f:id:cross_hyou:20181012055915j:plain

平成26年から平成27年では、4万3458人減少した国籍もあれば、4万7091人増加した国籍もありますね。

平成27年から平成28年はどうでしょうか?

f:id:cross_hyou:20181012060332j:plain

4676人減少した国籍もあれば、5万3034人増加した国籍もありますね。

増減率も計算しましょう。

f:id:cross_hyou:20181012061215j:plain

平成26年から27年では、8.67%減少した国籍もあれば、48.92%増加した国籍もあります。

平成27年から28年では、14.10%減少した国籍もあれば、36.90%増加した国籍もあります。

それでは、order関数を利用して並び替えてどの国籍が増加・減少したか見てみましょう。

f:id:cross_hyou:20181012062026j:plain

平成26年から27年では、ベトナム国籍の人が一番増加しました。減少した国籍では韓国が一番減少でした。増減率ではどうでしょうか?

f:id:cross_hyou:20181012064133j:plain

増減率でみると、ポーランドが一番増加、韓国が一番減少でした。

平成27年から28年ではどうでしょうか?まずは幅でみましょう。

f:id:cross_hyou:20181012064623j:plain

増減幅では、ベトナムが一番増加、韓国が一番減少と前年と同じ国籍が一番増加、一番減少となりました。

率ではどうでしょうか?

f:id:cross_hyou:20181012065428j:plain

ベトナムが増加率1位、ポーランドが減少率1位です。ポーランドは前年は増加率が1位だったのですが、一転して27年から28年では減少率が1位となりました。

 

国籍別在留外国人数の分析1 - 基本統計量

今回は、国籍別在留外国人数のデータを分析してみようと思います。

データの元は、総務省統計局のホームページです。

ホーム > 統計データ > 日本の統計 > 本書の内容 > 第2章 人口・世帯 > 2-8 国籍別在留外国人数 

です。

http://www.stat.go.jp/data/nihon/02.html

f:id:cross_hyou:20181011202541j:plain

実際のエクセルファイルはこんなものでした。

f:id:cross_hyou:20181011202557j:plain

これを少し加工して、このようなCSVファイルにしました。

f:id:cross_hyou:20181011203931j:plain

「総数」の行を削除して、「地域」の列を追加しました。

このCSVファイルをread.csv関数でR言語に読みこみ、summary関数で基本の統計量を算出しましょう。

f:id:cross_hyou:20181011204539j:plain

地域別の国数は、アジアが一番多くて15か国、次がヨーロッパの11か国、アフリカ、北アメリカ、南アメリカが3か国で、オセアニアが2か国、無国籍もあります。

国籍は全部で38ですね。人数を見ると、平均が平成26年で5万4557人、平成27年が5万6407人、平成28年が6万0267人と年々増加していることがわかります。地域別ではどの地域が増加しているのか?国別ではどうか?などを調べていきましょう。

summary関数では標準偏差が計算されないので、apply関数とsd関数で標準偏差を計算しましょう。

f:id:cross_hyou:20181011205251j:plain

by関数を使って、地域別の基本統計値を計算しましょう。

f:id:cross_hyou:20181011211156j:plain

f:id:cross_hyou:20181011211219j:plain

平均値の推移に注目すると、南アフリカオセアニア平成27年に減少していますが、それ以外の地域は27年、28年と年々増加しています。

 

 

 

 

各地の気温と降水量の分析6 - ggplot関数で散布図を描く

最近、もっとかっこいいグラフやかっこいい分析をしたいと思い、

 

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

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

 

 を買ってちょっとずつ読んでいます。

はじめの章でggplot関数の解説があったので、各地の気温と降水量のデータで練習してみようと思います。

まずは、前回までで、こんなデータフレームをR言語で作成しました。

f:id:cross_hyou:20181011080654j:plain

このデータフレームは変数はすべて数値データですので、カテゴリカル変数を一つ追加しましょう。単純に「東日本」「西日本」というものを作成しましょう。

f:id:cross_hyou:20181011080858j:plain

まず、rownames(data2)のコマンドで東日本が何番目までかを確認します。今回は24番目のa24津までを東日本としました。

そして、data2 <- c(rep("東日本",24), rep("西日本",23))というコマンドで「東日本」が24回繰り返し、「西日本」が23回繰り返すベクトルを作成し、data2 <- cbin(地域, data2)というコマンドでcbind関数を使い、地域のベクトルとdata2のデータフレームを結合しています。head関数ではじめの6行を表示していると、「地域」が加わっていることが確認できます。

これでデータフレームの準備は整いました。まずは、library(tidyverse)でggplot関数が入っているパッケージを呼び出します。

f:id:cross_hyou:20181011081538j:plain

あとはggplot関数を使うだけです。

f:id:cross_hyou:20181011082245j:plain

f:id:cross_hyou:20181011082311j:plain

画面の左側、平均気温が低いほうに東日本が多く、右側、平均気温が高いほうに西日本が多くプロットされているのがわかりますね。

ggplot(data = data2) + のコマンドで、data2のデータでグラフを作ります、と指定していて、geom_point(mappin = aes( x = V平均気温, y = V平均降水量 のコマンドでX軸がV平均気温、Y軸がV平均降水量の散布図を描いて、color = 地域 のコマンドで地域で色分けしなさい、と指定しています。

colorの他にも、size、shape, alphaがあるようなのでそれぞれやってみます。

f:id:cross_hyou:20181011083101j:plain

f:id:cross_hyou:20181011083116j:plain

sizeを地域で使うことはnot advisedって警告メッセージが出ていますね。地域のような数値データでないものにsizeを使うのは推奨されていないようです。

V降水量差でやってみましょう。

f:id:cross_hyou:20181011083700j:plain

f:id:cross_hyou:20181011083740j:plain

平均気温が高い地域、平均降水量が多い地域のほうがV降水量差はある感じですね。

shapeではどうなるでしょうか?地域でやってみます。

f:id:cross_hyou:20181011084223j:plain

f:id:cross_hyou:20181011084238j:plain

西日本がマル、東日本が三角で表示されました。

alphaではどうでしょうか?

f:id:cross_hyou:20181011084714j:plain

f:id:cross_hyou:20181011084722j:plain

alphaもsizeと同じで地域のようなカテゴリカル変数には適していないようです。西日本が薄く、東日本が濃い色でプロットされました。

それでは、alphaをV降水量差でやってみましょう。

f:id:cross_hyou:20181011085159j:plain

f:id:cross_hyou:20181011085209j:plain

V降水量の値によって色の濃さが調節されています。

以上、R言語のggplot関数で散布図を作成してみました。

 

 

 

各地の気温と降水量の分析5 - 加工データでクラスター分析をしてみる。

前回は、原データでクラスター分析をしたので、今回は加工データでクラスター分析をしてみます。まずは、「日本の統計」にあった各地の気温と降水量のデータをread.csv関数でR言語に読込みます。

f:id:cross_hyou:20181010191753j:plain

こんな感じのデータですね。このデータから、最大降水量や最高気温、寒暖差などを作成しました。そして出来たデータフレームがこちらです。

f:id:cross_hyou:20181010192021j:plain

このように、平均気温、最高気温、最低気温、寒暖差、平均降水量、最大降水量、最小降水量、降水量差の8種類のデータのデータフレームです。このデータフレームでクラスター分析をしてみましょう。

f:id:cross_hyou:20181010192804j:plain

まず、as.matrix関数でデータフレームを行列に変換します。

そして、dist関数で行列の距離(類似度)を計算した行列を作ります。

上の結果だと、例えば札幌と青森の距離(類似度)は28で、札幌と盛岡の距離(類似度)は72ですから、札幌には青森のほうが近いということですね。

f:id:cross_hyou:20181010193303j:plain

hclust関数でクラスター処理をして、plot関数で結果をツリー図形で表示します。

f:id:cross_hyou:20181010193408j:plain

こうなりました。前回のツリー図形を再掲しましょう。

f:id:cross_hyou:20181006161645j:plain

前回のツリー図形

札幌に注目すると、今回は札幌と長野がまずペアを作り、それが山形と青森のペアとつながります。

前回は札幌と青森がペアになり、それが多くのグループとつながりました。

このように原データをもとにしたクラスター分析と加工データをもとにしたクラスター分析では違う結果になるのですね。

非階層クラスター分析もしてみます。

f:id:cross_hyou:20181010194318j:plain

kmeans関数で非階層的クラスター分析ができます。札幌、青森、盛岡などは第2クラスターに属します。

f:id:cross_hyou:20181010194655j:plain

plot関数で散布図を描きます。

f:id:cross_hyou:20181010194740j:plain

黒が1クラスター、赤が2クラスター、緑が3クラスターです。

原データを加工したデータでのクラスター分析結果は、原データのクラスター分析結果とは異なる結果になることがわかりました。