Naver API
검색 API 예제 - 블로그 검색
# 네이버 검색 API 예제 - 블로그 검색
import os
import sys
import urllib.request
# ↓ 발급받은 Client ID와 secret 입력
client_id = ""
client_secret = ""
# 검색할 단어 입력
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/blog?query=" + encText # JSON 결과
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText # XML 결과
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
[실행 결과]
{
"lastBuildDate":"Wed, 12 Jun 2024 20:45:19 +0900",
"total":472438,
"start":1,
"display":10,
"items":[
{
"title":"부산<b>파이썬<\/b>학원 진로에 맞춘 수업과정 후기!",
"link":"https:\/\/blog.naver.com\/rame83\/223477303829",
"description":"이제 곧 산업 전반에 걸쳐 이 기술이 적용될 것이라는 전망이 있어 부산<b>파이썬<\/b>학원에서 배우면서... 물론 부산<b>파이썬<\/b>학원에서 <b>파이썬<\/b> 하나만 배운다고 해서 되는 건 아니에요. 자격증 취득도 필요하고 개발 관련... ",
"bloggername":"임엄마의 얼렁뚱땅 주부놀이",
"bloggerlink":"blog.naver.com\/rame83",
"postdate":"20240612"
},
{
"title":"<b>파이썬<\/b>자격증 종류 및 체계적인 학습절차",
"link":"https:\/\/blog.naver.com\/iclick62\/223376341162",
"description":"#<b>파이썬<\/b>자격증 취업을 하기 위해서는 다양한 능력을 가지고 있어야 했습니다. 이론적인 지식은... 마지막으로 <b>파이썬<\/b>자격증에 도전하여 취득한 후 입사지원을 해 볼 생각이었습니다. 단기간에 취득할 수 있어야... ",
"bloggername":"연리지(連理枝)",
"bloggerlink":"blog.naver.com\/iclick62",
"postdate":"20240307"
},
{
"title":"부산<b>파이썬<\/b>학원 강의, 기초 과정부터 들어보기!",
"link":"https:\/\/blog.naver.com\/leesang1234\/223439302438",
...
"postdate":"20240612"
}
]
}
검색 API 예제 - 책 검색
# 네이버 검색 API 예제 - 책 검색
import os
import sys
import urllib.request
# ↓ 발급받은 Client ID와 secret 입력
client_id = ""
client_secret = ""
# 검색할 단어 입력
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/book?query=" + encText # JSON 결과
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText # XML 결과
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
[실행 결과]
{
"lastBuildDate":"Wed, 12 Jun 2024 21:16:38 +0900",
"total":1001,
"start":1,
"display":10,
"items":[
{
"title":"Do it! 점프 투 파이썬 (중학생도 첫날부터 실습하는 초고속 입문서)",
"link":"https:\/\/search.shopping.naver.com\/book\/catalog\/40354085633",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_4035408\/40354085633.20230927071024.jpg",
"author":"박응용",
"discount":"19800",
"publisher":"이지스퍼블리싱",
"pubdate":"20230615",
"isbn":"9791163034735",
"description":"프로그래밍 분야 8년 연속 베스트셀러!\n《Do it! 점프 투 파이썬》 전면 개정 2판 출시!\n\n중고등학생도, 비전공자도, 직장인도 프로그래밍에 눈뜨게 만든 바로 그 책이 전면 개정 2판으로 새롭게 태어났다! 챗GPT를 시작으로 펼쳐진 생성 AI 시대에 맞춰 설명과 예제를 다듬고, 최신 경향과 심화 내용을 보충했다. 또한 이번 개정 2판도 50만 코딩 유튜버인 조코딩과 협업을 통해 유튜브 동영상을 제공해 파이썬을 더 쉽게 공부할 수 있다.\n\n8년 연속 베스트셀러! 위키독스 누적 방문 300만! 독자의 입에서 입으로 전해진 추천과 수많은 대학 및 학원의 교재 채택을 통해 검증은 이미 끝났다. 코딩을 처음 배우는 중고등학생부터 코딩 소양을 기르려는 비전공자, 자기계발에 진심인 직장인까지! 이 책과 함께 파이썬 프로그래밍의 세계로 ‘점프’해 보자!"
},
{
"title":"혼자 공부하는 파이썬 (1:1 과외하듯 배우는 프로그래밍 자습서)",
"link":"https:\/\/search.shopping.naver.com\/book\/catalog\/32507605957",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_3250760\/32507605957.20230509170119.jpg",
"author":"윤인성",
"discount":"19800",
"publisher":"한빛미디어",
"pubdate":"20220601",
...
"description":"[파이썬]은 파이썬 언어에 대한 기본 문법부터 활용까지 프로그래밍에 관한 전반적인 내용을 다루고 있다. 이 책을 활용한 프로그래밍 학습을 통해 파이썬 프로그램을 스스로 작성하고 실행해 봄으로써 자신만의 프로그램을 작성할 수 있을 것이다."
}
]
}
검색 API 예제 - 카페 검색
# 네이버 검색 API 예제 - 카페 검색
import os
import sys
import urllib.request
# ↓ 발급받은 Client ID와 secret 입력
client_id = ""
client_secret = ""
# 검색할 단어 입력
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/cafearticle?query=" + encText # JSON 결과
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText # XML 결과
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
[실행 결과]
{
"lastBuildDate":"Wed, 12 Jun 2024 21:19:25 +0900",
"total":191018,
"start":1,
"display":10,
"items":[
{
"title":"<b>파이썬<\/b>, c언어 배울 좋은 학원 있을까요?",
"link":"http:\/\/cafe.naver.com\/romul\/150488",
"description":"쫓아갔거든요 (<b>파이썬<\/b>이고 뭐고 아무것도 모르고 정말 수행과제나 ppt로 해내는 그 수준이었어요) 그래서... 쟤는 <b>파이썬<\/b>부터 학원을 보내든지 아님 지 원래 가고 싶어했던 생물학과로 반수시켜요 엄마 이러고 뛰쳐나갔어요... ",
"cafename":"로물콘 -로미오&물량공급 입시콘서트",
"cafeurl":"https:\/\/cafe.naver.com\/romul"
},
{
"title":"구리 프론트엔드 구리시 백엔드 수택동 텍스트코딩 <b>파이썬<\/b> 맞춤과외",
"link":"http:\/\/cafe.naver.com\/akqjatk22\/266046",
"description":"구리 프론트엔드 구리시 백엔드 수택동 텍스트코딩 <b>파이썬<\/b> 맞춤과외 구리프론트엔드맞춤과외 구리백엔드맞춤과외 구리텍스트코딩<b>파이썬<\/b>맞춤과외 구리시프론트엔드맞춤과외 구리시백엔드맞춤과외... ",
"cafename":"재테크에반하다 - 주식,부동산,분양,대...",
"cafeurl":"https:\/\/cafe.naver.com\/akqjatk22"
},
{
"title":"대전<b>파이썬<\/b>학원 공부 왜 해야 할까? 취업은 어디로?",
"link":"http:\/\/cafe.naver.com\/gugrade\/11455043",
"description":"오늘의 포스팅은 요즘 가장 HOT 하다고 알려진 대전<b>파이썬<\/b>학원 에 대한 내용들을 조금 담아 보았는데요! 내가 만약에 <b>파이썬<\/b>에 관련해서 조금 관심 있으셨던 분들이라고 하시면 오늘의 포스팅 꼭 집중해서 살펴 봐주실... ",
"cafename":"공드림★9급공무원,7급공무원,경찰,소...",
...
"cafeurl":"https:\/\/cafe.naver.com\/akqjatk22"
}
]
}
검색 API 예제 - 쇼핑 검색
# 네이버 검색 API 예제 - 쇼핑 검색
import os
import sys
import urllib.request
# ↓ 발급받은 Client ID와 secret 입력
client_id = ""
client_secret = ""
# 검색할 단어 입력
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/shop?query=" + encText # JSON 결과
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText # XML 결과
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
[실행 결과]
{
"lastBuildDate":"Wed, 12 Jun 2024 21:19:42 +0900",
"total":133385,
"start":1,
"display":10,
"items":[
{
"title":"Do it 두잇 쉽게 배우는 <b>파이썬<\/b> 데이터 분석 프로젝트 전과정",
"link":"http:\/\/www.gmarket.co.kr\/challenge\/neo_jaehu\/jaehu_goods_gate.asp?goodscode=2997883865&GoodsSale=Y&jaehuid=200001169",
"image":"https:\/\/shopping-phinf.pstatic.net\/main_4772222\/47722226349.jpg",
"lprice":"28800",
"hprice":"",
"mallName":"G마켓",
"productId":"47722226349",
"productType":"2",
"brand":"",
"maker":"",
"category1":"출산\/육아",
"category2":"교구",
"category3":"학습교구",
"category4":"기타교구"
},
{
"title":"<b>파이썬<\/b>과 마이크로비트로 배우는 실전 코딩 프로젝트 교재",
"link":"https:\/\/www.icbanq.com\/P015276619?utm_source=naver&utm_medium=cpc&utm_campaign=%EC%87%BC%ED%95%91_%EC%9E%90%EC%82%AC%EB%AA%B0&utm_id=%EC%87%BC%ED%95%91_%EC%9E%90%EC%82%AC%EB%AA%B0&utm_term=notset&utm_content=notset",
...
"category4":""
}
]
}
검색 API 예제 - 백과사전 검색
# 네이버 검색 API 예제 - 백과사전 검색
import os
import sys
import urllib.request
# ↓ 발급받은 Client ID와 secret 입력
client_id = ""
client_secret = ""
# 검색할 단어 입력
encText = urllib.parse.quote("파이썬")
url = "https://openapi.naver.com/v1/search/encyc?query=" + encText # JSON 결과
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText # XML 결과
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
[실행 결과]
{
"lastBuildDate":"Wed, 12 Jun 2024 21:19:52 +0900",
"total":48,
"start":1,
"display":10,
"items":[
{
"title":"<b>파이썬<\/b>",
"link":"https:\/\/terms.naver.com\/entry.naver?docId=3580815&cid=59088&categoryId=59096",
"description":"‘<b>파이썬<\/b>’이다. 간결한 문법으로 입문자가 이해하기 쉽고, 다양한 분야에 활용할 수 있기 때문이다. 이 외에도 <b>파이썬<\/b>은 머신러닝, 그래픽, 웹 개발 등 여러 업계에서 선호하는 언어로 꾸준히... ",
"thumbnail":"http:\/\/openapi-dbscthumb.phinf.naver.net\/4749_000_1\/20170118193349632_0CHSSS5Y6.png\/01_16.png?type=m160_160"
},
{
"title":"<b>파이썬<\/b>",
"link":"https:\/\/terms.naver.com\/entry.naver?docId=3607513&cid=58598&categoryId=59316",
"description":" 컴퓨터 언어의 일종으로 간결하고 생산성 높은 프로그래밍 언어. <b>파이썬<\/b>(python)은 프로그램을 설계하는 프로그래밍 언어 중 하나입니다. 컴퓨터는 0과 1을(이진수) 인식하여 작동하기 때문에 과거에는... ",
"thumbnail":"http:\/\/openapi-dbscthumb.phinf.naver.net\/4751_000_3\/20170710213206672_OPHLG2VOW.jpg\/992_170575_10034.jpg?type=m160_160"
},
{
"title":"<b>파이썬<\/b>",
"link":"https:\/\/terms.naver.com\/entry.naver?docId=3533295&cid=40942&categoryId=32838",
"description":" 오픈소스 고급 프로그래밍 언어 중 하나이다. C언어를 기반으로 한 오픈소스 고급 프로그래밍 언어로, 1991년 귀도 반 로섬(Guido van Rossum)에 의해 설계 및 개발되었다. <b>파이썬<\/b>이라는 이름은 <b>파이썬<\/b>을... ",
"thumbnail":""
},
{
...
"thumbnail":""
}
]
}
Naver API 활용 분석 프로젝트
목표
- Naver API를 활용하여 쇼핑 검색 결과 1,000개를 받아와 결과를 저장
- 검색 결과에서 필요한 정보를 추출 후, DataFrame으로 가공하여 시각화
함수 선언
검색 URL 생성 함수
# 요청 url의 형태에 따라 검색 결과 출력 건수, 시작 번호 등을 지정할 수 있음
# 이를 활용하여 url을 생성해주는 함수를 선언
def gen_search_url(api_node, search_text, start_num, disp_num) :
# 기본 URL
base = 'https://openapi.naver.com/v1/search'
# 검색을 진행할 분야 (쇼핑, 백과사전, 블로그 등)
node = '/' + api_node + '.json'
# 검색할 검색어를 url에 붙여주기
# 검색어는 스트링이지만 한글을 그대로 붙여줄 경우 깨지므로, urllib.parse.quo를 이용하여 붙여주기
param_query = '?query=' + urllib.parse.quote(search_text)
# 검색 시작 위치, 입력값은 숫자이므로 url에 연결하기 위해 스트링으로 변환
param_start = '&start=' + str(start_num)
# 한 번에 표시할 검색 결과 수, 마찬가지로 숫자이므로 스트링으로 변환하여 url에 합쳐주기
param_disp = '&display=' + str(disp_num)
# 완성된 url 반환
return base + node + param_query + param_start + param_disp
# 함수 테스트
gen_search_url('shop', 'test', 10, 3)
[실행 결과]
'https://openapi.naver.com/v1/search/shop.json?query=test&start=10&display=3'
URL 요청 결과 반환 함수
import json
import datetime
# URL 요청 결과를 반환해주는 함수 선언
def get_result_onpage(url) :
request = urllib.request.Request(url)
# URL 호출 시 네이버 api에서 발급받은 클라이언트 id와 secret을 헤더로 전달
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
# 응답 결과 저장
response = urllib.request.urlopen(request)
# 현재 시간과 함께 url 요청 성공했다는 메시지 출력
print('[%s] Url Request Success' % datetime.datetime.now())
# 응답 값을 읽은 후, 한글 결과를 해석하기 위해 utf-8로 decode한 결과값을 반환
return json.loads(response.read().decode('utf-8'))
# 함수 기능 테스트
url = gen_search_url('shop', '몰스킨', 1, 5)
one_result = get_result_onpage(url)
one_result
[실행 결과]
{'lastBuildDate': 'Wed, 12 Jun 2024 21:42:25 +0900',
'total': 32003,
'start': 1,
'display': 10,
'items': [{'title': '<b>몰스킨</b> 클래식노트 소프트커버',
'link': 'https://search.shopping.naver.com/catalog/46242305618',
'image': 'https://shopping-phinf.pstatic.net/main_4624230/46242305618.20240307141647.jpg',
'lprice': '22320',
'hprice': '',
'mallName': '네이버',
'productId': '46242305618',
'productType': '1',
'brand': '몰스킨',
'maker': '몰스킨',
'category1': '생활/건강',
'category2': '문구/사무용품',
'category3': '노트/수첩',
'category4': '노트'},
{'title': '<b>몰스킨</b> 클래식노트 하드커버',
'link': 'https://search.shopping.naver.com/catalog/46221773618',
'image': 'https://shopping-phinf.pstatic.net/main_4622177/46221773618.20240306165408.jpg',
'lprice': '28800',
'hprice': '',
'mallName': '네이버',
'productId': '46221773618',
...
'maker': '몰스킨',
'category1': '생활/건강',
'category2': '문구/사무용품',
'category3': '다이어리/플래너',
'category4': '다이어리'}]}
검색 결과에서 정보 추출 후 DataFrame 생성 함수
import pandas as pd
def get_fields(json_data) :
# 검색 결과 json data 중 상품명(title), 링크(link), 가격(lprice), 판매처(mallName)만 추출
title = [each['title'] for each in json_data['items']]
link = [each['link'] for each in json_data['items']]
lprice = [each['lprice'] for each in json_data['items']]
mall_name = [each['mallName'] for each in json_data['items']]
# 추출한 데이터로 DataFrame 생성 후 컬럼 순서를 상품명 > 가격 > 링크 > 판매처 순으로 지정
result_pd = pd.DataFrame({
'title' : title,
'link' : link,
'lprice' : lprice,
'mall' : mall_name
}, columns=['title', 'lprice', 'link', 'mall'])
# 완성된 DataFrame을 반환
return result_pd
get_fields(one_result)
[실행 결과]
title lprice link mall
0 <b>몰스킨</b> 클래식노트 소프트커버 22320 https://search.shopping.naver.com/catalog/4624... 네이버
1 <b>몰스킨</b> 클래식노트 하드커버 28800 https://search.shopping.naver.com/catalog/4622... 네이버
2 (50%) <b>몰스킨</b> 2024년 데일리 하드커버 라지 다이어리 23400 https://smartstore.naver.com/main/products/916... 펜카페스토어
3 <b>몰스킨</b> <b>몰스킨</b>2024-25년 18개월 다이어리 무료각인 데... 32500 https://search.shopping.naver.com/catalog/4775... 네이버
4 <b>몰스킨</b> 클래식 룰드 하드커버 노트 라지 26510 https://search.shopping.naver.com/catalog/3915... 네이버
5 <b>몰스킨</b> 클래식노트 룰드 소프트 P 23460 https://search.shopping.naver.com/catalog/4262... 네이버
6 <b>몰스킨</b> 2025 위클리 18개월 다이어리 소프트커버 상품선택 35000 https://search.shopping.naver.com/catalog/4804... 네이버
7 시리즈 series 역시즌 <b>몰스킨</b> 집업 아우터 셔츠 SASFW23821... 115120 https://search.shopping.naver.com/catalog/4795... 네이버
8 <b>몰스킨</b> 클래식노트 룰드 소프트커버 Large 34200 https://search.shopping.naver.com/catalog/4145... 네이버
9 <b>몰스킨</b> 년 클래식 위클리 다이어리 18개월 하드커버 포켓 2024-25 35000 https://search.shopping.naver.com/catalog/4753... 네이버
html 태그 삭제 함수
# 상품명에 붙어있는 html 태그를 제거해주는 함수 선언
def delete_tag(input_str) :
input_str = input_str.replace('<b>', '')
input_str = input_str.replace('</b>', '')
return input_str
# 앞서 선언한 json data 데이터 추출 함수에 delete_tag 함수를 적용,
# 상품명에 붙어있는 html 태그를 제거한 값을 추출하도록 get_fields() 함수를 수정
import pandas as pd
def get_fields(json_data) :
# 검색 결과 json data 중 상품명(title), 링크(link), 가격(lprice), 판매처(mallName)만 추출
title = [delete_tag(each['title']) for each in json_data['items']]
link = [each['link'] for each in json_data['items']]
lprice = [each['lprice'] for each in json_data['items']]
mall_name = [each['mallName'] for each in json_data['items']]
# 추출한 데이터로 DataFrame 생성 후 컬럼 순서를 상품명 > 가격 > 링크 > 판매처 순으로 지정
result_pd = pd.DataFrame({
'title' : title,
'link' : link,
'lprice' : lprice,
'mall' : mall_name
}, columns=['title', 'lprice', 'link', 'mall'])
# 완성된 DataFrame을 반환
return result_pd
get_fields(one_result)
[실행 결과]
title lprice link mall
0 몰스킨 클래식노트 소프트커버 22320 https://search.shopping.naver.com/catalog/4624... 네이버
1 몰스킨 클래식노트 하드커버 28800 https://search.shopping.naver.com/catalog/4622... 네이버
2 (50%) 몰스킨 2024년 데일리 하드커버 라지 다이어리 23400 https://smartstore.naver.com/main/products/916... 펜카페스토어
3 몰스킨 몰스킨2024-25년 18개월 다이어리 무료각인 데일리 위클리 라지 포켓 엑스라지 32500 https://search.shopping.naver.com/catalog/4775... 네이버
4 몰스킨 클래식 룰드 하드커버 노트 라지 26510 https://search.shopping.naver.com/catalog/3915... 네이버
5 몰스킨 클래식노트 룰드 소프트 P 23460 https://search.shopping.naver.com/catalog/4262... 네이버
6 몰스킨 2025 위클리 18개월 다이어리 소프트커버 상품선택 35000 https://search.shopping.naver.com/catalog/4804... 네이버
7 시리즈 series 역시즌 몰스킨 집업 아우터 셔츠 SASFW23821BEXL 115120 https://search.shopping.naver.com/catalog/4795... 네이버
8 몰스킨 클래식노트 룰드 소프트커버 Large 34200 https://search.shopping.naver.com/catalog/4145... 네이버
9 몰스킨 년 클래식 위클리 다이어리 18개월 하드커버 포켓 2024-25 35000 https://search.shopping.naver.com/catalog/4753... 네이버
검색 실행 및 DataFrame 생성
# 1부터 1000까지 100단위 숫자 생성
for n in range(1, 1000, 100) :
print(n)
result_mol = []
# 네이버 검색 api의 검색 결과 최대 출력 개수가 100개이므로,
# 100개씩 10번, 총 1000개의 검색 결과를 가져오는 함수 선언 (1~100, 101~200, 201~300, ... 901~1000)
for n in range(1, 1000, 100) :
# 1, 101, 201의 검색 시작 위치를 지정해주고 검색 결과를 100개씩 가져오기
url = gen_search_url('shop', '몰스킨', n, 100)
json_result = get_result_onpage(url)
pd_result = get_fields(json_result)
# 검색 결과에서 추출하여 생성한 DataFrame들을 리스트로 저장
result_mol.append(pd_result)
# 리스트에 저장된 DataFrame들을 concat() 함수로 병합
result_mol = pd.concat(result_mol)
# concat으로 합쳐서 index가 0~99가 반복되는 형태이므로, reset_index로 index 재정렬
result_mol.reset_index(drop=True, inplace=True)
# 결과를 정리한 데이터 중, 상품 가격(lprice)가 문자열로 저장이 되어있으므로 숫자로 변환
result_mol['lrpice'] = result_mol['lprice'].astype('float')
result_mol.info()
[실행 결과]
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 title 1000 non-null object
1 lprice 1000 non-null object
2 link 1000 non-null object
3 mall 1000 non-null object
4 lrpice 1000 non-null float64
dtypes: float64(1), object(4)
memory usage: 39.2+ KB
검색 결과 시각화
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,6))
# 전체 DataFrame에서 상품 판매처 컬럼을 시각화하고,
# 그 순서를 상품 판매처에 대해 value_counts()로 각 판매처 별 개수를 확인, 그 인덱스를 가져와 순서로 지정
sns.countplot(
x=result_mol['mall'],
data=result_mol,
palette='RdYlGn',
order=result_mol['mall'].value_counts().index
)
# 판매처 이름이 겹치므로 텍스트 방향을 90도 회전
plt.xticks(rotation=90)
plt.show()
