[์ค๋์ ํ์ต]
- streamlit ๋ณต์ต
- API๋ฅผ ์ด์ฉํ ํฌ๋กค๋ง ๋ น๊ฐ ๋ฃ๊ธฐ
- ๋ผ๋ผํก ๋ฏธ๋์ธ์
- ํ๋ก์ ํธ ๋ฐ์ ์ ์ฑ์ฉ๊ณต๊ณ ์ฐพ์๋ณด๊ธฐ
[ํ์ต๋ด์ฉ ์ ๋ฆฌ]
API๋ฅผ ์ด์ฉํ ํฌ๋กค๋ง ๋ น๊ฐ ๋ฃ๊ธฐ
import requests
from pprint import pprint # json์ ๋ณด๊ธฐ ์ข์ ํํ๋ก ๋ณํํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
# ๊ฒ์์ด ์ค์
search_query = "๋ฐ์ดํฐ ๋ถ์"
# API ์์ฒญ URL
service_url = 'https://openapi.naver.com/v1/search/blog.json'
# API ์์ฒญ ํค๋ ์ค์
headers = {
'X-Naver-Client-Id' : client_id,
'X-Naver-Client-Secret' : client_secret
}
# API ์์ฒญ ํ๋ผ๋ฏธํฐ
params = {
'query' : search_query,
'display' : 10,
'start' : 1,
'sort' : 'sim'
}
# HTTP GET ์์ฒญํ๊ธฐ
response = requests.get(
service_url,
headers = headers,
params = params
)
# API ๊ฒฐ๊ณผ ํ์ธ
# ์๋ต์ฝ๋ (200) => ์ฑ๊ณต์
print(response.status_code)
blog_results = [] # pprint๋ก ๋ถ๋ฌ์จ ์ ๋ณด ์ค ํ์ํ ๊ฒ๋ง ๋ชจ์ผ๊ธฐ ์ํจ
if response.status_code == 200:
result = response.json() # json ํํ์ ์๋ต ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋์
๋๋ฆฌ๋ก ๋ณํ
print("========== ํฌ๋กค๋ง ์ถ๋ ฅ ==========")
pprint(result)
# pprint๋ก ๋ถ๋ฌ์จ ์ ๋ณด ์ค ํ์ํ ๊ฒ๋ง ๋ชจ์ผ๊ธฐ ์ํจ
for item in result['items']:
blog = {
'title' : item['title'],
'link' : item['link'],
'description' : item['description'],
'postdate' : item['postdate'],
}
blog_results.append(blog)
print(blog_results)
print('ํ์ํ ๊ฒ๋ง ์ถ๋ ฅํ ๊ฒ ๊ฐ์: ', len(blog_results))
- ํฌ๋กค๋งํ ์ด๋ฏธ์ง ๋ค์ด๋ก๋ ๋ฐ๊ธฐ (์ง์ ํด๋ณด๊ธฐ)
- image_url = image_results[n]['thumbnail']
list์ธ image_results์์ url ํ๋์ฉ ๊ฐ์ ธ์์ ๋ค์ด๋ก๋ ๋ฐ๊ธฐ.
โ ๏ธ image_results๊ฐ list์ฌ์ ์ธ๋ฑ์ค๋ก ๋ฐ๋ก ์ ๊ทผํด์ผ ํจ. dtype ํ์ธ ํ์ํ์.
โ ๏ธ ๋ณ๋ ๋ฆฌ์คํธ์ ๋ด์ง ์์๋ url ํ๋์ฉ ์ฒ๋ฆฌํ๋ฉด ๋๋๊น, ํฌ๋กค๋ง ์ฝ๋์์ blog_results=[] ์ฒ๋ผ ๋ณ๋ ๋ฆฌ์คํธ ๋ง๋ค์ง ์์๋ ๋จ.
- image_url = image_results[n]['thumbnail']
for n in range(10) :
image_url = image_results[n]['thumbnail']
response = requests.get(image_url)
# print(response)
if response.status_code == 200 :
with open(f"downloaded_img/downloaded_image_{n}.jpg", "wb") as f:
f.write(response.content)
print("์ด๋ฏธ์ง ๋ค์ด๋ก๋ ์๋ฃ!")
else :
print(f"๋ค์ด๋ก๋ ์คํจ. ์ํ์ฝ๋ {response.status_code}")
์ค์ ํ๋ก์ ํธ(4์ฐจ ํ๋ก์ ํธ) ์ DA ์ฑ์ฉ๊ณต๊ณ ์ฐพ์๋ณด๊ธฐ
- ์ปฌ๋ฆฌ(https://zighang.com/recruitment/cae952e1-ad2e-4b62-ae5e-5f197856639c)
- sql, ํ๋ธ๋ก, python
- git, Airflow - ํ ์ค์ฆ๊ถ(https://zighang.com/recruitment/fd3e241b-a415-456d-863d-61bc8684a91a)
- ์ ์ฌ๋ชฉํ ์๋ฆฝํ๊ณ ์ถ์ ํ๋ ์ญ๋ - ํ์คํฌ ๊ด๋ฆฌ, ์ ๋ฌด ์ฐ์ ์์ ๊ด๋ฆฌ
- sql, python
- A/B test, ์ปค๋ฎค๋์ผ์ด์
- ์๊ฐํ ํด(ํ๋ธ๋ก) - ์ฐ์ํ ํ์ ๋ค(https://zighang.com/recruitment/0fcdcaeb-182f-45c4-bb80-515fdcc47e1d)
- sql
- kpi ์ฑ๊ณผ ์ถ์
- ์ ๊ด๋ถ์์์ ํ์
- Redash, Tableau(์ฐ๋์ฌํญ), Google Spreadsheet, Airflow ๋ฑ์ ํ์ฉํ ๋์๋ณด๋ ๊ตฌ์ฑ/์๋ํ ๊ฒฝํ์ด ์๋ ๋ถ
- LTV, Cohort, ํผ๋ ๋ถ์, A/B ํ ์คํธ ๋ฑ ๊ณ ๋ํ๋ ๋ถ์ ๊ธฐ๋ฒ ๊ฒฝํ - ๋ฌด์ ์ฌ(https://zighang.com/recruitment/12d5dcde-f87f-4e14-890e-726ccc656ef0)
- SQL
- KPI ์ ์ ๋ฐ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ฑ๊ณผ ๋ถ์/ํด์ ๊ฒฝํ
- Tableau, Power BI ๋ฑ ๋ฐ์ดํฐ ์๊ฐํ ๋๊ตฌ ํ์ฉ ๊ฒฝํ
<์ฑ์ฉ๊ณต๊ณ ์๊ตฌ ์ฃผ์์ญ๋>
- ํ์
+ ์ปค๋ฎค๋์ผ์ด์
+ ์
๋ฌด๊ด๋ฆฌ
- ์์ (์ผ์ ๊ด๋ฆฌ, ์ด์๊ด๋ฆฌ, ๋ฐ์ดํฐ์ ์, ์ ์ฒ๋ฆฌ ๋ฑ)
- git
- Airflow
- (๋ถ) PPT ์ ์ ์ ์ฉ์ด ์ค๋ช ์ถ๊ฐ - ๋ฅ๋ ฅ
- SQL
- Python
- ํ๋ธ๋ก (streamlit ํ์ฅ?) - ๋ถ์ ๋ฐ ๊ฒ์ฆ๋ฅ๋ ฅ
- LTV, Cohort, ํผ๋ ๋ถ์, A/B ํ ์คํธ ๋ฑ ๊ณ ๋ํ๋ ๋ถ์ ๊ธฐ๋ฒ ๊ฒฝํ
- KPI ์ ์ ๋ฐ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ฑ๊ณผ ๋ถ์&ํด์
[๋ด์ผ์ ํ์ต]
- ์ค์ ํ๋ก์ ํธ ์์!
- 10:00-11:00 ์ต์ข ํ๋ก์ ํธ ๋ฐ์
- 19:00-21:00 ์ด์ปค๋จธ์ค ๋๋ฉ์ธ์ ๋ํ ์ดํด 5ํ์ฐจ