<jupyter_start><jupyter_text>- 영양제를 제외한 홍삼, 건강분말, 건강음료, 건강환/정, 꿀은 네이버 쇼핑에서 확인해본 결과 하위 카테고리(cate_4) 자체가 없었습니다. 즉 cate_3이 가장 하위 카테고리 입니다- 이에 영양제를 제외하고는 cate_3 = cate_4로 처리하기로 합니다 ![image.png](attachment:image.png)![image-2.png](attachment:image-2.png)<jupyter_code>#cate_3이 꿀인 경우 cate_4도 꿀, cate_3이 홍삼인 경우 cate_4도 홍삼으로 처리합니다 
pre_df.loc[pre_df["cate_3"] == "꿀","cate_4"] = "꿀"
pre_df.loc[pre_df["cate_3"] == "홍삼","cate_4"] = "홍삼"
pre_df.loc[pre_df["cate_3"] == "건강분말","cate_4"] = "건강분말"
pre_df.loc[pre_df["cate_3"] == "건강환/정","cate_4"] = "건강환/정"
pre_df.loc[pre_df["cate_3"] == "건강음료","cate_4"] = "건강음료"
pre_df.info()

#위 과정을 거친후에도 cate_4가 Nan인 경우를 필터링합니다 
cate_4_null_filter = pre_df[pre_df["cate_4"].isna()]
cate_4_null_filter
#혹시 모르니까 새 변수로 copy 실행 
mytest = cate_4_null_filter.copy()
mytest
#NaN값 분류를 위한 제목 키워드 처리 ㅠ

probiotics = ["Probiotics", "AMD"]
multi = ["종합비타민", "종합 비타민", "Way", "Woman","잘크톤", "비거록스", "오쏘몰", "유기농마을 밸런스 31"]
omega = ["Omega-3", "생선 오일", "오메가-"]
vit_c = ["에스터-C", "Vitamin C", "C-1000", "C3", "Ascorbate","비타민C", "비타민 C", "Ester C", "Ester-C", \
         "아스코르브산", "에스테르-C"]
etc = ["임상 강도 전립선 건강", "위트 그라스", "올리브 잎", "항산화제", "리봄순액", "아슈와간다", "Bone-Up", \
       "사카로미세스 보울라디", "세라펩타아제", "기관지", "부비강", "차일드라이프", "로디올라", "마카", "Maxi-Hair",\
       "카르노신", "콜라겐", "칸디다", "슈피리어", "이소플라본", "오레가노", "글루코만난", "신장", "베타카로틴",\
       "요오드", "마늘", "녹용", "울금", "Elderberry", "Enzyme",  "LipoMicel", "Pau", "BetaCareAll",\
       "베타인", "AstaLif", "Biloba", "Bioperine", "BioPerine", "Choline", "Curcumin", "D'Arco", "EMIQ", \
       "Enzymedica", "Fo-Ti", "Fungi", "Inulin", "Kyolic", "L-라이신", "L-시스테인", "티로신", "Lecithin", \
       "Quercetin", "Oligopin", "올리고핀", "Oscillococcinum", "PQQ", "딱총", "SAMe", "강황", "Whole", "Y.S.",\
       "Zand", "Wu","Foods Cat", "On-The-Go", "쐐기풀", "효소", "글라이신","BetaCareAll", "포도씨", "Grape Seed",\
       "Wobenzyme", "Wobenzym", "Wellmune", "퀘르세틴", "알파리포산","징코", "엘더베리", "릴랙스", "사프란",\
       "월야", "Effer-Hydrate", "오로테이트", "대구 간유", "아스타잔틴", "엔짐", "산자나무", "위타 그라스", "유기농 단백질"]
prebiotics = ["Prebiotic"]
mag = ["Magnesium", "마그네슘", "조이스텝"]
metafolin = ["Metafolin", "Quatrefolic"]
coq = ["CoQ-10", "CoQ10", "유비퀴놀"]
iron = ["Iron", "철분", "철"]
hefe = ["효모", "헤페", "베타글루칸"]
vit_b = ["B 복합체", "Vitamin", "Vitamin B", "B-Complex", "B-복합체", "B-콤플렉스", "B2", "B-12", "Benfotiamine", "스트레스 B"]
vit_d = ["D-3"]
zinc = ["Zinc", "L-OptiZinc", "징크", "옵티진스", "킬레이트화 아연"]
vit_a = ["Vitamin A", "비타민A", "비타민 A"]
vit_etc = ["K2", "Primrose"]
honey = ["Bee", "Honey", "Wedderspoon"]
kril = ["크릴오일"]
milk = ["Liver", "실리마린"]
jelly = ["로열젤리", "로얄제리"]
lutein = ["트루아이"]
vit_e = ["E-400"]
kal = ["구연산", "구연산칼륨"]
msm = ["MSM 분말"]
biotin = ["바이오틴", "비오틴"]
var_list = [probiotics, multi, omega, vit_c, etc, prebiotics, mag, metafolin, coq, iron, hefe, vit_b, vit_d, \
           zinc, vit_a, vit_etc, honey, kril, milk, jelly, lutein, vit_e, kal, msm, biotin]
names_list = ["프로바이오틱스", "멀티비타민", "오메가3", "비타민C", "기타건강보조식품", "프리바이오틱스", \
             "마그네슘", "엽산", "코큐텐", "철분", "효모", "비타민B", "비타민D","아연", "비타민A", "기타비타민",\
              "꿀", "크릴오일", "밀크씨슬", "로얄제리", "루테인", "비타민E", "칼륨", "MSM", "비오틴"]
# name 안에 위 리스트의 값들이 있는 경우 cate_4 지정 

for num, var in enumerate(var_list) : 
    for i in var : 
        x = mytest[mytest["name"].str.contains(i)].index
        mytest.loc[x, "cate_4"] = names_list[num]
# mytest[mytest["cate_4"].isna()].to_csv("./data/nanlist.csv", encoding = "utf-8-sig")
# 단어 검색용 코드 
# pre_df[pre_df["name"].str.contains("사프란")]
#isna가 없는 것을 확인 !! 
mytest[mytest["cate_4"].isna()]
#mytest 정보 한번 확인

mytest.info()
#pre_df에서 "mytest에 인덱스가 없는" row들(=cate_4가 Nan이 아닌 row들)만 남깁니다 
pre_df = pre_df[pre_df.index.isin(mytest.index) == False]
pre_df.info() 
#그러고 나서 pre_df와 mytest를 합쳐서 전처리가 완료된 데이터 프레임을 생성합니다 
result_df = pd.concat([pre_df, mytest], axis = 0)
result_df.info() #숫자가 7960개로 앞서 pre_df의 숫자와 동일합니다 전처리 끝 ! 
# 영양성분 순위표 (등록 제품 순 )

rank_register = pd.DataFrame(result_df[["cate_4"]])
rank_register["count"] = 1
register_group = rank_register.groupby(by = "cate_4").count().sort_values(by = "count", ascending = True ).reset_index()
register_group
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns 

plt.figure(figsize = (10, 15))
x = register_group["cate_4"]

values = register_group["count"]

plt.barh(x, values)
plt.yticks(x, register_group["cate_4"])
plt.show()
plt.figure(figsize = (10,15))
sns.countplot(y = 'cate_4', data = result_df, order = register_group.sort_values(by = "count", ascending = False)["cate_4"])

plt.show()
# 영양성분 순위표 (리뷰 순 )

rank_review = pd.DataFrame(result_df[["cate_4", "review"]])
review_group = rank_review.groupby(by = "cate_4").sum().sort_values(by = "review", ascending = True).reset_index()

plt.figure(figsize = (10, 15))
x = review_group["cate_4"]

values = review_group["review"]

plt.barh(x, values)
plt.yticks(x, review_group["cate_4"])
plt.show()
df_1 =pd.DataFrame(register_group["cate_4"][::-1]).reset_index(drop=True)
df_1["count_rank"] = range( 1 , len(df_1)+1) #순위 넣어보기 

df_2 = pd.DataFrame(review_group["cate_4"][::-1].reset_index(drop = True))
df_2["review_rank"] = range( 1 , len(df_2)+1) #순위 넣어보기 

result_merge = pd.merge(df_1, df_2, on = "cate_4")
result_merge
# result_df[result_df["cate_4"] == "기타건강보조식품"].to_csv("etc.csv", encoding = "utf-8-sig")
# 앞으로 raw데이터에서 추가작업해야 하는 부분(메모) 
#김나운더키친,양송이 스프, 동서 제티 초코, [촉촉닭] 불고기 닭스테이크 3kg -> raw 데이터 제외할 것 
# 코큐텐인데 기타로 가 있는 것들이 좀 있음(raw 데이터에서 cate_4 코큐텐으로 바꾸기)
etc_df = result_df[result_df["cate_4"] == "기타건강보조식품"]
etc_df.info()
#기타건강식품의 세부 분류를 위한 단어 리스트 
enzyme = ["효소", "엔짐", "Enzyme"]
ginko = ["은행", "징코", "깅코", "Ginko"]
mussel = ["홍합"]
colostrum = ["초유"]
deer = ["녹용", "녹혈"]
arginine = ["아르기닌", "arginine", "Arginine"]
citric = ["구연산"]
polyphenol = ["폴리페놀", "Polyphenol", "polyphenol"]
garlic = ["마늘", "교릭"]
pome = ["석류"]
carotene = ["베타카로틴", "카로틴"]
iodine = ["요오드", "아이오딘"]
sleep = ["릴랙스", "수면", "슬립"]
berry = ["엘더베리", "Elderberry"]
quercetin = ["퀘르세틴", "Quercetin", "쿼세틴"]
aminoacid = ["L-라이신", "L-시스테인", "티로신","카르노신", "글라이신"]
herb = ["포도씨", "강황", "울금", "쐐기풀", "딱총", "위트그라스", "위트 그라스", "Claw", "올리브 잎", "오레가노",
       "올리고핀", "해송", "Oligopin", "Grape Seed"]
hcl = ["베타인 HCL"]


var_list_2 = [enzyme, ginko, mussel, colostrum, deer, arginine, citric, polyphenol, garlic, pome,
             carotene, iodine, sleep, berry, quercetin, aminoacid, herb, hcl]
names_list_2 = ["효소", "은행추출물", "초록입홍합", "초유단백질", "녹용/녹혈", "아르기닌(아미노산)", "구연산", \
                "폴리페놀", "마늘", "석류추출물", "베타카로틴", "요오드", "수면보조제","엘더베리", "퀘르세틴", \
                "아미노산", "기타식물추출물", "베타인 HCL" ]
#cate_5로 지정 
for num, var in enumerate(var_list_2) :
    for i in var :
        x = etc_df[etc_df["name"].str.contains(i)].index
        etc_df.loc[x, "cate_5"] = names_list_2[num]
etc_df.info()
etc_df[["name", "cate_5"]].groupby("cate_5").count()
#기타로만 분류되어있는 것들을 세부적으로 보면 
#초유단백질, 초록입홍합 등이 생각보다 많은 비중을 차지하고 있는 것을 알 수 있다<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.22780764201656253, 'fraction_numerical': 0.015981403457794568, 'mean_word_length': 4.693961952026468, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 6, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '362745', 'license': 'MIT', 'n_tokens_mistral': 4210, 'n_tokens_neox': 5070, 'n_words': 711, 'path': 'EDA_PROJECT_TEAM_2_1st_DATA.ipynb', 'repo_name': 'jayz0417/EDA_PROJECT', 'size': '6883'}