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 +4 -4
- data/.gitignore +3 -0
- data/.ruby-version +1 -0
- data/Gemfile +2 -3
- data/README.md +72 -5
- data/Rakefile +4 -0
- data/lib/sahm_as_dataframe/version.rb +1 -1
- data/sahm_as_dataframe.gemspec +5 -2
- metadata +37 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ffc8406967a0d2e8421878703b0d0919387f471b21830c3ef4575a1e1e166f61
|
|
4
|
+
data.tar.gz: 7de2d4acb7912c1f8b723c14e91dcb286d5cbc77a2d4c60300188dc85224d24a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1818db9b53b926265a510bc8d6c7cf24144f2b70f6791be23273105dc72afd0b0d0cacf9605c6476844b089e91d60a9f34eb677c7948bc53373558a6b4ec56d6
|
|
7
|
+
data.tar.gz: a09403cf08adb555dfb860323b8d8c286ebe0c8c97f8a0f6bda0d29a0e39d6b2b83f716f9df3f92833e2995a521a221f60e6fecc6c2aa99e7b6ea74633b7bcbc
|
data/.gitignore
CHANGED
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.3.6
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Sahm As Dataframe
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Calculate the Sahm recession indicator using FRED unemployment data, returning results as Polars dataframes.
|
|
4
4
|
|
|
5
|
-
This
|
|
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
|
-
|
|
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
data/sahm_as_dataframe.gemspec
CHANGED
|
@@ -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(">=
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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
|