ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pandas
    NAVER AI TECH 2023. 3. 9. 18:04

    From BoostCourse AI Tech TEMLAB director 최성철: PythonDataAnalysisLibrary - Pandas

     

    판다스 강의를 보고 나서 자신 있게 실습 문제를 풀려고 했지만 복습이 필요하다는 것을 깨달았다. 하하.

     

    가장 먼저는 Series와 DataFrame을 다룰 줄 알아야 한다.

    class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)

    class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)

     

    흥미롭게도 Series와 DataFrame 모두 dict type을 사용 가능하다.

    예를 들어, 다음과 같이 df를 생성할 수 있다.

    import numpy as np
    import pandas as pd
    phone_number_list = {'first': [2752, 4206, 3755, 7661],
                        'second': [7821, 7821, 7821, 2500]}
    
    df = pd.DataFrame(phone_number_list)
    df

    010을 추가해봅시다. 

    df["zeroth"] = ["010" for i in range(4)]
    df

    field 순서가 마음에 들지 않네요. 원래 전화번호 순서대로 재배열해 봅시다.

    df = df[["zeroth", 'first', 'second']]
    df

    index의 이름을 변경해 봅시다.

    df.rename(index={0:"Jo", 1:"Kim", 2:"Jo", 3:"Jo"}, inplace=True)
    df

    Index "Jo"에 해당하는 행만 반환해봅시다.

    df.loc["Jo"]

    두 번째 인덱스에 해당하는 행까지 반환해봅시다.

    df.iloc[:2]

    끝자리가 7821로 끝나는 열에 True 값을 배정해줍시다.

    df["family"] = df.second == 7821

    Family 열을 지워봅시다.

    # 둘 중 하나 사용
    del df["family"]
    df.drop("family", axis=1, inplace=True)

    index 명을 다시 0, 1, 2, 3으로 바꿔봅시다.

    df.index = [0, 1, 2, 3]

    first 열의 값에 2를 곱해봅시다.

    df["first"].map(lambda x:x*2)

    country_code 열을 생성해줍시다.

    df["country_code"] = [82, 82, 82 ,82]

    country_name 열을 생성해줍시다.

    df["country_name"] = df["country_code"].replace({82:"한국"})

    모든 element에 *2를 해 봅시다.

    df.apply(lambda x: x*2)

     

    Built-in 내장함수에 대해서 알아보자.

    describe: numeric type 데이터 요약

    df.describe()

    unique: series data의 유일한 값을 list로 반환

    df.unique()

    sum: column 또는 row 값의 연산 지원 (min, max, mean, count, median, mad, var, etc.)

    df.sum()

    isnull: column 또는 row 값의 NaN 값의 index 반환

    df.isnull()

    sort_values: column 값을 기준으로 데이터를 정렬

    df.sort_values(["column_name"], ascending=True)

    corr: 상관계수 반환

    df.first.corr(df.second)

    cov: 공분산 반환

    df.first.cov(df.second)

     

    Groupby에 대해서 알아보자.

    df.groupby(by, axis, level, as_index, sort, group_keys, squeeze, observed, dropna)

    A groupby operation can be used to group large amounts of data and compute operations on these groups.

     

    groupby는 generic type을 반환해준다.

    따라서 df_group["column_name"].sum()과 같은 함수와 같이 사용해야 원하는 결과값을 반환한다.

    df_grouped = df.groupby("zeroth")
    type(df_group)
    pandas.core.groupby.generic.DataFrameGroupBy

     

    groupby는 한 개 이상의 column을 함께 묶을 수 있다.

    이때 반환되는 데이터프레임은 hierarchical index 형태가 된다.

    df_grouped = df.groupby("team", "year")

     

    hierarchical index를 다루기 위해 다음 함수를 사용할 수 있다.

    df.unstack(): group으로 묶여진 데이터를 matrix 형태로 전환

    df.swaplevel(): index level을 변경

     

    df_grouped를 다루기 위해서 유용하게 사용할 수 있는 함수로 agg, transform, filter가 있다.

    agg: 요약된 통계정보를 제공한다.

    result = grouped_df.agg(
        {"age": [min, max],
         "fare": np.mean}
        )

    transform: 개별 데이터의 변환을 지원한다.

    result = df_grouped.transform(function_f)

    filter: 특정 조건으로 데이터를 검색한다.

    result = df_grouped.filter(lambda x: len(x) > 3)

     

    필요하다면 pandas.pivot_table()와 pandas.crosstab()을 활용해보기 바란다.

    피벗 테이블: 여러 데이터 중에서 자신이 원하는 데이터만을 가지고 원하는 행과 열에 데이터를 배치하여 새로운 보고서를 만드는 기능.

     

    데이터를 합칠 때는 merge와 concat 함수를 사용한다.

    pd.merge(df_a, df_b, on="column_name"): 두 개의 데이터를 하나로 합친다.

    합치는 방법에 따라 how : {'left', 'right', 'outer', 'inner', 'cross'}, default 'inner'가 있다.

    pd.concat(df_a, df_b): 같은 형태의 데이터를 붙인다.

    axis : {0/'index', 1/'columns'}, default 0에 주의하자.

     

    데이터 저장에 대해 알아보자

    데이터 저장을 위해서 sqlite3, XLS나 pickle을 사용할 수 있다.

    pickle로 변환하기 위해서 다음 두 가지 방법을 사용할 수 있다.

    df_routes.to_pickle("./data/df_routes.pickle")
    df_routes_pickle = pd.read_pickle("./data/df_routes.pickle")

     

    끝!

     

    'NAVER AI TECH' 카테고리의 다른 글

    Word Embedding (4주차)  (0) 2023.03.27
    Intro to NLP (4주차)  (0) 2023.03.27
    3주차 회고록 (DL Basic & Data Visualization & Git)  (0) 2023.03.24
    2주차 회고록 (PyTorch)  (0) 2023.03.17
    1주차 회고록 (Python & AI Math)  (0) 2023.03.10

    댓글

Designed by Tistory.