2017年9月28日木曜日

とある社員の雑談

~日常の中に見つける、『ミスマッチ』~

 いつの頃からだろう、夏にスーパークールビズなどと称して、かなりの軽装で職場に通うようになったのは。

一昔前の時代からすれば、いや、現代でも営業職などを経験してきた人で、常にTPOを意識した服装を心掛けている人
からすれば、明らかに職場に『ミスマッチ』な格好だと言われてしまうだろう。

 しかし、考えてみれば、日本人は元々はちょんまげに袴を着て、下駄を履くというのがスタンダードの時代があった。
その時代の人たちからすれば、スーツにネクタイをしている現代の格好の方がよほど、世に『ミスマッチ』ということになるではないか。

 人々を悩ませ、時に混乱や論争の火種にさえなる『ミスマッチ』。
今回はとりわけ、身近に現れる『ミスマッチ』に焦点を当てていきたいと思う。


ファイル1:焼きそばに、赤ワイン

  平日、疲れて帰宅した後の楽しみは、やはり食事とお酒だ。
 しかし夜も20時を回れば、帰り道のスーパーに売っているものも、だいぶ残りもの感に溢れたラインナップになってくる。
 中でもとりわけよく売れ残っているのが、焼きそばだ。

  何も考えず、ついそれを買って、うちに帰って冷蔵庫を開けてみると、何とまぁ、まんまとビール類を切らしている。
 そんな時に出現するのがこの2ペアだ。

  こってりとしたソースに、赤ワインの濃いコクが混じり合う。
 日本と、異国の地のお祭りバトル勃発だ。

 『無敵フェス』とでも、この2つの組み合わせを名付けようか。


ファイル2:うどんに、ウィスキーのロック

  少し肌寒く感じられるようになった日に食べたくなる鍋料理。何鍋だろうと、〆のラーメンやうどんは旨い。
 しかし、だ。やはり、ここでも飲むものが何も無い。どうすればいい。さぁ困った。
 
 そんな時に出現するのがこの2ペアだ。

 まるで、1Dayインターンに来た学生と代表取締役のペアが、一仕事成し遂げてしまいました、かのようなこのコラボ感。
  
 『B&1 (Boss & 1dayインターン)』とでも呼んだらいいだろうか。


ファイル3:最近の国際情勢と、それへの取り組み

  20世紀が戦争の世紀であり、男尊女卑の時代でもあったことは言うに及ばない。
 21世紀も17%を過ぎ、もうあと2、3年で20%に差し掛かろうとしている。

  人間は確かに、アニマルの一種であり、だからサルの陣取り合戦と大して変わらないことを延々と続けてしまったり、
 前世紀的な考え方にしがみついたりしてしまうのも理解できる。

 「オレはそれ持ってるけど、お前はそれ持つんじゃねえ」
 「そんなの知るかよ。何様だお前。」
 こんなやり取りをずっと繰り広げてしまうのも、我々がアニマルだからだろう。

 この21世紀に、20世紀的解決方法で課題に取り組もうとすることに意義はあるのか。

 まだ見ぬ解法や、課題解決に至るための、思いも寄らない道筋は無いのか。

  私たち人類は、否が応でも、来たる宇宙世紀へ向けたテクノロジー的・ビジネス的、歴史的・社会的、
 そして肉体的・精神的な準備を進めるフェーズに入ろうとしている。

  と、まぁ、話の流れに『ミスマッチ』な話題を最後に入れてしまったことに苦笑しつつ、

 今回のテーマに関する更なる探求・深耕に関しては、後進に道を譲りたいと思う。ふぅ。

2017年6月16日金曜日

【求人情報】 未経験からスタート! SASエンジニア

6月16日は「和菓子の日」
http://www.wagashi.or.jp/wagashinohi/
直近の週末に、明治神宮菓道敬神会の主催により、明治神宮で無料の和菓子配布イベントが行なわれています。
また和菓子といえば、道徳の教科書検定でパン屋が和菓子屋に修正されたとニュースになりましたね。



さて、
ネイチャーインサイトでは、2017年 第1弾の中途採用募集をスタートしました。

当社は、第一期SAS認定パートナー企業として、ビッグデータ」・「ビジネスアナリティクス」の分野で、多くのお客様のビジネスをサポートしてまいりました。

今後の需要拡大に向けて、2020年までに100人体制を目標に積極的に採用活動を行っていきます。
当社で希少価値の高いSASエンジニアを目指しませんか!


下記、求人広告(@TYPE)へのリンクです。 
未経験の方も大歓迎 !  是非ご応募をお待ちしております。

[未経験からはじめるSASエンジニア募集]


[PG/SE経験者の方はこちら]


2017年5月22日月曜日

優れた予測モデルとは: SAS GLMSELECT プロシジャの紹介






関係のない説明変数をむやみに追加して決定係数 (= 説明力 ) を闇雲に増やしても、予測モデルとしてはつかえません。そのようなモデルはデータで見える範囲のものだけを都合よく解釈したものにすぎません。決定係数ではなく、情報量基準を用いる、交差検証 (クロスバリデーション) を行う、罰則付き回帰を用いる、といった方法で本当に意味のある変数だけを選ばなければ「良いモデル」にはなりえません。ここでいう「良いモデル」とは説明力ではなく「予測性能のよいモデル」のことです。闇雲に説明変数を追加したモデルがどうして良くないかは、以前書いた「 説明力のある回帰分析モデルは使えない?」をご覧ください。

KDNuggets より, Ted Goff の漫画
そこで、今回はこの問題を具体的に解決する方法の1つとして、GLMSELECT プロシジャの扱い方を説明したいと思います。まず、情報量基準と交差検証法、そして変数選択法を簡単に説明します。そのうえで、メジャーリーグ選手の成績データと年俸のデータを例にして、GLMSELECT プロシジャの使い方を解説します。単に GLMSELECT の使い方だけを知りたい方は、これらを飛ばして後半のGLMSELECTプロシジャの使い方から読み始めてください。

情報量規準とは

情報量規準とは、いくつかのモデルの候補があるとき、それらのうちどれがより良いモデルかを判断するための指標です。変数を入れ替えて何度も回帰モデルを計算し、情報量基準が小さいモデルを採用します。情報量基準にはいくつかバリエーションがあり、その中でも赤池の考案した赤池の情報量基準 (AIC) と Schwarz の考案したベイジアン情報量基準 (BIC, SIC) がよく利用されます。両者は用途と計算方法が違うので、必ずしも同じ結果になりません。BIC は AIC よりも少ない変数が選ばれる傾向があります。しかし、どちらがより優れた情報量基準か、ということは断言できないので、目的に応じて使い分けられます。AIC は「より予測性能がよいモデルを選ぶ」ことができ、BIC は「より正しいモデルが選ばれる確率を最大化する」指標です。「ベイジアン」という名前ですが、これはベイズの定理を利用して計算している、という程度の意味であり、いわゆるベイズ統計モデルだから BIC を使わなければならないとか、ベイズモデルじゃないから BIC を使ってはならない、ということではありません。他にも DIC, WAIC と呼ばれる情報量規準が有名ですが、前者はベイズ統計で、後者は一部の特殊なモデルで使用することを前提に作られたものなので今回は使用しません。

交差検証法とは

情報量規準のほかに、データセット全体を計算用と予測用に分けて予測性能を確認するという方法があります。これは「ホールドアウト検証」と呼ばれます。計算用の部分は「訓練データ」、予測性能の確認の部分は「テストデータ」とか「評価データ」とか呼ばれます。データセットのレコード数が十分にあるならばこれで良いのですが、少ない場合はこの分割によってさらに計算に使えるデータセットが減ってしまうので、交差検証法を使います。例えば 1 抜き交差検証(leave-one-out CV, LOOCV) と呼ばれる方法ならば、データセットから 1レコードだけ除いて計算し、その予測値と残り 1 レコードの値を誤差とします。つまりホールドアウト検証を繰り返しているようなものです。これをすべてのレコードについて繰り返します[1]。つまり、データセットが100レコードならば、99個のレコードで回帰モデルを計算するのを100回ぶん行うわけです。この100個すべての誤差の平均が、そのモデルで予測するときの誤差の大きさになります。この指標は「汎化誤差」と呼ばれたりします。よって、2つのモデル候補があったとして、この誤差の小さいほうが、より良いモデルになるということです。しかし、たとえばデータが数十万レコードもあるときは、計算量が膨大になってしまいます[2]。そこで、サンプルを幾つかのグループに分割し、グループ単位で計算と誤差の評価を繰り返す方法がよく取られます。この方法はk-分割交差検証といいます。たとえばレコードを10 個のグループに分けた場合、10回繰り返せば計算が終わります。

では、情報量規準と交差検証とどちらがよいのか、という点に疑問を持つ方が出てくると思います。交差検証法のうち LOOCV と情報量規準は、レコード数が十分に多ければ結果が一致します。しかし、情報量規準の多くは、使用するには条件があり、この条件を満たさない複雑なモデルには適用できません。逆に交差検証は原理が単純なので、どのような複雑なモデルに対しても原則として使用可能です。一方で、すでに述べたように交差検証法は計算量が多いです。GLMSELECT プロシジャがあつかう線形回帰モデルでは、情報量規準が使用可能なので、計算の簡単さの点で情報量規準が優位ですが、情報量規準も推定量の一種なので、結果には誤差があります。なので「どちらを使えばいいか」ではなく「どういうときに使ってはいけないか」だけを覚えておけばいいと思います。

変数選択法

交差検証法も情報量基準も与えられたモデルを評価する方法なので、そもそも、どうやって変数を取捨選択するか、ということを考える必要があります。変数の組み合わせを総当りでやっていたのでは大変です。例えば 10 個の変数があったとしたら、 \(2^{10}-1=1023\) 通りも計算しなければなりません。そこで、「増加法」「減少法」「ステップワイズ法」と呼ばれる変数選択法のルールに基づいて変数を選ぶのが一般的です。「増加法」の場合、\(K\) 種類の変数候補のうち 1 つだけを含んだモデルを計算し ( つまり \(K\) 個のモデルを計算します ) 、その中で一番情報量基準が小さいモデルを選びます。どの変数を追加しても情報量基準が増えてしまうなら、そこで終了です。こうして変数を 1 つ含んだモデルに対し、同様の手順で残った \(K-1\) 個の変数から 1 つ変数を選びます。このため、総当りで \(2^K-1\) 回計算するよりはだいぶ計算回数が減ります。「減少法」は逆に、変数候補をすべて含んだモデルを最初に計算し、そのなかから、除外することでモデルの情報量基準を一番小さくできる変数を順に除外していきます。「ステップワイズ法」は増加法と減少法の折衷のような方法で、「増減法」とも呼ばれます。ステップワイズ法では、増加法のように情報量基準で1つ変数を追加したら、今度はすでに含まれている変数から最も情報量基準を大きくしている変数を除外します。情報量規準ではなく、交差検証で求めた汎化誤差の一番小さい変数を選ぶ、という方法でもいいです[3]

野球選手の年俸はどうやって予測できるか ?

SAS の SASHELP ライブラリに、動作確認のための様々なデータセットがあるのはご存知でしょうか ? その中にある baseball データセット[4]には、 1986 年の MLB で活躍した約 400 名の野手の成績と通算成績、そして翌年の年俸が記録されています。選手の年俸がどのようにして決まるかは人気などもあるかもしませんが、成績の優秀な選手ほど高額な年俸を得られそうだと考えるのが自然です。よって、盗塁数、打点、本塁打数などの数字を説明変数として、それぞれの要素がどう年俸に影響しているか分析してみましょう[5]。野球は 1986 年以外の年にも行われていますし、収録されていない野手も存在するので、より広範囲で当てはまるモデルを作るにはデータに対するモデルの当てはまりの良さだけでなく、予測性能も考慮して説明変数を決めなければなりらないのは明らかです。まず、sashelp.baseballの変数名が分かりづらいので、名前を日本語にしておきます。


options validvarname=any;
data work.baseball(rename=(
            Name      =   '氏名'n
            Team      =   'チーム'n
            nAtBat    =   '打席数'n
            nHits     =   '安打'n
            nHome     =   '本塁打'n
            nRuns     =   '得点'n
            nRBI      =   '打点'n
            nBB       =   '四球'n
            YrMajor   =   'MLB年数'n
            CrAtBat   =   '通算打席数'n
            CrHits    =   '通算安打'n
            CrHome    =   '通算本塁打'n
            CrRuns    =   '通算得点'n
            CrRbi     =   '通算打点'n
            CrBB      =   '通算四球'n
            League    =   'リーグ'n
            Division  =   '地区'n
            Position  =   'ポジション'n
            nOuts     =   '刺殺'n
            nAssts    =   '補殺'n
            nError    =   'エラー'n
            Salary    =   '年俸(千ドル)'n
            Div       =   'リーグと地区'n
            logSalary =   '対数年俸'n
        ));
    set sashelp.baseball ;
run;
proc contents data=work.baseball varnum ;
run;

GLMSELECT プロシジャの使い方

GLMSELECT プロシジャは、 SAS/STAT 13 で追加されたプロシジャです。基本的な構文は REGGLM プロシジャと同じですが、 MODEL ステートメントのオプションで変数選択の方法をいろいろと細かく指定できます。REGGLM プロシジャにも変数選択の機能がありますが、 GLMSELECT はこれらの拡張版といえます。この GLMSELECT プロシジャを使って、メジャーリーガーの年俸予測式を作ってみましょう。

まず、ステップワイズ法+AICで回帰モデルに使用する変数を決めてみます。model 文の後に / selection=stepwise(select=AIC) というオプションを入れることで実行できます。これは、変数選択はステップワイズ法を用いて、選択の基準は AIC で判断する、ということです。増加法ならば forward, 減少法なら backward になります。



proc glmselect data=work.baseball plots=all ;
    class リーグ 地区 チーム ポジション ;
    model 対数年俸 = 打席数 安打 本塁打 得点 打点 四球 MLB年数 通算打席数 通算安打 通算本塁打 通算得点 通算打点 通算四球 刺殺 補殺 エラー リーグ ポジション 地区 チーム
            / selection=stepwise(select=AIC) details=all stats=(adjRsq AIC AICC SBC) ;
run ;

plots=alldetails=all は最小限の結果だけを見たい場合は不要です。さらに、stats= オプションで他の指標もグラフに表示させ、比較しています。 namelen=200 は、変数名を日本語にすることで表示がおかしくなるのを防ぐために追加しました。stats= オプションで表示しているのは、adjRsq は調整済みR2乗、AICC有限修正AICといい、レコード数が少ない場合にAICより精度が高くなるといわれています。SBC は BICのことです。紛らわしいのですが、 GLMSELECT では BIC と指定すると、シュワルツの BIC ではなく、佐和のベイジアン情報量規準が指定されてしまいます。佐和のBICは名前に反してむしろAICに近い指標ですが、ほとんど使われているのを見たことがないので、以降も文中でBICと言ったらシュワルツのことだと考えてください。修正済み R2 乗は通常の R2 乗よりも過剰適合に強い指標ですが、理論上、予測性能を保証するものではないので、理論的に裏付けのある情報量規準を使うべきです。

先のプログラムを実行すると、以下のようなグラフが表示されます。


ステップワイズ+AICの結果
変数の増加にともない、各指標がどう推移していったかがわかります。AICとAICCは増加に伴い小さくなっていくのに対し、BICは4つ目の変数追加のときに最小となっています。

次に、LOOCV で変数選択を行った場合は以下のようになります。

proc glmselect data=work.baseball plots=all namelen=200 ;
    class リーグ 地区 チーム ポジション ;
    model 対数年俸 = 打席数 安打 本塁打 得点 打点 四球 MLB年数 通算打席数 通算安打 通算本塁打 通算得点 通算打点 通算四球 刺殺 補殺 エラー リーグ ポジション 地区 チーム
            / selection=stepwise(select=press) stats=(adjRsq AIC AICC SBC) ;
run ;

ステップワイズ+LOOCVの結果
今度は 11個の変数が選ばれています。AICやBICを見ると違いがよくわかります。ホールドアウトの場合はオプションに selection=stepwise(select=validate) と指定します。また、データセットを訓練データと学習データに分ける必要があります。ここでは、無作為に3割のレコードをテストデータに割り当てる方法を紹介します。オプションではなく partition ステートメントを使うことで設定できます。

proc glmselect data=work.baseball plots=all namelen=200 ;
    class リーグ 地区 チーム ポジション ;
    model 対数年俸 = 打席数 安打 本塁打 得点 打点 四球 MLB年数 通算打席数 通算安打 通算本塁打 通算得点 通算打点 通算四球 刺殺 補殺 エラー リーグ ポジション 地区 チーム
            / selection=stepwise(select=validate) details=all ;
            partition fraction(validate=.3) ;
run ;

さらに10分割CVの場合は、

proc glmselect data=work.baseball plots=all namelen=200 ;
    class リーグ 地区 チーム ポジション ;
    model 対数年俸 = 打席数 安打 本塁打 得点 打点 四球 MLB年数 通算打席数 通算安打 通算本塁打 通算得点 通算打点 通算四球 刺殺 補殺 エラー リーグ ポジション 地区 チーム
            / selection=stepwise(select=cv) cvmethod=random(10) details=all ;
run ;

となります。cvmethod= はデータセットの分割方法の指定で、randam(10) は無作為に10グループに分けるという意味です。

なお、R2乗で変数選択した場合はこのようになります。
全変数
R2乗はどのような変数を追加しても値が改善されるため、すべての変数を含む結果になりました。明らかにLOOCVや情報量規準の結果とは異なります。

GLMSELECTでは他にもいろいろな方法を使えますが、今回は情報量規準と交差検証法を利用する方法だけを紹介しました。

2016/7/29 片桐

参考文献

  1. 赤池弘次 他 (2007)「赤池情報量規準 AIC―モデリング・予測・知識発見― 」共立出版
  2. 小西貞則・北川源四郎 (2004) 「情報量規準」朝倉書店
  3. Gelman, Andrew et al. (2009) Bayesian Data Analysis, 3rd Ed., CRC Press
  4. SAS Institute Inc. (2015) SAS/STAT(R) 14.1 User's Guide

  1. 少し詳しい方なら、ジャックナイフ法やブートストラップ法と同じ発想だとわかるでしょう。
  2. ただし、実はこの計算を簡単にする方法があります。
  3. 変数選択にはF統計量に対応するp値を使用するという伝統的なやり方がありましたが、現在ではこれは問題があることが分かっているので、使用しないほうがよいです。
  4. 最新のバージョンでないと入っていない可能性がありますが、SAS University Edition なら入っているはずです。
  5. 期待していたら申し訳ないのですが、株で儲ける方法をテーマにする予定はありません。

2017年3月10日金曜日

CourseraのMachine Learningコースを修了しました

最近オンライン学習なるものにハマっております。
巷ではMOOCs(Massive Online Open Cources)なんて呼ばれています。
今回は、Courseraというプラットフォームでスタンフォード大学が提供している
Machine Learningのコースを修了したので、所感を書きたいと思います。


なぜオンライン学習だったか

理由はひとつ。怠け者だったからですね!
動画を通じて授業を受け、
提出期限がある課題やテストを提出する。。。
この学校と自習の間のようなスタイルが、
いつでも勉強できる→いつまでも勉強しない
方程式が成り立っていた私にはぴったりでした。

また、スタンフォード大学の講義を受けられる
これだけでもワクワクしますよね!
それではこのコースの特徴を紹介します!


何を学んだか

詳しくはこちら!
https://www.coursera.org/learn/machine-learning#syllabus

線形回帰
ロジスティック回帰
ニューラルネット
サポートベクターマシーン
k-meansクラスタリング
主成分分析
異常値検知
などなど


受講は無料

受講自体は無料です。
79ドル(2017年1月現在)を支払うことにより、
コース修了時に大学が公式に証明する修了証が発行されます。
なお、修了証は履歴書にも書くことができるようです。

私はスタンフォード大学の修了証が欲しいという、よこしまな理由で
修了証を発行してもらいました!
















動画は日本語の字幕付き

動画には日本語の字幕が付いているため、
英語に自身がない人も大丈夫です。
ただし、プログラミング課題と確認テストの説明は英語です。


直感的な説明

ほぼ全ての数式について直感的な説明をしてくれます。
偏微分などの数学が出ますが、その意味について
図解してくれるので、非常にわかりやすいです。


各動画に理解度チェッククイズ

各動画の内容が理解できているかどうか、
チェッククイズが出題されます。
間違えてもペナルティなどはありません。


毎週課題の提出とテストがある

各単元において、確認テストとプログラミングの課題があります。
確認テストは80%以上で合格。8時間に3回受けることができ、
3回失敗しても、8時間後に再受験ができます。

プログラミングはMatlab/Octaveによる
アルゴリズム実装です。
実装と言っても、半分以上は既にコード化されており、
必要なコードを補う形式です。

Matlabは有償ですが、Octaveは無料なので
私はOctaveで課題を行いました。

基本的な操作は講義に含まれていますし、
言語体系がシンプルなので、使用経験がなかった
私でも問題なくこなすことができました。


所感

「データをどのように学習するか」についての説明は、
今まで私が聞いた(見た)中で一番わかりやすかったです。
このレベルの講義が無料で受講のは、
ある意味革命的と感じるほどです。

今後、自動翻訳の精度がさらに向上すれば、
言語や地域などの障壁を越えて、
教育機会が均等に近づくのではないでしょうか。

今後はUdacityのMachine Learning Engineer Nanodegreeを受講する予定です。
https://www.udacity.com/course/machine-learning-engineer-nanodegree--nd009

最先端の教育を、国境を越えて提供してくれる方々に感謝!

データの抽出条件をIF文のように利用する方法

今回は主にレポーティングツールを利用する際に直面する問題について
対処法の一例をご紹介したいと思います。


抽出条件を変えるだけで複数のプログラム、レポートをまとめる事ができるが、
環境や条件などの理由から、SASのマクロ機能やストアドプロシージャなどが利用できない!
というケースが意外とよくあります。

・使用するレポーティングツールでは、ストアドプロシージャが使用できない。
・SASのマクロを使える人がいないため、今後のメンテナンスを考えて使わないでください。

といったケースが、経験上ありました。



例えば、以下のようなケースが該当します。

店舗を指定して売上を出力するレポートがあります。
そのレポートには以下の抽出条件があります。

    where TENPO = "店舗"
        and YYYYMM = "年月"
※斜体は実行時に入力するパラメータとします。

店舗の条件を削除すれば、全ての店舗情報が取得できる!と考えることができます。
実は、ここで以下の問題が起きます。

  SASのマクロやストアドプロシージャを利用せず、上記の抽出を行わないようにしてください。
  条件には外部からパラメータとして、任意の数字文字が与えられるとします。
  また、データにはあらかじめ全店を集計したレコードは存在しないとします。

難しく書きました。
この問題はSASのマクロを利用すれば以下のように簡単にかけます。

  ・全店か、支店の条件かを判断するフラグ(&ZENTEN)を用意して
    以下のようなプログラムを記載すれば対処できます。

  where
    %if(&ZENTEN = 0) %then %do;
      TENPO = "店舗" and
    %end;
  YYYYMM = "年月"


今回の問題は、マクロを使用せずに行ってください。というものです。
ストアドプロシージャ、SASのマクロ機能が利用できれば簡単に回避できる問題も
利用できなくなるだけで意外と頭を悩ませるものです。


回答例
  ・全店か、支店の条件かを判断するフラグを用意して、下記のようなプログラムを記載します。

where
  ( (全店フラグ = 1                               ) or
    (全店フラグ = 0 and TENPO = "店舗") ) and
  YYYYMM = "年月"

全店フラグが1の場合、全店を取得する場合は店舗の条件を無視したい。
逆に全店フラグが0の場合、店舗を取得する場合は店舗の条件を適応したい。
その為上記のような記載方法になっています。

・全店フラグに1を入れて実行した場合、実行される場合の条件式は以下のようになります。

  ( (1 = 1                               ) or
    (1 = 0 and TENPO = "店舗") )

つまり

  ( (真                               ) or    真の条件のみなので、こちらは適応されます。
    (偽 and TENPO = "店舗") )     偽かつ店舗条件なので、こちらは適応されません。

その為、店舗の条件を無視することができました。


・全店フラグに0を入れて実行した場合、実行される場合の条件式は以下のようになります。

  ( (0 = 1                               ) or
    (0 = 0 and TENPO = "店舗") )

つまり

  ( (偽                               ) or    偽の条件のみなので、こちらは適応されません。
    (真 and TENPO = "店舗") )     真かつ店舗条件なので、こちらは適応されます。

その為、店舗の条件を適応することができました。


上記の書き方をすれば、SASのマクロや、ストアドプロシージャを利用しなくても、
IF文のように利用することができます。
どうしても困ったときの対処方法としていかがでしょうか。

2017年1月26日木曜日

とある社員の雑談

◇ とある社員の雑談

 昨年の4月~10月頭に掛けて、朝ドラの『とと姉ちゃん』を見続けた。
かれこれ、『ちゅらさん』以来に見続けたのではないかと思う。
当初は、話題の主題歌聴きたさついでに何となく見ていたのだが、
若い三姉妹の役者さん達と、彼女達を支える往年のベテラン俳優陣のキャストも光って、
思いも寄らず半年間見通してしまった。

 特に印象的だったところは、主人公の常子が雑誌社を立ち上げたところだ。
様々なものが破壊されてしまった戦後の焼け野原の中で、常子は未来をより良い
ものにする手助けとなるような雑誌を作ろうと決意する。
そのシーンがとても良い。
 未来に思いを馳せ、より良い、より豊かで幸せな日常をイメージし、
それらを記事に表現していく。真っ白な原稿用紙に、嬉しさや楽しさ、
安らぎに満ちたイメージを載せていく。

 逆に見ていて辛かったのは、戦時中、家族が笑い合うことさえ禁じようとする風潮が
描かれたシーンだ。そのゆとりの無さ、一方的で執拗な窮屈さに息苦しさを感じた。
 窮屈な信条を採用している人達か、あるいは何らかの信条を無意識的に採用している
人達にありがちな光景とでも言えばいいだろうか。

 月並みだが、所詮人は人、自分は自分なのだ。
人生に抜け道なんてないし、誰かや何かを一方的に恨み連ねても自分の人生なんて始まらない。

自分が生きていく信条ぐらい自分で選択して、
自らの人生を歩んでいきたいものだ。


主人公の常子を見てきて、改めてそんな風に思った、今日この頃である。うんYES



2017年1月11日水曜日

SASでtwitterのつぶやき情報を取得して遊んでみました。

何かしらのイベントがあればSNSにて話題になる時代になりました。
そこで、毎月おとずれるビッグイベント"給料日"について調べてみようと思います。
twitterから"給料"を含むツイート情報を取得してSASで加工してみます。


毎月25日が給料日と仮定してして考えると?

25日が日曜日場合、前倒しで23日に給与の振込みがある会社が多いと思います。
2016年9月25日は日曜日の為、23日に件数が多くなる?と考えました。


データの準備

実は件数の推移をみるだけであれば、SASデータセットで用意する必要ありません。
調べたい単語の件数推移を検索エンジンで見ることも可能です。
今回はデータの取得からやってみたいと思います。
※データの取得方法はSAS社のブログにサンプルプログラムが解説付きでありましたので、
 そちらを参考に取得を行います。
プログラムを実行した結果、9月21日の10時頃~9月28日の08時頃までの期間で、
215,285件のツイート情報を取得できました。


データの確認

取得できたデータの確認をします。利用目的に応じてさまざまな対処が必要になります。
考えられる例として
・リツイートされているものの扱い。
・リプライ(特定ユーザーへ向けた返信)の扱い。
などなど、多くの考慮点があると思います。

また、データを見て初めて気づくパターンも多いです。
"給料日までもう少し!"、"給料が入ったら散財するぞ!"というような"給料日"というイベントの為、
ツイートされたのであろう情報を取得したかったのですが、
求人広告や"副業で給料以上稼ぎました!"のような定期的に流れているものも多く取得されました。
とりあえず、"給料日"を含むツイートと、それ以外で分類してグラフ化したいと思います。


日ごとの件数比率(左)と件数(右)の折れ線グラフ




時間ごとの件数比率(左)と件数(右)の折れ線グラフ



上記のグラフを見ると・・・

"給料日"を含むツイート(青線)に注目してみると
日ごとのグラフで23日が24日以降に比べて多いですね。
また、日ごとでは分からなかったのですが、時間ごとのグラフで見ると、
22日の夕方から23日の件数は他の人比べてグラフの形が異なりますね。


今回はデータを取得して時系列の件数推移を出すだけですが、
このデータを利用して、何に給料を使っているのかまで調べられると面白そうです。


個人的には給料日の晩御飯に関するツイートだけ取得すれば
"焼肉"、"寿司"だけではなく、気軽に行ける"ラーメン"、少し値段が張る"ピザ"なども
多くつぶやかれているのでは?と思います。

ネイチャーインサイト サイトリニューアル&NIBLOGの引っ越し

ご連絡が遅くなりましたが、 ネイチャーインサイトの際とがリニューアルしました。 https://www.n-insight.co.jp/ それに伴い、NIBLOGも引っ越しすることになりました。 https://www.n-insight.co.jp/niblog/ ...