daru 0.1.3.1 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.rspec +2 -1
- data/.rspec_formatter.rb +33 -0
- data/.rubocop.yml +26 -2
- data/History.md +38 -0
- data/README.md +22 -13
- data/Rakefile +50 -2
- data/benchmarks/csv_reading.rb +22 -0
- data/daru.gemspec +9 -2
- data/lib/daru.rb +36 -4
- data/lib/daru/accessors/array_wrapper.rb +6 -1
- data/lib/daru/accessors/dataframe_by_row.rb +10 -2
- data/lib/daru/accessors/gsl_wrapper.rb +1 -3
- data/lib/daru/accessors/nmatrix_wrapper.rb +9 -0
- data/lib/daru/category.rb +935 -0
- data/lib/daru/core/group_by.rb +29 -38
- data/lib/daru/core/merge.rb +186 -145
- data/lib/daru/core/query.rb +22 -11
- data/lib/daru/dataframe.rb +976 -885
- data/lib/daru/date_time/index.rb +166 -166
- data/lib/daru/date_time/offsets.rb +66 -77
- data/lib/daru/formatters/table.rb +54 -0
- data/lib/daru/helpers/array.rb +40 -0
- data/lib/daru/index.rb +476 -73
- data/lib/daru/io/io.rb +66 -45
- data/lib/daru/io/sql_data_source.rb +33 -62
- data/lib/daru/iruby/helpers.rb +38 -0
- data/lib/daru/iruby/templates/dataframe.html.erb +52 -0
- data/lib/daru/iruby/templates/dataframe_mi.html.erb +58 -0
- data/lib/daru/iruby/templates/multi_index.html.erb +12 -0
- data/lib/daru/iruby/templates/vector.html.erb +27 -0
- data/lib/daru/iruby/templates/vector_mi.html.erb +36 -0
- data/lib/daru/maths/arithmetic/dataframe.rb +16 -18
- data/lib/daru/maths/arithmetic/vector.rb +4 -6
- data/lib/daru/maths/statistics/dataframe.rb +8 -15
- data/lib/daru/maths/statistics/vector.rb +120 -98
- data/lib/daru/monkeys.rb +12 -40
- data/lib/daru/plotting/gruff.rb +3 -0
- data/lib/daru/plotting/gruff/category.rb +49 -0
- data/lib/daru/plotting/gruff/dataframe.rb +91 -0
- data/lib/daru/plotting/gruff/vector.rb +57 -0
- data/lib/daru/plotting/nyaplot.rb +3 -0
- data/lib/daru/plotting/nyaplot/category.rb +34 -0
- data/lib/daru/plotting/nyaplot/dataframe.rb +187 -0
- data/lib/daru/plotting/nyaplot/vector.rb +46 -0
- data/lib/daru/vector.rb +694 -421
- data/lib/daru/version.rb +1 -1
- data/profile/_base.rb +23 -0
- data/profile/df_to_a.rb +10 -0
- data/profile/filter.rb +13 -0
- data/profile/joining.rb +13 -0
- data/profile/sorting.rb +12 -0
- data/profile/vector_each_with_index.rb +9 -0
- data/spec/accessors/wrappers_spec.rb +2 -4
- data/spec/categorical_spec.rb +1734 -0
- data/spec/core/group_by_spec.rb +52 -2
- data/spec/core/merge_spec.rb +63 -2
- data/spec/core/query_spec.rb +236 -80
- data/spec/dataframe_spec.rb +1373 -79
- data/spec/date_time/data_spec.rb +3 -5
- data/spec/date_time/index_spec.rb +154 -17
- data/spec/date_time/offsets_spec.rb +3 -4
- data/spec/fixtures/empties.dat +2 -0
- data/spec/fixtures/strings.dat +2 -0
- data/spec/formatters/table_formatter_spec.rb +99 -0
- data/spec/helpers_spec.rb +8 -0
- data/spec/index/categorical_index_spec.rb +168 -0
- data/spec/index/index_spec.rb +283 -0
- data/spec/index/multi_index_spec.rb +570 -0
- data/spec/io/io_spec.rb +31 -4
- data/spec/io/sql_data_source_spec.rb +0 -1
- data/spec/iruby/dataframe_spec.rb +172 -0
- data/spec/iruby/helpers_spec.rb +49 -0
- data/spec/iruby/multi_index_spec.rb +37 -0
- data/spec/iruby/vector_spec.rb +107 -0
- data/spec/math/arithmetic/dataframe_spec.rb +71 -13
- data/spec/math/arithmetic/vector_spec.rb +8 -10
- data/spec/math/statistics/dataframe_spec.rb +3 -5
- data/spec/math/statistics/vector_spec.rb +45 -55
- data/spec/monkeys_spec.rb +32 -9
- data/spec/plotting/dataframe_spec.rb +386 -0
- data/spec/plotting/vector_spec.rb +230 -0
- data/spec/shared/vector_display_spec.rb +215 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/vector_spec.rb +905 -138
- metadata +143 -11
- data/.rubocop_todo.yml +0 -44
- data/lib/daru/plotting/dataframe.rb +0 -104
- data/lib/daru/plotting/vector.rb +0 -38
- data/spec/daru_spec.rb +0 -58
- data/spec/index_spec.rb +0 -375
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4dd52552d2407c0d16e3aee91f9307366d3d1a02
|
4
|
+
data.tar.gz: 2b07b71542fd4b30f75be8d6daecb97dde4954d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d747ea4ac8387f54dab130fb5e2dcd7119327dc5b2395706c9f434f438c245194527eef3b7139c8b7ecb8d9fa2a108b93dae83b1f03bb0048cabe4c205cce06
|
7
|
+
data.tar.gz: 49ffad5ced3bd2386edce4c9fc1278c679f923de6ccb29823147fd83a351d26dcd5ac638b3a93bebfc26cb49dc2c3c16c98c6e2a89a515bc25feb90d9cba7a24
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
--
|
1
|
+
--require ./spec/spec_helper.rb
|
2
|
+
--color
|
data/.rspec_formatter.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
RSpec::Support.require_rspec_core 'formatters/base_text_formatter'
|
2
|
+
|
3
|
+
class SimpleFormatter < RSpec::Core::Formatters::BaseTextFormatter
|
4
|
+
RSpec::Core::Formatters.register self,
|
5
|
+
:example_passed, :example_pending, :example_failed, :dump_pending, :dump_failures, :dump_summary
|
6
|
+
|
7
|
+
def example_passed(message)
|
8
|
+
# Do nothing
|
9
|
+
end
|
10
|
+
|
11
|
+
def example_pending(message)
|
12
|
+
# Do nothing
|
13
|
+
end
|
14
|
+
|
15
|
+
def example_failed(message)
|
16
|
+
# Do nothing
|
17
|
+
end
|
18
|
+
|
19
|
+
def dump_pending(message)
|
20
|
+
# Do nothing
|
21
|
+
end
|
22
|
+
|
23
|
+
def dump_failures(message)
|
24
|
+
end
|
25
|
+
|
26
|
+
def dump_summary(message)
|
27
|
+
colorizer = ::RSpec::Core::Formatters::ConsoleCodes
|
28
|
+
|
29
|
+
output.puts "\nFinished in #{message.formatted_duration} " \
|
30
|
+
"(files took #{message.formatted_load_time} to load)\n" \
|
31
|
+
"#{message.colorized_totals_line(colorizer)}\n"
|
32
|
+
end
|
33
|
+
end
|
data/.rubocop.yml
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
-
inherit_from: .rubocop_todo.yml
|
2
|
-
|
3
1
|
AllCops:
|
4
2
|
Include:
|
5
3
|
- 'lib/**/*'
|
6
4
|
Exclude:
|
5
|
+
- '**/*.erb'
|
7
6
|
- 'spec/*'
|
8
7
|
- 'spec/**/*'
|
9
8
|
- 'vendor/**/*'
|
10
9
|
- 'benchmarks/*'
|
10
|
+
- 'profile/*'
|
11
11
|
DisplayCopNames: true
|
12
|
+
TargetRubyVersion: 2.0
|
12
13
|
|
13
14
|
# Preferred codebase style ---------------------------------------------
|
14
15
|
Style/ExtraSpacing:
|
@@ -35,6 +36,15 @@ Style/AlignParameters:
|
|
35
36
|
Style/EmptyElse:
|
36
37
|
EnforcedStyle: empty
|
37
38
|
|
39
|
+
Metrics/LineLength:
|
40
|
+
Max: 120
|
41
|
+
|
42
|
+
Metrics/ModuleLength:
|
43
|
+
Max: 200
|
44
|
+
|
45
|
+
Metrics/ClassLength:
|
46
|
+
Max: 200
|
47
|
+
|
38
48
|
Style/ParallelAssignment:
|
39
49
|
Enabled: false
|
40
50
|
|
@@ -56,10 +66,24 @@ Style/SpaceAroundOperators:
|
|
56
66
|
Style/EmptyCaseCondition:
|
57
67
|
Enabled: false
|
58
68
|
|
69
|
+
Style/MultilineBlockChain:
|
70
|
+
Enabled: false
|
71
|
+
|
59
72
|
# Neither of prefered styles are good enough :(
|
60
73
|
Style/BlockDelimiters:
|
61
74
|
Enabled: false
|
62
75
|
|
76
|
+
# Current preferred metrics --------------------------------------------
|
77
|
+
# Better values are encouraged, but not required.
|
78
|
+
Metrics/AbcSize:
|
79
|
+
Max: 20
|
80
|
+
|
81
|
+
Metrics/MethodLength:
|
82
|
+
Max: 15
|
83
|
+
|
84
|
+
Metrics/CyclomaticComplexity:
|
85
|
+
Max: 7
|
86
|
+
|
63
87
|
# TODO -----------------------------------------------------------------
|
64
88
|
|
65
89
|
Style/Documentation:
|
data/History.md
CHANGED
@@ -1,3 +1,41 @@
|
|
1
|
+
# 0.1.4 ()
|
2
|
+
|
3
|
+
* Major Enhancements
|
4
|
+
- Added new dependency 'backports' to support #to_h in Ruby 2.0. (@lokeshh)
|
5
|
+
- Greatly improve code test coverage. (@zverok)
|
6
|
+
- Greatly refactor code and make some methods faster, smaller and more readable. (@zverok)
|
7
|
+
- Add support for categorical data with different coding schemes and several methods for in built categorical data support. Add a new index 'Daru::CategoricalIndex'. (@lokeshh)
|
8
|
+
- Removed runtime dependencies on 'spreadsheet' and 'reportbuilder'. They are now loaded if the libraries are already present in the system. (@v0dro)
|
9
|
+
|
10
|
+
* Minor enhancements
|
11
|
+
- Update SqlDataSource to improve the performance of DataFrame.from_sql. (@dansbits)
|
12
|
+
- Remove default DataFrame name. Now DataFrames will no name by default. (@zverok)
|
13
|
+
- Better looking #inspect for Vector and DataFrame. (@zverok)
|
14
|
+
- Better looking #to_html for Vector and DataFrame. Also better #to_html for MultiIndex. (@zverok)
|
15
|
+
- Remove monkey patching on Array and add those methods to Daru::ArrayHelper. (@zverok)
|
16
|
+
- Add a rake task for running RSpec for every Ruby version with a single command. (@lokeshh)
|
17
|
+
- Add rake tasks for easily setting up and testing test harness. (@lokeshh)
|
18
|
+
- Added `Daru::Vector#to_nmatrix`.
|
19
|
+
- Remove the 'metadata' feature introduced in v0.1.3. (@gnilrets)
|
20
|
+
- Added `DataFrame#to_df` and `Vector#to_df`. (@gnilrets)
|
21
|
+
|
22
|
+
* Fixes
|
23
|
+
- DataFrame#clone preserves order and name. (@wlevine)
|
24
|
+
- Vector#where preserves name. (@v0dro)
|
25
|
+
- Fix bug in DataFrame#pivot_table that prevented anything other than Array or Symbol to be specified in the :values option. (@v0dro)
|
26
|
+
- Daru::Index#each returns an Enumerator if block is not specified. (@v0dro)
|
27
|
+
- Fixes bug where joins failed when nils were in join keys. (@gnilrets)
|
28
|
+
- DataFrame#merge now preserves the vector name type when merging. (@lokeshh)
|
29
|
+
|
30
|
+
* Deprecations
|
31
|
+
- Remove methods DataFrame#vector and DataFrame#column. (@zverok)
|
32
|
+
- Remove the missing_values feature of daru. The only values that are now treated as 'missing' are `nil` and `Float::NAN`. (@lokeshh)
|
33
|
+
|
34
|
+
# 0.1.3.1 (12 May 2016)
|
35
|
+
|
36
|
+
* Fixes
|
37
|
+
- Fixed small error with usage of newly introduced #each_with_object (@v0dro).
|
38
|
+
|
1
39
|
# 0.1.3 (May 2016)
|
2
40
|
|
3
41
|
* Enhancements
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/daru.svg)](http://badge.fury.io/rb/daru)
|
4
4
|
[![Build Status](https://travis-ci.org/v0dro/daru.svg)](https://travis-ci.org/v0dro/daru)
|
5
|
+
[![Gitter](https://badges.gitter.im/v0dro/daru.svg)](https://gitter.im/v0dro/daru?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
5
6
|
|
6
7
|
## Introduction
|
7
8
|
|
@@ -33,20 +34,33 @@ daru makes it easy and intuitive to process data predominantly through 2 data st
|
|
33
34
|
* [Basic Creation of Vectors and DataFrame](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Creation%20of%20Vector%20and%20DataFrame.ipynb)
|
34
35
|
* [Detailed Usage of Daru::Vector](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Usage%20of%20Vector.ipynb)
|
35
36
|
* [Detailed Usage of Daru::DataFrame](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Usage%20of%20DataFrame.ipynb)
|
36
|
-
* [Visualizing Data With Daru::DataFrame](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Visualization/Visualizing%20data%20with%20daru%20DataFrame.ipynb)
|
37
37
|
* [Searching and combining data in daru](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Searching%20and%20Combining%20Data.ipynb)
|
38
38
|
* [Grouping, Splitting and Pivoting Data](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Grouping%2C%20Splitting%20and%20Pivoting.ipynb)
|
39
|
+
* [Usage of Catgorical Data](http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Categorical%20Data/Categorical%20Data.ipynb)
|
40
|
+
|
41
|
+
#### Visualization
|
42
|
+
* [Visualizing Data With Daru::DataFrame](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Visualization/Visualizing%20data%20with%20daru%20DataFrame.ipynb)
|
43
|
+
* [Plotting using Nyaplot](http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Plotting/Visualization.ipynb)
|
44
|
+
* [Plotting using GnuplotRB](http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Plotting/Gnuplotrb.ipynb)
|
45
|
+
* [Vector plotting with Gruff](http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Plotting/Gruff%20Vector.ipynb)
|
46
|
+
* [DataFrame plotting with Gruff](http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Plotting/Gruff%20DataFrame.ipynb)
|
39
47
|
|
40
48
|
#### Notebooks on Time series
|
41
49
|
|
42
50
|
* [Basic Time Series](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Basic%20Time%20Series.ipynb)
|
43
51
|
* [Time Series Analysis and Plotting](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Time%20Series%20Functions.ipynb)
|
44
52
|
|
53
|
+
#### Notebooks on Indexing
|
54
|
+
* [Indexing in Vector](http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Categorical%20Data/Indexing%20in%20Vector.ipynb)
|
55
|
+
* [Indexing in DataFrame](http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Categorical%20Data/Indexing%20in%20DataFrame.ipynb)
|
56
|
+
|
45
57
|
### Case Studies
|
46
58
|
|
47
59
|
* [Logistic Regression Analysis with daru and statsample-glm](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Logistic%20Regression%20with%20daru%20and%20statsample-glm.ipynb)
|
48
60
|
* [Finding and Plotting most heard artists from a Last.fm dataset](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Finding%20and%20plotting%20the%20most%20heard%20artists%20on%20last%20fm.ipynb)
|
49
61
|
* [Analyzing baby names with daru](http://nbviewer.ipython.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Analyzing%20baby%20names/Use%20Case%20-%20Daru%20for%20analyzing%20baby%20names%20data.ipynb)
|
62
|
+
* [Example usage of Categorical Data](http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Categorical%20Data/examples/%5BExample%5D%20Categorical%20Data.ipynb)
|
63
|
+
* [Example usage of Categorical Index](http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/Data%20Analysis/Categorical%20Data/examples/%5BExample%5D%20Categorical%20Index.ipynb)
|
50
64
|
|
51
65
|
## Blog Posts
|
52
66
|
|
@@ -59,6 +73,12 @@ daru makes it easy and intuitive to process data predominantly through 2 data st
|
|
59
73
|
* [Analysis of Time Series in daru](http://v0dro.github.io/blog/2015/07/31/analysis-of-time-series-in-daru/)
|
60
74
|
* [Date Offsets in Daru](http://v0dro.github.io/blog/2015/07/27/date-offsets-in-daru/)
|
61
75
|
|
76
|
+
### Categorical Data
|
77
|
+
|
78
|
+
* [Categorical Index](http://lokeshh.github.io/blog/2016/06/14/categorical-index/)
|
79
|
+
* [Categorical Data](http://lokeshh.github.io/blog/2016/06/21/categorical-data/)
|
80
|
+
* [Visualization with Categorical Data](http://lokeshh.github.io/blog/2016/07/02/visualization/)
|
81
|
+
|
62
82
|
## Basic Usage
|
63
83
|
|
64
84
|
daru exposes two major data structures: `DataFrame` and `Vector`. The Vector is a basic 1-D structure corresponding to a labelled Array, while the `DataFrame` - daru's primary data structure - is 2-D spreadsheet-like structure for manipulating and storing data sets.
|
@@ -168,18 +188,6 @@ In addition to nyaplot, daru also supports plotting out of the box with [gnuplot
|
|
168
188
|
|
169
189
|
Docs can be found [here](https://rubygems.org/gems/daru).
|
170
190
|
|
171
|
-
## Roadmap
|
172
|
-
|
173
|
-
* Enable creation of DataFrame by only specifying an NMatrix/MDArray in initialize. Vector naming happens automatically (alphabetic) or is specified in an Array.
|
174
|
-
* Assignment of a column to a single number should set the entire column to that number.
|
175
|
-
* Multiple column assignment with []=
|
176
|
-
* Multiple value assignment for vectors with []=.
|
177
|
-
* #find\_max function which will evaluate a block and return the row for the value of the block is max.
|
178
|
-
* Sort by index.
|
179
|
-
* Statistics on DataFrame over rows.
|
180
|
-
* Calculate percentage change.
|
181
|
-
* Have some sample data sets for users to play around with. Should be able to load these from the code itself.
|
182
|
-
|
183
191
|
## Contributing
|
184
192
|
|
185
193
|
Pick a feature from the Roadmap or the issue tracker or think of your own and send me a Pull Request!
|
@@ -188,6 +196,7 @@ For details see [CONTRIBUTING](https://github.com/v0dro/daru/blob/master/CONTRIB
|
|
188
196
|
|
189
197
|
## Acknowledgements
|
190
198
|
|
199
|
+
* Google and the Ruby Science Foundation for the Google Summer of Code 2016 grant for speed enhancements and implementation of support for categorical data. Special thanks to [@lokeshh](https://github.com/lokeshh), [@zverok](https://github.com/zverok) and [@agisga](https://github.com/agisga) for their efforts.
|
191
200
|
* Google and the Ruby Science Foundation for the Google Summer of Code 2015 grant for further developing daru and integrating it with other ruby gems.
|
192
201
|
* Thank you [last.fm](http://www.last.fm/) for making user data accessible to the public.
|
193
202
|
|
data/Rakefile
CHANGED
@@ -2,7 +2,50 @@ require 'rspec/core/rake_task'
|
|
2
2
|
require 'bundler/gem_tasks'
|
3
3
|
|
4
4
|
lib_folder = File.expand_path("../lib", __FILE__)
|
5
|
-
|
5
|
+
|
6
|
+
RUBIES = ['ruby-2.0.0-p643', 'ruby-2.1.5', 'ruby-2.2.1', 'ruby-2.3.0']
|
7
|
+
|
8
|
+
def spec_run_all
|
9
|
+
RUBIES.each do |ruby_v|
|
10
|
+
puts "\n Using #{ruby_v}\n\n"
|
11
|
+
command = "$rvm_path/wrappers/#{ruby_v}/rake summary"
|
12
|
+
run command
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
task :spec do
|
17
|
+
case ARGV[1]
|
18
|
+
when 'setup'
|
19
|
+
spec_setup
|
20
|
+
when 'run'
|
21
|
+
spec_run_all if ARGV[2] == 'all'
|
22
|
+
when nil
|
23
|
+
run 'rspec spec'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Stubs
|
28
|
+
task :setup
|
29
|
+
task :run
|
30
|
+
task :all
|
31
|
+
|
32
|
+
def spec_setup
|
33
|
+
RUBIES.each do |ruby_v|
|
34
|
+
puts "Installing #{ruby_v}..."
|
35
|
+
run "rvm install #{ruby_v}"
|
36
|
+
path = "$rvm_path/wrappers/#{ruby_v}"
|
37
|
+
run "#{path}/gem install bundler"
|
38
|
+
run "#{path}/bundle install"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
#task all: [:cop, :run_all]
|
43
|
+
|
44
|
+
task :summary do
|
45
|
+
run 'rspec spec/ -r ./.rspec_formatter.rb -f SimpleFormatter' rescue nil
|
46
|
+
end
|
47
|
+
|
48
|
+
#RSpec::Core::RakeTask.new(:spec)
|
6
49
|
|
7
50
|
task :default => :spec
|
8
51
|
|
@@ -11,6 +54,10 @@ task :console do |task|
|
|
11
54
|
run *cmd
|
12
55
|
end
|
13
56
|
|
57
|
+
task :cop do |task|
|
58
|
+
run 'rubocop' rescue nil
|
59
|
+
end
|
60
|
+
|
14
61
|
task :pry do |task|
|
15
62
|
cmd = [ 'pry', "-r '#{lib_folder}/daru.rb'" ]
|
16
63
|
run *cmd
|
@@ -18,4 +65,5 @@ end
|
|
18
65
|
|
19
66
|
def run *cmd
|
20
67
|
sh(cmd.join(" "))
|
21
|
-
end
|
68
|
+
end
|
69
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Date - 28 june 2016. daru version - 0.1.3.1
|
2
|
+
# Compare speed of Ruby stdlib CSV and DataFrame.from_csv.
|
3
|
+
|
4
|
+
require 'benchmark'
|
5
|
+
require 'csv'
|
6
|
+
require 'daru'
|
7
|
+
|
8
|
+
Benchmark.bm do |x|
|
9
|
+
x.report("Ruby CSV") do
|
10
|
+
CSV.read("TradeoffData.csv")
|
11
|
+
end
|
12
|
+
|
13
|
+
x.report("DataFrame.from_csv") do
|
14
|
+
Daru::DataFrame.from_csv("TradeoffData.csv")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# FIXME: Improve this. It's 4 times slower than Ruby CSV reading!!
|
19
|
+
|
20
|
+
# user system total real
|
21
|
+
# Ruby CSV 0.010000 0.000000 0.010000 ( 0.002385)
|
22
|
+
# DataFrame.from_csv 0.000000 0.000000 0.000000 ( 0.008225)
|
data/daru.gemspec
CHANGED
@@ -49,15 +49,18 @@ Cheers!
|
|
49
49
|
*************************************************************************
|
50
50
|
EOF
|
51
51
|
|
52
|
-
spec.add_runtime_dependency 'reportbuilder', '~> 1.4'
|
53
|
-
spec.add_runtime_dependency 'spreadsheet', '~> 1.1.1'
|
54
52
|
|
53
|
+
spec.add_runtime_dependency 'backports'
|
54
|
+
|
55
|
+
spec.add_development_dependency 'reportbuilder', '~> 1.4'
|
56
|
+
spec.add_development_dependency 'spreadsheet', '~> 1.1.1'
|
55
57
|
spec.add_development_dependency 'bundler', '~> 1.10'
|
56
58
|
spec.add_development_dependency 'rake', '~>10.5'
|
57
59
|
spec.add_development_dependency 'pry', '~> 0.10'
|
58
60
|
spec.add_development_dependency 'pry-byebug'
|
59
61
|
spec.add_development_dependency 'rserve-client', '~> 0.3'
|
60
62
|
spec.add_development_dependency 'rspec', '~> 3.4'
|
63
|
+
spec.add_development_dependency 'rspec-its'
|
61
64
|
spec.add_development_dependency 'awesome_print'
|
62
65
|
spec.add_development_dependency 'nyaplot', '~> 0.1.5'
|
63
66
|
spec.add_development_dependency 'nmatrix', '~> 0.2.1'
|
@@ -68,4 +71,8 @@ EOF
|
|
68
71
|
spec.add_development_dependency 'activerecord', '~> 4.0'
|
69
72
|
spec.add_development_dependency 'sqlite3'
|
70
73
|
spec.add_development_dependency 'rubocop', '>= 0.40.0'
|
74
|
+
spec.add_development_dependency 'ruby-prof'
|
75
|
+
spec.add_development_dependency 'simplecov'
|
76
|
+
spec.add_development_dependency 'nokogiri'
|
77
|
+
spec.add_development_dependency 'gruff'
|
71
78
|
end
|
data/lib/daru.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# :nocov:
|
1
2
|
def jruby?
|
2
3
|
RUBY_ENGINE == 'jruby'
|
3
4
|
end
|
5
|
+
# :nocov:
|
4
6
|
|
5
7
|
module Daru
|
6
8
|
DAYS_OF_WEEK = {
|
@@ -28,15 +30,20 @@ module Daru
|
|
28
30
|
12 => 31
|
29
31
|
}.freeze
|
30
32
|
|
33
|
+
MISSING_VALUES = [nil, Float::NAN].freeze
|
34
|
+
|
31
35
|
@lazy_update = false
|
32
36
|
|
33
37
|
SPLIT_TOKEN = ','.freeze
|
34
38
|
|
39
|
+
@plotting_library = :nyaplot
|
40
|
+
|
35
41
|
class << self
|
36
42
|
# A variable which will set whether Vector metadata is updated immediately or lazily.
|
37
43
|
# Call the #update method every time a values are set or removed in order to update
|
38
44
|
# metadata like positions of missing values.
|
39
45
|
attr_accessor :lazy_update
|
46
|
+
attr_reader :plotting_library
|
40
47
|
|
41
48
|
def create_has_library(library)
|
42
49
|
lib_underscore = library.to_s.tr('-', '_')
|
@@ -48,31 +55,54 @@ module Daru
|
|
48
55
|
require library.to_s
|
49
56
|
class_variable_set(cv, true)
|
50
57
|
rescue LoadError
|
58
|
+
# :nocov:
|
51
59
|
class_variable_set(cv, false)
|
60
|
+
# :nocov:
|
52
61
|
end
|
53
62
|
end
|
54
63
|
class_variable_get(cv)
|
55
64
|
end
|
56
65
|
end
|
66
|
+
|
67
|
+
def plotting_library= lib
|
68
|
+
case lib
|
69
|
+
when :gruff, :nyaplot
|
70
|
+
@plotting_library = lib
|
71
|
+
else
|
72
|
+
raise ArgumentError, "Unsupported library #{lib}"
|
73
|
+
end
|
74
|
+
end
|
57
75
|
end
|
58
76
|
|
59
77
|
create_has_library :gsl
|
60
78
|
create_has_library :nmatrix
|
61
79
|
create_has_library :nyaplot
|
80
|
+
create_has_library :gruff
|
62
81
|
end
|
63
82
|
|
64
|
-
|
65
|
-
|
83
|
+
[['reportbuilder', '~>1.4'], ['spreadsheet', '~>1.1.1']].each do |lib|
|
84
|
+
begin
|
85
|
+
gem lib[0], lib[1]
|
86
|
+
require lib[0]
|
87
|
+
rescue LoadError
|
88
|
+
STDERR.puts "\nInstall the #{lib[0]} gem version #{lib[1]} for using"\
|
89
|
+
" #{lib[0]} functions."
|
90
|
+
end
|
91
|
+
end
|
66
92
|
|
93
|
+
autoload :CSV, 'csv'
|
67
94
|
require 'matrix'
|
68
|
-
require 'securerandom'
|
69
|
-
require 'reportbuilder'
|
70
95
|
|
71
96
|
require 'daru/version.rb'
|
97
|
+
|
98
|
+
require 'daru/helpers/array.rb'
|
72
99
|
require 'daru/index.rb'
|
73
100
|
require 'daru/vector.rb'
|
74
101
|
require 'daru/dataframe.rb'
|
75
102
|
require 'daru/monkeys.rb'
|
103
|
+
require 'daru/formatters/table'
|
104
|
+
require 'daru/iruby/helpers'
|
105
|
+
require 'daru/exceptions.rb'
|
76
106
|
|
77
107
|
require 'daru/core/group_by.rb'
|
78
108
|
require 'daru/core/query.rb'
|
@@ -80,3 +110,5 @@ require 'daru/core/merge.rb'
|
|
80
110
|
|
81
111
|
require 'daru/date_time/offsets.rb'
|
82
112
|
require 'daru/date_time/index.rb'
|
113
|
+
|
114
|
+
require 'backports'
|