sahm_as_dataframe 0.1.0 → 0.2.0

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
  SHA256:
3
- metadata.gz: 529b67c1458210458ced19c9cddfd31f6923c9e63ac4618f4e0afb7988be8186
4
- data.tar.gz: 8cc6890f65f3b9bb4941ff30e944b17eeb00014c965b3084b1777d6a1ae0e76e
3
+ metadata.gz: ffc8406967a0d2e8421878703b0d0919387f471b21830c3ef4575a1e1e166f61
4
+ data.tar.gz: 7de2d4acb7912c1f8b723c14e91dcb286d5cbc77a2d4c60300188dc85224d24a
5
5
  SHA512:
6
- metadata.gz: 23002c91231e76df43a3947ebbf5fd9a07c8148ab7285a5e4e7bfed285dec6ddb57af631641e3f7106b250aa54821e7d215a46145133afa3d49fd1b9493086b7
7
- data.tar.gz: 2203947f92ec02601b80d8b1948513b7b0866c0755526b84e550759b74de23a219fe4200511720afa6dc1b5f4f9e50381e424d98debe7d27ca8df1b50cdb7456
6
+ metadata.gz: 1818db9b53b926265a510bc8d6c7cf24144f2b70f6791be23273105dc72afd0b0d0cacf9605c6476844b089e91d60a9f34eb677c7948bc53373558a6b4ec56d6
7
+ data.tar.gz: a09403cf08adb555dfb860323b8d8c286ebe0c8c97f8a0f6bda0d29a0e39d6b2b83f716f9df3f92833e2995a521a221f60e6fecc6c2aa99e7b6ea74633b7bcbc
data/.gitignore CHANGED
@@ -6,3 +6,6 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /vendor/bundle
10
+ Gemfile.lock
11
+ spec/examples.txt
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.6
data/Gemfile CHANGED
@@ -1,7 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
+ ruby '3.3.6'
4
+
3
5
  # Specify your gem's dependencies in sahm_as_dataframe.gemspec
4
6
  gemspec
5
-
6
- gem "rake", "~> 12.0"
7
- gem "none", "~> "
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # EconDataReader
1
+ # Sahm As Dataframe
2
2
 
3
- Up to date remote economic data access for ruby, using Polars dataframes.
3
+ Calculate the Sahm recession indicator using FRED unemployment data, returning results as Polars dataframes.
4
4
 
5
- This package will fetch economic and financial information from several different sources.
5
+ This gem computes the Sahm indicator by fetching unemployment rate (UNRATE) data from the Federal Reserve Economic Data (FRED) API and applying the Sahm rule calculation.
6
6
 
7
7
  ## Installation
8
8
 
@@ -27,13 +27,80 @@ This gem does not require configuration on its own, but it does require the fred
27
27
 
28
28
  ## Usage
29
29
 
30
+ **Requirements:** Ruby >= 3.3.0, polars-df 0.27.1
31
+
30
32
  ``` ruby
31
- SahmAsDataframe::Client.new.fetch
33
+ > SahmAsDataframe::Client.new.fetch
34
+ =>
35
+ shape: (919, 4)
36
+ ┌────────────┬────────┬────────────────┬────────────────┐
37
+ │ Timestamps ┆ UNRATE ┆ SAHM indicator ┆ SAHM recession │
38
+ │ --- ┆ --- ┆ --- ┆ --- │
39
+ │ date ┆ f64 ┆ f64 ┆ bool │
40
+ ╞════════════╪════════╪════════════════╪════════════════╡
41
+ │ 1948-01-01 ┆ 3.4 ┆ 0.0 ┆ false │
42
+ │ 1948-02-01 ┆ 3.8 ┆ 0.2 ┆ false │
43
+ │ 1948-03-01 ┆ 4.0 ┆ 0.333333 ┆ false │
44
+ │ 1948-04-01 ┆ 3.9 ┆ 0.5 ┆ true │
45
+ │ 1948-05-01 ┆ 3.5 ┆ 0.4 ┆ false │
46
+ │ … ┆ … ┆ … ┆ … │
47
+ │ 2024-03-01 ┆ 3.8 ┆ 0.4 ┆ false │
48
+ │ 2024-04-01 ┆ 3.9 ┆ 0.366667 ┆ false │
49
+ │ 2024-05-01 ┆ 4.0 ┆ 0.4 ┆ false │
50
+ │ 2024-06-01 ┆ 4.1 ┆ 0.5 ┆ false │
51
+ │ 2024-07-01 ┆ 4.3 ┆ 0.433333 ┆ false │
52
+ └────────────┴────────┴────────────────┴────────────────┘
32
53
  ```
33
54
 
34
55
  ## Documentation
35
56
 
36
- TBD
57
+ ### The Sahm Rule
58
+
59
+ The Sahm rule is a recession indicator that signals the start of a recession when the three-month moving average of the national unemployment rate rises by 0.5 percentage points or more relative to its low during the previous 12 months.
60
+
61
+ This implementation calculates:
62
+ 1. A 3-month rolling average of the unemployment rate
63
+ 2. The minimum unemployment rate over the previous 12 months
64
+ 3. The Sahm indicator as the difference between these two values
65
+ 4. A recession flag when the indicator reaches or exceeds 0.5
66
+
67
+ ### API Reference
68
+
69
+ The primary interface is `SahmAsDataframe::Client`:
70
+
71
+ ```ruby
72
+ client = SahmAsDataframe::Client.new
73
+ df = client.fetch(start: '2020-01-01', fin: '2024-12-31', interval: '1d')
74
+ ```
75
+
76
+ **Parameters:**
77
+ - `start` (optional): Start date for the data series (default: earliest available)
78
+ - `fin` (optional): End date for the data series (default: latest available)
79
+ - `interval` (optional): Data interval (default: '1d' for daily)
80
+
81
+ **Returns:**
82
+ A Polars DataFrame with columns:
83
+ - `Timestamps`: Date of observation
84
+ - `UNRATE`: Unemployment rate
85
+ - `SAHM indicator`: The calculated Sahm indicator value
86
+ - `SAHM recession`: Boolean flag indicating recession signal (indicator >= 0.5)
87
+
88
+ ## Testing
89
+
90
+ This gem uses RSpec for testing. To run the test suite:
91
+
92
+ ```bash
93
+ bundle install
94
+ bundle exec rake spec
95
+ ```
96
+
97
+ Or simply:
98
+
99
+ ```bash
100
+ bundle exec rake
101
+ ```
102
+
103
+ The tests use stubbed data to avoid making live HTTP requests to the FRED API. All Sahm indicator calculations are verified against known test data to ensure accuracy of the rolling average and minimum calculations.
37
104
 
38
105
  ## Contributing
39
106
 
data/Rakefile CHANGED
@@ -1,2 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
2
6
  task :default => :spec
@@ -1,3 +1,3 @@
1
1
  module SahmAsDataframe
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.description = "Sahm economic indicator using fred_as_dataframe"
11
11
  spec.homepage = "https://github.com/bmck/sahm_as_dataframe"
12
12
  spec.license = "MIT"
13
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 3.3.0")
14
14
 
15
15
  # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
16
16
 
@@ -29,6 +29,9 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  # Uncomment to register a new dependency of your gem
31
31
  # spec.add_dependency "typhoeus-gem", "~> 0.6.9"
32
- spec.add_dependency 'polars-df'
32
+ spec.add_dependency 'polars-df', '0.27.1'
33
33
  spec.add_dependency 'fred_as_dataframe'
34
+
35
+ spec.add_development_dependency 'rspec', '~> 3.0'
36
+ spec.add_development_dependency 'rake', '~> 13.0'
34
37
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sahm_as_dataframe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bill McKinnon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-05 00:00:00.000000000 Z
11
+ date: 2026-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: polars-df
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.27.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.27.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fred_as_dataframe
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '13.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13.0'
41
69
  description: Sahm economic indicator using fred_as_dataframe
42
70
  email:
43
71
  - bill.mckinnon@bmck.org
@@ -46,6 +74,7 @@ extensions: []
46
74
  extra_rdoc_files: []
47
75
  files:
48
76
  - ".gitignore"
77
+ - ".ruby-version"
49
78
  - ".travis.yml"
50
79
  - Gemfile
51
80
  - LICENSE.txt
@@ -72,14 +101,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
101
  requirements:
73
102
  - - ">="
74
103
  - !ruby/object:Gem::Version
75
- version: 2.3.0
104
+ version: 3.3.0
76
105
  required_rubygems_version: !ruby/object:Gem::Requirement
77
106
  requirements:
78
107
  - - ">="
79
108
  - !ruby/object:Gem::Version
80
109
  version: '0'
81
110
  requirements: []
82
- rubygems_version: 3.1.6
111
+ rubygems_version: 3.5.22
83
112
  signing_key:
84
113
  specification_version: 4
85
114
  summary: Sahm economic criteria using fred_as_dataframe