-
웹 크롤링 - BeautifulSoup+Pandas를 이용한 데이터 분석 3빅데이터/BeautifulSoup 2021. 12. 13. 12:47
인프런 '코딩교양스쿨' 강의 참조
- 판다스를 이용하여 앞서 얻은 자료들로 데이터 분석을 해보자
- 판다스 - 데이터 조작 및 분석을 위해 파이썬 프로그래밍 언어로 작성된 라이브러리
01 Pandas DataFrame 만드는 방법 2 가지
df1 = pd.DataFrame( {"이름:":['Son', 'Messi', 'Ronaldo'], "나이:":[28, 33, 35], "소속:":['Tottenham', 'Barcelona', 'Juventus']} ) -> DF의 기본 형태. 인덱스를 따로 지정하고 싶으면 인덱스 지정 가능 df1 = pd.DataFrame( {"이름:":['Son', 'Messi', 'Ronaldo'], "나이:":[28, 33, 35], "소속:":['Tottenham', 'Barcelona', 'Juventus']}, index=[1,2,3] )
player_list = [['Son', 28, 'Tottenham'], ['Messi', 33, 'Barcelona'], ['Ronaldo', 35, 'Juventus']] df2 = pd.DataFrame(player_list, columns=['Name', 'Age', 'Club'], index=[1,2,3]) df2
02 크롤링 결과 DF으로 저장 해보기
1) 리스트 안에 리스트 형식으로 결과 저장
import requests from bs4 import BeautifulSoup as bs import pandas as pd import time headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'} player_list = [] for i in range(1, 3): url = f"https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop/plus/ajax/yw1/0//page/{i}" r = requests.get(url, headers=headers) r.status_code soup = bs(r.content, 'html.parser') player_info = soup.find_all('tr', class_=['odd', 'even']) for info in player_info: player = info.find_all("td") number = player[0].get_text() name = player[3].get_text() position = player[4].get_text() age = player[5].get_text() nation = player[6].img['alt'] team = player[7].a['title'] # value.append(player[8].b.get_text()) value = player[8].text.strip() player_list.append([number, name, position, age, nation, team, value]) time.sleep(1)
2) csv파일로 저장
df = pd.DataFrame(player_list, columns = ['Number', 'Name', 'Position', 'Age,', 'Nation', 'Team', 'Value']) df df.to_csv('pandas.csv', index=False)
- 인코딩 해결 방법
파일을 ANSI로 저장해서 열면 된다. - 엑셀로 변경하여 저장 해야 한다
03 CSV 파일을 불러와 분석하기
- 파일 불러오기
pd.read_csv('pandas.csv')
*인코딩이 맞지 않으면 판다스가 파일을 읽어 오지 못한다
*웹 상의 파일도 읽어 올 수 있다. url 주소 + 경로를 정확히 넣으면 된다
1) DF 뜯어 보기
- 행과 열 개수
df.shape (50, 7) (rows, columns) = df.shape rows 50 columns 7
- df 정보
df.info() - df 전체 정보 요약 df.head() - df 정보 중 첫번째 5개 df.tail() - df 정보 중 뒤에서 5개
2) 인덱싱
- 인덱싱 및 슬라이싱 (loc, iloc)
- 열 번호로 인덱싱
- 컬럼 이름 선택하기
- loc/iloc
04 정렬
- 인덱스를 컬럼 명으로 바꾸기
- 컬럼명 수정 후 저장 하기
05 데이터 전처리
1) 데이터 변경
#value의 문자 없애기 df['Value'] = df['Value'].str.replace('€','') *타입 변경 df['Value'] = df['Value'].str.replace('m','').astype('float') df df.head() df = df.astype({'Age':'int'})
2) 컬럼 삭제 및 변경
* 번외 - 수집시에 데이터 전처리 하기
- 이 데이터의 인덱싱을 해보면 '€숫자m' 형태인데 01234 혹은 -5-4-3-2-1 형태로 나온다
- 즉 € = 0, m = -1 이므로 이것을 가지고 제거 하면 된다
value = player[8].text.strip() value = value[1:-1] *즉 값을 1:-1 사이의 값만 들고 오라는 뜻
06 판다스 간단 통계 분석 및 그룹화 분석
- 간단 통계 함수
df.describe() df['Age'].mean() df['Value'].sum() df['Nation'].mode() - 가장 많은 것 df[df['Nation'] == 'Brazil']
- 그룹화
g.count() g.sum() g['Value'].sum() c = df.groupby('Team') c.sum() c['Value'].sum().sort_values(ascending=False)
'빅데이터 > BeautifulSoup' 카테고리의 다른 글
BueatifulSoup 기초 및 활용 하기 02 - 순위 스크래핑 (0) 2021.12.14 BueatifulSoup 기초 및 활용 하기 01 - 기초 문법 (0) 2021.12.13 웹 크롤링 - BeautifulSoup+Pandas를 이용한 데이터 분석 2 (0) 2021.12.11 웹 크롤링 - BeautifulSoup+Pandas를 이용한 데이터 분석 (0) 2021.12.11 웹 크롤링 - BeautifulSoup 기초 개념 (0) 2021.12.09