マイクロソフトは より効率的、かつ大量のデータを使ったデータ分析のための基盤を急ピッチで拡充しています。
分析自体やデータ準備の前処理における手段の1つとして使って頂くことを想定している各種製品?サービスについて説明します。
具体的には、R の並列実行環境である Microsoft R Server、Power BI、並列処理基盤である Azure Data Lake Analytics、Azure Machine Learning を取り上げます。
2. LINQとは
? データ(オブジェクト)の集合から簡単な記述
で『必要なオブジェクト』の『必要なメンバ』
のみを『必要とする順序』で取り出せるように
したシンタックスシュガー
– 開発者は抽出条件、抽出するメンバ、抽出順序にの
み関心を払う
– 取り出すデータの型を用意したり、繰り返し文を書
いたりしない
? 定型的作業のタイピングの大幅な削減
?クエリ式のサンプル:
var query = from データ変数 in データの集合
where 抽出条件
orderby 抽出順序のキー項目
select 抽出するメンバ で構成される新しいクラス
VSUG DAY 2007.12.8
3. 対象となるデータ
? 配列、LIST<T>(LINQ to Object)
– 独自に定義したオブジェクトや組み込みオブジェクト
の集合
? XMLファイル(LINQ to XML)
– XDocument、XElement内のオブジェクトのツリー
? データベース(LINQ to SQL)
– DataContext経由で取り出すTable<TEntity>オブジェク
ト
? 対応するのはSQL Serverのみ
? Entity Data Model(LINQ to Entities)
– Entity Frameworkによって生成されるオブジェクト
? Entity Frameworkは.NET Framework 3.5のリリースには含
まれていない
VSUG DAY 2007.12.8
4. LINQ to Object
? Peopleという名前の配列にName、
Genger、Ageプロパティを持つ匿名オブ
ジェクトを持つ
var query = from p in People
where p.Gender == 1
orderby p.Age
select new { p.Name, p.Age };
VSUG DAY 2007.12.8
5. LINQ to XML
? PeopleというXElement変数にXMLファイルを読み込
む
? XMLファイルはPeople/Personという階層構造を持
ち、PersonノードにはName、Gender、Ageノードが
含まれる
var query = from p in People.Descendants("Person")
where (int)p.Element("Gender") == 1
orderby (int)p.Element("Age")
select
new {
Name = (string)p.Element("Name"),
Age = (int)p.Element(“Age”)
};
VSUG DAY 2007.12.8
6. LINQ to SQL
? ウィザードを利用してDataContextクラス、
Table<TEntity>クラスを作成している
var query = from p in dtc.People
where p.Gender == 1
orderby p.Age
select new { p.Name, p.Age };
VSUG DAY 2007.12.8
7. LINQの仕組み ー その1
? クエリ式はラムダ式を引数にとる拡張メソッドが連結
された形式に変換される
var query = from p in People
where p.Gender == 1
orderby p.Age
select new { p.Name, p.Age };
var query = People.Where(p => p.Gender == 1)
.OrderBy(p => p.Age)
.Select(p => new { p.Name, p.Age });
VSUG DAY 2007.12.8
8. LINQの仕組み ー その2
? 対象となるデータにより呼び出される拡張メソッ
ドは変わる
– System.LINQ.Enumerable.xxx
? LINQ to Object
– 配列、LIST<T>がIEnumerableを継承
? LINQ to XML
– Xelement.Decentants()がIEnumerableを返す
? yieldによる実装 → 遅延実行
– System.LINQ.Queryable.xxx
? LINQ to SQL
– System.Data.Linq.Table<Tentity>がIQueryableを継承
? ラムダ式の右辺を積んで式のツリー(Expression Tree)を
作成
? IQuaryProviderによる実装 → 遅延実行
? 継承して独自のLINQ to XXX といった仕組みを構築可能
VSUG DAY 2007.12.8
9. LINQの仕組み ー その3
? 遅延実行
– データが実際に必要となるタイミングまでクエリ条
件は積み重ねられていく
? LINQ to SQLでは積み重ねられたクエリでSQL文が生成
var query0 = from p in dtc.People
where p.Gender == 1
select p;
var query = from p in query0
where p.Age > 20
orderby p.Age
select new { p.Name, p.Age };
SELECT [t0].[Name], [t0].[Age]
FROM [dbo].[People] AS [t0]
WHERE ([t0].[Age] > @p0) AND ([t0].[Gender] = @p1)
ORDER BY [t0].[Age]
VSUG DAY 2007.12.8
10. LINQ to Objectの使いどころ
? Frameworkに組み込まれたデータを活用する
– サンプル:ファイル内文字列検索
LINQ to XMLの使いどころ
? RSSで提供されるデータを利用する
? Webサービスで提供されるデータを利用する
– XML特有の操作技術を覚える必要がない
– XML文書の変形に利用することも可能
– サンプル:天気予報サービスの利用
VSUG DAY 2007.12.8