Fly ai 4기 1주차 : 데이터 크롤링, 데이터 시각화

이성원·2023년 12월 26일
0

1일차 : 파이썬 기초

파이썬 문법, set, list, dictionary 개념 공부

완전 기본적인 것들이라 생략

2일차 : 데이터 시각화

오전: matplotlib, seaborn 이용 방법
오후: 데이터 크롤링, folium 이용 방법

matplotlib

1. 기본 직선 그리기

import matplotlib.pyplot as plt
y = np.arange(0, 10)**2
plt.plot(y)
plt.show()

2. subplot 으로 여러개 그래프 그리기

x = np.linspace(0, 10, 30)
y = np.sin(x)
z = np.cos(x)
plt.style.use('ggplot')
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.plot(x, y, 'r-')
plt.subplot(2, 2, 2)
plt.plot(x, z, 'g--')
plt.subplot(2, 2, 4)
plt.plot(x, z, 'b-.')
plt.show()

3. 산점도

plt.scatter(x,y)

4. 막대 그래프

x = ['A','B','C','D']
y = [5. , 25. , 50. , 20.]

fig, ax = plt.subplots(1, 2)
fig.set_size_inches(12,5)

ax[0].bar(x, y, color='#33aaff')
ax[1].bar(x, y, color=['r', 'g', 'b', 'k'])

plt.show()

5. 히스토그램

x = np.random.normal(172, 10, 250)
plt.hist(x)
plt.show()

6. 박스플롯

x = np.random.normal(10, 3, 100)
y = np.random.normal(13, 3, 100)
z = np.random.normal(8, 5, 100)
plt.boxplot([x, y, z], patch_artist=True, sym='ro')
plt.xticks([1, 2, 3], ['A', 'B', 'C'])
plt.show()

데이터 크롤링

1. 로또사이트에서 로또번호 가져오기

import requests
from bs4 import BeautifulSoup as bs
import matplotlib.pyplot as plt
import pandas as pd

res = requests.get('https://dhlottery.co.kr/common.do?method=main')
soup = bs(res.content, 'html.parser')
result = soup.select( '.ball_645')
data = []
for num in result:
 data.append(int(num.text))
data

[12, 16, 21, 24, 41, 43, 15]

2. 날씨정보 크롤링

import requests
from bs4 import BeautifulSoup as bs

url = 'https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EC%84%9C%EC%9A%B8+%EB%82%A0%EC%94%A8&oquery=%EB%82%A0%EC%94%A8&tqi=ihZbIwqVN8CssDDKWc0ssssstrG-048410'
res = requests.get(url)
soup = bs(res.content, 'html.parser')

result = soup.select(".temperature_text")
data = []

for info in result:
  data.append(info.text)
 
data

[' 현재 온도4.0° ', ' 예측 온도-3° ', ' 예측 온도7° ', ' 예측 온도-2° ', ' 예측 온도6° ']

3. 뉴스 수집하기

import newspaper as news
link = 'https://news.sktelecom.com/200489'
article = news.Article(link, language='ko')
article.download()
article.parse()
print(article.text)

SK텔레콤 뉴스룸에서 얼마 남지 않은 올해를 마무리하며, <2023년 독자들에게 가장 사랑받은 뉴스룸 콘텐츠 Top 10(조회수 Top 10*)>을 정리했다. 올 한 해 뉴스룸을 찾아준 분들을 위한 이벤트도 준비했으니 많은 참여를 부탁드린다....

4. 영화 평가 크롤링

import requests
from bs4 import BeautifulSoup as bs

url = 'http://www.cine21.com/movie/info/?movie_id=58978'
res = requests.get(url)
soup = bs(res.content, 'html.parser')

result = soup.select('.comment')
data = []
for info in result:
  data.append(info.text)

data

folium으로 지도 다루기

1. folium 으로 서울 맵 띄우기

import folium
import pandas as pd

seoul_map = folium.Map(location=[37.55,126.98], zoom_start=12)
seoul_map

2. 스타벅스 위치정보 크롤링 후 맵에 표시

import requests
from pandas.io.json import json_normalize

# 스타벅스 사이트에서 위치정보를 수집
targetSite = 'https://www.starbucks.co.kr/store/getStore.do?r=5XLKAT2F0K'
request = requests.post(targetSite, data={
    'ins_lat': 37.5108295,           # 위도
    'ins_lng': 127.02928809999999,   # 경도
    'p_sido_cd': '01',               # 시,도 분류 코드
    'p_gugun_cd': '',                # 시,군,구 분류 코드
    'in_biz_cd': '',                 # 알 수 없는 정보(불필요)
    'iend': 2000,                    # 불러올 최대 매장 수
    'set_date': ''                   # 알 수 없는 정보(불필요)
})

star_json = request.json()
star_df = json_normalize(star_json, 'list')

star_df.to_csv('starbucks_locations.csv', index=False)

star_data = {
    'name': [],
    'lat': [],
    'lot': [],
}

for index, row in star_df.iterrows():
    star_data['name'].append(row['s_name'])
    star_data['lat'].append(row['lat'])
    star_data['lot'].append(row['lot'])


for i in range(len(star_data['name'])):
  folium.Marker([star_data['lat'][i], star_data['lot'][i]], popup=star_data['name'][i]).add_to(seoul_map)

seoul_map

결과

profile
개발자

0개의 댓글