【Kaggle】 읽기 쉬운 Kernel을 작성하기 위해 의식하는 4개의 Tips
소개
Kaggle의 Public Kernel에는 유용한 것이 많지만 가끔 초세로 길이의 Notebook을 만날 수 있다.
(▲스크롤 바의 작음에 절망한다)
이런 Kernel을 만들면 나중에 보답하는 것이 트라이이므로, Public Kernel을 잘 활용하면서, 자신의 흐름으로 전망이 좋은 Kernel이 쓸 수 있도록 의식하고 있는 것을 소개해 본다.
결론
1. 시각화 최소화
시각화는 EDA용 Kernel에 쓰고, 학습용 Kernel에서는 시각화를 최소화하고 있다.
Public Kernel 중에는 특징량을 생성하는 근거를 남겨두기 때문에, 시각화와 특징량 생성이 같은 Kernel에 쓰여져 있는 것이 많고 제3자가 Kernel을 읽는데 있어서 매우 중요하지만, 데이터 가공]과 [가시화]라는 목적이 다른 코드가 섞여 버린다 & 출력되는 도표가 상당한 행수를 취해 버리기 때문.
2. 처리의 중심이 되는 오브젝트를 밝히기
특징량 생성에서 자주 있는 것이, 처리의 중심이 되는 오브젝트(DataFrame)가 있어, 거기에 다른 DataFrame을 결합해 정보를 부여해 가는 것으로 열이 늘어나는 패턴.
처리의 중심이 되는(=후속에 연결된다) DataFrame과, 그 자리 밖에 사용하지 않는 DataFrame을 구별할 수 있게 하면 데이터의 흐름을 파악하기 쉽다.
다음의 예에서는 sales_df
가 처리의 중심으로, shops_df
이나 item_category_df
로부터 각각 정보를 부여하고 있다.
# Input: sales_df
# date item_id num shop_id
# 0 20201201 500 1 100
# 1 20201202 501 2 101
# 2 20201203 502 5 102
# Input: shops_df
# shop_id shop_name
# 0 100 shop-1
# 1 101 shop-2
# 2 102 shop-3
# Input: item_category_df
# item_id category
# 0 500 food
# 1 501 drink
# 2 502 cloth
# 店の情報を付与
sales_df = sales_df.join(shops_df.set_index('shop_id'), on='shop_id', how='left')
# 商品カテゴリの情報を付与
sales_df = sales_df.join(item_category_df.set_index("item_id"), on="item_id", how="left")
# Output: sales_df
# date item_id num shop_id shop_name category
# 0 20201201 500 1 100 shop-1 food
# 1 20201202 501 2 101 shop-2 drink
# 2 20201203 502 5 102 shop-3 cloth
3. 키를 의식한다
pandas.DataFrame의 메소드는 SQL과 같은 조작을 수행하므로 키를 지정하여 처리하는 경우가 많다. 키를 의식하고 읽으면 하고 싶은 것을 알 수 있다.
특징량 생성에서 자주 있는 것이, 처리의 중심이 되는 오브젝트(DataFrame)가 있어, 거기에 다른 DataFrame을 결합해 정보를 부여해 가는 것으로 열이 늘어나는 패턴.
처리의 중심이 되는(=후속에 연결된다) DataFrame과, 그 자리 밖에 사용하지 않는 DataFrame을 구별할 수 있게 하면 데이터의 흐름을 파악하기 쉽다.
다음의 예에서는
sales_df
가 처리의 중심으로, shops_df
이나 item_category_df
로부터 각각 정보를 부여하고 있다.# Input: sales_df
# date item_id num shop_id
# 0 20201201 500 1 100
# 1 20201202 501 2 101
# 2 20201203 502 5 102
# Input: shops_df
# shop_id shop_name
# 0 100 shop-1
# 1 101 shop-2
# 2 102 shop-3
# Input: item_category_df
# item_id category
# 0 500 food
# 1 501 drink
# 2 502 cloth
# 店の情報を付与
sales_df = sales_df.join(shops_df.set_index('shop_id'), on='shop_id', how='left')
# 商品カテゴリの情報を付与
sales_df = sales_df.join(item_category_df.set_index("item_id"), on="item_id", how="left")
# Output: sales_df
# date item_id num shop_id shop_name category
# 0 20201201 500 1 100 shop-1 food
# 1 20201202 501 2 101 shop-2 drink
# 2 20201203 502 5 102 shop-3 cloth
3. 키를 의식한다
pandas.DataFrame의 메소드는 SQL과 같은 조작을 수행하므로 키를 지정하여 처리하는 경우가 많다. 키를 의식하고 읽으면 하고 싶은 것을 알 수 있다.
예를 들면, 다음의 예에서는
sales_df
에 shops_df
로부터 정보를 부여하기 위해 join
를 사용한다. 키는 on="shop_id"
를 지정하고 있으므로, 가게 마다의 정보를 부여하고 있는 것을 알 수 있다.# 例. "shop_id"列をキーに結合する場合
sales_df = sales_df.join(shops_df.set_index("shop_id"), on="shop_id", how="left")
4. 함수로 정리
비교적 긴 처리나 반복 사용하는 처리는 함수로 정리해 버리는 것이 좋다.
모든 처리를 함수화할 필요가 없기 때문에 기호로.
같은 장점이 있다.
# 例. 店の情報を付与する関数
def add_shops(df, shops_df):
return df.join(shops_df.set_index('shop_id'), on='shop_id', how='left')
sales_df = add_shops(sales_df, shops_df)
Reference
이 문제에 관하여(【Kaggle】 읽기 쉬운 Kernel을 작성하기 위해 의식하는 4개의 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yota-p/items/4dae85659d17d3002311텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)