본문 바로가기

Diary

파이썬 Pandas, Dataframe


1. 반대로 bs4를 이용해서 저번에 만든
소스 코드를 따오는것을 태그만 남게 가공한후
2. Perplexity에게 넘기면 좀 더 쉽게
분석 할수 있지 않을까?













이번 시간에는 태그정보를 수집하기


지난시간 파트2에서는 원하는 웹페이지에서
소스코드를 

requests.get("http...")


태그정보 수집하기 - 원하는 웹페이지 소스 수집한후
필요한 태그 정보 내 소스만 탐색하는 방법을 실습을 통해
학습


bs = bs4.BeautifulSoup(html,"html.parser")
#div 태그 찾기

divs = bs.find or findAll("태그명")


import requests //리퀘스트로 내가 웹에다 요청을 보내서
일단 소스코드를 다 가지고 그걸 이쁘게 태그만 추출을 한다.

import bs4 // 그걸 이쁘게 태그만 추출하는 모듈,라이브러리

resp = requests.get("https://sparkkorea.com/퀴즈")

html = resp.text // 원본을 다 텍스트로 다 가져옴

bs = bs4.BeautifulSoup(html, "html.parser")
//이 html을 html Parser을 통해 추출하겠다.


이 bs 에서 어떻게 중요한 태그만 가져올수있느냐?


1. 태그명으로 소스 수집하기

2. a태그만 알고 싶다.

bs.find(name = "태그명")
맨앞에있는것만

bs.findAll(name = "태그명")
전부 다 찾음

div태그를 찾는게 핵심이지만 어떤 기준과 방법으로 찾을것인가?

기존에는 bs.find하고 태그명만 찾겠다면
이번에는 Attribute가들어감


bs.find(name = "div",
attrs = {"id" : "id_spark_quiz"})
이렇게 Key/Value값으로 찾을수 있음

태그명외에 속성으로 태그 탐색

#ID 속성으로 태그 탐색
spQuizTag = bs.find(name = "div",
attrs = {"id":"id_spark_quiz"}
spQuizTag'
type(atag) //bs4.element.ResultSet


태그내 속성 정보를 수집하는 방법

findAttr = findPart.attrs["속성명"]


findAttr = bs.find(name = "태그명")

findPart = findAttr.find(name = "태그명")
이라고 한다면 아마도

bs.find(name = "태그명").find(name = "태그명")
도 될까?


atags = sparkQuizTag.findAll(name = "a")
atags를 인덱스로 접근

linkList = [] // 완벽히 자료형을 리스트로 만들어주기 위해
atagsLen = len(atags)
for i in range(0,atagLen):
linkList.append(atags[i].attrs["href"])

columnList.append(atags[0].attrs["href"])
columnList.append(atags[0].text)
//엄밀히 따지면 행이 여기서 구분된다.
예를들면 X행0열과값과 X행 1열값을 넣어주는 격


rowList = []
ColumnList = []

for i in range(0,atagsLen):
#각 행의 컬럼 정보를 리스트에 저장함
columnList.append(atags[i].attrs["href"])
columnList.append(atags[i].text)
#각 행의 모든 정보를 row
rowList.append(columnList)
#다음행을 담기 위해 컬럼 리스트 초기화
columnList = []

pd.data
pd.DataFrame(zip(linkList,titleList),
   columns = ["링크",'타이틀'])

answer = pd.DataFrame(rowList,columns = ["링크","타이틀"])

pd.DataFrame([firstRow,secondRow])


판다스 복습
pip install pandas

1.고성능 데이터 조작 라이브러리
2.스프레드 시트,RDB 데이터 접근
3. 고성능 시계열 처리 기능
4. R의 데이터 프레임과 연계
5. 금융 데이터 분석용 툴 제공


R의 

2. 
#라이브러리 선언
import pandas as pd

qtyList = [10,15,20,13,22]

qtyDf = pd.DataFrame(qtyList,columns=["qty2"])
qtyDf.columns = ["qty"]





qty를 보면 컬럼 이름이 자동으로 매핑

두개 리스트를 하나의 리스트로 저장해서 바로 출력하는 방법도 있음


yearweekList = [202001,202002,202003]
qtyList = [10,15,20,13,22]

zip(yearweekList,qtyList)


pd.DataFrame(zip(yearweekList,qtyList)
columns = ["yearweek","qty"])

pd.concat이라 해서 좌우로 붙여줄수있음


yearweekList = [202001,202002,202003]
qtyList = [10,15,20,13,22]


두개의 데이터 프라임을 만들어줌

yearweekDf = pd.DataFrame(yearweekList)
qtyDf = pd.DataFrame(qtyList)

두개의 데이터 프라임을 여기에 써줌
pd.concat([yearweekDf,qtydf],axis = 1)




1.Rowlist를 만들어서 넣던가
2.리스트 2개를 Zip을해서 넣던가
3.Concat으로 데이터 프라임을 넣던가 axis추가해서
0으로 하면 밑으로 내려가고 axis를 1로 하면 오른쪽으로 쭉 붙게됨

mergedDf = pd.concat([yearweekDf,qtydf],axis = 1)
mergedDf.columns = ["yearweek","qty"]

oneRow

마지막으로 5번의 방법이 있는데
5. firstRow =  [202001,1]
secondRow = [202002,2]

이 방법은 나중에 아래 방법과 비교해볼려고한다.

https://youtu.be/MVjPuVOSVyM?list=PLXjrhm6Px4U-b2hZ9Dvsfxfgb5OPJ1mJ7

RowList를 담는방법이랑
//즉 리스트 안에 리스트가 있는경우 그 안에 리스트는 열의 값을 담게끔 조정하는것 같음

6. 딕셔너리

'Diary' 카테고리의 다른 글

20200705  (0) 2020.07.05
20200626  (0) 2020.06.26
20200621 고민이 많을시기  (0) 2020.06.22
20200618  (0) 2020.06.19
20200616  (0) 2020.06.16