rabbit-slide-kou-data-science-rb 2017.5.19.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6adc80216160df3aa2fcc4e681adb8adef33c9ff
4
+ data.tar.gz: 1c8032d96c9c619f40bf1789a937408da47bb597
5
+ SHA512:
6
+ metadata.gz: 677dc10e63a5bf2384757c4f679b4843fb82577c44fc2b6270df8e21b43f76a80fa8e6ca3e3c1eaf305ff0d69160cf1358701dac8e745e1f24d7dc09f32b9ff6
7
+ data.tar.gz: 431d971ef33ec8e19e5ffcb730d1fc6404e4cb1f8e09cd1cbea5d8dd0d1db09a3c0c7beef1dec1a6bf82258609bdfe46703b7d2a77f4f4036f41acd0eda63549
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ ruby-with-apache-arrow-joins-data-processing-languages.rab
@@ -0,0 +1,38 @@
1
+ = RubyもApache Arrowでデータ処理言語の仲間入り
2
+
3
+ Apache Arrowはデータ分析システム間でのデータ交換を効率化することを目的としたデータフォーマットです。pandasやApache SparkやRなど主要なデータ分析システムはApache Arrowの対応を進めています。近い将来、データ分析システム間でのデータ交換はApache Arrowを使う状態になるでしょう。RubyもApache Arrowに対応することで既存のデータ分析システムとデータ交換できるようになります。これで、Rubyもデータ分析システムの一部でデータ処理をできるようになります!
4
+
5
+ == ライセンス
6
+
7
+ === スライド
8
+
9
+ CC BY-SA 4.0
10
+
11
+ 原著作者名は以下の通りです。
12
+
13
+ * 須藤功平(またはKouhei Sutou)
14
+
15
+ === プログラム
16
+
17
+ CC0(パブリックドメイン)
18
+
19
+ == 作者向け
20
+
21
+ === 表示
22
+
23
+ rake
24
+
25
+ === 公開
26
+
27
+ rake publish
28
+
29
+ == 閲覧者向け
30
+
31
+ === インストール
32
+
33
+ gem install rabbit-slide-kou-data-science-rb
34
+
35
+ === 表示
36
+
37
+ rabbit rabbit-slide-kou-data-science-rb.gem
38
+
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ spec.files += Dir.glob("sample/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ spec.add_runtime_dependency("rabbit-theme-clear-code")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
@@ -0,0 +1,24 @@
1
+ ---
2
+ id: data-science-rb
3
+ base_name: ruby-with-apache-arrow-joins-data-processing-languages
4
+ tags:
5
+ - rabbit
6
+ - ruby
7
+ - arrow
8
+ - data
9
+ presentation_date: 2017-05-19
10
+ version: 2017.5.19.0
11
+ licenses:
12
+ - CC-BY-SA-4.0
13
+ slideshare_id: datasciencerb
14
+ speaker_deck_id:
15
+ ustream_id:
16
+ vimeo_id:
17
+ youtube_id:
18
+ author:
19
+ markup_language: :rd
20
+ name: Kouhei Sutou
21
+ email: kou@clear-code.com
22
+ rubygems_user: kou
23
+ slideshare_user:
24
+ speaker_deck_user:
@@ -0,0 +1,444 @@
1
+ = RubyもApache Arrowで\nデータ処理言語の\n仲間入り
2
+
3
+ : author
4
+ 須藤功平
5
+ : institution
6
+ クリアコード
7
+ : content-source
8
+ DataScience.rbワークショップ
9
+ : date
10
+ 2017-05-19
11
+ : allotted-time
12
+ 20m
13
+ : theme
14
+ clear-code
15
+
16
+ = はじめに
17
+
18
+ (('tag:center'))
19
+ (('tag:large'))
20
+ 私はRubyが好きだ
21
+
22
+ (('tag:center'))
23
+ (('tag:large'))
24
+ だからデータ分析だって\n
25
+ Rubyでやりたい
26
+
27
+ (('tag:center'))
28
+ (('note:Rubyよりも向いている言語があるのはわかっているけどさー'))
29
+
30
+ = Apache Arrow
31
+
32
+ (('tag:center'))
33
+ データフォーマットの仕様
34
+
35
+ (('tag:center'))
36
+
37
+
38
+ (('tag:center'))
39
+ その仕様を処理する実装
40
+
41
+ = Arrow:解決したい問題
42
+
43
+ * 高いデータ交換コスト
44
+ * →低くしたい
45
+ * 重複した最適化実装
46
+ * →実装を共有したい
47
+
48
+ = Arrow:文脈
49
+
50
+ ビッグデータの分析
51
+
52
+ = ビッグデータの分析
53
+
54
+ * いろんなシステムが連携
55
+ * Java実装のもろもろとPythonとR
56
+ * システム間でデータ交換が必要
57
+ * 交換する度にシリアライズ・パース
58
+ * (('wait'))↑に結構CPUと時間を使われる…
59
+ * (('wait'))そんなのより分析処理に使いたい!
60
+
61
+ = Arrow:解決方針
62
+
63
+ コストゼロの\n
64
+ シリアライズ・\n
65
+ パース
66
+
67
+ = Arrow:コストゼロの実現
68
+
69
+ * そのまま使えるフォーマット
70
+ * 例:int8の配列→int8の値を連続配置
71
+ * 1バイトずつずらせば高速アクセス可
72
+ * Arrowのトレードオフ
73
+ * サイズ圧縮よりシリアライズゼロ
74
+ * 参考:Parquetはサイズ圧縮優先
75
+
76
+ = Arrowがある世界
77
+
78
+ * 各システムがサクサク連携
79
+ * 例:PySparkが高速化
80
+ * 理由:Py🡘Javaのデータ交換コスト減
81
+ * Java・Python・R以外も活躍
82
+ * 例:Ruby・Go・Rust・Juliaとか
83
+ * 理由:低コストでデータ交換可能
84
+
85
+ = ArrowとRuby
86
+
87
+ チャンス!
88
+
89
+ = ArrowとRubyとデータ分析
90
+
91
+ * RubyがArrowに対応
92
+ * Rubyにデータが回ってくる!
93
+ * →Rubyにもデータ分析の機会が!\n
94
+ (('note:(今はできることは少ないだろうけど…)'))
95
+ * (('wait'))次のステップ
96
+ * できることを増やしていく!
97
+ * →Rubyでもいろいろデータ分析!
98
+
99
+ = ArrowとRubyの今
100
+
101
+ * RubyでArrowを使える!
102
+ * 私が使えるようにしているから!\n
103
+ (('note:コミッターにもなった'))
104
+ * 公式リポジトリーにも入っている\n
105
+ (('note:厳密に言うと違うんだけど公式サポートだと思ってよい'))
106
+ * Rubyでデータを読み書きできる
107
+ * いくらかデータ処理もできる
108
+
109
+ = 今できること
110
+
111
+ * Python・Rとのデータ交換
112
+ * データ処理をいくらか
113
+ * Rubyの各種ライブラリー間での\n
114
+ データ交換
115
+
116
+ = Arrow:Python
117
+
118
+ # coderay python
119
+ # pandasでデータ生成→Arrow形式で書き込み
120
+ import pyarrow as pa
121
+
122
+ df = pd.DataFrame({"a": [1, 2, 3],
123
+ "b": ["hello", "world", "!"]})
124
+ record_batch = pa.RecordBatch.from_pandas(df)
125
+
126
+ with pa.OSFile("/tmp/pandas.arrow", "wb") as sink:
127
+ schema = record_batch.schema
128
+ writer = pa.RecordBatchFileWriter(sink, schema)
129
+ writer.write_batch(record_batch)
130
+ writer.close()
131
+
132
+ = Arrow:Ruby
133
+
134
+ # coderay ruby
135
+ # RubyでArrow形式のpandasのデータを読み込み
136
+ require "arrow"
137
+
138
+ Input = Arrow::MemoryMappedInputStream
139
+ Input.open("/tmp/pandas.arrow") do |input|
140
+ reader = Arrow::RecordBatchFileReader.new(input)
141
+ reader.each do |record_batch|
142
+ puts("=" * 40)
143
+ puts(record_batch)
144
+ end
145
+ end
146
+
147
+ = Feather:R
148
+
149
+ # coderay R
150
+ # Rでデータ生成→Feather形式で書き込み
151
+ library("feather")
152
+
153
+ df = data.frame(a=c(1, 2, 3),
154
+ b=c(1.1, 2.2, 3.3))
155
+ write_feather(df, "/tmp/dataframe.feather")
156
+
157
+ = Feather:Ruby
158
+
159
+ # coderay ruby
160
+ # RubyでFeather形式のRのデータを読み込み
161
+ require "arrow"
162
+
163
+ Input = Arrow::MemoryMappedInputStream
164
+ Input.open("/tmp/dataframe.feather") do |input|
165
+ reader = Arrow::FeatherFileReader.new(input)
166
+ reader.columns.each do |column|
167
+ puts("#{column.name}: #{column.to_a.inspect}")
168
+ end
169
+ end
170
+
171
+ = Parquet:Python
172
+
173
+ # coderay python
174
+ # Pythonでデータ生成→Parquet形式で書き込み
175
+ import pandas as pd
176
+ import pyarrow as pa
177
+ import pyarrow.parquet as pq
178
+
179
+ df = pd.DataFrame({"a": [1, 2, 3],
180
+ "b": ["hello", "world", "!"]})
181
+ table = pa.Table.from_pandas(df)
182
+ pq.write_table(table, "/tmp/pandas.parquet")
183
+
184
+ = Parquet:Ruby
185
+
186
+ # coderay ruby
187
+ # RubyでParquet形式のデータを読み込み
188
+ require "arrow"
189
+ require "parquet"
190
+
191
+ path = "/tmp/pandas.parquet"
192
+ reader = Parquet::ArrowFileReader.new(path)
193
+ table = reader.read_table
194
+ table.each_column do |column|
195
+ puts("#{column.name}: #{column.to_a.inspect}")
196
+ end
197
+
198
+ = 対応データ形式まとめ
199
+
200
+ * Arrow形式
201
+ * 各種言語(('note:(これから広く使われているはず)'))
202
+ * Feather形式
203
+ * Python・R専用
204
+ * Parquet形式
205
+ * 各種言語(('note:(Hadoop界隈ですでに広く使われている)'))
206
+
207
+ = データ処理例
208
+
209
+ * Groongaでフィルター
210
+ * Groonga
211
+ * 全文検索エンジン
212
+ * カラムストアなので集計処理も得意
213
+ * Apache Arrow対応
214
+ * よくできたRubyバインディングあり
215
+
216
+ = Groonga:Ruby
217
+
218
+ # coderay ruby
219
+ # 空のテーブルにArrow形式のデータを読み込む
220
+ logs = Groonga::Array.create(name: "logs")
221
+ logs.load_arrow("/tmp/pandas.arrow")
222
+ logs.each {|record| p record.attributes}
223
+ # フィルター
224
+ filtered_logs = logs.select do |record|
225
+ record.b =~ "hello" # "hello"で全文検索
226
+ end
227
+ # フィルター結果をArrow形式で書き込み
228
+ filtered_logs.dump_arrow("/tmp/filtered.arrow",
229
+ column_names: ["a", "b"])
230
+
231
+ = Groonga:Python
232
+
233
+ # coderay python
234
+ # Arrow形式のGroongaでのフィルター結果を読み込む
235
+ import pyarrow as pa
236
+
237
+ with pa.OSFile("/tmp/filtered.arrow") as source:
238
+ writer = pa.RecordBatchFileReader(source)
239
+ print(writer.get_record_batch(0).to_pandas())
240
+
241
+ = Rubyでデータ処理(現状)
242
+
243
+ * 既存のCライブラリーを活用
244
+ * 速度がでるし機能もある
245
+ * CライブラリーをArrowに対応
246
+ * Arrow→Ruby→Cライブラリー\n
247
+ ↑から↓で高速化(('note:(オブジェクト生成は遅い)'))
248
+ * Arrow→Cライブラリー
249
+
250
+ = Rubyでデータ処理(案)
251
+
252
+ * Fluentdとか速くなりそう
253
+ * 途中でメッセージを参照しないなら
254
+ * MessagePackからArrowに変える
255
+ * Arrowのまま出力先へ送る
256
+ * 途中でRubyオブジェクトができない\n
257
+ (('note:シリアライズ・パースがなくなって速い!'))
258
+
259
+ = 多次元配列
260
+
261
+ * Arrowではオプション機能
262
+ * テンソルと呼んでいる\n
263
+ (('note:(traditional multidimensional array objectと説明)'))
264
+ * C++実装ではサポート
265
+ * バインディングでは使える
266
+ * Python・Ruby…では使える
267
+
268
+ = Tensor:Python
269
+
270
+ # coderay python
271
+ # NumPyでデータ生成→書き込み
272
+ import pyarrow as pa
273
+ import numpy as np
274
+
275
+ ndarray = np.random.randn(10, 6) # 10x6
276
+ print(ndarray)
277
+ tensor = pa.Tensor.from_numpy(ndarray)
278
+ with pa.OSFile("/tmp/tensor.arrow", "wb") as sink:
279
+ pa.write_tensor(tensor, sink)
280
+
281
+ = Tensor:Ruby
282
+
283
+ # coderay ruby
284
+ # Rubyで読み込み
285
+ require "arrow"
286
+
287
+ Input = Arrow::MemoryMappedInputStream
288
+ Input.open("/tmp/tensor.arrow") do |input|
289
+ tensor = input.read_tensor(0)
290
+ p tensor.shape # => [10, 6]
291
+ end
292
+
293
+ = Ruby:GSL
294
+
295
+ # coderay ruby
296
+ # GSLオブジェクトに変換
297
+ require "arrow"
298
+ require "arrow-gsl"
299
+ require "pp"
300
+
301
+ Input = Arrow::MemoryMappedInputStream
302
+ Input.open("/tmp/tensor.arrow") do |input|
303
+ tensor = input.read_tensor(0)
304
+ pp tensor.to_gsl
305
+ # tensor.to_gsl.to_arrow == tensor
306
+ end
307
+
308
+ = Ruby:NMatrix
309
+
310
+ # coderay ruby
311
+ # NMatrixオブジェクトに変換
312
+ require "arrow"
313
+ require "arrow-nmatrix"
314
+ require "pp"
315
+
316
+ Input = Arrow::MemoryMappedInputStream
317
+ Input.open("/tmp/tensor.arrow") do |input|
318
+ tensor = input.read_tensor(0)
319
+ pp tensor.to_nmatrix
320
+ # tensor.to_nmatrix.to_arrow == tensor
321
+ end
322
+
323
+ = Ruby:Numo::NArray
324
+
325
+ # coderay ruby
326
+ # Numo::NArrayオブジェクトに変換
327
+ require "arrow"
328
+ require "arrow-numo-narray"
329
+ require "pp"
330
+
331
+ Input = Arrow::MemoryMappedInputStream
332
+ Input.open("/tmp/tensor.arrow") do |input|
333
+ tensor = input.read_tensor(0)
334
+ pp tensor.to_narray
335
+ # tensor.to_narray.to_arrow == tensor
336
+ end
337
+
338
+ = ここまでのまとめ1
339
+
340
+ * Arrowが実現したい世界
341
+ * データ交換コストが低い世界
342
+ * 最適化実装を共有している世界
343
+
344
+ = ここまでのまとめ2
345
+
346
+ * RubyとArrowの今
347
+ * ArrowはRubyを公式サポート!
348
+ * Rubyの外の世界とデータ交換可能\n
349
+ (('note:(Arrow・Feather・Parquetをサポート)'))
350
+ * Rubyの各種ライブラリーとの\n
351
+ 相互変換が可能\n
352
+ (('note:(メモリーコピーぐらいのコストで)'))
353
+
354
+ = ArrowとRubyとこれから
355
+
356
+ * Arrow
357
+ * データフレーム処理の最適化実装
358
+ * マルチコア・GPU対応
359
+ * Ruby
360
+ * Red Data Toolsプロジェクト
361
+
362
+ = Red Data Tools
363
+
364
+ * Rubyでデータ処理したいなぁ!\n
365
+ の実現を目指すプロジェクト
366
+ * URL:
367
+ * https://github.io/red-data-tools
368
+ * https://red-data-tools.github.io
369
+ * https://gitter.im/red-data-tools
370
+
371
+ = 既存プロダクト
372
+
373
+ * Red Arrow(('note:(ArrowのRubyバインディング)'))
374
+ * Red Arrow XXX(('note:(ArrowとXXXの相互変換)'))
375
+ * Parquet GLib(('note:(ParquetのGLibバインディング)'))
376
+ * Red Parquet(('note:(ParquetのRubyバインディング)'))
377
+ * Jekyll Jupyter Notebook plugin(('note:(JekyllでJupyter Notebookを表示)'))
378
+
379
+ = ポリシー1
380
+
381
+ (('tag:center'))
382
+ Collaborate\n
383
+ over Ruby communities
384
+
385
+ (('tag:center'))
386
+ (('note:Ruby以外の人たちとも言語を超えて協力する'))\n
387
+ (('note:Apache Arrowがやっていることはまさにそう'))\n
388
+ (('note:もちろんRubyの人たちとも協力する'))
389
+
390
+ = ポリシー2
391
+
392
+ (('tag:center'))
393
+ Acting than blaming
394
+
395
+ (('tag:center'))
396
+ (('note:時間は嘆き・非難より手を動かすことに使う'))
397
+
398
+ = ポリシー3
399
+
400
+ (('tag:center'))
401
+ Continuous small works than\n
402
+ a temporary big work
403
+
404
+ (('tag:center'))
405
+ (('note:一時的にガッとやって終わりより'))\n
406
+ (('note:小さくても継続して活動する'))
407
+
408
+ = ポリシー4
409
+
410
+ (('tag:center'))
411
+ The current\n
412
+ lack of knowledge\n
413
+ isn't matter
414
+
415
+ (('tag:center'))
416
+ (('note:現時点で数学や統計学などの知識が足りなくても問題ない'))\n
417
+ (('note:既存の実装を使ったりそこから学んだりできるから'))
418
+
419
+ = ポリシー5
420
+
421
+ (('tag:center'))
422
+ Ignore blames from outsiders
423
+
424
+ (('tag:center'))
425
+ (('note:部外者の非難は気にしない'))\n
426
+ (('note:結果がでるまでグチグチ言われるはず :p'))
427
+
428
+ = ポリシー6
429
+
430
+ (('tag:center'))
431
+ Fun!\n
432
+ Because we use Ruby!
433
+
434
+ (('tag:center'))
435
+ (('note:Rubyを使うんだし楽しくやろう!'))
436
+
437
+ = Join us!
438
+
439
+ * Rubyでデータ処理したい人!
440
+ * ポリシーに同意できる人!
441
+ * URL:
442
+ * https://github.io/red-data-tools
443
+ * https://red-data-tools.github.io
444
+ * https://gitter.im/red-data-tools
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rroonga"
4
+
5
+ Groonga::Database.create(path: "/tmp/db")
6
+ logs = Groonga::Array.create(name: "logs")
7
+ logs.load_arrow("/tmp/pandas.arrow")
8
+ logs.each do |record|
9
+ p record.attributes
10
+ end
11
+ filtered_logs = logs.select do |record|
12
+ record.b =~ "hello"
13
+ end
14
+ filtered_logs.dump_arrow("/tmp/filtered.arrow",
15
+ column_names: ["a", "b"])
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "arrow"
4
+
5
+ Arrow::MemoryMappedInputStream.open("/tmp/dataframe.feather") do |input|
6
+ reader = Arrow::FeatherFileReader.new(input)
7
+ reader.columns.each do |column|
8
+ puts("#{column.name}: #{column.to_a.inspect}")
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env python
2
+
3
+ import pyarrow as pa
4
+
5
+ with pa.OSFile("/tmp/filtered.arrow") as source:
6
+ writer = pa.RecordBatchFileReader(source)
7
+ print(writer.get_record_batch(0).to_pandas())
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "arrow"
4
+
5
+ Arrow::MemoryMappedInputStream.open("/tmp/pandas.arrow") do |input|
6
+ reader = Arrow::FileReader.new(input)
7
+ reader.each do |record_batch|
8
+ puts("=" * 40)
9
+ puts(record_batch)
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "arrow"
4
+ require "parquet"
5
+
6
+ reader = Parquet::ArrowFileReader.new("/tmp/pandas.parquet")
7
+ table = reader.read_table
8
+ table.each_column do |column|
9
+ puts("#{column.name}: #{column.to_a.inspect}")
10
+ end
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "arrow"
4
+ require "arrow-numo-narray"
5
+ require "arrow-nmatrix"
6
+ require "arrow-gsl"
7
+
8
+ require "pp"
9
+
10
+ Arrow::MemoryMappedInputStream.open("/tmp/tensor.arrow") do |input|
11
+ tensor = input.read_tensor(0)
12
+ pp tensor.to_narray
13
+ pp tensor.to_nmatrix
14
+ pp tensor.to_gsl
15
+ end
@@ -0,0 +1,5 @@
1
+ library("feather")
2
+
3
+ df = data.frame(a=c(1, 2, 3),
4
+ b=c(1.1, 2.2, 3.3))
5
+ write_feather(df, "/tmp/dataframe.feather")
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env python
2
+
3
+ import pandas as pd
4
+ import pyarrow as pa
5
+
6
+ df = pd.DataFrame({"a": [1, 2, 3],
7
+ "b": ["hello", "world", "!"]})
8
+ record_batch = pa.RecordBatch.from_pandas(df)
9
+
10
+ with pa.OSFile("/tmp/pandas.arrow", "wb") as sink:
11
+ schema = record_batch.schema
12
+ writer = pa.RecordBatchFileWriter(sink, schema)
13
+ writer.write_batch(record_batch)
14
+ writer.close()
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env python
2
+
3
+ import pandas as pd
4
+ import pyarrow as pa
5
+ import pyarrow.parquet as pq
6
+
7
+ df = pd.DataFrame({"a": [1, 2, 3],
8
+ "b": ["hello", "world", "!"]})
9
+ table = pa.Table.from_pandas(df)
10
+ pq.write_table(table, "/tmp/pandas.parquet")
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env python
2
+
3
+ import pyarrow as pa
4
+ import numpy as np
5
+
6
+ ndarray = np.random.randn(10, 6)
7
+ print(ndarray)
8
+ tensor = pa.Tensor.from_numpy(ndarray)
9
+ with pa.OSFile("/tmp/tensor.arrow", "wb") as sink:
10
+ pa.write_tensor(tensor, sink)
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-kou-data-science-rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 2017.5.19.0
5
+ platform: ruby
6
+ authors:
7
+ - Kouhei Sutou
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rabbit-theme-clear-code
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Apache Arrowはデータ分析システム間でのデータ交換を効率化することを目的としたデータフォーマットです。pandasやApache
42
+ SparkやRなど主要なデータ分析システムはApache Arrowの対応を進めています。近い将来、データ分析システム間でのデータ交換はApache Arrowを使う状態になるでしょう。RubyもApache
43
+ Arrowに対応することで既存のデータ分析システムとデータ交換できるようになります。これで、Rubyもデータ分析システムの一部でデータ処理をできるようになります!
44
+ email:
45
+ - kou@clear-code.com
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - ".rabbit"
51
+ - README.rd
52
+ - Rakefile
53
+ - config.yaml
54
+ - pdf/data-science-rb-ruby-with-apache-arrow-joins-data-processing-languages.pdf
55
+ - ruby-with-apache-arrow-joins-data-processing-languages.rab
56
+ - sample/filter-groonga.rb
57
+ - sample/read-feather.rb
58
+ - sample/read-groonga.py
59
+ - sample/read-pandas.rb
60
+ - sample/read-parquet.rb
61
+ - sample/read-tensor.rb
62
+ - sample/write-feather.R
63
+ - sample/write-pandas.py
64
+ - sample/write-parquet.py
65
+ - sample/write-tensor.py
66
+ homepage: http://slide.rabbit-shocker.org/authors/kou/data-science-rb/
67
+ licenses:
68
+ - CC-BY-SA-4.0
69
+ metadata: {}
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 2.5.2
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: RubyもApache Arrowでデータ処理言語の仲間入り
90
+ test_files: []