www.crosshyou.info

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

JFAコンビニエンスストア統計調査月報データの分析3 - R言語で前年同月比のデータを作成する。

 

www.crosshyou.info

 の続きです。

今回は前年同月比のデータを作成しようと思います。

前年同月比は式で表すと
(今年のX月値 / 昨年のX月の値) - 1

ですね。分析で使っているデータは24か月分のデータがあって、1行目から12行目が2017年のデータ、13行目から24行目が2018年のデータですから、

((13行目 / 1行目) -1) x 100 としてパーセンテージ表示にしましょう。

まずは、全店売上高から作成します。

f:id:cross_hyou:20190124114702j:plain


round関数を使って小数点以下2桁にしました。全部プラスですね。

同じように既存店売上高の前年同月比を計算します。

f:id:cross_hyou:20190124114728j:plain

既存店売上高はマイナスの月がありますね。

次は全店舗数です。スクリプトをコピーペーストして列のところだけ変えればいいのですが、「Rではじめるデータサイエンス」

 

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

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

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

 には「コードの塊を3回以上コピー&ペーストするなら、関数を書くよう考えるべきです。(pp.237)」とありましたので、関数を書くのを考えてみます。

f:id:cross_hyou:20190124120041j:plain

こんな感じかな?dfがデータフレームで、pが列番号ですね。

試しに全店売上高(列番号は3)の前年同月比を計算してみましょう。

f:id:cross_hyou:20190124120259j:plain

上の出力結果が関数の出力結果で、下の値が先ほど計算したYoY全店売上高です。

やった!一致していますね。この関数、make_YoYで残りの変数の前年同月比を作成しましょう。

f:id:cross_hyou:20190124121101j:plain

次は、data.frame関数で前年同月比のデータフレームを作成しましょう。

f:id:cross_hyou:20190124121730j:plain

こうなりました。2018年6月の既存店売上高の前年同月比、12.34%ってほんとかな?

ということでデータソースを確認したら、私が2018年6月の既存店売上高を入力ミスしていました。すみません。

修正した値はこうなりました。

f:id:cross_hyou:20190124122752j:plain

summary関数で平均値などを算出しておきましょう。

f:id:cross_hyou:20190124122833j:plain



今回は以上です。

次回は

 

www.crosshyou.info

 

です。

JFAコンビニエンスストア統計調査月報データの分析2 - R言語で各変数の推移を見る。12月は客単価が高くなる。

 

www.crosshyou.info

 の続きです。

今回は各変数の推移をplot関数で見てみます。

f:id:cross_hyou:20190123190637j:plain

f:id:cross_hyou:20190123190727j:plain

全体としては右肩上がりですが、下がっている月もありますね。

次は既存店売上高です。

f:id:cross_hyou:20190123191009j:plain

f:id:cross_hyou:20190124184431j:plain


一番左のプロットが2017年01月です。なので2017年02月と2018年02月の売上高が突出して少ないことがわかります。2月は28日しかないですからね。

次は、全店舗数です。

f:id:cross_hyou:20190123191346j:plain

f:id:cross_hyou:20190123191357j:plain

コンビニの店舗って増え続いているとばかり思っていたのですが、前月よりも少なくなっていることもあるんですね。

全店来客数はどうでしょうか?

f:id:cross_hyou:20190123191645j:plain

f:id:cross_hyou:20190123191658j:plain

2月が少なく、7月が多いですね。

既存店来客数も同じ傾向でしょうか?

f:id:cross_hyou:20190123191857j:plain

f:id:cross_hyou:20190123191909j:plain

既存店来客数も2月が少なく、7月が多いです。

客単価を見ましょう。全店客単価と既存店客単価を一つの画面に表示します。

はじめにrange関数でY軸の範囲を計算して、ylim = でY軸範囲を指定してplot関数で全店客単価の推移をグラフにして、そこにlines関数で既存店客単価のグラフを重ねます。

f:id:cross_hyou:20190123193056j:plain

f:id:cross_hyou:20190123193112j:plain

12月が客単価は高く、全店客単価のほうが既存店客単価よりも高いことがわかります。

品目の構成比、これも一つの画面でグラフにしてしまいましょう。客単価と同じやり方でやってみます。

f:id:cross_hyou:20190123194234j:plain

f:id:cross_hyou:20190123194245j:plain

2018年09月のところが非食品の比率が増えて日配食品と加工食品の比率が下がっています。2017年09月はそうではないので季節的な要因ではなく、何かが起きたといことかもしれません。北海道で地震があってしばらく停電していたのでその影響かな?

今回は以上です。

 次回は

 

www.crosshyou.info

 

です。

 

訂正記録:2019年01月24日:既存店売上高の2018年06月の数値が誤ってCSVファイルに転記されていたので、修正し、既存店売上高のグラフを差し替えました。

JFAコンビニエンスストア統計調査月報データの分析1 - R言語で基本統計量を取得

今回は、JFAコンビニエンスストア統計調査のデータを分析したいと思います。

www.jfa-fc.or.jpのウェブページに過去24か月のデータがPDFファイルであります。

f:id:cross_hyou:20190122155429j:plain

このようなPDFファイルです。

この24個のPDFファイルをダウンロードし、CSVファイルにこのように転記しました。

f:id:cross_hyou:20190124184004j:plain



このファイルをR言語に読込ませ、データ分析の練習をしていこうと思います。

まず、read.csv関数でCSVファイルを読み込ませ、summary関数で要約統計量を表示します。

f:id:cross_hyou:20190124184109j:plain


str関数でデータ構造を確認しましょう。

f:id:cross_hyou:20190124184127j:plain



観測値は24個です。2017年の12か月と2018年の12か月合わせて24個の観測値ですね。

変数は13ですが、年と月を除くと11ですね。

全店売上高は単位は100万円です。平均が902589です。つまり9025億8900万円です。

日本全国で1か月コンビニで9000億円の売り上げがあることがわかります。

既存店売上高も単位は100万円です。平均は7999億2500万円です。

全店舗数は単位は1店舗です。平均は55281店舗です。

全店来客数は単位は千人です。平均は1447080ですから、全国で1か月に14億4708万人の来店です。日本の人口って1億2000万人ぐらですかね?そうすると、一人平均で10回ぐらいひと月に来店している計算ですよね。。3日に一回ぐらいですよね。。これってすごくないですか?

既存来店客数の単位も千人です。平均は12億9995万3千人です。

全店客単価の単位は円です。平均は623円80銭です。

既存店客単価の単位も円です。平均は615円50銭です。全店客単価のほうが既存店客単価よりも高いということは、新規店客単価が既存店客単価よりも高いということですね。

日配食品、加工食品、非食品、サービスの単位はパーセント(%)です。売上高に占めるパーセンテージですね。

日配食品の平均は36.52%

加工食品の平均は27.495

非食品の平均は30.42%

サービスの平均は5.571%です。

食品で65%ぐらいを占めることがわかります。

今回は以上です。24個のPDFファイルからデータをCSVファイルにまとめるので疲れました。R言語でもっと簡単にできると思うのですが、まだそこまで習熟していないので手作業でしました。

 次回は

 

www.crosshyou.info

 

です。

 

訂正記録:2019年01月24日:2018年06月の既存店売上高のCSVファイルの数値が間違っていたので訂正しました。

 

水害統計調査の分析4 - R言語のlm関数を使って線形回帰の練習

 

www.crosshyou.info

 の続きです。

今回は、R言語のlm関数を使って線形回帰の練習をしてみようと思います。

まずはじめは、全国集計したデータだけでやってみましょう。

まず、全国だけのデータを再確認します。

f:id:cross_hyou:20190119125142j:plain

被害額 = a + b x 合計 + 誤差項

という単回帰モデルで回帰分析してみます。lm関数を使います。

f:id:cross_hyou:20190119125452j:plain

一番下のp-valueが0.7092と0.05よりも大きい値ですから、このモデル式は有意ではない、ということですね。散布図に回帰式の直線を重ねて確認しましょう。plot関数とabline関数を使います。

f:id:cross_hyou:20190119125811j:plain

f:id:cross_hyou:20190119125830j:plain

散布図を見る限り、被害者合計人数と被害額は相関しているようにはあんまり見えないですね。

それでは、関東地方、近畿地方など地方別のデータでやってみましょう。

f:id:cross_hyou:20190119130224j:plain

こんどは p-value = 0.0005573 と 0.05 よりも小さな値になりましたので、有意なモデルです。係数を見ると、切片は 30974.10 で p値は2.02e-07 なので有意、合計の係数は 326.93 でp値は0.000557 で有意です。

つまり回帰式は、被害額 = 30974.10 + 326.93 x 合計 + 誤差項 という式です。R二乗は0.1575 です。そんなに当てはまりがいいとはいえないです。

plot関数とabline関数で視覚化します。

f:id:cross_hyou:20190119130847j:plain

f:id:cross_hyou:20190119130902j:plain

散布図を見ると右端や上端のプロットに回帰式が引っ張られている気がします。

もう一つ、都道府県別データで回帰分析しましょう。

f:id:cross_hyou:20190119131502j:plain

p-value は 6.465e-15 なので 0.05 よりも小さいですから有意なモデルです。切片の値は 5056.47 でp値は4.97e-12 で有意です。合計の係数は 381.61 で p値は6.47e-15 なので有意です。従ってモデル式は 被害額 = 5056.47 + 381.61 x 合計 + 誤差項 となります。決定係数(R-squared)は0.1345です。あてはまりがいいとは言えないです。

散布図を作成しましょう。

f:id:cross_hyou:20190119132117j:plain

f:id:cross_hyou:20190119132129j:plain

散布図を見ると合計も被害額も大きな値の外れ値があるので、それに回帰直線が影響されているような気がします。大きな値の影響を小さくさせるために被害額、合計の平方根で回帰モデルを作成してみましょう。

sqrt(被害額) = a + b x sqrt(合計) + 誤差項 という式です。

f:id:cross_hyou:20190119133034j:plain

p-value < 2.2e-16 ですからモデルは有意です。切片のp値、sqrt(合計)の係数のp値はともに < 2.2e-16 ですので有意です。そして決定係数(R-squared)が 0.2287 になっています。平方根を使わないモデルの決定係数は 0.1345 ですから改善しています。

散布図と回帰直線を視覚化します。

f:id:cross_hyou:20190119133829j:plain

f:id:cross_hyou:20190119133840j:plain

単純な散布図と回帰直線よりもこちらのほうが当てはまりがいいような印象を受けます。

いままでは、被害額を被害にあった人数の合計で回帰分析していました。今度は死者、行方不明者、負傷者の3つの変数で回帰分析してみましょう。重回帰分析というやつですね。被害額 = a + b1 x 死者 + b2 + 行方不明者 + b3 x 負傷者 + 誤差項 というモデル式です。都道府県別のデータでやってみましょう。

f:id:cross_hyou:20190119134524j:plain

一番下の行の p-value を見ると、 < 2.2e-16 ですからこの重回帰モデル式は有意です。

切片、各変数の p値 を見ると、負傷者以外は 0.05 以下です。そして調整済み決定係数(Adjusted R-squared)は 0.3183 ですから平方根モデルよりも説明力が上がっています。

回帰残差を視覚化してみます。

f:id:cross_hyou:20190119135217j:plain

f:id:cross_hyou:20190119135239j:plain

やっぱり被害額が大きいほど(グラフが右にいくほど)残差が大きいですよね。

平方根モデルを調べてみましょう。負傷者は有意ではなかったので除外します。

f:id:cross_hyou:20190119135738j:plain

一番したの p-value は < 2.2e-16 ですからモデル式は有意です。調整済み決定係数(Adjusted R-squared)が0.381 と上昇しました。残差をプロットします。

f:id:cross_hyou:20190119140220j:plain

こちらのチャートのほうが残差が特定のパターンがなく分散しています。

今回は以上です。

 

読書記録 - 「人物で語る化学入門」 竹内敬人著 岩波新書

 

人物で語る化学入門 (岩波新書)

人物で語る化学入門 (岩波新書)

 

 多くの化学者が紹介されています。

その中の多くが戦争や革命、自殺で命を落としています。

ラヴォアジエ フランス革命でギロチン

モーズリー 第一次世界大戦で戦死

ルイス 実験中の事故(自殺の噂)

ルブラン 自殺(フランス革命の影響?)

カラザーズ 自殺

エミール・フィッシャー 自殺

歴史に残る業績を挙げた人でも人生の最後が平和なものでなかった人がいるというのは切ないです。

 

Kaggle の Titanic の Competition に参加その2 - R言語のrpart関数の決定木で参加。正解率は 78.468% でした。

f:id:cross_hyou:20190116160939j:plain


 

 

www.crosshyou.info

今回は再び Kaggle の Titanic の Competition です。R言語のrpart関数で決定木モデルを作成して予測してみようと思います。

まず、read.csv関数でトレーニング用のデータを読み込みます。

f:id:cross_hyou:20190116145612j:plain

head関数でデータの始めの6行を表示してみましょう。

f:id:cross_hyou:20190116145756j:plain

str関数でそれぞれの変数のデータ型を確認します。

f:id:cross_hyou:20190116145952j:plain

Pclass、これは客室の等級ですが、データ型がintになっているのが気になります。factor関数でファクタ型に変換しましょう。

f:id:cross_hyou:20190116150353j:plain

ここでひとまず、summary関数でデータの基本統計量を確認しましょう。

f:id:cross_hyou:20190116150631j:plain

Survived, これは 0 が死亡で、1 が生存です。これもfactor関数でファクタに変換しましょう。

f:id:cross_hyou:20190116151315j:plain

 

それともうひとつ、Ageのデータが NA の乗客が177人います。これは気になるので、HasAgeというファクタを作成しましょう。

f:id:cross_hyou:20190116151246j:plain

これでまたsummary関数を実行してデータ変換がうまくいったか、HasAgeが追加されたか確認しましょう。

f:id:cross_hyou:20190116151531j:plain

あ、確認してよかったですね。Hasge がファクタではなく文字列のままでした。factor関数でファクタに変換します。

f:id:cross_hyou:20190116151907j:plain

これで決定木作成の下準備が終わりました。R言語のrpart関数で決定木を作成しますが、その前に、rpartパッケージを読み込みます。

f:id:cross_hyou:20190116152058j:plain

こうして読み込んだら rpart関数で決定木モデルを作成します。

f:id:cross_hyou:20190116152516j:plain

print関数でモデルを表示します。

f:id:cross_hyou:20190116152731j:plain

* がついている行が最終ラインです。一番下の行、7) Pclass = 1, 2 を見ると、これは一つ上の段階が3) Sex = femaleです。なので、7)が意味するのは、性別が女性で、客室クラスが1等、2等客室の乗客は生存と判定、ということになります。

predict関数でこのモデルを使って生存・死亡を判定できます。

test用のファイルを読み込みます。

f:id:cross_hyou:20190116153301j:plain

Pclassの変数をファクタ型に変換します。

f:id:cross_hyou:20190116153649j:plain

HasAgeを作成します。

f:id:cross_hyou:20190116154115j:plain

predict関数で生存・死亡を予測しましょう。

f:id:cross_hyou:20190116154227j:plain

結果を表示します。

f:id:cross_hyou:20190116154511j:plain

このようになりました。1番目の乗客は死亡確率が83%で生存確率が17%です。5番目の乗客は生存確率が81%です。

head関数でtestデータを見てみましょう。

f:id:cross_hyou:20190116154818j:plain

1番目の乗客は男性で3等客室に乗っていて、34.5歳ですね。この乗客は死亡する確率は高いですね。5番目の女性です。男性に比べると生存する確率は高いですね。

predデータに生存確率が0.5以上なら1, そうでないなら0のSurvivedという変数を付け加えましょう。そのためにpredをまずデータフレームに変換します。

f:id:cross_hyou:20190116155540j:plain

Survivedを加えます。

f:id:cross_hyou:20190116155743j:plain

もう一度、pred を表示しましょう。

f:id:cross_hyou:20190116155929j:plain

うまくできましたね。この結果を Kaggle に submit しました。

結果は。。。

f:id:cross_hyou:20190116160655j:plain

Score が 0.78468 です。正解率が 78.468% になりました。前回が 71.77% でしたから 7ポイントぐらいの改善です。

今回は以上です。

 

経済センサスの事業所に関する集計データの分析5 - R言語のlm関数で線形単回帰分析の練習

 

www.crosshyou.info

 の続きです。

今回はR言語のlm関数を使って、線形単回帰分析の練習をしてみたいと思います。

今まで分析していなかった面積事業所数と面積従業員数の線形単回帰分析をしてみたいと思います。面積事業所というのは、1平方キロメートル当りの事業所数、面積従業員数というのは1平方キロメートル当りの従業員数です。事業所の数が多ければ、従業員の数も多くなるのが予想されます。

これを線形単回帰式で表すと、

面積従業員数 = a + b * 面積事業所数 + 誤差項

という式で表すことができます。この式の場合、面積従業員数が目的変数(従属変数や被説明変数ともいう)と呼ばれます。面積事業所数は説明変数(独立変数ともいう)とも呼ばれます。aは切片、bは係数です。

まず、散布図を描いて本当に、面積従業員数 = a + b * 面積事業所数 + 誤差項 という関係になっているか確認します。plot関数です。

f:id:cross_hyou:20190116000329j:plain

f:id:cross_hyou:20190116000343j:plain

この散布図を見ると確かに線形の関係がありそうですね。

lm関数で線形単回帰モデルを作成し、a(切片)とb(係数)を算出します。

f:id:cross_hyou:20190116001015j:plain



一番下のp-value < 2.2e-16 を見てください。つまり、このモデルは有意だということです。Coefficients: のところが推計された値です。

Interceptが切片で、-42.096 です。

面積従業者数の係数は、12.407 です。

よって推計された回帰式は

面積従業員数 = -42.096 + 12.407 x 面積事業所数 + 誤差項

となります。

plot関数とabline関数で視覚化しましょう。

f:id:cross_hyou:20190116001943j:plain

f:id:cross_hyou:20190116001956j:plain

predict関数を使うと、仮定の面積事業所数に対しての面積従業員数が計算できます。ためしに、面積事業所数が15、30、100の3つの値のときの面積従業員数を計算してみます。

f:id:cross_hyou:20190116003928j:plain

このようになります。1平方キロメートル当たりの事業所数が15のときは144人、30のときは330人、100のときは1198人となります。

今回は以上です。

次回は

 

www.crosshyou.info

 

です。