注目の投稿

【kepler.gl】コロナ対策による人流の変化も地図上に可視化(各種メディアで報道)

kepler.glのサイト画面 kepler.glを使ってコロナ対策の効果を分析したところ、テレビ、新聞、ネットのメディアから問い合わせや報道依頼が殺到。今も、土日返上で都内や全国の人流変化を分析しています。この記事では人流変化の可視化に便利なkepler.glにつ...

2017年8月15日火曜日

朝風呂のあと日枝神社でおみくじ

朝風呂のあと、日枝神社に参拝。

恒例のおみくじを引く

結果は大吉。

何事も正直にして他人を恨まず

との戒めがあったのでそうします

2017年8月13日日曜日

【研究】機械に自分の分野を推定してもらうと。。地球惑星科学!?

日本の研究.com( https://research-er.jp/)というサイトがあり、
日本の研究者の情報が公開されています(すごい時代だ)。

そして、ここのサイトの面白いところが、
アルゴリズムで研究者の分野を推定しているところです。

自分もこんな感じで研究分野を推定されてました。

宇宙科学がちょっと入ってる!まあ、宇宙好きだし。

社会科学が大半で人文科学が次に多い。
工学も多いかと思っていたけど全然ないな。

これ見ると、文系の研究者だ。

ん!?

なんか、地球惑星科学とか宇宙科学も入っているぞ!

趣味で惑星の相互作用のシミュレーションやってるのがバレたのかな!?

・・・

まあ、宇宙好きだからいっか。

今日もdTVで宇宙のドキュメンタリーばっかり見てたし。


R dplyrとはなんぞや?大規模データも簡単に処理? ~使い方~

前回のおさらい

dplyrとは?
  1. Rで大規模データをさくさく処理するためのパッケージ
  2. 内部結合とかSQLみたいな処理もできる
  3. Rでデータ処理する人は必ず使ってる(くらいメジャーで有用)

導入は簡単!

インストールして
> install.packages("dplyr")
 

パッケージを読み込むだけ
> library(dplyr)

今回は使い方を説明

前回はRのサンプルデータを使ったせいで妙なエラーに悩まされました。なので、オリジナルのサンプルデータを作成していろいろ使い方を紹介していきます。

実はRで遭遇するエラーの多くがデータの構造や型に起因するものです。データがしっかりしていれば、大抵うまくいきます。そのため、データのところは丁寧めに説明しています。

「ちゃんとした」サンプルデータをつくろう

と、言うわけでサンプルデータの作成からはじめていきます。

そのサンプルデータですが、データフレームの構造にする必要があります。なぜなら、dplyrはデータフレームでないと使えないためです。

ちなみに、dplyrは普通のデータフレーム(data.frame)でも利用できますが、dplyr用に最適化されたデーターフレーム(tbl_df)もあります。

違いは、普通のdata.frameでデータ名を実行するとコンソールに全データが表示されますが、tbl_dfだと勝手に要約して表示されます。

(え、それだけ!?)

たぶん他にも違いはあると思うので気になる方はぐぐってください!

では、データをつくります。

> #サンプルデータ作成
> 
> #まずはベクトルデータをつくる(先頭のv.はベクトルだと分かりやすいように付けているだけです)
> v.date <- c("2017-08-01","2017-08-02","2017-08-03","2017-08-04","2017-08-05")
> v.sales <- c(100,200,300,40,500)
> 
> #データフレームを作成
> df.data <- tbl_df(date = v.date, sales = v.sales)
Error in tbl_df(date = v.date, sales = v.sales) : 
  unused arguments (date = v.date, sales = v.sales)

 あ、やっぱりエラー出た。tbl_dfではデータをつくれないか。まずは、data.frame()でデータをつくる必要があるようですね。

気を取り直して、

> #データフレームを作成
> df.data <- data.frame(date = v.date, sales = v.sales)
> class(df.data) #データ構造の確認
[1] "data.frame"

無事にエラーなくデータフレームできました。classという関数でデータ構造を確認すると、ちゃんとdata.frameになってますね。

では、データを表示してみましょう。

> #データ表示
> df.data
        date sales
1 2017-08-01   100
2 2017-08-02   200
3 2017-08-03   300
4 2017-08-04    40
5 2017-08-05   500

今回はデータ少ないので特に問題ないですが、もし、100万行くらいのデータの場合はコンソールがデータでいっぱいになります。

では、data.frameをtbl_dfに変換します。

> #tbl_dfに変換
> df.data <- tbl_df(df.data)
> class(df.data) #データ構造の確認
[1] "tbl_df"     "tbl"        "data.frame"

tbl_dfが表示されています。うまく変換できているようです。

では、データを表示してみましょう。

> #データ表示
> df.data
# A tibble: 5 x 2
        date sales
      <fctr> <dbl>
1 2017-08-01   100
2 2017-08-02   200
3 2017-08-03   300
4 2017-08-04    40
5 2017-08-05   500

data.frameの時と少し違いますね。

# A tibble: 5 x 2
は、データが5行で2列のデータであることを示します。

カラム名の下にある<fctr>と<dbl>ですが、それぞれデータの性質を意味しており、簡単に言うと、

<fctr>は文字!
<dbl>は数値!

です(正確にはちょっと違いますが)。

第三者> あれれー? dateって日付なのに文字になってるー!

はい。

このままだと、dateを日付として扱うことができません。

そこで、日付に変換します。

> #dateを日付データに変換
> df.data$date <- as.Date(df.data$date)
> 
> #データ表示
> df.data
# A tibble: 5 x 2
        date sales
      <date> <dbl>
1 2017-08-01   100
2 2017-08-02   200
3 2017-08-03   300
4 2017-08-04    40
5 2017-08-05   500

dateの下が<date>となり日付として認識されました。(日付と認識されることで、日付の計算や不等号を用いての条件検索ができるようになります。)

やっぱり、tbl_df便利ですね!
データ名で実行しただけで、データ型も表示してくれます。

これでサンプルデータ作成は終わりです。


dplyrを使ってみよう

 一気にいきましょう。簡単です!

  1. 行指定の条件抽出:filter
  2. 列指定の条件抽出:select
  3. 並び変える:arrange
  4. 新しい列の作成:mutate
  5. 複数の処理をつなげる:%>%
  6. まとめて:group_by、計算する:summarise
  7. 結合処理もできる:inner_joinなど

1.行指定の条件抽出:filter

2017年8月3日以降のデータを抽出するには、

> #filter
> filter(df.data, date > "2017-08-03")
# A tibble: 2 x 2
        date sales
      <date> <dbl>
1 2017-08-04    40
2 2017-08-05   500

これでOK!

もし、dateをdate型に変換せずに<fctr>のままだと、

> #filter
> filter(df.data, date > "2017-08-03")
# A tibble: 0 x 2
# ... with 2 variables: date <fctr>, sales <dbl>
Warning message:
In Ops.factor(date, "2017-08-03") : ‘>’ not meaningful for factors

このようにエラーとなります。

2.列指定の条件抽出:select

 salesの列だけ抽出するのは、

> #select
> select(df.data, sales)
# A tibble: 5 x 1
  sales
  <dbl>
1   100
2   200
3   300
4    40
5   500

これでOK!ベリーイージー!

3.並び変える:arrange

salesの昇順で並べるには、

> arrange(df.data, sales)
# A tibble: 5 x 2
        date sales
      <date> <dbl>
1 2017-08-04    40
2 2017-08-01   100
3 2017-08-02   200
4 2017-08-03   300
5 2017-08-05   500

はい、OK!

ちなみに降順は、

> #arrange
> arrange(df.data, desc(sales))
# A tibble: 5 x 2
        date sales
      <date> <dbl>
1 2017-08-05   500
2 2017-08-03   300
3 2017-08-02   200
4 2017-08-01   100
5 2017-08-04    40

desc(カラム名)でOK!

そう言えば昔、記事書いていました。
R 順番を変える(arrange)

4.新しい列の作成:mutate

日付の年だけ取り出した新しい列をつくるには、

> #mutate
> mutate(df.data, year = substring(date,1,4))
# A tibble: 5 x 3
        date sales  year
      <date> <dbl> <chr>
1 2017-08-01   100  2017
2 2017-08-02   200  2017
3 2017-08-03   300  2017
4 2017-08-04    40  2017
5 2017-08-05   500  2017

これでOK!!

今回はsubstringという関数も使っています。

substringの使い方は、
substring(カラム名、切り出す最初の文字の順番、切り出す最後の文字の順番)
です。

こちらも昔、記事書いていたのでご参考まで
【R】 日付データから年や月だけを抜き出す方法

5.複数の処理をつなげる:%>%

複数の処理をつなげて一緒にするには、

> df.data %>%
+ filter(date > "2017-08-03") %>%
+ select(sales) %>%
+ arrange(desc(sales))
# A tibble: 2 x 1
  sales
  <dbl>
1   500
2    40

 これでOK!

6.まとめて:group_by、計算する:summarise

年でまとめてsalesの合計を計算するには、

> #group_by summarise
> df.data %>%
+   mutate(year = substring(date,1,4)) %>%
+   group_by(year) %>%
+   summarise(total = sum(sales))
# A tibble: 1 x 2
   year total
  <chr> <dbl>
1  2017  1140

これでオッケーです!

7.結合処理もできる:inner_joinなど

実は、SQLでお馴染みの内部結合とかもできます!

結合処理にはもう一つデータが必要なのでパパっと作成しましょう。

> #まずはベクトルを作成
> v.date <- c("2017-08-01","2017-08-02","2017-08-03","2017-08-04","2017-08-05")
> v.user <- c(1000,20,300,4,50)
> 
> #データフレームを作成
> df.data_2 <- data.frame(date = v.date, user = v.user)
> class(df.data_2) #データ構造の確認
[1] "data.frame"
> #tbl_dfに変換
> df.data_2 <- tbl_df(df.data_2)
> class(df.data_2) #データ構造の確認
[1] "tbl_df"     "tbl"        "data.frame"

はい。2つ目のデータ完成しました。

では、最初のデータを新たに作ったデータを確認しましょう。

> #data
> df.data
# A tibble: 5 x 2
        date sales
      <date> <dbl>
1 2017-08-01   100
2 2017-08-02   200
3 2017-08-03   300
4 2017-08-04    40
5 2017-08-05   500
> df.data_2
# A tibble: 5 x 2
        date  user
      <fctr> <dbl>
1 2017-08-01  1000
2 2017-08-02    20
3 2017-08-03   300
4 2017-08-04     4
5 2017-08-05    50

おっと、df.data_2のdateが<fctr>になってる。

df.data_2のdateを日付に変換するのを忘れてましたね。

変換しましょう。

> #日付に変換
> df.data_2$date <- as.Date(df.data_2$date)
> 
> #data
> df.data
# A tibble: 5 x 2
        date sales
      <date> <dbl>
1 2017-08-01   100
2 2017-08-02   200
3 2017-08-03   300
4 2017-08-04    40
5 2017-08-05   500
> df.data_2
# A tibble: 5 x 2
        date  user
      <date> <dbl>
1 2017-08-01  1000
2 2017-08-02    20
3 2017-08-03   300
4 2017-08-04     4
5 2017-08-05    50

これで準備OK。

やっぱり、tbl_dfだとすぐにデータ型を確認できるのでいいですね。

さて、2つのデータが揃ったので内部結合してみましょう。両データに共通するカラムはdateなので、dateをキーにして2つのデータを結合すると、

> #inner_join
> inner_join(df.data, df.data_2, by = "date")
# A tibble: 5 x 3
        date sales  user
      <date> <dbl> <dbl>
1 2017-08-01   100  1000
2 2017-08-02   200    20
3 2017-08-03   300   300
4 2017-08-04    40     4
5 2017-08-05   500    50

こうなります。

他にも外部結合とかアンチ結合とかもできるので下記の記事をご参照ください。

---他の結合---
R 内部結合(inner join)
R 内部結合(複数key)
R 外部結合(left join, right join)
R 完全外部結合(full join)
R アンチ結合(anti join)


以上でdplyrの使い方は終わりです。

本当はまだまだ奥が深く1%も説明できてないですが、以上のことだけでも実用には十分だと思います。

次回は、tidyrという大規模データのクロス集計等を高速におこなうパッケージについて説明できればと思っています。

それでは、

一度は富士山に登ってみたい



2017年8月12日土曜日

【日本学術会議ニュース】「ニュートリノと重力波で紐解く宇宙のしくみ」が面白そう

日本学術会議からニュースメールが来たので紹介

あ、これ面白そう!

 第24回国際光学委員会総会(ICO-24)市民公開講座
「ニュートリノと重力波で紐解く宇宙のしくみ」
 日 時:平成29年8月24日(木)15:30~17:30
 会 場:京王プラザホテル 南館5Fエミネンスホール

ちょっと行ってみたいなー

---以下、詳細---

======================================================================
** 日本学術会議ニュース・メール ** No.607 ** 2017/8/10
======================================================================

〔目次〕

・【開催案内】平成29年度共同主催国際会議
             「第24回国際光学委員会総会(ICO-24)」

・【開催案内】公開シンポジウム「大地震に対する大都市の防災・減災」

・【独立行政法人日本学術振興会】
平成30年度科学研究費助成事業(科学研究費補助金)(研究成果公開促進費)
の公募に関する個別相談会の開催について


■--------------------------------------------------------------------
 【開催案内】平成29年度共同主催国際会議
             「第24回国際光学委員会総会(ICO-24)」
--------------------------------------------------------------------■

 会 期:平成29年8月21日(月)~8月25日(金)[5日間]
 場 所:京王プラザホテル(東京都新宿区)

 日本学術会議及び国際光学委員会が共同主催する「第24回国際光学委員会
総会(ICO-24)」が、8月21日(月)より、京王プラザホテルで開催されます。

 この度の国際光学委員会総会(ICO-24)では、『Light for Society』をメイン
テーマに光学・フォトニクス技術の進展と、quality of lifeの向上や、エネ
ルギー問題に代表される人類社会の抱える課題への貢献について研究発表と討
論が行なわれることになっております。

 本会議には40カ国以上の国と地域から1,000人近くの参加者が見込まれてい
ます。

 この会議を日本で開催することは、光学およびフォトニクス分野における我が
国のプレゼンス・研究水準の高さを改めて国内外に強く印象付ける絶好の機会と
なるとともに、我が国のこの分野の科学者が世界の多くの科学者と直接交流する
機会を与えることとなります。

 また、一般市民を対象とした市民公開講座として、
8月24日(木)に「ニュートリノと重力波で紐解く宇宙のしくみ」が
開催されることとなっております。
 関係者の皆様に周知いただくとともに、是非、御参加いただけますよう
お願いいたします。

 第24回国際光学委員会総会(ICO-24)市民公開講座
「ニュートリノと重力波で紐解く宇宙のしくみ」
 日 時:平成29年8月24日(木)15:30~17:30
 会 場:京王プラザホテル 南館5Fエミネンスホール

※内容等の詳細は以下のホームページをご参照ください。
○国際会議公式ホームページ(http://ico24.org/)
○市民公開講座案内(http://ico24.org/program/seminar/)

【問合せ先】日本学術会議事務局参事官(国際業務担当)付国際会議担当
 (Tel:03-3403-5731、Mail:i254@scj.go.jp)

■--------------------------------------------------------------------
 【開催案内】公開シンポジウム「大地震に対する大都市の防災・減災」
              (大地震に対する大都市の防災・減災分科会)
--------------------------------------------------------------------■

 大都市直下の大地震発生が予測される中、大都市への人・構造物・機能の過
度の集中と複雑なシステムにより震災リスクがますます高まっている。マグニ
チュード7クラスの首都直下地震が起きた場合、2万人を超える死者だけでな
く、わが国の国家予算に匹敵する規模の被害が予測されている。現状は、大都
市の賑やかで活発な生活と活動を広げつつ、震災発生を前提にして地震後の対
応のための対策・準備に重点がおかれている。一朝一夕には進まないが、将来
の都市構成を見通した中で災害を極力減じるための抜本的で具体的な活動を、
個人・家族・企業・自治体・国は、それぞれ且つ協力して推進すべきである。
本シンポジウムでは、大都市の震災軽減につながる強靭な都市・社会の構築に
向けたハード・ソフト対策と、将来的に目指すべき国土や都市の構成に関して
本分科会で議論してきたことを説明し、これをもとに大地震に対する大都市の
防災・ 減災について真剣な議論を行いたい。

ポスター:http://www.scj.go.jp/ja/event/pdf2/247-s-3-1.pdf

◆日 時:2017年8月28日(月)12:00 ~16:00

◆場 所:日本学術会議 講堂(東京都港区六本木7-22-34)
◆主 催:日本学術会議 土木工学・建築学委員会
            大地震に対する大都市の防災・減災分科会

◆参加費:無料、以下のサイトから申込して下さい
     https://ws.formzu.net/fgen/S64188825/

(司会): 田村和夫(日本学術会議連携会員、千葉工業大学工学部教授)
開会あいさつ「専門を超える視野を持って行動する努力」
  米田雅子(日本学術会議第三部会員、慶應義塾大学特任教授)
背景と課題 「最新の科学的知見にもとづき、想像力を広げた熟考」
  和田 章(日本学術会議連携会員、東京工業大学名誉教授)
「居住、活動のための適地の選択」
  浅岡 顕(日本学術会議連携会員、名古屋大学名誉教授)
「大都市地震係数の採用」
  田村和夫(前 掲)
「土木構造物・建築物の耐震性確保策の推進」
  小野徹郎(日本学術会議連携会員、名古屋工業大学名誉教授)
「人口集中、機能集中の緩和」
  福井秀夫(日本学術会議連携会員、政策研究大学院大学教授)
「留まれる社会、逃げ込めるまちの構築」
  沖村 孝(日本学術会議連携会員、神戸大学名誉教授)
「情報通信技術の強靭化と有効な利活用」
  山本佳世子(日本学術会議連携会員、電気通信大学准教授)
「大地震後への準備と行動」
  南 一誠(日本学術会議連携会員、芝浦工業大学建築学部教授)
「耐震構造の進展と適用」
  高橋良和(日本学術会議連携会員、京都大学工学研究科教授)
「国内外の震災から学ぶ、国際協力、知見や行動の共有」
  東畑郁生(日本学術会議連携会員、東京大学名誉教授)
総合討論
閉会挨拶
  東畑郁生(前 掲)

◆問合せ先:田村和夫(千葉工業大学)
      e-mail : kazuo.tamura@it-chiba.ac.jp


■---------------------------------------------------------------------
【独立行政法人日本学術振興会】
 平成30年度科学研究費助成事業(科学研究費補助金)(研究成果公開促進費)
 の公募に関する個別相談会の開催について(通知)
---------------------------------------------------------------------■

日本学術会議協力学術研究団体 御中

                          独立行政法人日本学術振興会
                             研究事業部 研究事業課

  このたび、本制度への理解を深めていただき、より円滑な実施に資するた
 め、学会または複数の学会の協力体制による学術団体等の代表者等を対象と
 して、標記相談会を開催しますので、お知らせします。
  なお、本件の詳細については、以下のURLを御覧いただくとともに、関
 係者への周知をお願いします。


【開催日時・会場】
日 時:平成29年9月11日(月)~9月15日(金)
         10:00~12:00
         13:00~17:00
会 場:独立行政法人日本学術振興会 4階会議室
住 所:東京都千代田区麹町5―3―1 麹町ビジネスセンター
相談時間:1団体につき30分を予定しております。

・独立行政法人日本学術振興会HP
http://www.jsps.go.jp/j-grantsinaid/index.html


(問合せ先)
独立行政法人日本学術振興会
研究事業部 研究事業課 研究成果公開促進費係
〒102-0083 東京都千代田区麹町5-3-1 麹町ビジネスセンター
Tel:03-3263-4926 , 4920
E-mail:seikakoukai@jsps.go.jp

★-------------------------------------------------------------------☆
 日本学術会議では、Twitterを用いて情報を発信しております。
          アカウントは、@scj_info です。
        日本学術会議広報のTwitterのページはこちらから
            http://twitter.com/scj_info
***********************************************************************
       学術情報誌『学術の動向』最新号はこちらから
     http://www.h4.dion.ne.jp/~jssf/doukou_new.html
***********************************************************************
=======================================================================
 日本学術会議ニュースメールは転載は自由ですので、関係団体の学術誌等へ
の転載や関係団体の構成員への転送等をしていただき、より多くの方にお読み
いただけるようにお取り計らいください。

【本メールに関するお問い合わせ】
 本メールは、配信専用のアドレスで配信されており返信できません。
 本メールに関するお問い合わせは、下記のURLに連絡先の記載がありますの
で、そちらからお願いいたします。
=======================================================================
 発行:日本学術会議事務局 http://www.scj.go.jp/
     〒106-8555 東京都港区六本木7-22-34


【貨幣創造】VALUで自分のVA(株のようなもの)を発行!気になる時価総額は?

そもそもVALUとは?

簡単に言えば、VAと呼ばれる自分の株を発行してビットコインと交換できるというサービス。

そのため、VAを換金、例えば、日本円で引き出したいときは、まず、自分のVAと誰かのビットコインを交換する必要があり、得られる金額は、その後のビットコインと円のレートによって変動する。

言わば、ビットコインを基軸とするビットコイン本位制のような通貨だ。

もっと分かりやすい説明は下記をご参照



VAを発行してみた

数週間前にVAの発行申請をしたまま今日まで完全に忘れていた。。

ほとんどログインもしてなかったので、アカウント消されてないかも心配しつつ、ログイン!


2017/08/12時点の評価額は57万1千961円なり

あっ、なんか発行できてる!

現在の評価額は57万円くらいかー。高いのか安いのか分からない。。。

ちょっとぐぐってみるか。

これからVALUを始める方へ、MyValu発行申請は慎重にね!
この記事によると、
  • 連結するFacebook、Twitter、Instagramのアカウントのフォロワー数が少ないと、売り出し時の時価総額が低い
  • 売り出し時の1VAの単価は、時価総額÷発行VA数
  • 発行VA数は1VAの単価が一定金額内(¥100-1000)に収まる選択肢しか選べない
  • 売り出し時の時価総額が低い人は、最初に設定できる発行VA数が100しか選べない
  • 一度、公開してしまうとVALUの追加発行はできない
だそうです。

なるほど、SNSのフォロワー数が時価総額に関係するのか。。

自分の場合は、facebookが35人くらい(少ない)、twitterが1400人くらい(多い?)という感じなので、おそらくtwitterのフォロワー数のお陰で価値が付いた??

他もぐぐってみると、
「VALU」に登録しようとしたけど俺が無価値すぎて断られたw
とのこと。

なるほど、フォロワー数少ないとVAを発行することもできないのか。。

twitterやっててよかった(^_^;)


*追記

VALUの小川社長と少し話をさせて頂きました(3分くらい)。

と言うのも、VALUをはじめて知ったとき、
自分が5年前くらいから目指している

「誰もが貨幣を創造できる社会の実現」

に最も近い仕組みだと衝撃を受けたため。

そこで、

「ユーザが発行するVAが新たな通貨や基軸通貨になるような世界観を目指していますか?」

という質問をしてみました。

(おそらくYESだろうから自分のやることはもうないな。隠居するか・・・)

と、思っていたところ、なんと答えはNOでした。

さらにNOの理由を聞いてみたところ、
小川さんとしては、

「VAは貨幣にならない。」
「ビットコインを基軸通貨にしたい。」

とのこと。

これを聞いて、残念とは思いつつ、一気にやる気が出てきました。

この後、すぐに友人に連絡して、翌日から新しい貨幣づくりを開始!

隠居が少し伸びました。




2017年8月11日金曜日

R dplyrとはなんぞや?大規模データも簡単に処理? ~導入編~

dplyrとは

  1. Rで大規模データをさくさく処理するためのパッケージ
  2. 内部結合とかSQLみたいな処理もできる
  3. Rでデータ処理する人は必ず使ってる(くらいメジャーで有用)
以上!!

あとはだらだら使い方を説明。

使い方

まず、データを用意する。

用意するデータは、ドイツなどの株価指数のデータ。

(全然大規模データじゃないけど。。)

> #Rに最初からあるサンプルデータ(EuStockMarkets)を使う
> #中身は主要株価指数:DAX(ドイツ)、SMI(スイス)、CAC(フランス)、FTSE(イギリス)
> #データの先頭部分を確認してみる
> head(EuStockMarkets)
         DAX    SMI    CAC   FTSE
[1,] 1628.75 1678.1 1772.8 2443.6
[2,] 1613.63 1688.5 1750.5 2460.2
[3,] 1606.51 1678.6 1718.0 2448.2
[4,] 1621.04 1684.1 1708.1 2470.4
[5,] 1618.16 1686.6 1723.1 2484.7
[6,] 1610.61 1671.6 1714.3 2466.8
> #作図
> plot(EuStockMarkets)

plot(EuStockMarkets)の結果。上からドイツ、スイス、フランス、イギリスの主要株価指数の日次データ

グラフにすると分かりやすい♪

*このデータを使ったせいで後ほど不思議なエラーに遭遇します

準備①:dplyrをインストールする

下記のコードを実行。

> install.packages("dplyr")

これを実行すると、勝手にダウンロード・インストールが始まる。

インストールできたらdplyrを読み込む。

> library(dplyr)



準備②:データをtbl_dfというデータ構造に変換

(まあ、普通のデータフレーム:data.frameでも操作可能だけど。。)

ちなみに、dplyrを読み込まないと、、

> #tbl_df(データフレーム拡張したデータ構造)に変換
> EuStockMarkets_df <- tbl_df(EuStockMarkets)
Error in tbl_df(EuStockMarkets) : could not find function "tbl_df"

あ、エラーだ。
肝心のdplyr読み込むの忘れるとエラーになります。。

ちゃんと、dplyrを読み込むと、

> library(dplyr)

 次のパッケージを付け加えます: ‘dplyr’ 

 以下のオブジェクトは ‘package:data.table’ からマスクされています: 

     between, first, last 

 以下のオブジェクトは ‘package:stats’ からマスクされています: 

     filter, lag 

 以下のオブジェクトは ‘package:base’ からマスクされています: 

     intersect, setdiff, setequal, union 

> #tbl_df(データフレーム拡張したデータ構造)に変換
> EuStockMarkets_df <- tbl_df(EuStockMarkets)

エラーでません。

ちなみに、tbl_dfに変換しておくと、データ名実行でデータの要約が表示されます。

> EuStockMarkets_df
# A tibble: 1,860 x 4
       DAX    SMI    CAC   FTSE
     <dbl>  <dbl>  <dbl>  <dbl>
 1 1628.75 1678.1 1772.8 2443.6
 2 1613.63 1688.5 1750.5 2460.2
 3 1606.51 1678.6 1718.0 2448.2
 4 1621.04 1684.1 1708.1 2470.4
 5 1618.16 1686.6 1723.1 2484.7
 6 1610.61 1671.6 1714.3 2466.8
 7 1630.75 1682.9 1734.5 2487.9
 8 1640.17 1703.6 1757.4 2508.4
 9 1635.47 1697.5 1754.0 2510.5
10 1645.89 1716.3 1754.3 2497.4
# ... with 1,850 more rows

また、普通のデータフレームに変換して実行すると、

> data.frame(EuStockMarkets_df)

全データがコンソールに表示されます。
(今回は省いていますがコンソール画面はデータでいっぱいです)

あと、データ構造(クラス)を確認すると、

> class(EuStockMarkets_df)
[1] "tbl_df"     "tbl"        "data.frame"

ちゃんとtbl_dfになっています。
(data.frameも表示されているので普通のデータフレーム型としても扱えそうです)


使い方①:filterでほしい行のデータを抽出

方法は、filter(データ名, 条件)という感じ。

やってみると、

> filter(EuStockMarkets_df,  DAX <= 1450)
Error in filter_impl(.data, quo) : matrix as column is not supported

ん、エラーだ。。

意味はmatrixはサポートしてないよーて感じかな。
いやでもtbl_dfに変換しているからmatrixになってないはず。
一応、調べると、

> class(EuStockMarkets_df)
[1] "tbl_df"     "tbl"        "data.frame"

やっぱりmatrixになってない。おかしいなー。

元のサンプルデータは、、、

> class(EuStockMarkets)
[1] "mts"    "ts"     "matrix"

matrixだ。でも、変換してるから関係ないはず。。

んー、なぞだ。これバグでは??

元のサンプルデータがmatrixだから変な挙動してるのかな。

一回、データを書き出して新しいデータとして読み込んで実行してみるか。

> #write.csvでcsvファイルを書き出す *row.names = Fは行番号を書き出さない処理
> write.csv(EuStockMarkets,"C:/Users/mtsuj/data.csv",row.names = F)

> #freadはcsvを高速で読み込む関数
> #*data.tableをインストールしてlibrary(data.table)で読み込む必要
> EuStockMarkets_df <- fread("C:/Users/mtsuj/data.csv") 

> #freadで読み込むとdata.tableとdata.frameのデータ構造になる
> class(EuStockMarkets_df)
[1] "data.table" "data.frame"
> 
> #今のデータ構造でも問題ないが、今回はtbl_dfに変換する
> EuStockMarkets_df <- tbl_df(EuStockMarkets_df)
> class(EuStockMarkets_df)
[1] "tbl_df"     "tbl"        "data.frame"
> 
> #filterでドイツの株価指数が1450以下のものを抽出
> filter(EuStockMarkets_df,  DAX <= 1450)
# A tibble: 6 x 4
      DAX    SMI    CAC   FTSE
    <dbl>  <dbl>  <dbl>  <dbl>
1 1402.34 1788.0 1611.0 2446.3
2 1421.49 1820.5 1612.5 2488.4
3 1434.61 1858.2 1654.2 2517.1
4 1446.32 1870.3 1673.9 2538.8
5 1437.65 1878.4 1657.3 2541.2
6 1441.57 1881.5 1655.1 2557.2

お、いけた。

Rってこうゆうところありますよね。。

他の使い方は次回ご紹介

*使い方編はこちら
R dplyrとはなんぞや?大規模データも簡単に処理? ~使い方~