2015年3月30日月曜日

つまずかないR言語入門(ファイルの読み、書き、簡単なプログラム)

オープンデータの読込について、何回か繰り返し実施した。

readはなんとなく慣れてきた。
先頭行に列名があり、区切り文字がスペースの場合は
read.table("filename.txt",header=TRUE)
execelなどから変換した際によく使うcsv形式は
read.csv("filename.csv",header=TRUE)はread.table("filename",header=TRUE,sep=",")と同じ。
TAB区切りの場合は、
read.delim("filename.txt")はread.table("filename",header=TRUE,sep="\t")と同じ意味になる。

ではRで処理した結果を、ファイルに書き出す方法は
どうするのか?
例えば、

> g<-c(1,2,2,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6)
> g
[1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6
> write(g,"testfile,txt",ncolumns=1)
>
とすると、Rの作業フォルダーにtestfile.txt名で
ファイルが保存されているはずです。

さて、すこし進んで、簡単なプログラム構文の例を考えたい。
while文である。
while分は与えられた条件が成立している間、与えられた手続きを
繰り返す構文となっている。

例として、
初期値を1として、xが10になるまで1行に書くとすると、
> x<-1
> while(x<=10)
+ {print(x);x<-x+1}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
>
こんなふうになる。

同様に、1から11までの奇数を一行に記述するには

> f<-1
> while(f<=11){print(f);f<-f+2}
[1] 1
[1] 3
[1] 5
[1] 7
[1] 9
[1] 11

という感じで直感的に理解出来る内容だ。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月28日土曜日

つまずかないR言語入門(板橋区商業施設で駐車場の有無について考察)

前回、板波区の商業施設で、駐車場の有無は、売上をt検定を用いて検定したが、
(p>0.05)となり有意差は認められなかったとした。

では、同様に駐車場の有無は、従業員一人あたり売上に差を生むのか。
Rを使って、t検定までやってみます。

> x<-read.table("attach_20.csv",sep=",",header=TRUE,row.names=1)
> n<-c(x$sales_n/x$employee_n)
> p<-c(x$sales_p/x$employee_p)
箱ひげ図を見てみると

> boxplot(p,n,names=c("parking","noparking"))

となりました。

となりました。
t検定を進めます。
> t.test(p,n,var.equal=T)

Two Sample t-test

data: p and n
t = 0.299, df = 52, p-value = 0.7661
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-4.262274 5.754990
sample estimates:
mean of x mean of y
15.61962 14.87326

となり、検定結果としてはt検定を用いて検定したが、
(p>0.05)となり、有意差は認められなかったとした。

売上高同様に、従業員一人あたりの売上も、駐車場の有無による有意差は
認めらなかったということでした。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月26日木曜日

つまずかないR言語入門(t検定)

自分自身のスキルアップを大きな目的にしているので、行きつ戻りつして
まだるっこしいところがあるのはご容赦ください。

さて、前回、例えば駐車場がある店舗数とそうでない店舗数を比較しました。
箱ヒゲ図では、

となりました。
では、駐車場のある店舗とない店舗数の平均値の差の検定(t検定)を行ってみたいと
思います。

> t.test(x$shop_n,x$shop_p,var.equal=T)

Two Sample t-test

data: x$shop_n and x$shop_p
t = 3.7, df = 54, p-value = 0.0005067
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
42.14835 141.85165
sample estimates:
mean of x mean of y
107.35714 15.35714
t値=3.7 自由度54、p値=0.0005057

帰無仮説として、平均値における真の差は0である。
p値が有意水準1%以下を下回っているので、帰無仮説を棄却
することが妥当という結論になる。

砕けていうと、板橋区の商業施設の駐車場のある店と、ない店の平均数は有意差が
あるということになる。
板橋区の商業施設は、平均的には駐車場を必要としない、商店街が並んでいるような
イメージなのかもしれない。
では、駐車場のある、無しで平均売上に有意な差があるかを検討してみる。

> t.test(x$sales_n,x$sales_p,var.equal=T)

Two Sample t-test

data: x$sales_n and x$sales_p
t = 1.0512, df = 54, p-value = 0.2978
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3586.677 11493.534
sample estimates:
mean of x mean of y
9314.786 5361.357

t値=1.0512 自由度54、p値=0.297
帰無仮説として、平均値における真の差は0である。
p値が有意水準約29%という結論になり、帰無仮説を棄却できない、つまり
板橋区の商業施設の駐車場のある店と、ない店の平均売上高は有意差が
ないということになる。

箱ヒゲ図で見てみると、

なんだか、腑に落ちない結論(ほんまかいな?)ではあるが、微力な筆者がRを使った結果ではある。
勉強たりないな!

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月22日日曜日

つまずかないR言語入門(板橋区のオープンデータ)

板橋区のオープンデータを活用して、Rで分析の試みようとしたが、
とんでもないところで、躓いてしまった。
このブログを作成しているHPのデスクトップはOSはWindows7だが、office系は
オープンソフト優先でOpenofficeを使っていた。
今回、板橋区のデータを取り込み、csv形式にするにあたり、漢字の文字バケに
悩まされた。
NECのマシンはUBUNTUなので、Libreofficeがインストールしてあり、これで
データを散り込むと、すんなり文字問題が解消した。そこで、このHPマシンにも
Libreofficeをインストールして、使ってみると、見事に文字問題が解消したので、
ようやく本題に入れることとなる。

ここで、データに多少の加工を加えている。
板橋区の各業種の店舗数や、従業員数の総数と、それぞれの駐車場を持っている店舗の
数値は記載があるが、駐車場がない店の記載がないので、表計算上で、非駐車場の
店舗数などは計算をして、保存してある。
あと、header部分は本来漢字であるが、Rのコマンド入力があまりに煩雑になるので、
英語表記にしてある。
最後に、オリジナルがMSのexecelなので、オープン系officeで開いたためなのか、
千の位の表記がcsvに変換すると、空白になり、数値と看做されないため、
計算ができなかった。 そこで、手作業で、空白を除去するという作業をしたことをお断りしておきます。
ファイル名は、attach_20.csvとしています。
まずは、全体像がみたいので、
> x<-read.table("attach_20.csv",sep=",",header=TRUE,row.names=1)
とします。
先頭6行をみると


となり、
例えば駐車場がある店舗とそうでない店舗を比較すると。
> boxplot(x$shop_p,x$shop_n,names=c("parking","noparking"),col=c("orange", "green"))
としてみると、

となり、駐車場を持たない、あるいは必要としない商業施設が多いことが判る。
箱ひげ図の最大値を超えたはずれ値は、それぞれ自動車小売業と飲食料小売業で、
「なるほど」という納得感のある結果となった。

それでは、駐車スペースを持っている業種別の店の数を棒グラフで表すと、

となる。
お断りしなくてはいけないのが、X軸の業種名で、フルネームでこのスペースには
押し込めなかったので、業種記号で代用しています。
現地調査をしなくては正しい判断はできないのですが、板橋区という特性から
駐車場の必要性が今後の分析でわかるかもしれないと期待してます。

本日はここまでです。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月20日金曜日

つまずかないR言語入門(オープンデータの取り扱いに苦慮)

つまずかないR言語なんて、大見得切ったけど、昨日来、板橋区の 商業データと悪戦苦闘。

漢字の問題で、漢字コードに由来するエラーが頻出。

クリアしたものの、今度はRのコマンドラインに、ANKと漢字を
$マークで区切っても、すんなり読み込んでくれない。

つきましては、再度力量不足を反省しつつ、本日はギブアップ
です。

皆様申しわけないです。m(_)m

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月19日木曜日

つまずかないR言語入門(板橋区商業統計を使ってすこしレベルアップ(?)

板橋区の商業統計を使って、すこしレベルアップを図りたい←自分
ここには、クリエイティブ・コモンズ・ライセンスの明記がないので、
商用目的につかうのではなく、あくまでも私的な勉強の使うといことで、
多少の改変はご容赦頂きたい。

余談ですが、オープンデータであろうが、プライベートな私企業の データであろうが、
統計分析に使おうと考えるデータは、ほぼ100%そのまま使えることは
なく、データ形式の統一や、欠損値の扱い、カンマの処理、ヘッダー部分の
処理などに、かなりの時間を費やすことを覚悟して置いた方が、よろしいと思います。

閑話休題: 今回は、
板橋区の平成19年商業統計調査報告
を使います。
このようなエクセルデータです。

今回、商業施設で、駐車場があるかないかで、色々な数値が変化している
ようなので、そいつを分析してみようかと考えました。


CSVファイルに落とし込むとこのようになりました。


続きは、次回ということでご容赦ください。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月16日月曜日

つまずかないR言語入門(埼玉県の商業データグラフ化から学ぶこと)

しつこいようですが、昨日に引き続き、埼玉県のオープンデータ(商業統計)から
分析~グラフ化の手順にトライしてみる。
元のデータは

このデータのお互いの関係を概観するのに、

ここで、従業員数と売上に相関関係が強くありそうだと、目安をつけたら

> plot(employee~sales,x)

として、見事に相関関係があるのが理解できる。

相関係数は

> cor(x$employee,x$sales)
[1] 0.9398025

となり、当たり前の結果といえば当たり前の結果となった。
このあたり、自分の力量と、オープンデータの活用がミスマッチしている
とも思えるので、少し研究して次回に備えます。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月15日日曜日

つまずかないR言語入門(埼玉県のオープンデータを使って)

いままで、長野県須坂市のオープンデータを使わせて戴いていたが、
今回、埼玉県のオープンデータが公開されているのを見て、
同じような分析をして見たい。

埼玉県オープンデータカタログ2014試行版が公開されている。
そこの県政情報・統計ページに、商業統計があり、須坂市と規模は違うが、
同様趣旨のデータを発見したので、読み込んでみた。
概要表(概要表-1~概要表-26)のエクセルファイルに平成19年商業統計調査概要一覧
があり、事業者数・従業者数、年間昇進販売額の推移を表した表があるので、
使用します。

EXCELファイルをダウンロードして、(私の場合はOpenoffice)で、開き
csv形式で保存。
漢字コードの問題(Shift-JIS,unicode,UTF-7)など、込み入っているので、
余分な説明を削除し、タイトルをshop,employee,salesとして保存。
ファイル名は"saitama.csv"とした。


> x<-read.table("saitama.csv",sep=",",header=TRUE,row.names=1)
として、
> summary(x)と入力すると

    shop    employee     sales  
Min.   :56427   Min. :220782    Min. :2.709e+08
1st Qu.  :63216   1st Qu.:327969    1st Qu.:8.864e+08
Median   :68882    Median :422684    Median :1.436e+09
Mean   :66822    Mean :389338    Mean :1.226e+09
3rd Qu.  :71908    3rd Qu.:462440    3rd Qu.:1.701e+09
Max.    :75330    Max. :504982    Max. :1.807e+09

前回同様グラフ化してみた。

> barplot((x$sales)/(x$employee),main="uriage/man",names.arg=c("49","51","54","57","60","63","3","6","9","11","14","16","19"),col=c("orange"))

と、平成3年をピークとしながらも、一人当たりの販売高が向上しているのが見て取れる。

年間売上高を見てみる。 >barplot((x$sales),main="uriage",names.arg=c("49","51","54","57","60","63","3","6","9","11","14","16","19"),col=c("blue"))

平成3年(1991年)に始まったとされるバブル崩壊が、グラフでも明確に読み取れる。
本日はここまでです。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月14日土曜日

つまずかないR言語入門(グラフの修飾)

前回エントリーで、長野県須坂市のオープンデータから商業において、従業員の数は増えていないのに 売上が伸びているのが判り、グラフ化した。

そのグラフがあまりに貧弱で、人前に出せるものではないので、今回は各種コマンドで
他人がみて、納得できるグラフ作りを試みる。

例によって、

> x<-read.table("08.csv",sep=",",header=TRUE,row.names=1)

で、変数Xを呼び出す。

つぎにグラフ化するに、前回は

> barplot((x$sales)/(x$employee))として

次のグラフを作成した。


今回は、タイトルと、棒グラフの色そして横軸に「年」を表記して、
見やすいグラフにしてみる。

> barplot((x$sales)/(x$employee),main="uriage/man",names.arg=c("51","54","57","60","63","3","6","9","11","14","16","19"),col=c("orange"))

ここで、main=""uriage"はグラフのタイトルを表記するので、重要!
name.arg=c("51","54"......)は、X軸の項目を示し、ここでは昭和、平成が混在しているが、
須坂市表記通りの「年」を示している。
colは棒グラフ色を指示している。
colorとすると、システム側に怒られるので注意が必要。
col=c("orange")としているが、もちろん他に色指定も可能なので、調べて欲しい。
また、ここではorange単色であるが、棒ごとに色を帰ることも可能であるが、
面倒なことは面倒です。

本日はここまでです。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月13日金曜日

つまずかないR言語入門(オープンデータから読み取れること)

長野県須坂市の商業データをなんとか取り込んだ。

> x<-read.table("08.csv",sep=",",header=TRUE,row.names=1)
と打ち込み、
> x
とすれば、


となる。
売上高と従業員数に注目すると、従業員の数は大きく変化していないが、
売上高が、昭和51年と、平成19年では2倍以上に拡大しているのが判る。
変数xの売上高(sales)と同じく変数xの従業員数(employee)を各年度で割ってみると
数字で示すことができる。

> (x$sales)/(x$employee)

すると、
[1] 879.7255   1184.1150   1481.9854   1946.4864   1928.9300   2494.5890   2199.9728
[8] 2566.8377   1985.2440   1798.8853   1895.1024   2174.6851

ということで、一人あたり売上高が大きく向上していることが数字で裏付けられた。
さらにこれを、グラフ化してみよう。

こういった年度毎の変化には、棒グラフが適切かと思う。
そこで、棒グラフを示すコマンド、barplotを使い、

> barplot((x$sakes)/(x$employee))
とすると、


と、右肩上がりに一人当たり売上高の遷移が確認できる。

グラフとしての見栄えは、とても人前に出せるものではないので、
その当たりの修飾方法は次回エントリーで示します。

追記)つまずかないR言語などと大見栄をはったものの、自分を含め
つまずきそうなところを、明記していなかったので、以前のエントリーで
補記として、陥りそうな落とし穴について、追記していこうと思ってます。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月11日水曜日

つまずかないR言語入門(オープンデータの活用)

前回のエントリーで、長野県須坂市の商業データを例として、
マーケティング利用を考えてみようとした。
ここで、一つ落とし穴がありました。
市の作成したエクセルデータの数値は、利用者の視認性を
考えて、3桁単位で","(カンマ)が入っているのです。

単純にCSVで落としても、カンマは生きているので、
R側で、sep=","として項目の区切りをカンマと明示
しても、データ中にカンマがあるので、正しく分析でき
ないことが判明。CSVファイルの数値を、3桁カンマ区切り
なしにして、読み込むことにした。
このあたりは、EXCELのバージョンだったり、Openofficeや
Libreofficeで、少し異なるようなので、深くは触れません。

前回同様、
>x<-read.table("08.csv",sep=",",header=TRUE,row.names=1)
として、
>x
で表示。
>plot(x)
として、各項目の相関関係を確認しましょう。

商店数(shoten)と売り場面積(area)に負の相関関係が見えるとか、
なぜか判りませんがその他の収入額(income)と商品手持ち額(zaiko)に正の相関関係が
見て取れるなど、その後の突っ込んだ分析の概要が読み取れると思います。
詳細な分析と、時系列の分析は次回以降で試行します。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月10日火曜日

つまずかないR言語入門(オープンデータファイルの読込)

前回までは、電卓的使い方と、Rに付属するデータの利用を理解してきた。

実務的には、外部ファイル(たとえばマイクロソフトの
officeやLINUX系ならLibreofficeか)の表計算ソフトや
CSVファイルを使うケースが圧倒的に多いと考えられる。
そこで、今日は自治体が公開しているオープンデータを
取り込んで、すこし加工したのり、分析してみる。

ここでは、長野県須坂市のオープンデータサイト から、
商業に関するデータを取り込んでみた。
ちなみに、同市のオープンデータはクリエイティブコモンズの


となっているので、2次利用させていただきます。

該当のアイコンをクリックすると、開くか保存するか
聞いてくるので、とりあえず開き、CSVファイル"08.csv"として
保存します。
保存先は以前説明した、Rの作業フォルダーにするのが
スムーズかと思います。
実は、ここで自分自身の漢字環境とカラムがnullの処理に 実力不足が露呈しまして、タイトルを英語表記、nullを0(ゼロ) と置き換えていることをご了解ください。

Rを開き

>x<-read.table("08.csv",sep=",",header=TRUE,row.names=1)

として >x と打ち込むと こんな画面が展開されるはずです。

ここからは、
これらをマーケティング的にどうみるか。
次回のエントリーで書きます。

(補遺) ファイルの読み込みには、数種類のパターンがあるが、
基本は、今回使った
>x<-read.table("file.name",header=TRUE,row.names=1)
となると思う。

読み込むデータは、多くはcsvかtxtと思われる。
read.csvは、read.tableを使って、項目の区切り(sepatator)をsep=",",
read.txtは同じくsep="\t"とすることで、同等の意味を持たすことができる。
txtのセパレータは、使っているOSやキーボードの違いで、表記がことなるので、 "\t"であったり\であったりするので、注意していただきたい。

ちなみに、今回の例題を使って見ると

>x<-read.csv("08.csv,header=TRUE,row.names=1)であったり、

>x<-read.txt("08.txt",header=TRUE,sep="\t",row,names=1)

と同等の機能をもつはずである。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月8日日曜日

つまずかないR言語入門(相関係数、単回帰分析)

改めて、回帰分析を考えてみると、例えば身長と体重のように
関係性があるような2つの変量があるとき、一方の数値が
与えられたとき、もう一方の数値を予測するようなケースが
考えられます。
前回の例でいえば、スピードをあげていた車が慌ててブレーキを
かけた時の停止距離と、ゆっくり走っていた車が同様にブレーキを
かけた場合の制動距離は、相関関係がありそうだというのは、
直感的に理解できます。
ちなみに、

>cor(cars)

とすると、speedとdistの相関係数は、0.8068949
となり、
目安として、1.0≧相関係数絶対値≧0.7
にあれば、高い相関関係があるといわれているので、想像通りの
結果とも言える。
マーケティング的にいえば、宣伝費と売上の関係(?)とか
商圏の人口と売上高などの例が挙げられます。
ここで、予測したい変数を目的変数、目的変数を説明する変数を
説明変数と呼びます。
自動車の例でいえば、制動距離が目的変数、スピードが説明変数
ということになりますかね。
この直線を使えば、測定できなかったスピードでも、およその
制動距離が推測できる。という利点があります。

とくに説明変数が一つのときは、単回帰分析と言い、前回の直線が
それを示しています。

ちなみに説明変数が2つ以上の場合を重回帰分析と言います。


----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月6日金曜日

つまずかないR言語入門(単回帰)

前回同様、「cars」を使う。

>cars
と入力して、carsのデータを入手する。

head(cars)とキーボードを叩けば

speeddist
142
2410
374
4722
5816
6910

となる。 繰り返しになるが、このデータはクラシックカーの時代の
自動車のスピードと停止距離を測定したもので、
その相関関係をみるために散布図を作るには、
> plot(dist~speed,cars)
と入力します。

これで、スピードが出ていると、制動距離も延びるのだということが 直感的に把握できます。 さらに
> abline(lm(dist~speed,data=cars))
とすることで、

となり、単回帰線を引くことができます。
----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月5日木曜日

つまずかないR言語入門(ヒストグラム)

さて、ヒストグラムだ。
外見上は、棒グラフに似ているが、同じではない。
分布を可視化したものと考えれば良いのかもしれない。
試みに、Rに付属しているデータに「cars」というのがあるので、
こいつでヒストグラムを作成してみる。

(ちなみにであるが、carsは1920年代の自動車のスピードと
その制動距離をデータ化したものだそうです。
原文:The data give the speed of cars and the distances taken to stop.
Note that the data were recorded in the 1920s. )

>hist(cars$dist)
と、キーボードから入力すると、横軸に停止までの距離、縦軸にその頻度が表示される。

顧客の購買金額や、年齢分布など、属性を把握するには有効な手法と思う。
----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月4日水曜日

つまずかないR言語入門(データの要約)

irisのファイルを要約してみたが、少し詳しく見てみたい。
列に、Sepal(がく片)と Petal(花びら)の長さと幅がそれぞれ表示され、
右端はirisの種類を示している。

行方向は、それぞれ最小値、第一四分位、中央値、平均値、第三四分位、最大値を
示している。
四分位とはデータを昇順に並べて、4等分したものです。
小さい値から数えて、総数の1/4番目に当たる値が第1四分位、 真ん中に当たる値が第2四分位(=中央値)、
3/4番目にあたる値が第3四分位となります。

マーケティングの世界でも、例えば、顧客属性(年齢層、居住地、性別など)
などをざっくり把握する場面で、このsummaryが使えると思う。

前々回紹介した、箱ひげ図を使えば、さらに視覚的に把握するのには便利かもしれない。


----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月2日月曜日

つまずかないR言語入門(ファイルを扱う)

データを毎回入力するケースは実務レベルでは少ないと考えられる。
一般的に、企業内でマーケティング用途にデータ分析しようとする場合、
蓄積されたexcelやBIツールから出力されたファイルを使うことが多いだろう。

とりあえず、今日は、ファイルの置き場所を気にせずにすむように、
あらかじめRに組み込まれている、"iris"というデータを使って、
ファイル操作に慣れよう。

>iris
と入力してリターンキーを叩くと、全150行のデータが画面に出力される。
あまりにデータが多いので、150行が一瞬の間に表示され全体像が見えない。
そこで、
>head(iris)
とすると、ヘッダータイトルを含んだ先頭6行、

Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies
15.13.51.40.2setosa
24.93.01.40.2setosa
34.73.21.30.2setosa
44.63.11.50.2setosa
55.03.61.40.2setosa
65.13.91.70.4setosa


>tail(iris) とすると最終行から前6行が画面に出力されるので、
Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies
1456.73.35.72.5virginica
1466.73.05.22.3virginica
1476.32.55.01.9virginica
1486.53.05.22.0virginica
1496.23.45.42.3virginica
1505.93.05.11.8virginica/td>

こんな感じで、データの全体像は俯瞰できる。
ちなみに、irisはあやめ属の3種についてのsepal(がく片)とpetal(花弁)の
長さと幅を、調べたものです。
詳しくはこちらを参照ください。

http://d.hatena.ne.jp/tsutatsutatsuta /20121206 /1354737461

5列150行のデータファイルがRに取り込まれた訳です。
> summary(iris)で、ファイルを要約すると、次のようになります。


----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------