githubstats 0.1.7 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 19948dcd258e9e6fe2c2dd1107f9865729580358
4
- data.tar.gz: 8641305345c72fc7d9eb40bee86526a0879d1b93
3
+ metadata.gz: a41f496b849808b8b3914d30dfdcc9573aa874d4
4
+ data.tar.gz: 494012cdbff7ae1ca2fd03f0e8b6e67b395f7dd4
5
5
  SHA512:
6
- metadata.gz: 1e090690830fff33cf761ac7c029fec813e4db023c3feb01e7f82a3a442527c17a09f9c8bd6893de0a4f882f1239442558018d19910b2eb76759a776d1383d46
7
- data.tar.gz: b376c8553ea90afb5cb5374f8b4e702554d3ae165fe5d32b7fbb37a140b28b16859eb8f97c173e3185a3b18c6ccf3bf51fd45423362d0c2e2705996c824521ab
6
+ metadata.gz: b96e26ed60dd2774323870b0027c59a3801402b21653939f8fdb1c73081d1290c3291897b5a1ca790b16369a710d0319609ba05ee0c78ef8dbfbcbab9ea1d8bf
7
+ data.tar.gz: e22c680b4814cf2f6acf8b506df5af9c5372adaa1840647a55e0dcca31e644a46ce15a7bf2588a4c51f04747c104b9bc7b43dabd72506e3b070e20489c26c2f5
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- githubstats (0.1.7)
4
+ githubstats (0.2.3)
5
+ basiccache (< 2)
5
6
  curb
6
7
  json
7
8
 
@@ -9,6 +10,7 @@ GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
12
  ast (1.1.0)
13
+ basiccache (0.0.25)
12
14
  coveralls (0.7.0)
13
15
  multi_json (~> 1.3)
14
16
  rest-client
@@ -17,7 +19,7 @@ GEM
17
19
  thor
18
20
  curb (0.8.5)
19
21
  diff-lcs (1.2.5)
20
- docile (1.1.0)
22
+ docile (1.1.1)
21
23
  fuubar (1.2.1)
22
24
  rspec (~> 2.0)
23
25
  rspec-instafail (~> 0.2.0)
@@ -26,7 +28,7 @@ GEM
26
28
  json (1.8.1)
27
29
  mime-types (2.0)
28
30
  multi_json (1.8.2)
29
- parser (2.1.0.pre1)
31
+ parser (2.1.0.pre2)
30
32
  ast (~> 1.1)
31
33
  slop (~> 3.4, >= 3.4.5)
32
34
  powerpack (0.0.9)
@@ -57,6 +59,7 @@ GEM
57
59
  term-ansicolor (1.2.2)
58
60
  tins (~> 0.8)
59
61
  thor (0.18.1)
62
+ timecop (0.6.3)
60
63
  tins (0.13.1)
61
64
  travis-lint (1.7.0)
62
65
  hashr (~> 0.0.22)
@@ -72,4 +75,5 @@ DEPENDENCIES
72
75
  rake
73
76
  rspec
74
77
  rubocop
78
+ timecop
75
79
  travis-lint
data/README.md CHANGED
@@ -3,7 +3,7 @@ GithubStats
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/githubstats.png)](http://badge.fury.io/rb/githubstats)
5
5
  [![Dependency Status](https://gemnasium.com/akerl/githubstats.png)](https://gemnasium.com/akerl/githubstats)
6
- [![Code Climate](https://codeclimate.com/github/akerl/basiccache.png)](https://codeclimate.com/github/akerl/githubstats)
6
+ [![Code Climate](https://codeclimate.com/github/akerl/githubstats.png)](https://codeclimate.com/github/akerl/githubstats)
7
7
  [![Coverage Status](https://coveralls.io/repos/akerl/githubstats/badge.png?branch=master)](https://coveralls.io/r/akerl/githubstats?branch=master)
8
8
  [![Build Status](https://travis-ci.org/akerl/githubstats.png?branch=master)](https://travis-ci.org/akerl/githubstats)
9
9
 
data/bin/githubstats CHANGED
@@ -2,16 +2,14 @@
2
2
 
3
3
  require 'githubstats'
4
4
 
5
- contrib = GithubStats.new ARGV.first
5
+ user = GithubStats.new ARGV.first
6
6
 
7
- puts "Contribution data for #{contrib.user}:
8
- Today's score: #{contrib.today}
9
- Current streak: #{contrib.streak.length}
10
- Longest streak: #{contrib.longest_streak.length}
11
- High score: #{contrib.max.score} on #{contrib.max.date}
12
- Quartile boundaries: #{contrib.quartile_boundaries(github = false).inspect}
13
- Github-adjusted boundaries: #{contrib.quartile_boundaries(github = true).inspect}"
7
+ puts "Contribution data for #{user.name}:
8
+ Today's score: #{user.today}
9
+ Current streak: #{user.streak.length}
10
+ Longest streak: #{user.longest_streak.length}
11
+ High score: #{user.max.score} on #{user.max.date}
12
+ Quartile boundaries: #{user.quartile_boundaries.inspect}"
14
13
 
15
14
  # Uses https://github.com/holman/spark
16
- system('spark', *contrib.data.pop(60).map { |point| point.score.to_s })
17
-
15
+ system('spark', *user.raw.pop(60).map { |point| point.score.to_s })
data/githubstats.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'githubstats'
3
- s.version = '0.1.7'
3
+ s.version = '0.2.3'
4
4
  s.date = Time.now.strftime("%Y-%m-%d")
5
5
 
6
6
  s.summary = 'Present Github contributions stats in a consumable format'
@@ -16,7 +16,9 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.add_runtime_dependency 'curb'
18
18
  s.add_runtime_dependency 'json'
19
+ s.add_runtime_dependency 'basiccache', '< 2'
19
20
 
21
+ s.add_development_dependency 'timecop'
20
22
  s.add_development_dependency 'rubocop'
21
23
  s.add_development_dependency 'travis-lint'
22
24
  s.add_development_dependency 'rake'
@@ -25,4 +27,3 @@ Gem::Specification.new do |s|
25
27
  s.add_development_dependency 'fuubar'
26
28
  s.add_development_dependency 'parser', '~> 2.1.0.pre1'
27
29
  end
28
-
data/lib/githubstats.rb CHANGED
@@ -1,241 +1,106 @@
1
1
  require 'curb'
2
2
  require 'json'
3
- require 'date'
4
- require 'version'
5
-
3
+ autoload :Rugged, 'rugged'
6
4
  ##
7
- # Rugged is used to check git's configuration for a github user, if available
5
+ # Rugged is used if available to look up the user's Github username
8
6
 
9
7
  begin
10
- require 'rugged'
11
- USING_RUGGED = true
8
+ RUGGED_USER = Rugged::Config.global['github.user']
12
9
  rescue LoadError
13
- USING_RUGGED = false
10
+ RUGGED_USER = nil
14
11
  end
15
12
 
16
13
  ##
17
- # Basic_Cache is used to cache computation results, if available
18
-
19
- begin
20
- require 'basic_cache'
21
- USING_CACHE = true
22
- rescue LoadError
23
- USING_CACHE = false
24
- end
25
-
26
- ##
27
- # This module provides a consumable object based on Github's contribution stats
14
+ # Definitions of user objects for GithubStats
28
15
 
29
16
  module GithubStats
30
- class << self
31
- ##
32
- # Add .new() helper for creating a new Contributions object
17
+ ##
18
+ # Helper method for creating new user objects
33
19
 
34
- def new(*args)
35
- self::Contributions.new(*args)
36
- end
20
+ def self.new(*args)
21
+ self::User.new(*args)
37
22
  end
38
23
 
39
24
  ##
40
- # Datapoint objects provide a more sane date/time point interface
25
+ # Default URL for grabbing data
41
26
 
42
- Datapoint = Struct.new(:date, :score)
27
+ DEFAULT_URL = 'https://github.com/users/%s/contributions_calendar_data'
43
28
 
44
29
  ##
45
- # Contributions object holds and provides stats data for a user
46
-
47
- class Contributions
48
- attr_reader :user, :data, :last_updated
49
- attr_accessor :url
30
+ # User object
50
31
 
51
- GH_MAGIC = 3.77972616981
32
+ class User
33
+ attr_reader :name, :url, :data, :last_updated
52
34
 
53
35
  ##
54
- # Create a new object
55
- # Guesses the user if one is not supplied
56
- # Automatically updates if not disabled
57
- # Creates a new cache object
36
+ # Creates a new user object
58
37
 
59
38
  def initialize(params = {})
60
- @user = params[:user] || guess_user
61
- @url = "https://github.com/users/#{@user}/contributions_calendar_data"
62
- @data = []
39
+ params = { name: params } unless params.is_a? Hash
40
+ @name = params[:name] || guess_user
41
+ @url = (params[:url] || DEFAULT_URL) % @name
63
42
  @last_updated = nil
64
- @cache = USING_CACHE ? BasicCache.new : GithubStats::NullCache.new
65
- update unless params[:skip_load]
66
43
  end
67
44
 
68
45
  ##
69
46
  # Print human-readable string about object
70
47
 
71
48
  def to_s
72
- "Contributions from #{@user}"
49
+ "Contributions from #{@name}"
73
50
  end
74
- alias_method :to_s, :inspect
51
+ alias_method :inspect, :to_s
75
52
 
76
53
  ##
77
- # Return raw data directly
54
+ # Lazy loader for data
78
55
 
79
- def to_a
56
+ def data(reload = false)
57
+ load_data if reload == true || @last_updated.nil?
80
58
  @data
81
59
  end
82
60
 
83
61
  ##
84
- # Return Hash where keys are dates and values are scores
85
-
86
- def to_h
87
- @data.reduce(Hash.new(0)) { |a, e| a.merge('e.date' => e.score) }
88
- end
89
-
90
- ##
91
- # Try to guess username
92
- # Checks Rugged if available, then ENV['USER']
62
+ # Adjust respond_to? to properly respond with patched method_missing
93
63
 
94
- def guess_user
95
- names = []
96
- names << Rugged::Config.global['github.user'] if USING_RUGGED
97
- names << ENV['USER']
98
- names.reject! { |name| name.nil? }
99
- names.length ? names.first : (fail 'Failed to guess username')
64
+ def respond_to?(method, include_private = false)
65
+ load_data if @last_updated.nil?
66
+ super || @data.respond_to?(method, include_private)
100
67
  end
101
68
 
102
- ##
103
- # Download new data
104
-
105
- def download
106
- JSON.parse Curl::Easy.perform(@url).body_str
107
- rescue
108
- raise 'Unable to load data from Github'
109
- end
69
+ private
110
70
 
111
71
  ##
112
- # Parse the Github data into a pretty objects
72
+ # Guesses the user's name based on system environment
113
73
 
114
- def parse(raw_data)
115
- raw_data.map { |d, s| Datapoint.new(Date.parse(d), s.to_i) }
116
- rescue
117
- raise 'Failed to parse data'
74
+ def guess_user(names = [])
75
+ names << RUGGED_USER
76
+ names << ENV['USER']
77
+ names.find { |name| !name.nil? } || (fail 'Failed to guess username')
118
78
  end
119
79
 
120
80
  ##
121
- # Update the data based on Github
81
+ # Creates a new Data object from downloaded data
122
82
 
123
- def update
124
- @data = parse download
83
+ def load_data
84
+ @data = GithubStats::Data.new download
125
85
  @last_updated = DateTime.now
126
- @cache.clear
127
86
  end
128
87
 
129
88
  ##
130
- # Return today's score
89
+ # Downloads new data from Github
131
90
 
132
- def today
133
- @cache.cache { to_h[Date.today] }
134
- end
135
-
136
- ##
137
- # Return the current streak
138
-
139
- def streak
140
- @cache.cache do
141
- streak = @data.reverse.drop(1).take_while { |point| point.score > 0 }
142
- streak.reverse!
143
- streak << @data.last unless @data.last.score.zero?
144
- streak
145
- end
146
- end
147
-
148
- ##
149
- # Return the longest streak
150
-
151
- def longest_streak
152
- @cache.cache do
153
- all_streaks = @data.reduce(Array.new(1, [])) do |streaks, point|
154
- point.score == 0 ? streaks << [] : streaks.last << point
155
- streaks
156
- end
157
- all_streaks.max { |a, b| a.length <=> b.length }
158
- end
159
- end
160
-
161
- ##
162
- # Return the highest score in the dataset
163
-
164
- def max
165
- @cache.cache { @data.max { |a, b| a.score <=> b.score } }
166
- end
167
-
168
- ##
169
- # Return the mean score in the dataset
170
-
171
- def mean
172
- @cache.cache do
173
- @data.reduce(0) { |a, e| e.score.to_f + a } / @data.size
174
- end
175
- end
176
-
177
- ##
178
- # Return the break-points between the quartiles
179
-
180
- def quartile_boundaries
181
- @cache.cache do
182
- variance = gh_quartile_magic
183
- data = @data.select { |x| (mean - x.score).abs / variance <= GH_MAGIC }
184
- range = data.map { |p| p.score }.uniq.sort.select { |s| !s.zero? }
185
- bounds = (1..3).map { |q| range[(q * range.length / 4) - 2] }
186
- bounds.unshift(0).push(max.score)
187
- end
188
- end
189
-
190
- ##
191
- # Return the quartiles
192
-
193
- def quartiles
194
- @cache.cache do
195
- bounds = quartile_boundaries
196
- @data.reduce(Array.new(5) { Array.new }) do |acc, point|
197
- acc[bounds.find_index { |i| point.score <= i }] << point
198
- acc
199
- end
200
- end
201
- end
202
-
203
- ##
204
- # Return which quartile a score is in
205
-
206
- def quartile
207
- bounds = quartile_boundaries
208
- return nil if score > bounds.last || score < 0
209
- bounds.count { |bound| score > bound }
210
- end
211
-
212
- ##
213
- # Return Github's magic value (Used for calculating quartiles)
214
-
215
- def gh_quartile_magic
216
- @cache.cache do
217
- magic = @data.reduce(0) { |a, e| (e.score.to_f - mean)**2 + a }
218
- Math.sqrt(magic / (@data.size - 1))
219
- end
220
- end
221
- end
222
-
223
- ##
224
- # The Null_Cache is used if Basic_Cache is not available
225
- # As per the name, it does not cache anything
226
-
227
- class NullCache
228
- ##
229
- # Clear is a no-op, since there is no cache
230
-
231
- def clear
91
+ def download
92
+ JSON.parse Curl::Easy.perform(@url).body_str
93
+ rescue
94
+ raise 'Unable to load data from Github'
232
95
  end
233
96
 
234
- ##
235
- # Call the provided block and return its value
236
-
237
- def cache(key = nil, &code)
238
- code.call
97
+ def method_missing(sym, *args, &block)
98
+ load_data if @last_updated.nil?
99
+ return unless @data.respond_to? sym
100
+ instance_eval "def #{sym}(*args, &block) @data.#{sym}(*args, &block) end"
101
+ send(sym, *args, &block)
239
102
  end
240
103
  end
241
104
  end
105
+
106
+ require 'githubstats/data'
@@ -0,0 +1,163 @@
1
+ require 'basiccache'
2
+ require 'date'
3
+
4
+ ##
5
+ # Definition of data objects for GithubStats
6
+
7
+ module GithubStats
8
+ ##
9
+ # This is the magic constant used for determining outliers
10
+
11
+ GITHUB_MAGIC = 3.77972616981
12
+
13
+ ##
14
+ # Helper struct for defining datapoints
15
+
16
+ Datapoint = Struct.new(:date, :score)
17
+
18
+ ##
19
+ # Data class for calculations
20
+
21
+ class Data
22
+ ##
23
+ # MethodCacher provides computation caching
24
+
25
+ include MethodCacher
26
+
27
+ attr_reader :raw
28
+ alias_method :to_a, :raw
29
+
30
+ ##
31
+ # Create a data object and turn on caching
32
+
33
+ def initialize(data)
34
+ @raw = data.map { |d, s| Datapoint.new(Date.parse(d), s.to_i) }
35
+ enable_caching [:to_h, :today, :streaks, :longest_streak, :streak, :max,
36
+ :mean, :std_var, :quartile_boundaries, :quartiles]
37
+ end
38
+
39
+ ##
40
+ # The data as a hash where the keys are dates and values are scores
41
+
42
+ def to_h
43
+ @raw.reduce(Hash.new(0)) { |a, e| a.merge(e.date => e.score) }
44
+ end
45
+
46
+ ##
47
+ # The score for today
48
+
49
+ def today
50
+ to_h[Date.today]
51
+ end
52
+
53
+ ##
54
+ # The score for a given day
55
+
56
+ def [](date)
57
+ to_h[Date.parse(date)]
58
+ end
59
+
60
+ ##
61
+ # Scores in chronological order
62
+
63
+ def scores
64
+ @raw.map { |x| x.score }
65
+ end
66
+
67
+ ##
68
+ # All streaks for a user
69
+
70
+ def streaks
71
+ streaks = @raw.reduce(Array.new(1, [])) do |acc, point|
72
+ point.score == 0 ? acc << [] : acc.last << point
73
+ acc
74
+ end
75
+ streaks.reject! { |s| s.empty? }
76
+ streaks.first.empty? ? streaks[1..-1] : streaks
77
+ end
78
+
79
+ ##
80
+ # The longest streak
81
+
82
+ def longest_streak
83
+ streaks.max { |a, b| a.length <=> b.length }
84
+ end
85
+
86
+ ##
87
+ # The current streak, or nil
88
+
89
+ def streak
90
+ streaks.last.last.date >= Date.today - 1 ? streaks.last : []
91
+ end
92
+
93
+ ##
94
+ # The highest scoring day
95
+
96
+ def max
97
+ @raw.max { |a, b| a.score <=> b.score }
98
+ end
99
+
100
+ ##
101
+ # The mean score
102
+
103
+ def mean
104
+ scores.reduce(:+) / @raw.size.to_f
105
+ end
106
+
107
+ ##
108
+ # The standard variance (two pass)
109
+
110
+ def std_var
111
+ first_pass = @raw.reduce(0) { |a, e| (e.score.to_f - mean)**2 + a }
112
+ Math.sqrt(first_pass / (@raw.size - 1))
113
+ end
114
+
115
+ ##
116
+ # Outliers of the set
117
+
118
+ def outliers
119
+ return [] if scores.uniq.size < 5
120
+ scores.select { |x| ((mean - x) / std_var).abs > GITHUB_MAGIC }.uniq
121
+ end
122
+
123
+ ##
124
+ # The boundaries of the quartiles
125
+ # The index represents the quartile number
126
+ # The value is the upper bound of the quartile (inclusive)
127
+
128
+ def quartile_boundaries
129
+ range = (0..scores.reject { |x| outliers.take(3).include? x }.max).to_a
130
+ [0, *(1..3).map { |q| range[(q * range.size / 4) - 1] }, max.score]
131
+ end
132
+
133
+ ##
134
+ # Return the list split into quartiles
135
+
136
+ def quartiles
137
+ quartiles = Array.new(5) { [] }
138
+ @raw.reduce(quartiles) { |a, e| a[quartile(e.score)] << e && a }
139
+ end
140
+
141
+ ##
142
+ # Return the quartile of a given score
143
+
144
+ def quartile(score)
145
+ return nil if score < 0 || score > max.score
146
+ quartile_boundaries.count { |bound| score > bound }
147
+ end
148
+
149
+ ##
150
+ # Pad the dataset to full week increments
151
+
152
+ def pad(fill_value = -1, data = @raw.clone)
153
+ point = GithubStats::Datapoint
154
+ until data.first.date.wday == 0
155
+ data.unshift point.new(data.first.date - 1, fill_value)
156
+ end
157
+ until data.last.date.wday == 6
158
+ data << point.new(data.last.date + 1, fill_value)
159
+ end
160
+ data
161
+ end
162
+ end
163
+ end
@@ -0,0 +1 @@
1
+ [["2012/11/27", 0], ["2012/11/28", 0], ["2012/11/29", 0], ["2012/11/30", 0], ["2012/12/01", 0], ["2012/12/02", 0], ["2012/12/03", 0], ["2012/12/04", 2], ["2012/12/05", 5], ["2012/12/06", 0], ["2012/12/07", 0], ["2012/12/08", 0], ["2012/12/09", 1], ["2012/12/10", 0], ["2012/12/11", 0], ["2012/12/12", 0], ["2012/12/13", 0], ["2012/12/14", 0], ["2012/12/15", 0], ["2012/12/16", 0], ["2012/12/17", 1], ["2012/12/18", 0], ["2012/12/19", 1], ["2012/12/20", 4], ["2012/12/21", 1], ["2012/12/22", 0], ["2012/12/23", 0], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 0], ["2012/12/28", 2], ["2012/12/29", 0], ["2012/12/30", 3], ["2012/12/31", 0], ["2013/01/01", 5], ["2013/01/02", 2], ["2013/01/03", 0], ["2013/01/04", 1], ["2013/01/05", 0], ["2013/01/06", 0], ["2013/01/07", 2], ["2013/01/08", 0], ["2013/01/09", 5], ["2013/01/10", 1], ["2013/01/11", 1], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 0], ["2013/01/15", 0], ["2013/01/16", 0], ["2013/01/17", 0], ["2013/01/18", 0], ["2013/01/19", 1], ["2013/01/20", 0], ["2013/01/21", 0], ["2013/01/22", 2], ["2013/01/23", 0], ["2013/01/24", 2], ["2013/01/25", 12], ["2013/01/26", 2], ["2013/01/27", 15], ["2013/01/28", 4], ["2013/01/29", 4], ["2013/01/30", 7], ["2013/01/31", 11], ["2013/02/01", 12], ["2013/02/02", 0], ["2013/02/03", 0], ["2013/02/04", 0], ["2013/02/05", 0], ["2013/02/06", 0], ["2013/02/07", 0], ["2013/02/08", 2], ["2013/02/09", 0], ["2013/02/10", 0], ["2013/02/11", 1], ["2013/02/12", 0], ["2013/02/13", 0], ["2013/02/14", 0], ["2013/02/15", 0], ["2013/02/16", 0], ["2013/02/17", 0], ["2013/02/18", 1], ["2013/02/19", 0], ["2013/02/20", 0], ["2013/02/21", 1], ["2013/02/22", 4], ["2013/02/23", 3], ["2013/02/24", 9], ["2013/02/25", 0], ["2013/02/26", 0], ["2013/02/27", 0], ["2013/02/28", 0], ["2013/03/01", 7], ["2013/03/02", 4], ["2013/03/03", 0], ["2013/03/04", 0], ["2013/03/05", 2], ["2013/03/06", 0], ["2013/03/07", 0], ["2013/03/08", 0], ["2013/03/09", 1], ["2013/03/10", 0], ["2013/03/11", 0], ["2013/03/12", 3], ["2013/03/13", 0], ["2013/03/14", 0], ["2013/03/15", 0], ["2013/03/16", 0], ["2013/03/17", 3], ["2013/03/18", 0], ["2013/03/19", 0], ["2013/03/20", 0], ["2013/03/21", 4], ["2013/03/22", 0], ["2013/03/23", 0], ["2013/03/24", 0], ["2013/03/25", 0], ["2013/03/26", 0], ["2013/03/27", 0], ["2013/03/28", 0], ["2013/03/29", 0], ["2013/03/30", 0], ["2013/03/31", 0], ["2013/04/01", 0], ["2013/04/02", 0], ["2013/04/03", 0], ["2013/04/04", 0], ["2013/04/05", 1], ["2013/04/06", 0], ["2013/04/07", 0], ["2013/04/08", 0], ["2013/04/09", 0], ["2013/04/10", 0], ["2013/04/11", 0], ["2013/04/12", 0], ["2013/04/13", 2], ["2013/04/14", 0], ["2013/04/15", 0], ["2013/04/16", 0], ["2013/04/17", 0], ["2013/04/18", 0], ["2013/04/19", 0], ["2013/04/20", 0], ["2013/04/21", 0], ["2013/04/22", 0], ["2013/04/23", 0], ["2013/04/24", 0], ["2013/04/25", 2], ["2013/04/26", 1], ["2013/04/27", 0], ["2013/04/28", 1], ["2013/04/29", 0], ["2013/04/30", 0], ["2013/05/01", 0], ["2013/05/02", 0], ["2013/05/03", 7], ["2013/05/04", 0], ["2013/05/05", 0], ["2013/05/06", 0], ["2013/05/07", 0], ["2013/05/08", 0], ["2013/05/09", 0], ["2013/05/10", 0], ["2013/05/11", 0], ["2013/05/12", 0], ["2013/05/13", 0], ["2013/05/14", 1], ["2013/05/15", 0], ["2013/05/16", 0], ["2013/05/17", 0], ["2013/05/18", 0], ["2013/05/19", 3], ["2013/05/20", 0], ["2013/05/21", 0], ["2013/05/22", 0], ["2013/05/23", 0], ["2013/05/24", 0], ["2013/05/25", 0], ["2013/05/26", 0], ["2013/05/27", 0], ["2013/05/28", 2], ["2013/05/29", 0], ["2013/05/30", 0], ["2013/05/31", 1], ["2013/06/01", 0], ["2013/06/02", 7], ["2013/06/03", 1], ["2013/06/04", 0], ["2013/06/05", 0], ["2013/06/06", 2], ["2013/06/07", 3], ["2013/06/08", 0], ["2013/06/09", 13], ["2013/06/10", 0], ["2013/06/11", 0], ["2013/06/12", 1], ["2013/06/13", 0], ["2013/06/14", 5], ["2013/06/15", 8], ["2013/06/16", 19], ["2013/06/17", 8], ["2013/06/18", 0], ["2013/06/19", 0], ["2013/06/20", 1], ["2013/06/21", 2], ["2013/06/22", 1], ["2013/06/23", 0], ["2013/06/24", 1], ["2013/06/25", 8], ["2013/06/26", 0], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 0], ["2013/06/30", 0], ["2013/07/01", 1], ["2013/07/02", 3], ["2013/07/03", 0], ["2013/07/04", 1], ["2013/07/05", 0], ["2013/07/06", 14], ["2013/07/07", 0], ["2013/07/08", 4], ["2013/07/09", 16], ["2013/07/10", 6], ["2013/07/11", 0], ["2013/07/12", 0], ["2013/07/13", 5], ["2013/07/14", 50], ["2013/07/15", 14], ["2013/07/16", 1], ["2013/07/17", 0], ["2013/07/18", 1], ["2013/07/19", 1], ["2013/07/20", 0], ["2013/07/21", 16], ["2013/07/22", 0], ["2013/07/23", 1], ["2013/07/24", 0], ["2013/07/25", 0], ["2013/07/26", 0], ["2013/07/27", 0], ["2013/07/28", 0], ["2013/07/29", 0], ["2013/07/30", 2], ["2013/07/31", 0], ["2013/08/01", 0], ["2013/08/02", 0], ["2013/08/03", 0], ["2013/08/04", 11], ["2013/08/05", 1], ["2013/08/06", 3], ["2013/08/07", 2], ["2013/08/08", 2], ["2013/08/09", 10], ["2013/08/10", 7], ["2013/08/11", 1], ["2013/08/12", 5], ["2013/08/13", 4], ["2013/08/14", 1], ["2013/08/15", 2], ["2013/08/16", 5], ["2013/08/17", 0], ["2013/08/18", 0], ["2013/08/19", 0], ["2013/08/20", 0], ["2013/08/21", 8], ["2013/08/22", 0], ["2013/08/23", 3], ["2013/08/24", 6], ["2013/08/25", 15], ["2013/08/26", 14], ["2013/08/27", 5], ["2013/08/28", 0], ["2013/08/29", 6], ["2013/08/30", 6], ["2013/08/31", 4], ["2013/09/01", 2], ["2013/09/02", 6], ["2013/09/03", 4], ["2013/09/04", 1], ["2013/09/05", 1], ["2013/09/06", 2], ["2013/09/07", 2], ["2013/09/08", 2], ["2013/09/09", 1], ["2013/09/10", 4], ["2013/09/11", 1], ["2013/09/12", 1], ["2013/09/13", 1], ["2013/09/14", 2], ["2013/09/15", 4], ["2013/09/16", 6], ["2013/09/17", 1], ["2013/09/18", 5], ["2013/09/19", 3], ["2013/09/20", 3], ["2013/09/21", 1], ["2013/09/22", 11], ["2013/09/23", 6], ["2013/09/24", 5], ["2013/09/25", 4], ["2013/09/26", 1], ["2013/09/27", 2], ["2013/09/28", 2], ["2013/09/29", 29], ["2013/09/30", 13], ["2013/10/01", 2], ["2013/10/02", 1], ["2013/10/03", 3], ["2013/10/04", 7], ["2013/10/05", 1], ["2013/10/06", 13], ["2013/10/07", 3], ["2013/10/08", 1], ["2013/10/09", 6], ["2013/10/10", 4], ["2013/10/11", 5], ["2013/10/12", 2], ["2013/10/13", 2], ["2013/10/14", 8], ["2013/10/15", 3], ["2013/10/16", 3], ["2013/10/17", 1], ["2013/10/18", 2], ["2013/10/19", 5], ["2013/10/20", 14], ["2013/10/21", 3], ["2013/10/22", 4], ["2013/10/23", 2], ["2013/10/24", 2], ["2013/10/25", 1], ["2013/10/26", 2], ["2013/10/27", 7], ["2013/10/28", 2], ["2013/10/29", 3], ["2013/10/30", 4], ["2013/10/31", 3], ["2013/11/01", 4], ["2013/11/02", 11], ["2013/11/03", 7], ["2013/11/04", 3], ["2013/11/05", 1], ["2013/11/06", 11], ["2013/11/07", 1], ["2013/11/08", 1], ["2013/11/09", 1], ["2013/11/10", 2], ["2013/11/11", 5], ["2013/11/12", 1], ["2013/11/13", 1], ["2013/11/14", 8], ["2013/11/15", 1], ["2013/11/16", 3], ["2013/11/17", 11], ["2013/11/18", 15], ["2013/11/19", 88], ["2013/11/20", 14], ["2013/11/21", 32], ["2013/11/22", 27], ["2013/11/23", 51], ["2013/11/24", 8], ["2013/11/25", 10], ["2013/11/26", 2], ["2013/11/27", 3]]
@@ -0,0 +1 @@
1
+ [["2012/11/27", 0], ["2012/11/28", 0], ["2012/11/29", 0], ["2012/11/30", 0], ["2012/12/01", 0], ["2012/12/02", 0], ["2012/12/03", 0], ["2012/12/04", 0], ["2012/12/05", 0], ["2012/12/06", 0], ["2012/12/07", 3], ["2012/12/08", 0], ["2012/12/09", 0], ["2012/12/10", 1], ["2012/12/11", 0], ["2012/12/12", 0], ["2012/12/13", 0], ["2012/12/14", 0], ["2012/12/15", 0], ["2012/12/16", 0], ["2012/12/17", 0], ["2012/12/18", 0], ["2012/12/19", 0], ["2012/12/20", 0], ["2012/12/21", 0], ["2012/12/22", 0], ["2012/12/23", 0], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 0], ["2012/12/28", 0], ["2012/12/29", 0], ["2012/12/30", 0], ["2012/12/31", 2], ["2013/01/01", 1], ["2013/01/02", 0], ["2013/01/03", 0], ["2013/01/04", 0], ["2013/01/05", 0], ["2013/01/06", 0], ["2013/01/07", 0], ["2013/01/08", 0], ["2013/01/09", 0], ["2013/01/10", 0], ["2013/01/11", 0], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 0], ["2013/01/15", 5], ["2013/01/16", 2], ["2013/01/17", 0], ["2013/01/18", 5], ["2013/01/19", 0], ["2013/01/20", 0], ["2013/01/21", 2], ["2013/01/22", 0], ["2013/01/23", 0], ["2013/01/24", 0], ["2013/01/25", 0], ["2013/01/26", 1], ["2013/01/27", 2], ["2013/01/28", 1], ["2013/01/29", 1], ["2013/01/30", 0], ["2013/01/31", 0], ["2013/02/01", 0], ["2013/02/02", 0], ["2013/02/03", 0], ["2013/02/04", 0], ["2013/02/05", 2], ["2013/02/06", 2], ["2013/02/07", 5], ["2013/02/08", 1], ["2013/02/09", 0], ["2013/02/10", 0], ["2013/02/11", 0], ["2013/02/12", 1], ["2013/02/13", 0], ["2013/02/14", 9], ["2013/02/15", 2], ["2013/02/16", 0], ["2013/02/17", 0], ["2013/02/18", 0], ["2013/02/19", 1], ["2013/02/20", 0], ["2013/02/21", 23], ["2013/02/22", 0], ["2013/02/23", 0], ["2013/02/24", 4], ["2013/02/25", 1], ["2013/02/26", 0], ["2013/02/27", 2], ["2013/02/28", 0], ["2013/03/01", 0], ["2013/03/02", 11], ["2013/03/03", 3], ["2013/03/04", 0], ["2013/03/05", 3], ["2013/03/06", 2], ["2013/03/07", 0], ["2013/03/08", 0], ["2013/03/09", 0], ["2013/03/10", 2], ["2013/03/11", 3], ["2013/03/12", 7], ["2013/03/13", 12], ["2013/03/14", 8], ["2013/03/15", 0], ["2013/03/16", 0], ["2013/03/17", 0], ["2013/03/18", 0], ["2013/03/19", 0], ["2013/03/20", 0], ["2013/03/21", 9], ["2013/03/22", 1], ["2013/03/23", 0], ["2013/03/24", 10], ["2013/03/25", 2], ["2013/03/26", 2], ["2013/03/27", 0], ["2013/03/28", 13], ["2013/03/29", 15], ["2013/03/30", 0], ["2013/03/31", 12], ["2013/04/01", 8], ["2013/04/02", 0], ["2013/04/03", 1], ["2013/04/04", 0], ["2013/04/05", 10], ["2013/04/06", 22], ["2013/04/07", 4], ["2013/04/08", 7], ["2013/04/09", 3], ["2013/04/10", 9], ["2013/04/11", 13], ["2013/04/12", 2], ["2013/04/13", 7], ["2013/04/14", 0], ["2013/04/15", 6], ["2013/04/16", 28], ["2013/04/17", 11], ["2013/04/18", 5], ["2013/04/19", 7], ["2013/04/20", 3], ["2013/04/21", 1], ["2013/04/22", 4], ["2013/04/23", 1], ["2013/04/24", 0], ["2013/04/25", 0], ["2013/04/26", 0], ["2013/04/27", 1], ["2013/04/28", 0], ["2013/04/29", 7], ["2013/04/30", 4], ["2013/05/01", 1], ["2013/05/02", 0], ["2013/05/03", 0], ["2013/05/04", 2], ["2013/05/05", 0], ["2013/05/06", 0], ["2013/05/07", 0], ["2013/05/08", 0], ["2013/05/09", 0], ["2013/05/10", 0], ["2013/05/11", 4], ["2013/05/12", 0], ["2013/05/13", 15], ["2013/05/14", 0], ["2013/05/15", 0], ["2013/05/16", 2], ["2013/05/17", 0], ["2013/05/18", 0], ["2013/05/19", 1], ["2013/05/20", 0], ["2013/05/21", 0], ["2013/05/22", 0], ["2013/05/23", 0], ["2013/05/24", 3], ["2013/05/25", 0], ["2013/05/26", 0], ["2013/05/27", 0], ["2013/05/28", 0], ["2013/05/29", 0], ["2013/05/30", 0], ["2013/05/31", 0], ["2013/06/01", 0], ["2013/06/02", 0], ["2013/06/03", 0], ["2013/06/04", 0], ["2013/06/05", 0], ["2013/06/06", 0], ["2013/06/07", 0], ["2013/06/08", 0], ["2013/06/09", 0], ["2013/06/10", 2], ["2013/06/11", 0], ["2013/06/12", 0], ["2013/06/13", 0], ["2013/06/14", 0], ["2013/06/15", 0], ["2013/06/16", 0], ["2013/06/17", 0], ["2013/06/18", 0], ["2013/06/19", 0], ["2013/06/20", 0], ["2013/06/21", 1], ["2013/06/22", 3], ["2013/06/23", 0], ["2013/06/24", 0], ["2013/06/25", 0], ["2013/06/26", 0], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 0], ["2013/06/30", 0], ["2013/07/01", 0], ["2013/07/02", 0], ["2013/07/03", 0], ["2013/07/04", 1], ["2013/07/05", 0], ["2013/07/06", 0], ["2013/07/07", 0], ["2013/07/08", 0], ["2013/07/09", 5], ["2013/07/10", 1], ["2013/07/11", 0], ["2013/07/12", 0], ["2013/07/13", 0], ["2013/07/14", 0], ["2013/07/15", 0], ["2013/07/16", 0], ["2013/07/17", 0], ["2013/07/18", 0], ["2013/07/19", 0], ["2013/07/20", 0], ["2013/07/21", 0], ["2013/07/22", 0], ["2013/07/23", 0], ["2013/07/24", 0], ["2013/07/25", 0], ["2013/07/26", 0], ["2013/07/27", 0], ["2013/07/28", 0], ["2013/07/29", 0], ["2013/07/30", 0], ["2013/07/31", 1], ["2013/08/01", 0], ["2013/08/02", 0], ["2013/08/03", 0], ["2013/08/04", 0], ["2013/08/05", 3], ["2013/08/06", 0], ["2013/08/07", 0], ["2013/08/08", 2], ["2013/08/09", 0], ["2013/08/10", 0], ["2013/08/11", 2], ["2013/08/12", 0], ["2013/08/13", 0], ["2013/08/14", 0], ["2013/08/15", 0], ["2013/08/16", 0], ["2013/08/17", 8], ["2013/08/18", 0], ["2013/08/19", 0], ["2013/08/20", 5], ["2013/08/21", 3], ["2013/08/22", 0], ["2013/08/23", 12], ["2013/08/24", 9], ["2013/08/25", 2], ["2013/08/26", 1], ["2013/08/27", 3], ["2013/08/28", 9], ["2013/08/29", 5], ["2013/08/30", 6], ["2013/08/31", 1], ["2013/09/01", 2], ["2013/09/02", 1], ["2013/09/03", 2], ["2013/09/04", 1], ["2013/09/05", 2], ["2013/09/06", 10], ["2013/09/07", 3], ["2013/09/08", 12], ["2013/09/09", 9], ["2013/09/10", 7], ["2013/09/11", 7], ["2013/09/12", 1], ["2013/09/13", 1], ["2013/09/14", 3], ["2013/09/15", 16], ["2013/09/16", 1], ["2013/09/17", 8], ["2013/09/18", 13], ["2013/09/19", 4], ["2013/09/20", 1], ["2013/09/21", 8], ["2013/09/22", 8], ["2013/09/23", 7], ["2013/09/24", 16], ["2013/09/25", 8], ["2013/09/26", 1], ["2013/09/27", 7], ["2013/09/28", 4], ["2013/09/29", 6], ["2013/09/30", 15], ["2013/10/01", 2], ["2013/10/02", 6], ["2013/10/03", 6], ["2013/10/04", 3], ["2013/10/05", 15], ["2013/10/06", 16], ["2013/10/07", 5], ["2013/10/08", 6], ["2013/10/09", 2], ["2013/10/10", 4], ["2013/10/11", 3], ["2013/10/12", 18], ["2013/10/13", 15], ["2013/10/14", 1], ["2013/10/15", 6], ["2013/10/16", 1], ["2013/10/17", 4], ["2013/10/18", 4], ["2013/10/19", 1], ["2013/10/20", 6], ["2013/10/21", 3], ["2013/10/22", 1], ["2013/10/23", 18], ["2013/10/24", 9], ["2013/10/25", 12], ["2013/10/26", 14], ["2013/10/27", 4], ["2013/10/28", 4], ["2013/10/29", 1], ["2013/10/30", 1], ["2013/10/31", 5], ["2013/11/01", 9], ["2013/11/02", 8], ["2013/11/03", 19], ["2013/11/04", 8], ["2013/11/05", 10], ["2013/11/06", 8], ["2013/11/07", 17], ["2013/11/08", 14], ["2013/11/09", 3], ["2013/11/10", 2], ["2013/11/11", 4], ["2013/11/12", 2], ["2013/11/13", 7], ["2013/11/14", 4], ["2013/11/15", 9], ["2013/11/16", 3], ["2013/11/17", 2], ["2013/11/18", 2], ["2013/11/19", 11], ["2013/11/20", 1], ["2013/11/21", 9], ["2013/11/22", 3], ["2013/11/23", 3], ["2013/11/24", 2], ["2013/11/25", 10], ["2013/11/26", 1], ["2013/11/27", 0]]
@@ -0,0 +1 @@
1
+ [["2012/11/27", 0], ["2012/11/28", 0], ["2012/11/29", 0], ["2012/11/30", 0], ["2012/12/01", 0], ["2012/12/02", 0], ["2012/12/03", 0], ["2012/12/04", 0], ["2012/12/05", 0], ["2012/12/06", 0], ["2012/12/07", 0], ["2012/12/08", 0], ["2012/12/09", 0], ["2012/12/10", 0], ["2012/12/11", 0], ["2012/12/12", 0], ["2012/12/13", 0], ["2012/12/14", 0], ["2012/12/15", 0], ["2012/12/16", 0], ["2012/12/17", 1], ["2012/12/18", 0], ["2012/12/19", 0], ["2012/12/20", 0], ["2012/12/21", 0], ["2012/12/22", 0], ["2012/12/23", 0], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 0], ["2012/12/28", 0], ["2012/12/29", 0], ["2012/12/30", 0], ["2012/12/31", 0], ["2013/01/01", 0], ["2013/01/02", 0], ["2013/01/03", 0], ["2013/01/04", 0], ["2013/01/05", 0], ["2013/01/06", 0], ["2013/01/07", 0], ["2013/01/08", 0], ["2013/01/09", 0], ["2013/01/10", 0], ["2013/01/11", 0], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 0], ["2013/01/15", 0], ["2013/01/16", 0], ["2013/01/17", 0], ["2013/01/18", 0], ["2013/01/19", 0], ["2013/01/20", 0], ["2013/01/21", 0], ["2013/01/22", 0], ["2013/01/23", 0], ["2013/01/24", 0], ["2013/01/25", 0], ["2013/01/26", 0], ["2013/01/27", 0], ["2013/01/28", 0], ["2013/01/29", 0], ["2013/01/30", 0], ["2013/01/31", 0], ["2013/02/01", 0], ["2013/02/02", 0], ["2013/02/03", 0], ["2013/02/04", 0], ["2013/02/05", 0], ["2013/02/06", 0], ["2013/02/07", 0], ["2013/02/08", 0], ["2013/02/09", 0], ["2013/02/10", 0], ["2013/02/11", 0], ["2013/02/12", 0], ["2013/02/13", 0], ["2013/02/14", 0], ["2013/02/15", 0], ["2013/02/16", 0], ["2013/02/17", 0], ["2013/02/18", 0], ["2013/02/19", 0], ["2013/02/20", 0], ["2013/02/21", 0], ["2013/02/22", 0], ["2013/02/23", 0], ["2013/02/24", 0], ["2013/02/25", 0], ["2013/02/26", 0], ["2013/02/27", 0], ["2013/02/28", 0], ["2013/03/01", 0], ["2013/03/02", 0], ["2013/03/03", 0], ["2013/03/04", 0], ["2013/03/05", 0], ["2013/03/06", 0], ["2013/03/07", 0], ["2013/03/08", 0], ["2013/03/09", 0], ["2013/03/10", 0], ["2013/03/11", 0], ["2013/03/12", 0], ["2013/03/13", 0], ["2013/03/14", 0], ["2013/03/15", 0], ["2013/03/16", 0], ["2013/03/17", 0], ["2013/03/18", 0], ["2013/03/19", 0], ["2013/03/20", 0], ["2013/03/21", 0], ["2013/03/22", 0], ["2013/03/23", 0], ["2013/03/24", 0], ["2013/03/25", 0], ["2013/03/26", 0], ["2013/03/27", 0], ["2013/03/28", 0], ["2013/03/29", 0], ["2013/03/30", 0], ["2013/03/31", 2], ["2013/04/01", 0], ["2013/04/02", 0], ["2013/04/03", 0], ["2013/04/04", 0], ["2013/04/05", 0], ["2013/04/06", 0], ["2013/04/07", 0], ["2013/04/08", 0], ["2013/04/09", 0], ["2013/04/10", 0], ["2013/04/11", 0], ["2013/04/12", 0], ["2013/04/13", 0], ["2013/04/14", 0], ["2013/04/15", 0], ["2013/04/16", 0], ["2013/04/17", 0], ["2013/04/18", 0], ["2013/04/19", 0], ["2013/04/20", 0], ["2013/04/21", 3], ["2013/04/22", 0], ["2013/04/23", 0], ["2013/04/24", 2], ["2013/04/25", 0], ["2013/04/26", 0], ["2013/04/27", 0], ["2013/04/28", 0], ["2013/04/29", 0], ["2013/04/30", 0], ["2013/05/01", 0], ["2013/05/02", 0], ["2013/05/03", 0], ["2013/05/04", 0], ["2013/05/05", 0], ["2013/05/06", 0], ["2013/05/07", 0], ["2013/05/08", 0], ["2013/05/09", 0], ["2013/05/10", 0], ["2013/05/11", 0], ["2013/05/12", 0], ["2013/05/13", 0], ["2013/05/14", 0], ["2013/05/15", 0], ["2013/05/16", 0], ["2013/05/17", 0], ["2013/05/18", 0], ["2013/05/19", 0], ["2013/05/20", 0], ["2013/05/21", 0], ["2013/05/22", 0], ["2013/05/23", 0], ["2013/05/24", 0], ["2013/05/25", 0], ["2013/05/26", 0], ["2013/05/27", 0], ["2013/05/28", 0], ["2013/05/29", 0], ["2013/05/30", 0], ["2013/05/31", 0], ["2013/06/01", 0], ["2013/06/02", 0], ["2013/06/03", 0], ["2013/06/04", 0], ["2013/06/05", 0], ["2013/06/06", 0], ["2013/06/07", 0], ["2013/06/08", 0], ["2013/06/09", 0], ["2013/06/10", 0], ["2013/06/11", 0], ["2013/06/12", 0], ["2013/06/13", 0], ["2013/06/14", 0], ["2013/06/15", 0], ["2013/06/16", 0], ["2013/06/17", 0], ["2013/06/18", 0], ["2013/06/19", 0], ["2013/06/20", 0], ["2013/06/21", 0], ["2013/06/22", 0], ["2013/06/23", 0], ["2013/06/24", 0], ["2013/06/25", 0], ["2013/06/26", 0], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 0], ["2013/06/30", 0], ["2013/07/01", 0], ["2013/07/02", 0], ["2013/07/03", 0], ["2013/07/04", 0], ["2013/07/05", 0], ["2013/07/06", 0], ["2013/07/07", 0], ["2013/07/08", 0], ["2013/07/09", 0], ["2013/07/10", 0], ["2013/07/11", 0], ["2013/07/12", 0], ["2013/07/13", 0], ["2013/07/14", 0], ["2013/07/15", 0], ["2013/07/16", 0], ["2013/07/17", 0], ["2013/07/18", 0], ["2013/07/19", 0], ["2013/07/20", 0], ["2013/07/21", 0], ["2013/07/22", 0], ["2013/07/23", 0], ["2013/07/24", 0], ["2013/07/25", 0], ["2013/07/26", 0], ["2013/07/27", 0], ["2013/07/28", 0], ["2013/07/29", 0], ["2013/07/30", 1], ["2013/07/31", 0], ["2013/08/01", 0], ["2013/08/02", 0], ["2013/08/03", 0], ["2013/08/04", 0], ["2013/08/05", 0], ["2013/08/06", 0], ["2013/08/07", 0], ["2013/08/08", 0], ["2013/08/09", 0], ["2013/08/10", 0], ["2013/08/11", 0], ["2013/08/12", 0], ["2013/08/13", 0], ["2013/08/14", 0], ["2013/08/15", 0], ["2013/08/16", 0], ["2013/08/17", 0], ["2013/08/18", 0], ["2013/08/19", 0], ["2013/08/20", 0], ["2013/08/21", 0], ["2013/08/22", 0], ["2013/08/23", 1], ["2013/08/24", 0], ["2013/08/25", 0], ["2013/08/26", 0], ["2013/08/27", 0], ["2013/08/28", 0], ["2013/08/29", 0], ["2013/08/30", 0], ["2013/08/31", 0], ["2013/09/01", 0], ["2013/09/02", 0], ["2013/09/03", 0], ["2013/09/04", 0], ["2013/09/05", 0], ["2013/09/06", 0], ["2013/09/07", 0], ["2013/09/08", 0], ["2013/09/09", 0], ["2013/09/10", 0], ["2013/09/11", 0], ["2013/09/12", 0], ["2013/09/13", 0], ["2013/09/14", 0], ["2013/09/15", 0], ["2013/09/16", 0], ["2013/09/17", 0], ["2013/09/18", 0], ["2013/09/19", 0], ["2013/09/20", 0], ["2013/09/21", 0], ["2013/09/22", 0], ["2013/09/23", 0], ["2013/09/24", 0], ["2013/09/25", 0], ["2013/09/26", 0], ["2013/09/27", 0], ["2013/09/28", 0], ["2013/09/29", 0], ["2013/09/30", 0], ["2013/10/01", 0], ["2013/10/02", 0], ["2013/10/03", 0], ["2013/10/04", 0], ["2013/10/05", 0], ["2013/10/06", 0], ["2013/10/07", 0], ["2013/10/08", 0], ["2013/10/09", 0], ["2013/10/10", 0], ["2013/10/11", 0], ["2013/10/12", 0], ["2013/10/13", 0], ["2013/10/14", 0], ["2013/10/15", 0], ["2013/10/16", 0], ["2013/10/17", 0], ["2013/10/18", 0], ["2013/10/19", 0], ["2013/10/20", 0], ["2013/10/21", 0], ["2013/10/22", 0], ["2013/10/23", 0], ["2013/10/24", 0], ["2013/10/25", 0], ["2013/10/26", 0], ["2013/10/27", 0], ["2013/10/28", 0], ["2013/10/29", 0], ["2013/10/30", 0], ["2013/10/31", 0], ["2013/11/01", 0], ["2013/11/02", 0], ["2013/11/03", 0], ["2013/11/04", 0], ["2013/11/05", 0], ["2013/11/06", 0], ["2013/11/07", 0], ["2013/11/08", 0], ["2013/11/09", 0], ["2013/11/10", 0], ["2013/11/11", 0], ["2013/11/12", 0], ["2013/11/13", 0], ["2013/11/14", 0], ["2013/11/15", 0], ["2013/11/16", 0], ["2013/11/17", 0], ["2013/11/18", 0], ["2013/11/19", 0], ["2013/11/20", 0], ["2013/11/21", 0], ["2013/11/22", 0], ["2013/11/23", 0], ["2013/11/24", 0], ["2013/11/25", 0], ["2013/11/26", 0], ["2013/11/27", 0]]
@@ -0,0 +1 @@
1
+ [["2012/11/27", 0], ["2012/11/28", 0], ["2012/11/29", 0], ["2012/11/30", 0], ["2012/12/01", 0], ["2012/12/02", 0], ["2012/12/03", 0], ["2012/12/04", 0], ["2012/12/05", 0], ["2012/12/06", 0], ["2012/12/07", 0], ["2012/12/08", 0], ["2012/12/09", 0], ["2012/12/10", 0], ["2012/12/11", 0], ["2012/12/12", 0], ["2012/12/13", 0], ["2012/12/14", 0], ["2012/12/15", 0], ["2012/12/16", 0], ["2012/12/17", 0], ["2012/12/18", 0], ["2012/12/19", 0], ["2012/12/20", 0], ["2012/12/21", 0], ["2012/12/22", 0], ["2012/12/23", 0], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 0], ["2012/12/28", 0], ["2012/12/29", 0], ["2012/12/30", 0], ["2012/12/31", 0], ["2013/01/01", 0], ["2013/01/02", 0], ["2013/01/03", 0], ["2013/01/04", 0], ["2013/01/05", 0], ["2013/01/06", 0], ["2013/01/07", 0], ["2013/01/08", 0], ["2013/01/09", 0], ["2013/01/10", 0], ["2013/01/11", 0], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 0], ["2013/01/15", 0], ["2013/01/16", 1], ["2013/01/17", 0], ["2013/01/18", 0], ["2013/01/19", 0], ["2013/01/20", 0], ["2013/01/21", 0], ["2013/01/22", 0], ["2013/01/23", 0], ["2013/01/24", 0], ["2013/01/25", 0], ["2013/01/26", 0], ["2013/01/27", 0], ["2013/01/28", 0], ["2013/01/29", 0], ["2013/01/30", 0], ["2013/01/31", 0], ["2013/02/01", 0], ["2013/02/02", 0], ["2013/02/03", 0], ["2013/02/04", 0], ["2013/02/05", 0], ["2013/02/06", 0], ["2013/02/07", 0], ["2013/02/08", 0], ["2013/02/09", 0], ["2013/02/10", 0], ["2013/02/11", 0], ["2013/02/12", 0], ["2013/02/13", 0], ["2013/02/14", 0], ["2013/02/15", 0], ["2013/02/16", 0], ["2013/02/17", 0], ["2013/02/18", 0], ["2013/02/19", 0], ["2013/02/20", 0], ["2013/02/21", 0], ["2013/02/22", 0], ["2013/02/23", 0], ["2013/02/24", 0], ["2013/02/25", 0], ["2013/02/26", 0], ["2013/02/27", 0], ["2013/02/28", 0], ["2013/03/01", 0], ["2013/03/02", 0], ["2013/03/03", 0], ["2013/03/04", 0], ["2013/03/05", 0], ["2013/03/06", 0], ["2013/03/07", 0], ["2013/03/08", 0], ["2013/03/09", 0], ["2013/03/10", 0], ["2013/03/11", 0], ["2013/03/12", 0], ["2013/03/13", 0], ["2013/03/14", 0], ["2013/03/15", 0], ["2013/03/16", 0], ["2013/03/17", 0], ["2013/03/18", 0], ["2013/03/19", 0], ["2013/03/20", 0], ["2013/03/21", 0], ["2013/03/22", 0], ["2013/03/23", 0], ["2013/03/24", 0], ["2013/03/25", 0], ["2013/03/26", 0], ["2013/03/27", 0], ["2013/03/28", 0], ["2013/03/29", 0], ["2013/03/30", 0], ["2013/03/31", 0], ["2013/04/01", 0], ["2013/04/02", 0], ["2013/04/03", 0], ["2013/04/04", 0], ["2013/04/05", 0], ["2013/04/06", 0], ["2013/04/07", 0], ["2013/04/08", 0], ["2013/04/09", 0], ["2013/04/10", 1], ["2013/04/11", 0], ["2013/04/12", 0], ["2013/04/13", 0], ["2013/04/14", 3], ["2013/04/15", 0], ["2013/04/16", 0], ["2013/04/17", 3], ["2013/04/18", 1], ["2013/04/19", 0], ["2013/04/20", 0], ["2013/04/21", 2], ["2013/04/22", 0], ["2013/04/23", 0], ["2013/04/24", 0], ["2013/04/25", 3], ["2013/04/26", 0], ["2013/04/27", 6], ["2013/04/28", 0], ["2013/04/29", 0], ["2013/04/30", 0], ["2013/05/01", 0], ["2013/05/02", 0], ["2013/05/03", 0], ["2013/05/04", 0], ["2013/05/05", 1], ["2013/05/06", 0], ["2013/05/07", 1], ["2013/05/08", 0], ["2013/05/09", 0], ["2013/05/10", 1], ["2013/05/11", 6], ["2013/05/12", 0], ["2013/05/13", 0], ["2013/05/14", 0], ["2013/05/15", 0], ["2013/05/16", 0], ["2013/05/17", 0], ["2013/05/18", 0], ["2013/05/19", 0], ["2013/05/20", 2], ["2013/05/21", 5], ["2013/05/22", 1], ["2013/05/23", 0], ["2013/05/24", 0], ["2013/05/25", 0], ["2013/05/26", 0], ["2013/05/27", 2], ["2013/05/28", 1], ["2013/05/29", 1], ["2013/05/30", 0], ["2013/05/31", 0], ["2013/06/01", 0], ["2013/06/02", 1], ["2013/06/03", 0], ["2013/06/04", 0], ["2013/06/05", 0], ["2013/06/06", 0], ["2013/06/07", 0], ["2013/06/08", 0], ["2013/06/09", 4], ["2013/06/10", 4], ["2013/06/11", 0], ["2013/06/12", 0], ["2013/06/13", 0], ["2013/06/14", 0], ["2013/06/15", 0], ["2013/06/16", 6], ["2013/06/17", 0], ["2013/06/18", 0], ["2013/06/19", 3], ["2013/06/20", 0], ["2013/06/21", 0], ["2013/06/22", 0], ["2013/06/23", 0], ["2013/06/24", 0], ["2013/06/25", 0], ["2013/06/26", 0], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 1], ["2013/06/30", 6], ["2013/07/01", 1], ["2013/07/02", 0], ["2013/07/03", 1], ["2013/07/04", 0], ["2013/07/05", 0], ["2013/07/06", 0], ["2013/07/07", 2], ["2013/07/08", 2], ["2013/07/09", 1], ["2013/07/10", 0], ["2013/07/11", 1], ["2013/07/12", 2], ["2013/07/13", 2], ["2013/07/14", 1], ["2013/07/15", 1], ["2013/07/16", 1], ["2013/07/17", 3], ["2013/07/18", 1], ["2013/07/19", 1], ["2013/07/20", 2], ["2013/07/21", 1], ["2013/07/22", 4], ["2013/07/23", 5], ["2013/07/24", 4], ["2013/07/25", 2], ["2013/07/26", 4], ["2013/07/27", 3], ["2013/07/28", 10], ["2013/07/29", 2], ["2013/07/30", 3], ["2013/07/31", 2], ["2013/08/01", 1], ["2013/08/02", 1], ["2013/08/03", 4], ["2013/08/04", 4], ["2013/08/05", 4], ["2013/08/06", 1], ["2013/08/07", 1], ["2013/08/08", 1], ["2013/08/09", 1], ["2013/08/10", 8], ["2013/08/11", 2], ["2013/08/12", 1], ["2013/08/13", 10], ["2013/08/14", 1], ["2013/08/15", 3], ["2013/08/16", 3], ["2013/08/17", 10], ["2013/08/18", 4], ["2013/08/19", 2], ["2013/08/20", 4], ["2013/08/21", 11], ["2013/08/22", 1], ["2013/08/23", 1], ["2013/08/24", 5], ["2013/08/25", 11], ["2013/08/26", 7], ["2013/08/27", 4], ["2013/08/28", 1], ["2013/08/29", 2], ["2013/08/30", 1], ["2013/08/31", 1], ["2013/09/01", 3], ["2013/09/02", 12], ["2013/09/03", 10], ["2013/09/04", 1], ["2013/09/05", 3], ["2013/09/06", 3], ["2013/09/07", 1], ["2013/09/08", 23], ["2013/09/09", 11], ["2013/09/10", 7], ["2013/09/11", 5], ["2013/09/12", 12], ["2013/09/13", 2], ["2013/09/14", 1], ["2013/09/15", 1], ["2013/09/16", 2], ["2013/09/17", 9], ["2013/09/18", 1], ["2013/09/19", 4], ["2013/09/20", 1], ["2013/09/21", 1], ["2013/09/22", 3], ["2013/09/23", 2], ["2013/09/24", 2], ["2013/09/25", 15], ["2013/09/26", 5], ["2013/09/27", 1], ["2013/09/28", 2], ["2013/09/29", 3], ["2013/09/30", 1], ["2013/10/01", 2], ["2013/10/02", 1], ["2013/10/03", 1], ["2013/10/04", 1], ["2013/10/05", 1], ["2013/10/06", 1], ["2013/10/07", 1], ["2013/10/08", 1], ["2013/10/09", 1], ["2013/10/10", 1], ["2013/10/11", 1], ["2013/10/12", 1], ["2013/10/13", 4], ["2013/10/14", 1], ["2013/10/15", 1], ["2013/10/16", 1], ["2013/10/17", 1], ["2013/10/18", 1], ["2013/10/19", 1], ["2013/10/20", 4], ["2013/10/21", 1], ["2013/10/22", 2], ["2013/10/23", 6], ["2013/10/24", 5], ["2013/10/25", 1], ["2013/10/26", 1], ["2013/10/27", 3], ["2013/10/28", 1], ["2013/10/29", 1], ["2013/10/30", 3], ["2013/10/31", 2], ["2013/11/01", 4], ["2013/11/02", 5], ["2013/11/03", 10], ["2013/11/04", 5], ["2013/11/05", 1], ["2013/11/06", 1], ["2013/11/07", 9], ["2013/11/08", 1], ["2013/11/09", 5], ["2013/11/10", 3], ["2013/11/11", 2], ["2013/11/12", 1], ["2013/11/13", 2], ["2013/11/14", 1], ["2013/11/15", 1], ["2013/11/16", 1], ["2013/11/17", 6], ["2013/11/18", 2], ["2013/11/19", 3], ["2013/11/20", 2], ["2013/11/21", 1], ["2013/11/22", 3], ["2013/11/23", 2], ["2013/11/24", 1], ["2013/11/25", 1], ["2013/11/26", 2], ["2013/11/27", 0]]
@@ -0,0 +1,90 @@
1
+ {
2
+ "akerl": {
3
+ "date": "2013/11/27",
4
+ "today": 3,
5
+ "streaks": 52,
6
+ "longest_streak": 91,
7
+ "streak": 91,
8
+ "max": 88,
9
+ "mean": 2.9481,
10
+ "std_var": 7.1566,
11
+ "outliers": [50, 88, 32, 51],
12
+ "bounds": [0, 12, 25, 38, 88],
13
+ "quartiles": 172,
14
+ "quartile": {
15
+ "12": 1,
16
+ "13": 2
17
+ }
18
+ },
19
+ "mikegrb": {
20
+ "date": "2013/11/27",
21
+ "today": 0,
22
+ "streaks": 20,
23
+ "longest_streak": 139,
24
+ "streak": 139,
25
+ "max": 23,
26
+ "mean": 1.4044,
27
+ "std_var": 2.6412,
28
+ "outliers": [12, 23, 15],
29
+ "bounds": [0, 2, 5, 8, 23],
30
+ "quartiles": 103,
31
+ "quartile": {
32
+ "12": 4,
33
+ "0": 0
34
+ }
35
+ },
36
+ "fly": {
37
+ "date": "2013/11/27",
38
+ "today": 0,
39
+ "streaks": 43,
40
+ "longest_streak": 96,
41
+ "streak": 96,
42
+ "max": 28,
43
+ "mean": 2.7923,
44
+ "std_var": 4.571,
45
+ "outliers": [23, 22, 28],
46
+ "bounds": [0, 4, 9, 14, 28],
47
+ "quartiles": 100,
48
+ "quartile": {
49
+ "8": 2,
50
+ "35": null,
51
+ "-1": null
52
+ }
53
+ },
54
+ "leematos": {
55
+ "date": "2013/11/27",
56
+ "today": 0,
57
+ "streaks": 6,
58
+ "longest_streak": 1,
59
+ "streak": 0,
60
+ "max": 3,
61
+ "mean": 0.0273,
62
+ "std_var": 0.2325,
63
+ "outliers": [],
64
+ "bounds": [0, 0, 1, 2, 3],
65
+ "quartiles": 0,
66
+ "quartile": {
67
+ "1": 2,
68
+ "2": 3,
69
+ "3": 4
70
+ }
71
+ },
72
+ "torvalds": {
73
+ "date": "2013/11/27",
74
+ "today": 0,
75
+ "streaks": 45,
76
+ "longest_streak": 19,
77
+ "streak": 9,
78
+ "max": 42,
79
+ "mean": 6.1885,
80
+ "std_var": 6.5939,
81
+ "outliers": [34, 42, 41],
82
+ "bounds": [0, 7, 15, 23, 42],
83
+ "quartiles": 210,
84
+ "quartile": {
85
+ "42": 4,
86
+ "18": 3
87
+ }
88
+ }
89
+ }
90
+
@@ -0,0 +1 @@
1
+ [["2012/11/27", 1], ["2012/11/28", 1], ["2012/11/29", 4], ["2012/11/30", 11], ["2012/12/01", 4], ["2012/12/02", 2], ["2012/12/03", 4], ["2012/12/04", 6], ["2012/12/05", 2], ["2012/12/06", 5], ["2012/12/07", 7], ["2012/12/08", 0], ["2012/12/09", 0], ["2012/12/10", 4], ["2012/12/11", 31], ["2012/12/12", 22], ["2012/12/13", 25], ["2012/12/14", 10], ["2012/12/15", 11], ["2012/12/16", 10], ["2012/12/17", 8], ["2012/12/18", 19], ["2012/12/19", 15], ["2012/12/20", 22], ["2012/12/21", 6], ["2012/12/22", 0], ["2012/12/23", 1], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 3], ["2012/12/28", 3], ["2012/12/29", 0], ["2012/12/30", 5], ["2012/12/31", 0], ["2013/01/01", 1], ["2013/01/02", 8], ["2013/01/03", 7], ["2013/01/04", 3], ["2013/01/05", 3], ["2013/01/06", 4], ["2013/01/07", 14], ["2013/01/08", 4], ["2013/01/09", 8], ["2013/01/10", 7], ["2013/01/11", 8], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 14], ["2013/01/15", 0], ["2013/01/16", 10], ["2013/01/17", 2], ["2013/01/18", 6], ["2013/01/19", 0], ["2013/01/20", 4], ["2013/01/21", 0], ["2013/01/22", 15], ["2013/01/23", 11], ["2013/01/24", 13], ["2013/01/25", 2], ["2013/01/26", 0], ["2013/01/27", 0], ["2013/01/28", 15], ["2013/01/29", 8], ["2013/01/30", 8], ["2013/01/31", 6], ["2013/02/01", 1], ["2013/02/02", 0], ["2013/02/03", 7], ["2013/02/04", 5], ["2013/02/05", 5], ["2013/02/06", 3], ["2013/02/07", 8], ["2013/02/08", 9], ["2013/02/09", 1], ["2013/02/10", 2], ["2013/02/11", 0], ["2013/02/12", 6], ["2013/02/13", 2], ["2013/02/14", 0], ["2013/02/15", 8], ["2013/02/16", 0], ["2013/02/17", 1], ["2013/02/18", 4], ["2013/02/19", 27], ["2013/02/20", 20], ["2013/02/21", 30], ["2013/02/22", 8], ["2013/02/23", 3], ["2013/02/24", 10], ["2013/02/25", 12], ["2013/02/26", 25], ["2013/02/27", 11], ["2013/02/28", 15], ["2013/03/01", 2], ["2013/03/02", 12], ["2013/03/03", 14], ["2013/03/04", 0], ["2013/03/05", 7], ["2013/03/06", 0], ["2013/03/07", 9], ["2013/03/08", 9], ["2013/03/09", 2], ["2013/03/10", 1], ["2013/03/11", 4], ["2013/03/12", 8], ["2013/03/13", 5], ["2013/03/14", 2], ["2013/03/15", 7], ["2013/03/16", 0], ["2013/03/17", 3], ["2013/03/18", 8], ["2013/03/19", 6], ["2013/03/20", 0], ["2013/03/21", 6], ["2013/03/22", 7], ["2013/03/23", 6], ["2013/03/24", 2], ["2013/03/25", 5], ["2013/03/26", 3], ["2013/03/27", 5], ["2013/03/28", 13], ["2013/03/29", 3], ["2013/03/30", 1], ["2013/03/31", 4], ["2013/04/01", 5], ["2013/04/02", 6], ["2013/04/03", 4], ["2013/04/04", 4], ["2013/04/05", 8], ["2013/04/06", 0], ["2013/04/07", 3], ["2013/04/08", 5], ["2013/04/09", 6], ["2013/04/10", 8], ["2013/04/11", 5], ["2013/04/12", 4], ["2013/04/13", 1], ["2013/04/14", 10], ["2013/04/15", 1], ["2013/04/16", 6], ["2013/04/17", 5], ["2013/04/18", 3], ["2013/04/19", 9], ["2013/04/20", 5], ["2013/04/21", 3], ["2013/04/22", 2], ["2013/04/23", 0], ["2013/04/24", 2], ["2013/04/25", 0], ["2013/04/26", 2], ["2013/04/27", 3], ["2013/04/28", 1], ["2013/04/29", 25], ["2013/04/30", 34], ["2013/05/01", 12], ["2013/05/02", 17], ["2013/05/03", 8], ["2013/05/04", 14], ["2013/05/05", 7], ["2013/05/06", 8], ["2013/05/07", 22], ["2013/05/08", 6], ["2013/05/09", 20], ["2013/05/10", 14], ["2013/05/11", 6], ["2013/05/12", 0], ["2013/05/13", 6], ["2013/05/14", 3], ["2013/05/15", 7], ["2013/05/16", 7], ["2013/05/17", 1], ["2013/05/18", 6], ["2013/05/19", 1], ["2013/05/20", 6], ["2013/05/21", 6], ["2013/05/22", 4], ["2013/05/23", 9], ["2013/05/24", 7], ["2013/05/25", 5], ["2013/05/26", 5], ["2013/05/27", 0], ["2013/05/28", 7], ["2013/05/29", 3], ["2013/05/30", 6], ["2013/05/31", 5], ["2013/06/01", 7], ["2013/06/02", 1], ["2013/06/03", 7], ["2013/06/04", 7], ["2013/06/05", 5], ["2013/06/06", 6], ["2013/06/07", 8], ["2013/06/08", 9], ["2013/06/09", 3], ["2013/06/10", 5], ["2013/06/11", 2], ["2013/06/12", 8], ["2013/06/13", 9], ["2013/06/14", 5], ["2013/06/15", 5], ["2013/06/16", 0], ["2013/06/17", 0], ["2013/06/18", 5], ["2013/06/19", 7], ["2013/06/20", 7], ["2013/06/21", 6], ["2013/06/22", 8], ["2013/06/23", 1], ["2013/06/24", 1], ["2013/06/25", 3], ["2013/06/26", 11], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 8], ["2013/06/30", 3], ["2013/07/01", 0], ["2013/07/02", 42], ["2013/07/03", 30], ["2013/07/04", 10], ["2013/07/05", 3], ["2013/07/06", 5], ["2013/07/07", 2], ["2013/07/08", 0], ["2013/07/09", 11], ["2013/07/10", 30], ["2013/07/11", 14], ["2013/07/12", 0], ["2013/07/13", 17], ["2013/07/14", 4], ["2013/07/15", 2], ["2013/07/16", 0], ["2013/07/17", 1], ["2013/07/18", 8], ["2013/07/19", 6], ["2013/07/20", 6], ["2013/07/21", 2], ["2013/07/22", 4], ["2013/07/23", 7], ["2013/07/24", 2], ["2013/07/25", 0], ["2013/07/26", 14], ["2013/07/27", 0], ["2013/07/28", 4], ["2013/07/29", 2], ["2013/07/30", 0], ["2013/07/31", 10], ["2013/08/01", 0], ["2013/08/02", 9], ["2013/08/03", 4], ["2013/08/04", 4], ["2013/08/05", 0], ["2013/08/06", 6], ["2013/08/07", 2], ["2013/08/08", 9], ["2013/08/09", 6], ["2013/08/10", 6], ["2013/08/11", 5], ["2013/08/12", 3], ["2013/08/13", 2], ["2013/08/14", 1], ["2013/08/15", 1], ["2013/08/16", 7], ["2013/08/17", 1], ["2013/08/18", 2], ["2013/08/19", 5], ["2013/08/20", 0], ["2013/08/21", 5], ["2013/08/22", 5], ["2013/08/23", 5], ["2013/08/24", 2], ["2013/08/25", 5], ["2013/08/26", 2], ["2013/08/27", 2], ["2013/08/28", 2], ["2013/08/29", 3], ["2013/08/30", 5], ["2013/08/31", 0], ["2013/09/01", 0], ["2013/09/02", 8], ["2013/09/03", 22], ["2013/09/04", 27], ["2013/09/05", 14], ["2013/09/06", 14], ["2013/09/07", 16], ["2013/09/08", 3], ["2013/09/09", 20], ["2013/09/10", 15], ["2013/09/11", 10], ["2013/09/12", 24], ["2013/09/13", 9], ["2013/09/14", 0], ["2013/09/15", 6], ["2013/09/16", 5], ["2013/09/17", 4], ["2013/09/18", 7], ["2013/09/19", 4], ["2013/09/20", 3], ["2013/09/21", 1], ["2013/09/22", 3], ["2013/09/23", 3], ["2013/09/24", 2], ["2013/09/25", 7], ["2013/09/26", 0], ["2013/09/27", 4], ["2013/09/28", 8], ["2013/09/29", 8], ["2013/09/30", 9], ["2013/10/01", 4], ["2013/10/02", 5], ["2013/10/03", 3], ["2013/10/04", 13], ["2013/10/05", 5], ["2013/10/06", 3], ["2013/10/07", 4], ["2013/10/08", 1], ["2013/10/09", 0], ["2013/10/10", 7], ["2013/10/11", 3], ["2013/10/12", 7], ["2013/10/13", 5], ["2013/10/14", 5], ["2013/10/15", 5], ["2013/10/16", 4], ["2013/10/17", 7], ["2013/10/18", 3], ["2013/10/19", 1], ["2013/10/20", 1], ["2013/10/21", 0], ["2013/10/22", 10], ["2013/10/23", 3], ["2013/10/24", 1], ["2013/10/25", 4], ["2013/10/26", 0], ["2013/10/27", 7], ["2013/10/28", 2], ["2013/10/29", 3], ["2013/10/30", 5], ["2013/10/31", 6], ["2013/11/01", 4], ["2013/11/02", 2], ["2013/11/03", 2], ["2013/11/04", 1], ["2013/11/05", 0], ["2013/11/06", 5], ["2013/11/07", 6], ["2013/11/08", 0], ["2013/11/09", 0], ["2013/11/10", 6], ["2013/11/11", 41], ["2013/11/12", 11], ["2013/11/13", 18], ["2013/11/14", 12], ["2013/11/15", 14], ["2013/11/16", 11], ["2013/11/17", 0], ["2013/11/18", 9], ["2013/11/19", 8], ["2013/11/20", 11], ["2013/11/21", 3], ["2013/11/22", 18], ["2013/11/23", 3], ["2013/11/24", 1], ["2013/11/25", 1], ["2013/11/26", 5], ["2013/11/27", 0]]
@@ -0,0 +1,122 @@
1
+ require 'spec_helper'
2
+ require 'timecop'
3
+
4
+ describe GithubStats do
5
+ it 'defines the Github magic constant' do
6
+ expect(GithubStats::GITHUB_MAGIC).to be_an_instance_of Float
7
+ end
8
+
9
+ it 'defines a Datapoint object' do
10
+ a = GithubStats::Datapoint.new(DateTime.now, 4)
11
+ expect(a.date).to be_an_instance_of DateTime
12
+ expect(a.score).to eql 4
13
+ end
14
+
15
+ describe GithubStats::Data do
16
+ @users = open('spec/examples/results') { |f| JSON.parse f.read }
17
+ @users.each_key do |name|
18
+ data = JSON.parse(open("spec/examples/#{name}.user") { |fh| fh.read })
19
+ @users[name]['data'] = GithubStats::Data.new data
20
+ end
21
+
22
+ @users.each do |name, results|
23
+ Timecop.freeze Date.parse(results['date'])
24
+ data = results.delete('data')
25
+
26
+ context "for #{name}" do
27
+ describe '#to_h' do
28
+ it 'returns the data as a hash' do
29
+ expect(data.to_h).to be_an_instance_of Hash
30
+ end
31
+ end
32
+
33
+ describe '#today' do
34
+ it 'returns the score for today' do
35
+ expect(data.today).to eql results['today']
36
+ end
37
+ end
38
+
39
+ describe '#[]=' do
40
+ it 'returns the score for a given day' do
41
+ expect(data[results['date']]).to eql results['today']
42
+ end
43
+ end
44
+
45
+ describe '#scores' do
46
+ it 'returns the scores as an array' do
47
+ expect(data.scores).to be_an_instance_of Array
48
+ expect(data.scores.size).to be 366
49
+ end
50
+ end
51
+
52
+ describe '#streaks' do
53
+ it 'returns all the streaks for a user' do
54
+ expect(data.streaks.size).to eql results['streaks']
55
+ end
56
+ end
57
+
58
+ describe '#longest_streak' do
59
+ it "returns the user's longest streak" do
60
+ expect(data.longest_streak.size).to eql results['longest_streak']
61
+ end
62
+ end
63
+
64
+ describe '#streak' do
65
+ it "returns a user's current streak" do
66
+ expect(data.streak.size).to eql results['streak']
67
+ end
68
+ end
69
+
70
+ describe '#max' do
71
+ it 'returns the highest score in the set' do
72
+ expect(data.max.score).to eql results['max']
73
+ end
74
+ end
75
+
76
+ describe '#mean' do
77
+ it 'returns the mean score of the set' do
78
+ expect(data.mean.round 4).to eql results['mean']
79
+ end
80
+ end
81
+
82
+ describe '#std_var' do
83
+ it 'returns the standard variance of the set' do
84
+ expect(data.std_var.round 4).to eql results['std_var']
85
+ end
86
+ end
87
+
88
+ describe '#outliers' do
89
+ it 'returns the outliers for the distribution' do
90
+ expect(data.outliers).to eql results['outliers']
91
+ end
92
+ end
93
+
94
+ describe '#quartile_boundaries' do
95
+ it 'returns a boundaries of the quartiles of the set' do
96
+ expect(data.quartile_boundaries).to eql results['bounds']
97
+ end
98
+ end
99
+
100
+ describe '#quartiles' do
101
+ it 'returns the quartiles for a user' do
102
+ expect(data.quartiles[1].size).to eql results['quartiles']
103
+ end
104
+ end
105
+
106
+ describe '#quartile' do
107
+ it 'returns which quartile a point falls into' do
108
+ results['quartile'].each do |p, q|
109
+ expect(data.quartile(p.to_i)).to eql q
110
+ end
111
+ end
112
+ end
113
+
114
+ describe '#pad' do
115
+ it 'returns a padded dataset' do
116
+ expect(data.pad.size % 7).to eql 0
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe GithubStats do
4
+ describe '.new' do
5
+ it 'create a User object' do
6
+ expect(GithubStats.new).to be_an_instance_of GithubStats::User
7
+ end
8
+ end
9
+
10
+ describe GithubStats::User do
11
+ let(:named_user) { GithubStats::User.new 'akerl' }
12
+ let(:unnamed_user) { GithubStats::User.new }
13
+ let(:hash_user) { GithubStats::User.new(name: 'fly', url: 'URL-FOR-%s') }
14
+
15
+ context 'when created with a string' do
16
+ it 'uses that string as the username' do
17
+ expect(named_user.name).to eql 'akerl'
18
+ end
19
+ it 'uses the default URL' do
20
+ expect(named_user.url).to eql GithubStats::DEFAULT_URL % 'akerl'
21
+ end
22
+ end
23
+ context 'when created with no arguments' do
24
+ it 'guesses the username based on the environment' do
25
+ expect(unnamed_user.name).to be_an_instance_of String
26
+ end
27
+ end
28
+ context 'when created with a hash' do
29
+ it 'uses the name parameter as the username' do
30
+ expect(hash_user.name).to eql 'fly'
31
+ end
32
+ it 'uses the URL from the hash' do
33
+ expect(hash_user.url).to eql 'URL-FOR-fly'
34
+ end
35
+ end
36
+
37
+ it 'does not pull data until it needs to' do
38
+ expect(named_user.instance_variables).to_not include(:@data)
39
+ expect(named_user.last_updated).to be_nil
40
+ named_user.data
41
+ expect(named_user.instance_variables).to include(:@data)
42
+ expect(named_user.last_updated).to be_an_instance_of DateTime
43
+ end
44
+
45
+ it 'raises an exception if it cannot load data' do
46
+ expect { hash_user.scores }.to raise_error RuntimeError
47
+ end
48
+
49
+ it 'returns a human-readable string when inspected' do
50
+ expect(named_user.to_s).to eql 'Contributions from akerl'
51
+ expect(named_user.inspect).to eql 'Contributions from akerl'
52
+ end
53
+
54
+ it 'proxies requests for Data methods' do
55
+ expect(named_user.scores).to be_an_instance_of Array
56
+ end
57
+
58
+ it 'truthfully handles respond_to? queries' do
59
+ expect(named_user.respond_to? :to_s).to be_true
60
+ expect(named_user.respond_to? :today).to be_true
61
+ expect(named_user.respond_to? :abcd).to be_false
62
+ end
63
+ end
64
+ end
Binary file
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: githubstats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Les Aker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-24 00:00:00.000000000 Z
11
+ date: 2013-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curb
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: basiccache
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "<"
46
+ - !ruby/object:Gem::Version
47
+ version: '2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "<"
53
+ - !ruby/object:Gem::Version
54
+ version: '2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: timecop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rubocop
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -156,18 +184,28 @@ files:
156
184
  - bin/githubstats
157
185
  - githubstats.gemspec
158
186
  - lib/githubstats.rb
187
+ - lib/githubstats/data.rb
188
+ - spec/examples/akerl.user
189
+ - spec/examples/fly.user
190
+ - spec/examples/leematos.user
191
+ - spec/examples/mikegrb.user
192
+ - spec/examples/results
193
+ - spec/examples/torvalds.user
194
+ - spec/githubstats/data_spec.rb
195
+ - spec/githubstats_spec.rb
159
196
  - spec/spec_helper.rb
160
197
  - vendor/cache/ast-1.1.0.gem
198
+ - vendor/cache/basiccache-0.0.25.gem
161
199
  - vendor/cache/coveralls-0.7.0.gem
162
200
  - vendor/cache/curb-0.8.5.gem
163
201
  - vendor/cache/diff-lcs-1.2.5.gem
164
- - vendor/cache/docile-1.1.0.gem
202
+ - vendor/cache/docile-1.1.1.gem
165
203
  - vendor/cache/fuubar-1.2.1.gem
166
204
  - vendor/cache/hashr-0.0.22.gem
167
205
  - vendor/cache/json-1.8.1.gem
168
206
  - vendor/cache/mime-types-2.0.gem
169
207
  - vendor/cache/multi_json-1.8.2.gem
170
- - vendor/cache/parser-2.1.0.pre1.gem
208
+ - vendor/cache/parser-2.1.0.pre2.gem
171
209
  - vendor/cache/powerpack-0.0.9.gem
172
210
  - vendor/cache/rainbow-1.1.4.gem
173
211
  - vendor/cache/rake-10.1.0.gem
@@ -184,6 +222,7 @@ files:
184
222
  - vendor/cache/slop-3.4.7.gem
185
223
  - vendor/cache/term-ansicolor-1.2.2.gem
186
224
  - vendor/cache/thor-0.18.1.gem
225
+ - vendor/cache/timecop-0.6.3.gem
187
226
  - vendor/cache/tins-0.13.1.gem
188
227
  - vendor/cache/travis-lint-1.7.0.gem
189
228
  homepage: https://github.com/akerl/githubstats
@@ -211,4 +250,13 @@ signing_key:
211
250
  specification_version: 4
212
251
  summary: Present Github contributions stats in a consumable format
213
252
  test_files:
253
+ - spec/examples/akerl.user
254
+ - spec/examples/fly.user
255
+ - spec/examples/leematos.user
256
+ - spec/examples/mikegrb.user
257
+ - spec/examples/results
258
+ - spec/examples/torvalds.user
259
+ - spec/githubstats/data_spec.rb
260
+ - spec/githubstats_spec.rb
214
261
  - spec/spec_helper.rb
262
+ has_rdoc:
Binary file
Binary file