전경식
10
2022-06-05 07:06:51 작성 2022-06-05 07:09:14 수정됨
2
239

파이썬 초보 도와주실분ㅠㅠ 데이터를 상위 10개와 기타로 분류하고 이를 벤다이어그램으로 나타내고 싶습니다



■ 데이터 컬럼 설명
BASE_YM(기준연월) : POS 가맹점이 영업을 실시한 년월
MENU_CODE(메뉴코드) : 메뉴명에 대한 분류코드
MENU_NM(메뉴명) : POS 기기에서 판매된 상품을 표준화된 메뉴로 분류
NTT_CNT(게시물수) : 기준년월에 수집한 맛집 관련 블로그 게시글 개수
NTT_PER_AVRG_MENTN_CNT(게시물당평균언급수) : 한 게시글에 메뉴가 언급된 평균 수

이런식으로 코랩을 이용하여 나타내고 싶습니다.

`df2 = df1.sort_values(by="NTT_PER_AVRG_MENTN_CNT", ascending=False).head(10) 

이걸로 상위 10개만 추출하는건 하였는데 나머지 항목을 기타로 돌리는지는 못했습니다.

dict_ = df2['NTT_PER_AVRG_MENTN_CNT'].value_counts().to_dict()
plt.figure(figsize=(10,10))
plt.pie(x=dict_.values(), labels=(dict_.keys()), autopct='%1.1f%%', startangle=90)
plt.show()

그 뒤에 이렇게 하여 벤다이어그램으로 나타냈는데 제가 지식이 부족하여 어떻게 나타낼지 모르겠습니다 도와주세요

https://kadx.co.kr/product/detail/ec400770-5a1e-11eb-a8ad-f7d4ae045b90

이 자료를 이용하였습니다

0
  • 답변 2

  • 코지고지
    215
    2022-06-05 20:56:51 작성 2022-06-05 21:07:33 수정됨

    해당 plt라는 라이브러리가 정확히 어떻게 동작하는지 몰라서 

    효율적이지 않을수는 있는데, 그냥 리스트로 만들어서 분류하는것만 알려드릴게요


    dict_ = df2['NTT_PER_AVRG_MENTN_CNT'].value_counts().to_dict()
    _list = list(zip(dict_.keys(), dict_.values())) # (key, value) 형태의 리스트로 변환
    _list.sort(key=lambda x: x[1], reverse=True) # 값을 기준으로 내림차순 정렬
    _etc_value = sum([x[1] for x in _list[10:]) # 기타의 값들에 대해 합계 구하기
    _result = _list[:10] + [("기타",_etc_value)] # 상위 10개와 기타 합치기
    
    plt.figure(figsize=(10,10))
    plt.pie(x=[l[1] for l in _result], labels=[l[0] for l in _result], autopct='%1.1f%%', startangle=90)
    plt.show()
  • 엔터에혼을담아
    377
    2022-06-05 23:48:27

    isin의 not(~) 형태를 쓰면 좋을 것 같네요


    etc_df = df1[~df1['NTT_PER_AVRG_MENTN_CNT'].isin(df2['NTT_PER_AVRG_MENTN_CNT'])]


  • 로그인을 하시면 답변을 등록할 수 있습니다.