콘텐츠로 이동

hossam 패키지

hossam

load_data

load_data(key, local=None)

키로 지정된 데이터셋을 로드한다.

Parameters:

Name Type Description Default
key str

메타데이터에 정의된 데이터 식별자(파일명 또는 별칭)

required
local str

로컬 메타데이터 경로. None이면 원격(BASE_URL) 사용.

None

Returns:

Type Description
Optional[DataFrame]

DataFrame | None: 성공 시 데이터프레임, 실패 시 None

Examples:

>>> from hossam.data_loader import load_data
>>> df = load_data('AD_SALES')  # 메타데이터에 해당 키가 있어야 함
Source code in hossam/data_loader.py
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
def load_data(key: str, local: str = None) -> Optional[DataFrame]:
    """키로 지정된 데이터셋을 로드한다.

    Args:
        key (str): 메타데이터에 정의된 데이터 식별자(파일명 또는 별칭)
        local (str, optional): 로컬 메타데이터 경로. None이면 원격(BASE_URL) 사용.

    Returns:
        DataFrame | None: 성공 시 데이터프레임, 실패 시 None

    Examples:
        >>> from hossam.data_loader import load_data
        >>> df = load_data('AD_SALES')  # 메타데이터에 해당 키가 있어야 함
    """
    index = None
    try:
        url, desc, index = __get_data_url(key, local=local)
    except Exception as e:
        try:
            print(f"\033[91m{str(e)}\033[0m")
        except Exception:
            print(e)
        return

    print("\033[94m[data]\033[0m", url.replace("\\", "/"))
    print("\033[94m[desc]\033[0m", desc)

    df = None

    try:
        df = __get_df(url, index_col=index)
    except Exception as e:
        try:
            print(f"\033[91m{str(e)}\033[0m")
        except Exception:
            print(e)
        return


    return df

load_info

load_info(search=None, local=None)

메타데이터에서 사용 가능한 데이터셋 정보를 로드한다.

Parameters:

Name Type Description Default
search str

이름 필터 문자열. 포함하는 항목만 반환.

None
local str

로컬 메타데이터 경로. None이면 원격(BASE_URL) 사용.

None

Returns:

Name Type Description
DataFrame DataFrame

name, chapter, desc, url 컬럼을 갖는 테이블

Examples:

>>> from hossam.data_loader import load_info
>>> info = load_info()
>>> list(info.columns)
['name', 'chapter', 'desc', 'url']
Source code in hossam/data_loader.py
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
def load_info(search: str = None, local: str = None) -> DataFrame:
    """메타데이터에서 사용 가능한 데이터셋 정보를 로드한다.

    Args:
        search (str, optional): 이름 필터 문자열. 포함하는 항목만 반환.
        local (str, optional): 로컬 메타데이터 경로. None이면 원격(BASE_URL) 사용.

    Returns:
        DataFrame: name, chapter, desc, url 컬럼을 갖는 테이블

    Examples:
        >>> from hossam.data_loader import load_info
        >>> info = load_info()
        >>> list(info.columns)
        ['name', 'chapter', 'desc', 'url']
    """
    global BASE_URL

    path = None

    if not local:
        data_path = join(BASE_URL, "metadata.json").replace("\\", "/")

        with requests.Session() as session:
            r = session.get(data_path)

            if r.status_code != 200:
                raise Exception("[%d Error] %s ::: %s" % (r.status_code, r.reason, data_path))

        my_dict = r.json()
    else:
        data_path = join(local, "metadata.json")

        if not exists(data_path):
            raise FileNotFoundError("존재하지 않는 데이터에 대한 요청입니다.")

        with open(data_path, "r", encoding="utf-8") as f:
            my_dict = json.loads(f.read())

    my_data = []
    for key in my_dict:
        if 'index' in my_dict[key]:
            del my_dict[key]['index']

        my_dict[key]['url'] = "%s/%s" % (BASE_URL, my_dict[key]['url'])
        my_dict[key]['name'] = key

        if 'chapter' in my_dict[key]:
            my_dict[key]['chapter'] = ", ".join(my_dict[key]['chapter'])
        else:
            my_dict[key]['chapter'] = '공통'

        my_data.append(my_dict[key])

    my_df = DataFrame(my_data)
    my_df2 = my_df.reindex(columns=['name', 'chapter', 'desc', 'url'])

    if search:
        my_df2 = my_df2[my_df2['name'].str.contains(search.lower())]

    return my_df2