1
発表者について
      ta2c =              +          +


     名前:くらもと        たつし
                     ta2c
     趣味:アイスクリームを食べる
2        (年間350個)
     仕事:表示層(UI層)の開発
      (Adobe Flash, Microsoft Silverlightなど)
発表者について
     ta2c =      +     +


     なぜTokyo.Rにきたか?

      大学院生のとき 時系列解析 を専攻
3     今年R言語に出会い、興味を持った。
      なにかお仕事で使えないか。
今日のテーマについて

    パフォーマンス R vs C#




4
今日のテーマについて

    パフォーマンス R vs C#

         このテーマを選んだ理由



5
今日のテーマについて
    [3層アプリケーション]
     表示層    アプリケーション層    データ層
     (UI)   (ビジネスロジック)    (DB)




6
今日のテーマについて
    [3層アプリケーション]
     表示層      アプリケーション層     データ層
     (UI)     (ビジネスロジック)     (DB)




            Webブラウザ(HTML)
7           Webブラウザの
            プラグイン

            デスクトップアプリ
今日のテーマについて
    [3層アプリケーション]
     表示層    アプリケーション層    データ層
     (UI)   (ビジネスロジック)    (DB)




               JAVA
                PHP
8
              ASP.NET
                Perl
今日のテーマについて
    [3層アプリケーション]
     表示層    アプリケーション層     データ層
     (UI)   (ビジネスロジック)     (DB)




                           MySQL
                         SQL Server
9
                         PostgreSQL
                          Oracle DB
今日のテーマについて
    [3層アプリケーション]
       表示層        アプリケーション層      データ層
       (UI)       (ビジネスロジック)      (DB)




1
      [Excel]+R    [Hadoop]+R   [Oracle]+R
0
      [.NET]+R     [Python]+R
     [C,C++]+R
今日のテーマについて
    [3層アプリケーション]
       表示層        アプリケーション層      データ層
       (UI)       (ビジネスロジック)      (DB)




1
      [Excel]+R    [Hadoop]+R   [Oracle]+R
1
      [.NET]+R     [Python]+R
     [C,C++]+R
今日のテーマについて
    [3層アプリケーション]
       表示層        アプリケーション層      データ層
       (UI)       (ビジネスロジック)      (DB)




1
      [Excel]+R    [Hadoop]+R   [Oracle]+R
2
      [.NET]+R     [Python]+R
     [C,C++]+R
今日のテーマについて
    [3層アプリケーション]
       表示層        アプリケーション層      データ層
       (UI)       (ビジネスロジック)      (DB)




1
      [Excel]+R    [Hadoop]+R   [Oracle]+R
3
      [.NET]+R     [Python]+R
     [C,C++]+R
今日のテーマについて
                    0.00%        5.00%       10.00%    15.00%   20.00%

               C[1位]                                            17.73%
            Java[2位]                                        16.27%
            C++[3位]                            9.36%
     Objective-C[4位]                          9.09%
              C#[5位]                     7.03%
    (Visual) Basic[6位]                6.05%
             PHP[7位]                 5.29%
          Python[8位]             3.85%
             Perl[9位]        2.22%
1         Ruby[10位]         1.68%

4             R[30位]     0.44%

     2012年6月プログラミング言語人気ランキング
                     引用先:TIOBE Software
今日のテーマについて

    パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
1   4.   パフォーマンスの問題
5
パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
1   4.   パフォーマンスの問題
6
C#でRを動かすための準備



     1. Visual C# 2010 Express
     2. R.NET

      の2つのインストールを⾏う。
1
7
C#でRを動かすための準備



     それ以前に、
     OSはWindows (xp,vista,7)


1
8
C#でRを動かすための準備
          Windows   Mac    Android   iPhone

           5% 4%
     8%

                             2012年6⽉1ヶ⽉間
                             「忍者アクセス解析」
                             の国内シェア調査。
1                   83%      (データ数4.6億)

9

                          引用先:サムライファクトリー
C#でRを動かすための準備




2
         Windows以外の
0
      17%の人たち、ごめんなさい
C#でRを動かすための準備



     1. Visual C# 2010 Express
     2. R.NET

      の2つのインストールを⾏う。
2
1
C#でRを動かすための準備
     Visual C# 2010 Express
      ・マイクロソフトが提供する、
       無料のC#開発環境。
      ・製品版と比較すると機能が限定される
      (チーム連携不可、帳票作成不可など)
      ・使用期間制限は無し。
      (ただし、30日以上使用するには、
       ユーザー登録が必要)
2
2     ※本発表で使用したアプリは、
      Visual C# 2010 Expressで実装しました。
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール

    ※[VS   2010   Express] でネットで検索。




2
3
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール

    ※[VS   2010   Express] でネットで検索。




2
4
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール




2
5
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール




2
6
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール




2
7
C#でRを動かすための準備
    Visual C# 2010 Expressのインストール




2
8
C#でRを動かすための準備




2
9
C#でRを動かすための準備




       R.NET


3
0
C#でRを動かすための準備
     R.NET
       から     を
    操作するための
    ライブラリ

    ・CodePlexで配布中。
    ・ライセンス
3   フリーソフト(LGPL2.1)
1
C#でRを動かすための準備
     R.NET
       から      を
    操作するための
    ライブラリ

    開発者(家元):
     @kos59125 (名古屋在住)
3   参考資料:
     第13回Tokyo.R
2
    「Rと.NET Framework」
                         ※家元イメージ
C#でRを動かすための準備
     R.NET 補足:最新版R (2.15.1)でつなげて
            みようとすると、「Rlapack.dllが
            無いよ」というエラーになる




3
3
C#でRを動かすための準備
     R.NET 補足:最新版R (2.15.1)でつなげて
                         みようとすると、「Rlapack.dllが
                         無いよ」というエラーになる


     REngine.SetDllDirectory(@"C:¥Program Files¥R¥R-2.15.1¥bin¥i386");
     using (REngine engine = REngine.CreateInstance("RDotNet"))




3
4
C#でRを動かすための準備
     R.NET 補足:最新版R (2.15.1)でつなげて
                          みようとすると、「Rlapack.dllが
                          無いよ」というエラーになる


     REngine.SetDllDirectory(@"C:¥Program Files¥R¥R-2.15.1¥bin¥i386");
     // Rlapack.dllがない問題対策スタート
     string rhome = System.Environment.GetEnvironmentVariable("R_HOME");
     if (string.IsNullOrEmpty(rhome))
     rhome = @"C:¥Program Files¥R¥R-2.15.1";

3    System.Environment.SetEnvironmentVariable("R_HOME", rhome);
     System.Environment.SetEnvironmentVariable("PATH",
     System.Environment.GetEnvironmentVariable("PATH") + ";" + rhome +
5    @"¥bin¥i386");
     // Rlapack.dllがない問題対策エンド
     using (REngine engine = REngine.CreateInstance("RDotNet"))
パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
3   4.   パフォーマンスの問題
6
計測方法


     >
     x <- 1:1000000
     y <- 0
     for (i in x) {y <- y + i}
3
7
計測方法


     > system.time({
     x <- 1:1000000
     y <- 0
     for (i in x) {y <- y + i}
     })
3
8
計測方法


     > system.time({
     x <- 1:1000000
     y <- 0
     for (i in x) {y <- y + i}
     })
3
       ユーザ システム                経過
9
          2.28       0.00     2.28
計測方法                   今回はC#で計測するので
                            これは使用しない。




     > system.time({
     x <- 1:1000000
     y <- 0
     for (i in x) {y <- y + i}
     })
4
       ユーザ システム                経過
0
          2.28       0.00     2.28
パフォーマンス R vs C#
     検証アプリについて




4
1
計測方法

      ボタンクリック



       計算開始     計算開始

       計算終了     計算終了
4
2     計測結果表示
計測方法

      ボタンクリック
                開始日時

       計算開始      計算開始

       計算終了      計算終了
4                  終了日時
3               ※この差分を
      計測結果表示
                 計測結果とす
                 る。
パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
4   4.   パフォーマンスの問題
4
パフォーマンス R vs C#




     表示(UI)層
       作成      ×      ○
4
     統計処理      ○      ×
5     1+1=     ○      ○
パフォーマンス R vs C#

     RとC# どちらでも書ける処理



       同じ処理をするのなら
4       どちらが早いか?
6
パフォーマンス R vs C#




4
7
パフォーマンス R vs C#




4 (n=1, 10, 100, 1000, 1万, 10万,
                   …,100兆, 1000兆, 1京)
8
パフォーマンス R vs C#
    (1)        For文で加算する


               ‘For文で加算する’
    (2)        x <- 1:100000000
               y <- 0
               for (i in x) {y <- y + i}


4              ‘ベクトルでsum’
               x <- 1:100000000
9 (3)          s <- as.double(x)
               y <- sum(s)
パフォーマンス R vs C#
     検証アプリについて




5
0
パフォーマンス R vs C#
     検証アプリについて




5
1
パフォーマンス R vs C#
     検証アプリについて




5
2
パフォーマンス R vs C#
     検証マシンについて
     MacBook Pro 2300/13 MC700J/A
                        (発売年月:2011/2)
      CPU: Intel Core i5 2.3GHz
      メモリ: 8GB (DDR3 PC3-10600)
      OS: Windows 7 SP1 64bit (Ultimate)

5
3
パフォーマンス R vs C#




5
4
パフォーマンス R vs C#
     計測結果    単位:秒(1000分の1秒単位で計測)

                C#       R(Loop)    R(sum)
          1万         0      0.029     0.001
         10万     0.001      0.286     0.002
        100万     0.004      2.672     0.084
        1000万    0.039     22.621     0.419
5         1億     0.384     ×          2.339
5        10億     3.674     ×          エラー
        100億    21.001     ×          ×
パフォーマンス R vs C#
     計測結果
               C#       R(Loop)    R(sum)
         1万         0      0.029     0.001
        10万     0.001      0.286     0.002
       100万     0.004      2.672     0.084
       1000万    0.039     22.621     0.419
5        1億     0.384     ×          2.339
6       10億     3.674     ×          エラー
       100億    21.001     ×          ×
パフォーマンス R vs C#
     計測結果




                sum()
               30〜50倍早い
5
7
                For文
パフォーマンス R vs C#
     計測結果
     [1位]
               6〜10倍早い


     [2位]       sum()
               30〜50倍早い
5
8
     [3位]       For文
パフォーマンス R vs C#




5
9
パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
6   4.   パフォーマンスの問題
0
パフォーマンス R vs C#


      パフォーマンスの問題
    (実際のお仕事で直面した)
6
1
パフォーマンスの問題
    [アプリケーションの工程(ウォーターフォール)]

        要件定義

         設計

         開発

6        テスト
2
       納品/リリース
パフォーマンスの問題
    [アプリケーションの工程(ウォーターフォール)]

        要件定義

         設計

         開発

6        テスト     パフォーマンス
3
       納品/リリース
パフォーマンスの問題
    [アプリケーションの工程(ウォーターフォール)]

        要件定義

         設計

         開発

6        テスト     パフォーマンス
4
       納品/リリース
パフォーマンスの問題
    [アプリケーションの工程(ウォーターフォール)]

        要件定義

         設計

         開発

6        テスト     パフォーマンス
5
       納品/リリース
パフォーマンスの問題
    [アプリが重たくなる主な要因]

     表示層    アプリケーション層    データ層
     (UI)   (ビジネスロジック)    (DB)




6
6
パフォーマンスの問題
    [アプリが重たくなる主な要因]

     表示層    アプリケーション層    データ層
     (UI)   (ビジネスロジック)    (DB)




      処理       処理         処理
6
7
パフォーマンスの問題
    [アプリが重たくなる主な要因]

      表示層    アプリケーション層    データ層
      (UI)   (ビジネスロジック)    (DB)




       処理       処理         処理
6    マシン性能    マシン性能       マシン性能
8
パフォーマンスの問題
    [アプリが重たくなる主な要因]

      表示層    アプリケーション層    データ層
      (UI)   (ビジネスロジック)    (DB)




       処理       処理         処理
6    マシン性能    マシン性能       マシン性能
9    使いづらい
パフォーマンスの問題
    [アプリが重たくなる主な要因]

             通信量           通信量




       処理            処理           処理
7    マシン性能         マシン性能         マシン性能
0    使いづらい
パフォーマンスの問題
    [アプリが重たくなる主な要因]

             通信量           通信量




       処理            処理           処理
7    マシン性能         マシン性能         マシン性能
1    使いづらい
パフォーマンスの問題


        重たい処理(場所)の特定

           解決策検討

         解決策の対応(実装)

7         対応前後の比較
2
パフォーマンスの問題


        重たい処理(場所)の特定

           解決策検討

         解決策の対応(実装)

7         対応前後の比較
3
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例1
     Adobe Flash で、ある一覧表示
     (対応前)40秒→
     事例2
     ASP.NETで、ある一覧表示
     (対応前)70秒→
7  事例3
     C#(デスクトップアプリ)で画面Aから画面Bに遷移
4    (対応前)12秒→
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例1
     Adobe Flash で、ある一覧表示
     (対応前)40秒→(対応後)1.5秒
     事例2
     ASP.NETで、ある一覧表示
     (対応前)70秒→ (対応後)5秒
7  事例3
     C#(デスクトップアプリ)で画面Aから画面Bに遷移
5    (対応前)12秒→ (対応後)2秒
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例1
     Adobe Flash で、ある一覧表示
     (対応前)40秒→(対応後)1.5秒
     事例2
     ASP.NETで、ある一覧表示
     (対応前)70秒→ (対応後)5秒
7  事例3
     C#(デスクトップアプリ)で画面Aから画面Bに遷移
6    (対応前)12秒→ (対応後)2秒
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例1
     Adobe Flash で、ある一覧表示
     (対応前)40秒→(後)1.5秒
     ※(主な対応) 表示処理を分割した。

     事例2
7    ASP.NETで、ある一覧表示
7    (対応前)70秒→(後)5秒
     ※(主な対応) 取得列をしぼった。
パフォーマンスの問題
    [発表者が直面した問題(例)]
     事例3
     C#(デスクトップアプリ)で
     画面Aから画面Bに画面遷移
     (対応前)12秒→(後)2秒
     ※(主な対応) 画質を落とした

7
8
まとめ

    パフォーマンス R vs C#
    1.   C#でRを動かすための準備
    2.   計測方法
    3.   R vs C# (1+2+…)
7   4.   パフォーマンスの問題
9
まとめ




8
0
まとめ




    得意なことは、それに任せよう
8
1
まとめ




    得意なことは、それに任せよう
8
      でも、無茶は⽌めよう。
2
まとめ


      6〜10倍早い


            sum()
      30〜50倍早い
8
3           For文
まとめ

                      15人日
      6〜10倍早い


            sum()   1人日
      30〜50倍早い
8
4           For文
まとめ

                      100万円
      6〜10倍早い


            sum()   10万円
      30〜50倍早い
8
5           For文
まとめ
                       テスト
                      やり直し
      6〜10倍早い

                    テスト
            sum()   1人日
      30〜50倍早い
8
6           For文
まとめ




    得意なことは、それに任せよう
8
      でも、無茶は⽌めよう。
7
参考文献(1)
     2012年6⽉プログラミング言語人気ランキング
      http://www.tiobe.com/index.php/content/paperinf
      o/tpci/
     2012年6⽉「忍者アクセス解析」の国内シェア調査
      http://www.samurai-factory.jp/info/2012
      /20120703286.html
     R.NET
      http://rdotnet.codeplex.com/
     Visual C# 2010 Express
      http://www.microsoft.com/ja-
      jp/dev/2010/product/express/
8
8
参考文献(2)
     第13回Tokyo.R「Rと.NET Framework」
     (@kos59125)
     https://docs.google.com/a/recyclebin.jp/viewer?a
     =v&pid=explorer&srcid=0B3zrAV1SplSBOGRkYmRj
     YWQtYWUwNi00MWIwLTg2N2ItMGQ3OGFlM2UwYj
     U2&hl=en&chrome=true




8
9
9
0
9
1
次回予告

     1,2,3,4 <item>
     りんご,みかん  <id>1</id>
              <name>りん




     1,2,3,4 <item>
9    りんご,みかん  <id>1</id>
              <name>りん
2

More Related Content

PDF
Oracle Cloud Developers Meetup@東京
PPTX
Non è mai stato così facile condividere
PDF
Making conference
PDF
Sejutakaos Project Proposal (ID)
PPTX
Managing economic volatility
PDF
Andrea Sharfin Friedenson - How to Get Reporters to Cover Your Startup
PPT
Asaco pla salut 2013
PPTX
Present simple afirmative
Oracle Cloud Developers Meetup@東京
Non è mai stato così facile condividere
Making conference
Sejutakaos Project Proposal (ID)
Managing economic volatility
Andrea Sharfin Friedenson - How to Get Reporters to Cover Your Startup
Asaco pla salut 2013
Present simple afirmative

Viewers also liked (16)

PPTX
Bangaldesh Regional Dialects
PPT
Mathura of my Dreams by Shruti Goswami
PPTX
Level of Thinking
DOCX
From 'Fractal How' to Emergent Empowerment (2013 article)
PDF
Презентация к CCSS v2
PDF
Einfuehrung in Elasticsearch
PPTX
Hosea American 13 June 2012
DOCX
Embarazo precoz
PPTX
Sound of Our Action
PDF
Presentation of the European Youth Parliament Republic of Moldova
PDF
Electrocardiografia per atenció primària (5). Bradiarímies
PPTX
The Way It Works
PPTX
Come redere felice la tua vita in un'ora
PDF
The model of perfect competition
PPTX
PPTX
Leadership Templates
Bangaldesh Regional Dialects
Mathura of my Dreams by Shruti Goswami
Level of Thinking
From 'Fractal How' to Emergent Empowerment (2013 article)
Презентация к CCSS v2
Einfuehrung in Elasticsearch
Hosea American 13 June 2012
Embarazo precoz
Sound of Our Action
Presentation of the European Youth Parliament Republic of Moldova
Electrocardiografia per atenció primària (5). Bradiarímies
The Way It Works
Come redere felice la tua vita in un'ora
The model of perfect competition
Leadership Templates
Ad

Similar to TokyoR24 - PerformanceRvsC# (20)

PPT
20010127
PPTX
自己紹介とC# Devkitについて.pptx
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PPTX
関数型言語&形式的手法セミナー(3)
PPT
20050903
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PDF
C#への招待
PPTX
The evolution of c#
PPTX
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
PPTX
Windows 8時代のアプリ開発
PDF
LightSwitch で遊んでみた Rev. 2
PDF
大規模ソフトウェア開発とテストの経験について
PPTX
C#の書き方
PPTX
C#の書き方
PDF
Rの高速化
PDF
20160121 データサイエンティスト協会 木曜セミナー #5
PDF
TDDBC osaka 2012/06/02
PPTX
つぶLT20121215
PDF
SQL Server 2016 R Services + Microsoft R Server 技術資料
PPTX
関数型言語初心者の俺がF#触ってみた
20010127
自己紹介とC# Devkitについて.pptx
今から始める、Windows 10&新.NETへの移行戦略
関数型言語&形式的手法セミナー(3)
20050903
今から始める、Windows 10&新.NETへの移行戦略
C#への招待
The evolution of c#
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows 8時代のアプリ開発
LightSwitch で遊んでみた Rev. 2
大規模ソフトウェア開発とテストの経験について
C#の書き方
C#の書き方
Rの高速化
20160121 データサイエンティスト協会 木曜セミナー #5
TDDBC osaka 2012/06/02
つぶLT20121215
SQL Server 2016 R Services + Microsoft R Server 技術資料
関数型言語初心者の俺がF#触ってみた
Ad

TokyoR24 - PerformanceRvsC#

  • 1. 1
  • 2. 発表者について ta2c = + +  名前:くらもと たつし ta2c  趣味:アイスクリームを食べる 2 (年間350個)  仕事:表示層(UI層)の開発 (Adobe Flash, Microsoft Silverlightなど)
  • 3. 発表者について ta2c = + +  なぜTokyo.Rにきたか?  大学院生のとき 時系列解析 を専攻 3  今年R言語に出会い、興味を持った。 なにかお仕事で使えないか。
  • 4. 今日のテーマについて パフォーマンス R vs C# 4
  • 5. 今日のテーマについて パフォーマンス R vs C# このテーマを選んだ理由 5
  • 6. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 6
  • 7. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) Webブラウザ(HTML) 7 Webブラウザの プラグイン デスクトップアプリ
  • 8. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) JAVA PHP 8 ASP.NET Perl
  • 9. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) MySQL SQL Server 9 PostgreSQL Oracle DB
  • 10. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 1 [Excel]+R [Hadoop]+R [Oracle]+R 0 [.NET]+R [Python]+R [C,C++]+R
  • 11. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 1 [Excel]+R [Hadoop]+R [Oracle]+R 1 [.NET]+R [Python]+R [C,C++]+R
  • 12. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 1 [Excel]+R [Hadoop]+R [Oracle]+R 2 [.NET]+R [Python]+R [C,C++]+R
  • 13. 今日のテーマについて [3層アプリケーション] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 1 [Excel]+R [Hadoop]+R [Oracle]+R 3 [.NET]+R [Python]+R [C,C++]+R
  • 14. 今日のテーマについて 0.00% 5.00% 10.00% 15.00% 20.00% C[1位] 17.73% Java[2位] 16.27% C++[3位] 9.36% Objective-C[4位] 9.09% C#[5位] 7.03% (Visual) Basic[6位] 6.05% PHP[7位] 5.29% Python[8位] 3.85% Perl[9位] 2.22% 1 Ruby[10位] 1.68% 4 R[30位] 0.44% 2012年6月プログラミング言語人気ランキング 引用先:TIOBE Software
  • 15. 今日のテーマについて パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…) 1 4. パフォーマンスの問題 5
  • 16. パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…) 1 4. パフォーマンスの問題 6
  • 17. C#でRを動かすための準備 1. Visual C# 2010 Express 2. R.NET の2つのインストールを⾏う。 1 7
  • 18. C#でRを動かすための準備 それ以前に、 OSはWindows (xp,vista,7) 1 8
  • 19. C#でRを動かすための準備 Windows Mac Android iPhone 5% 4% 8% 2012年6⽉1ヶ⽉間 「忍者アクセス解析」 の国内シェア調査。 1 83% (データ数4.6億) 9 引用先:サムライファクトリー
  • 20. C#でRを動かすための準備 2 Windows以外の 0 17%の人たち、ごめんなさい
  • 21. C#でRを動かすための準備 1. Visual C# 2010 Express 2. R.NET の2つのインストールを⾏う。 2 1
  • 22. C#でRを動かすための準備 Visual C# 2010 Express ・マイクロソフトが提供する、 無料のC#開発環境。 ・製品版と比較すると機能が限定される (チーム連携不可、帳票作成不可など) ・使用期間制限は無し。 (ただし、30日以上使用するには、 ユーザー登録が必要) 2 2 ※本発表で使用したアプリは、 Visual C# 2010 Expressで実装しました。
  • 23. C#でRを動かすための準備 Visual C# 2010 Expressのインストール ※[VS 2010 Express] でネットで検索。 2 3
  • 24. C#でRを動かすための準備 Visual C# 2010 Expressのインストール ※[VS 2010 Express] でネットで検索。 2 4
  • 25. C#でRを動かすための準備 Visual C# 2010 Expressのインストール 2 5
  • 26. C#でRを動かすための準備 Visual C# 2010 Expressのインストール 2 6
  • 27. C#でRを動かすための準備 Visual C# 2010 Expressのインストール 2 7
  • 28. C#でRを動かすための準備 Visual C# 2010 Expressのインストール 2 8
  • 31. C#でRを動かすための準備 R.NET から を 操作するための ライブラリ ・CodePlexで配布中。 ・ライセンス 3 フリーソフト(LGPL2.1) 1
  • 32. C#でRを動かすための準備 R.NET から を 操作するための ライブラリ 開発者(家元): @kos59125 (名古屋在住) 3 参考資料: 第13回Tokyo.R 2 「Rと.NET Framework」 ※家元イメージ
  • 33. C#でRを動かすための準備 R.NET 補足:最新版R (2.15.1)でつなげて みようとすると、「Rlapack.dllが 無いよ」というエラーになる 3 3
  • 34. C#でRを動かすための準備 R.NET 補足:最新版R (2.15.1)でつなげて みようとすると、「Rlapack.dllが 無いよ」というエラーになる REngine.SetDllDirectory(@"C:¥Program Files¥R¥R-2.15.1¥bin¥i386"); using (REngine engine = REngine.CreateInstance("RDotNet")) 3 4
  • 35. C#でRを動かすための準備 R.NET 補足:最新版R (2.15.1)でつなげて みようとすると、「Rlapack.dllが 無いよ」というエラーになる REngine.SetDllDirectory(@"C:¥Program Files¥R¥R-2.15.1¥bin¥i386"); // Rlapack.dllがない問題対策スタート string rhome = System.Environment.GetEnvironmentVariable("R_HOME"); if (string.IsNullOrEmpty(rhome)) rhome = @"C:¥Program Files¥R¥R-2.15.1"; 3 System.Environment.SetEnvironmentVariable("R_HOME", rhome); System.Environment.SetEnvironmentVariable("PATH", System.Environment.GetEnvironmentVariable("PATH") + ";" + rhome + 5 @"¥bin¥i386"); // Rlapack.dllがない問題対策エンド using (REngine engine = REngine.CreateInstance("RDotNet"))
  • 36. パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…) 3 4. パフォーマンスの問題 6
  • 37. 計測方法 > x <- 1:1000000 y <- 0 for (i in x) {y <- y + i} 3 7
  • 38. 計測方法 > system.time({ x <- 1:1000000 y <- 0 for (i in x) {y <- y + i} }) 3 8
  • 39. 計測方法 > system.time({ x <- 1:1000000 y <- 0 for (i in x) {y <- y + i} }) 3 ユーザ システム 経過 9 2.28 0.00 2.28
  • 40. 計測方法 今回はC#で計測するので これは使用しない。 > system.time({ x <- 1:1000000 y <- 0 for (i in x) {y <- y + i} }) 4 ユーザ システム 経過 0 2.28 0.00 2.28
  • 41. パフォーマンス R vs C# 検証アプリについて 4 1
  • 42. 計測方法 ボタンクリック 計算開始 計算開始 計算終了 計算終了 4 2 計測結果表示
  • 43. 計測方法 ボタンクリック 開始日時 計算開始 計算開始 計算終了 計算終了 4 終了日時 3 ※この差分を 計測結果表示 計測結果とす る。
  • 44. パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…) 4 4. パフォーマンスの問題 4
  • 45. パフォーマンス R vs C# 表示(UI)層 作成 × ○ 4 統計処理 ○ × 5 1+1= ○ ○
  • 46. パフォーマンス R vs C# RとC# どちらでも書ける処理 同じ処理をするのなら 4 どちらが早いか? 6
  • 48. パフォーマンス R vs C# 4 (n=1, 10, 100, 1000, 1万, 10万, …,100兆, 1000兆, 1京) 8
  • 49. パフォーマンス R vs C# (1) For文で加算する ‘For文で加算する’ (2) x <- 1:100000000 y <- 0 for (i in x) {y <- y + i} 4 ‘ベクトルでsum’ x <- 1:100000000 9 (3) s <- as.double(x) y <- sum(s)
  • 50. パフォーマンス R vs C# 検証アプリについて 5 0
  • 51. パフォーマンス R vs C# 検証アプリについて 5 1
  • 52. パフォーマンス R vs C# 検証アプリについて 5 2
  • 53. パフォーマンス R vs C# 検証マシンについて MacBook Pro 2300/13 MC700J/A (発売年月:2011/2)  CPU: Intel Core i5 2.3GHz  メモリ: 8GB (DDR3 PC3-10600)  OS: Windows 7 SP1 64bit (Ultimate) 5 3
  • 55. パフォーマンス R vs C# 計測結果 単位:秒(1000分の1秒単位で計測) C# R(Loop) R(sum) 1万 0 0.029 0.001 10万 0.001 0.286 0.002 100万 0.004 2.672 0.084 1000万 0.039 22.621 0.419 5 1億 0.384 × 2.339 5 10億 3.674 × エラー 100億 21.001 × ×
  • 56. パフォーマンス R vs C# 計測結果 C# R(Loop) R(sum) 1万 0 0.029 0.001 10万 0.001 0.286 0.002 100万 0.004 2.672 0.084 1000万 0.039 22.621 0.419 5 1億 0.384 × 2.339 6 10億 3.674 × エラー 100億 21.001 × ×
  • 57. パフォーマンス R vs C# 計測結果 sum() 30〜50倍早い 5 7 For文
  • 58. パフォーマンス R vs C# 計測結果 [1位] 6〜10倍早い [2位] sum() 30〜50倍早い 5 8 [3位] For文
  • 60. パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…) 6 4. パフォーマンスの問題 0
  • 61. パフォーマンス R vs C# パフォーマンスの問題 (実際のお仕事で直面した) 6 1
  • 62. パフォーマンスの問題 [アプリケーションの工程(ウォーターフォール)] 要件定義 設計 開発 6 テスト 2 納品/リリース
  • 63. パフォーマンスの問題 [アプリケーションの工程(ウォーターフォール)] 要件定義 設計 開発 6 テスト パフォーマンス 3 納品/リリース
  • 64. パフォーマンスの問題 [アプリケーションの工程(ウォーターフォール)] 要件定義 設計 開発 6 テスト パフォーマンス 4 納品/リリース
  • 65. パフォーマンスの問題 [アプリケーションの工程(ウォーターフォール)] 要件定義 設計 開発 6 テスト パフォーマンス 5 納品/リリース
  • 66. パフォーマンスの問題 [アプリが重たくなる主な要因] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 6 6
  • 67. パフォーマンスの問題 [アプリが重たくなる主な要因] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 処理 処理 処理 6 7
  • 68. パフォーマンスの問題 [アプリが重たくなる主な要因] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 処理 処理 処理 6 マシン性能 マシン性能 マシン性能 8
  • 69. パフォーマンスの問題 [アプリが重たくなる主な要因] 表示層 アプリケーション層 データ層 (UI) (ビジネスロジック) (DB) 処理 処理 処理 6 マシン性能 マシン性能 マシン性能 9 使いづらい
  • 70. パフォーマンスの問題 [アプリが重たくなる主な要因] 通信量 通信量 処理 処理 処理 7 マシン性能 マシン性能 マシン性能 0 使いづらい
  • 71. パフォーマンスの問題 [アプリが重たくなる主な要因] 通信量 通信量 処理 処理 処理 7 マシン性能 マシン性能 マシン性能 1 使いづらい
  • 72. パフォーマンスの問題 重たい処理(場所)の特定 解決策検討 解決策の対応(実装) 7 対応前後の比較 2
  • 73. パフォーマンスの問題 重たい処理(場所)の特定 解決策検討 解決策の対応(実装) 7 対応前後の比較 3
  • 74. パフォーマンスの問題 [発表者が直面した問題(例)]  事例1 Adobe Flash で、ある一覧表示 (対応前)40秒→  事例2 ASP.NETで、ある一覧表示 (対応前)70秒→ 7  事例3 C#(デスクトップアプリ)で画面Aから画面Bに遷移 4 (対応前)12秒→
  • 75. パフォーマンスの問題 [発表者が直面した問題(例)]  事例1 Adobe Flash で、ある一覧表示 (対応前)40秒→(対応後)1.5秒  事例2 ASP.NETで、ある一覧表示 (対応前)70秒→ (対応後)5秒 7  事例3 C#(デスクトップアプリ)で画面Aから画面Bに遷移 5 (対応前)12秒→ (対応後)2秒
  • 76. パフォーマンスの問題 [発表者が直面した問題(例)]  事例1 Adobe Flash で、ある一覧表示 (対応前)40秒→(対応後)1.5秒  事例2 ASP.NETで、ある一覧表示 (対応前)70秒→ (対応後)5秒 7  事例3 C#(デスクトップアプリ)で画面Aから画面Bに遷移 6 (対応前)12秒→ (対応後)2秒
  • 77. パフォーマンスの問題 [発表者が直面した問題(例)]  事例1 Adobe Flash で、ある一覧表示 (対応前)40秒→(後)1.5秒 ※(主な対応) 表示処理を分割した。  事例2 7 ASP.NETで、ある一覧表示 7 (対応前)70秒→(後)5秒 ※(主な対応) 取得列をしぼった。
  • 78. パフォーマンスの問題 [発表者が直面した問題(例)]  事例3 C#(デスクトップアプリ)で 画面Aから画面Bに画面遷移 (対応前)12秒→(後)2秒 ※(主な対応) 画質を落とした 7 8
  • 79. まとめ パフォーマンス R vs C# 1. C#でRを動かすための準備 2. 計測方法 3. R vs C# (1+2+…) 7 4. パフォーマンスの問題 9
  • 81. まとめ 得意なことは、それに任せよう 8 1
  • 82. まとめ 得意なことは、それに任せよう 8 でも、無茶は⽌めよう。 2
  • 83. まとめ 6〜10倍早い sum() 30〜50倍早い 8 3 For文
  • 84. まとめ 15人日 6〜10倍早い sum() 1人日 30〜50倍早い 8 4 For文
  • 85. まとめ 100万円 6〜10倍早い sum() 10万円 30〜50倍早い 8 5 For文
  • 86. まとめ テスト やり直し 6〜10倍早い テスト sum() 1人日 30〜50倍早い 8 6 For文
  • 87. まとめ 得意なことは、それに任せよう 8 でも、無茶は⽌めよう。 7
  • 88. 参考文献(1)  2012年6⽉プログラミング言語人気ランキング http://www.tiobe.com/index.php/content/paperinf o/tpci/  2012年6⽉「忍者アクセス解析」の国内シェア調査 http://www.samurai-factory.jp/info/2012 /20120703286.html  R.NET http://rdotnet.codeplex.com/  Visual C# 2010 Express http://www.microsoft.com/ja- jp/dev/2010/product/express/ 8 8
  • 89. 参考文献(2)  第13回Tokyo.R「Rと.NET Framework」 (@kos59125) https://docs.google.com/a/recyclebin.jp/viewer?a =v&pid=explorer&srcid=0B3zrAV1SplSBOGRkYmRj YWQtYWUwNi00MWIwLTg2N2ItMGQ3OGFlM2UwYj U2&hl=en&chrome=true 8 9
  • 90. 9 0
  • 91. 9 1
  • 92. 次回予告 1,2,3,4 <item> りんご,みかん <id>1</id> <name>りん 1,2,3,4 <item> 9 りんご,みかん <id>1</id> <name>りん 2