데이터 분석에 앞서 가장 중요한 시각화를 해보고자
네이버 오픈 api를 사용해보았다
1
2
3
4
5
6
|
import urllib.request
import json
client_id = "-"
client_secret = "-"
url = "https://openapi.naver.com/v1/datalab/search";
|
cs |
일단 네이버 Developer를 통해서 api 승인 번호를 받을 수 있다.
개발자센터에 관련 양식 가이드가 엄청 자세히 나와 있어, 그 가이드에 맞춰 찾고싶은것을 작성하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
body = "{\"startDate\":\"2020-01-01\",\"endDate\":\"2022-02-28\",\"timeUnit\":\"month\",\"keywordGroups\":[{\"groupName\":\"농협\",\"keywords\":[\"농협\",\"농협은행\",\"NH농협은행\"]},{\"groupName\":\"신한은행\",\"keywords\":[\"신한\",\"신한은행\"]},{\"groupName\":\"국민은행\",\"keywords\":[\"국민 은행\",\"국민은행\"]}]}";
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
request.add_header("Content-Type","application/json")
response = urllib.request.urlopen(request, data=body.encode("utf-8"))
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
a = response_body.decode('utf-8')
b= json.loads(a)
else:
print("Error Code:" + rescode)
|
cs |
우선, 은행 관련에서 어떤 은행이 가장 많은 키워드 검색량을 가지고 있는지 확인 해보기로 했다.
시작일자는 2020- 01-01 부터 가장 최근인 2022-02-28 까지로 기간을 선정했고, 농협,신한,국민은행 키워드를 비교했으며 특정 나이, 사용디바이스,성별이 아닌 전체로 알아보기로했다.
그 결과
이렇게 출력이 완료가 되었다면 이제 json, 딕셔너리 형태의 자료를 판다스를 사용하여 데이터프레임으로 만드는 작업을해야하는데, 그전에 현재는 농협과 신한., 국민은행의 검색량이 모두 b라는 딕셔러니에 있으므로 이것을 각각 은행별로 나누는 작업을 해야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
date=[]
nh= []
shin = []
kb = []
for i in b['results'][0]['data']:
date.append(i['period'])
nh.append(i['ratio'])
for i in b['results'][1]['data']:
shin.append(i['ratio'])
for i in b['results'][2]['data']:
kb.append(i['ratio'])
|
cs |
각각 리스트를 생성한 이우에 for 문을 통해서 은행별로 데이터를 붙혀놓는다.
이 때 총 3가지의 키워드를 가져왔으므로
results[0] = 농협
results[1] = 신한
results[2] = 국민 이다.
이후 판다스를 통해 각각의 리스트를 하나의 데이터 프레임으로 합쳐주는 작업을 하면된다. 추가로 그 해당되는 칼럼명을 작성 해주면 끝
1
2
3
4
5
6
|
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([date,nh,shin,kb]).T
df.columns=['날짜','농협','신한','국민']
|
cs |
여기서 df 뒤에 T는 행과 열을 바꿔주는 명령어이다.
T를 사용하지 않으면 은행별로 되는게 아닌 날짜별로 정리가 되기때문에 행과 열을 바꿔줄 필요가 있다.
1
2
3
4
5
6
7
8
9
10
11
|
plt.rcParams['font.family'] = 'Malgun Gothic' #폰트
plt.rcParams['font.size']=12 # 폰트사이즈
plt.figure(figsize=(50,12))
plt.plot(df['날짜'],df['농협'])
plt.plot(df['날짜'],df['신한'])
plt.plot(df['날짜'],df['국민'])
plt.legend(['농협','신한','국민'], loc='upper left') #범례 지정
plt.savefig("Plot generated using Matplotlib_.png") #
|
cs |
이 후 각각의 세부설정을 해주면 된다. 이때는 plt.rcParams를 쓰는데 이 함수는 해당 plt에 설정을 딕셔너리? 형태로 표현해주어서 해당 항목의 내용을 바꿔주면 그거에 맞게 수정을 해준다.
그 이후 각각의 은행을 넣어주고 범례까지 설정하여 저장을 하면 그래프가 보여준다.
잘 안보일 수도 있지만 이렇게 한 눈에 보여지게 된다.
보면 3개 은행이 비슷한 모습의 추이가 보여지는것을 알 수 있고, 특히 2021년 1월이 세가지 은행다 큰 폭으로 상승한 달인 것을 알 수 있다.
++++) 추가적으로
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
for i in range(len(df)):
plt.text(i,df['농협'][i],df['농협'][i], fontsize=10, horizontalalignment = 'center', verticalalignment = 'bottom')
plt.plot(df['날짜'],df['신한'])
for i in range(len(df)):
plt.text(i,df['신한'][i],df['신한'][i], fontsize=10, horizontalalignment = 'center', verticalalignment = 'bottom')
plt.plot(df['날짜'],df['국민'])
for i in range(len(df)):
plt.text(i,df['국민'][i],df['국민'][i], fontsize=10, horizontalalignment = 'center', verticalalignment = 'bottom')
|
cs |
이렇게 각각의 지점들을 수치를 시각화 도표에 표현할 수 있도록 할 수있다.
다음 편에는 2021년 1월 중에서도 어떤 날에 가장 많은 검색량이 나왔고, 그 이유는 무엇인지에 대해 같이 분석해보는 시간을 가져보도록 하겠다.
'AI > ETC' 카테고리의 다른 글
[Python] 네이버 API을 활용한 검색 데이터 분석 (2) (0) | 2023.09.16 |
---|