프로그래밍 언어/Python

연관 키워드 경쟁 강도 분석하기 - 키워드별 경쟁 강도 분석하기

· 코딩마이데이

키워드별 상품 개수 수집

비주얼 스튜디오 코드에서 새로운 파일을 생성하고, 파일명을 'step_2_3.py'로 저장합니다. 다음 코드를 입력한 후, 대화형 창에서 실행하면, 'output' 폴더에 키워드별 상품 개수가 포함된 'step_2_3.csv' 파일이 생성됩니다.

 

ch08/step_2_3.py

import time
from pathlib import Path
import pandas as pd
from tqdm import tqdm # 진행 표시줄 관리를 위한 tqdm 클래스
from step_1_1 import OUT_DIR # 이전에 작성한 모듈을 불러옵니다.
from step_1_2 import query_naver_shop
from step_2_2 import OUT_2_2

OUT_2_3 = OUT_DIR / f"{Path(__file__).stem}.csv"

def shop_cnt_to_csv(): # 11
    df_raw = pd.read_csv(OUT_2_2) # CSV 파일에서 데이터프레임 생성
    kwd_list = df_raw["키워드"].to_list() # '키워드' 열을 리스트 타입으로 변환 # 13
    item_cnt = [] # 키워별 네이버 쇼핑 상품 개수
    with tqdm(total=len(kwd_list)) as pbar: # tqdm 객체 생성 # 15
        for kwd in kwd_list:
            resp = query_naver_shop(query=kwd) # 네이버 쇼핑 상품 검색 # 17
            total = resp.get("total", 0) # 전체 등록 상품 개수 # 18
            item_cnt.append({"키워드": kwd, "상품수": total}) # 19
            time.sleep(0.5) # 0.5초간 일시 정지 # 20
            pbar.set_description(kwd) # 진행 표시줄 메시지 수정 # 21
            pbar.update() # 진행 표시줄 업데이트 # 22
    df_raw = pd.DataFrame(item_cnt) # 데이터프레임 생성
    df_raw.to_csv(OUT_2_3, index=False) # CSV 파일로 저장

if __name__ == "__main__":
    shop_cnt_to_csv() # 키워드별 상품 개수 수집

 

실행 결과

키워드,상품수
나이키,5594340
나이키운동화,2247215
자라키즈,87736

 

11 키워드별 상품 개수를 CSV 파일로 저장하는 함수 shop_cnt_to_csv()를 정의합니다

12 함수 to_list()를 사용하여 키워드 열을 리스트 형식으로 변환합니다.

15 tqdm 객체를 생성하고, 변수 pbar에 저장합니다. 매개변수 total에 반복 처리할 전체 데이터 개수를 전달합니다.

17 함수 query_naver_shop()를 호출하여 네이버 쇼핑에 등록된 상품을 검색합니다.

18 total 키 값을 추출하여 네이버 쇼핑에 등록된 전체 상품 개수를 구합니다.

19 검색한 키워드와 전체 상품 개수를 딕셔너리로 만들고, 이를 item_cnt 리스트에 추가합니다.

20 안정적인 API 호출 결과를 얻기 위해 time 패키지의 함수 sleep()를 호출하여 0.5초간 일시정지합니다.

21 tqdm 객체의 함수 set_description()를 호출하여 진행 표시줄 메시지를 수정합니다.

22 tqdm 객체의 함수 update()를 호출하여 진행 표시줄을 업데이트합니다.

 

 

키워드별 경쟁 강도 분석

비주얼 스튜디오 코드에서 새로운 파일을 만들고, 파일명을 'step_2_4.py'로 저장합니다. 다음 코드를 입력하고, 대화형 창에서 실행하면, 'output' 폴더에 키워드별 경쟁 강도가 내림차순으로 정렬된 'step_2_4.csv' 파일이 생성됩니다.

 

ch08/step_2_4.py

from pathlib import Path
import pandas as pd
from step_1_1 import OUT_DIR # 이전에 작성한 모듈을 불러옵니다.
from step_2_2 import OUT_2_2
from step_2_3 import OUT_2_3

OUT_2_4 = OUT_DIR / f"{Path(__file__).stem}.csv"

def comp_lev_to_csv(): # 09
    df_kwd = pd.read_csv(OUT_2_2) # 정제 처리된 연관 키워드
    df_shop = pd.read_csv(OUT_2_3) # 키워드별 상품 개수
    df_merge = pd.merge(df_kwd, df_shop, left_on="키워드", right_on="키워드") # 12
    df_merge["경쟁강도"] = (df_merge["상품수"] / df_merge["검색수M"]).round(6) # 13
    df_filtered = df_merge.filter(["키워드", "검색수M", "클릭수M", "클릭률M", # 14
                                   "상품수", "경쟁강도"]) # 15
    df_sorted = df_filtered.sort_values("경쟁강도", ascending=False) # 16
    df_sorted.to_csv(OUT_2_4, index=False) # CSV 파일로 저장

if __name__ == "__main__":
    comp_lev_to_csv() # 키워드별 경쟁강도 분석

 

실행 결과

키워드,검색수M,클릭수M,클릭률M,상품수,경쟁강도
나이키신발,29900,높음,431.9,2580135,86.29214
나이키러닝화,19300,높음,324.9,1241171,64.309378
GAP,12200,높음,46.8,476345,39.044672

 

09 키워드별 경쟁 강도를 분석하는 함수 comp_lev_to_csv()를 정의합니다.

12 pandas 패키지의 함수 merge()를 사용하여 df_kwd와 df_shop을 입력값으로 전달하고, 키워드 열의 값이 정확히 일치하는 행만 결합합니다.

13 상품수 열을 검색수M 열로 나눠 키워드별로 경쟁 강도를 분석하고, 그 결과를 경쟁강도 열에 저장합니다.

14~15 함수 filter()를 사용하여 경쟁 강도 분석에 필요한 열만 필터링합니다.

16 함수 sort_values()를 사용하여 경쟁강도 열을 기준으로 내림차순 정렬합니다.