File size: 2,286 Bytes
58bb4c7
5dcecd4
 
58bb4c7
 
 
 
 
 
 
 
 
 
 
 
fe4f734
 
 
 
 
 
 
 
 
58bb4c7
 
 
 
 
 
 
 
 
 
fe4f734
 
 
58bb4c7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5dcecd4
 
 
 
 
 
 
 
 
 
 
 
 
58bb4c7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from datetime import date
from pathlib import Path

from pandas import DataFrame

from modules import (
    METADATA, 
    get_date_range, 
    get_rules_in_window,
    groupby_agency, 
    groupby_date, 
    )


def save_csv(path: Path, df_all: DataFrame, df_agency: DataFrame, df_ym: DataFrame, transition_year: int):
    """Save output as CSV files.

    Args:
        path (Path): Save data here.
        df_all (DataFrame): Data at the rule level.
        df_agency (DataFrame): Data grouped by agency.
        df_ym (DataFrame): Data grouped by publication year and month.
        transition_year (int): Presidential transition year.
    """
    files = (
        f"rules_{transition_year - 1}_{transition_year}.csv", 
        f"rules_by_agency_{transition_year - 1}_{transition_year}.csv", 
        f"rules_by_month_{transition_year - 1}_{transition_year}.csv"
        )
    dataframes = (df_all, df_agency, df_ym)
    for data, file in zip(dataframes, files):
        data.to_csv(path / file, index=False)


def main(start_date: str, save_data: bool = True, path: Path | None = None, metadata: dict | None = None, significant: bool = True):
    """Retrieve rules in CRA window and save resulting data.
    """
    if date.fromisoformat(start_date) < date(2023, 4, 6):
        significant = False
    date_range = get_date_range(start_date)
    transition_year = date_range.get("transition_year")
    df, _ = get_rules_in_window(start_date, get_significant=significant)
    
    df_agency = groupby_agency(df, metadata=metadata, significant=significant)
    df_ym = groupby_date(df, significant=significant)
    
    if save_data:
        if path is None:
            path = Path(__file__).parent
        save_csv(path, df, df_agency, df_ym, transition_year)
    
    return df, df_agency, df_ym


if __name__ == "__main__":

    main_path = Path(__file__).parent
    data_path = main_path.joinpath("data")
    if not data_path.exists():
        data_path.mkdir(parents=True, exist_ok=True)
    
    start = input("Enter beginning of CRA window [yyyy-mm-dd]: ")
    df, agency, ym = main(start, path=data_path, metadata=METADATA, significant=True)
    print(f"Rules in CRA window: {len(df)}")
    print("\nRules by agency\n", agency.head(10))
    print("\nRules by month\n", ym)