always_here

지식을 공유하고 함께 성장하는 엔지니어 as_always 입니다

AS_ALWAYS
728x90

핀테크 교육/금융데이터 활용 14

크롤링 비교

크롤링으로는 주로 Selenium과 BeautifulSoup를 많이 사용한다. 두가지 방법을 모두 사용해보고 비교를 해보았다. Selenium 은 웹 동작으로 동적 크롤링을 효과적으로 수행한다. Xpath의 pattern을 찾아 함수를 생성하고 Click()과 back() 함수를 통해 페이지를 이동하는 방식이다. driver.find_element_by_xpath('복사한 xpath) .click(), .send_keys() 를 통해 웹 동작 라이브러리 자체가 무겁고 자주 막힌다는 아쉬움이 있다. BeautifulSoup는 html 정보를 파싱하여 수행한다. soup.find_all()의 구조로 검색한다. (soup.find()의 경우도 동일) soup.find_all()의 경우에 리스트로 값을 반환하기..

파이썬 - 데이터베이스 연결

데이터를 데이터베이스에 연결하여 저장하고 싶어 코드를 구현해보았습니다. pymysql 을 통해 데이터 베이스와 연결 self.conn = pymysql.connect(host = , user = , password = , db = , charset = ) with self.conn.cursor() as curs sql=""" CREATE TABLE IF NOT EXISTS news_raw ( ) """ curs.execute(sql) self.conn.commit() 데이터베이스 저장 conn.close() 연결 해제 with self.conn.cursor() as curs: sql = f"REPLACE INTO news_raw VALUES ('{r.date}','{r.title}','{r.content..

워드클라우드

https://always-here.tistory.com/55?category=984522 크롤링 (네이버 기사 크롤링) link_result=find_url(company_code) 네이버 금융 뉴스공시를 클릭하며 뉴스 기사들의 제목이 나오고 해당 제목을 클릭해야 뉴스 내용을 볼 수 있다. 따라서 먼저 회사 코드로 뉴스 공시 페이지에 들어간 always-here.tistory.com 크롤링한 기사 본문을 Konlpy의 형태소 분석기 Okt()를 활용해서 명사 추출 from konlpy.tag import Okt tokenizer = Okt() df['tokenized'] = df['content'].apply(tokenizer.nouns) df.tokenized.reset_index(drop=True)..

konlpy 형태소 분석기

한국어 처리 패키지인 konlpy는 5가지의 형태소 분석기 지원(Okt, Komoran, Kkma, Mecab, Hannanum) Okt 형태소 파서 중 실행 속도가 가장 빠르다. Kkma 문장 갯수 많아지면 다른 분석기에 비해 압도적으로 시간 소요 늘어남 띄어쓰기 오류에 덜 민감 Mecab 압도적으로 빠르다 띄어쓰기에서 높은 정확도 Komoran 여러 어절을 하나의 품사로 분석 가능 공백이 포함된 고유명사 정확하게 분석 가능 Hannanum 띄어쓰기 없는 문장은 분석 품질 좋지 않다

크롤링 (네이버 기사 크롤링 - newspaper3k 사용)

newspaper3k : newspaper3k는 뉴스 데이터를 크롤링을 위한 패키지 뉴스 기사의 url을 전달해주면, 뉴스 기사의 제목과 텍스트를 추출해준다. https://always-here.tistory.com/55?category=984522 크롤링 (네이버 기사 크롤링) link_result=find_url(company_code) 네이버 금융 뉴스공시를 클릭하며 뉴스 기사들의 제목이 나오고 해당 제목을 클릭해야 뉴스 내용을 볼 수 있다. 따라서 먼저 회사 코드로 뉴스 공시 페이지에 들어간 always-here.tistory.com 위 글을 newspaper3k를 사용해서 다시 크롤링 해보았다. df=pd.DataFrame(columns={"title","content"}) title의 링크와 ..

크롤링 (네이버 기사 크롤링)

link_result=find_url(company_code) 네이버 금융 뉴스공시를 클릭하며 뉴스 기사들의 제목이 나오고 해당 제목을 클릭해야 뉴스 내용을 볼 수 있다. 따라서 먼저 회사 코드로 뉴스 공시 페이지에 들어간 후, 각 title의 링크를 크롤링으로 가져와 link_result에 저장해준다. -> a 태그의 href (주소) # 뉴스 링크 links = html.select('.title') for link in links: add = 'https://finance.naver.com' + link.find('a')['href'] link_result.append(add) link_result에 담긴 링크들을 for문으로 돌면서 뉴스 기사 내용을 크롤링한다. .get_text()를 사용하면 H..

크롤링 (네이버 금융 크롤링)

크롤링 : 웹 페이지로부터 데이터를 추출하는 행위 soup = BeautifulSoup(입력 문자열, 'html.parser') soup.select('태그명') : 태그를 입력으로 사용할 경우 soup.select('.클래스명') : 클래스를 입력으로 사용할 경우 soup.select('#아이디') : ID를 입력으로 사용할 경우 soup.select('상위태그 하위태그') : 자손 관계 (띄어쓰기) soup.select('상위태그 > 하위태그') : 자식 관계 ( > ) requests라는 패키지에 있는 get이라는 모듈(함수)에 url을 입력으로 하고, 이를 변수에 저장한 후, 변수.text를 하면 해당 URL의 HTML 코드를 받아올 수 있다. response = requests.get(url) ..

탐색적 분석, Bar chart

결측값 처리 결측값은 아예 제거를 해주거나, 특정 값으로 채워주게 된다. 파이 차트 그리기 파이 차트를 그리기 위해서는 파이 차트로 사용할 데이터의 이름이 담긴 리스트, 그리고 해당 이름에 해당하는 데이터의 값이 담긴 리스트 이 두 가지가 필요하다. value_counts() 특정 열의 값들이 각각 몇개 씩 있는지 count 하는 함수 결과로 index와 value가 나오게 된다. -> Series 형식 우리는 리스트가 필요하기 때문에! -> pie_labels = drink_df['continent'].value_counts().index.tolist() pie_values = drink_df['continent'].value_counts().values.tolist() plt.pie(pie_value..

상관관계 분석

상관 분석이란, 두 변수 간의 선형적 관계를 상관 계수로 표현하는 것을 말한다. 상관 계수를 구하는 것은 공분산의 개념을 포함하는데, 공분산은 2개의 변수에 대한 상관 정도. 2개의 변수 중 하나의 값이 상승하는 경향을 보이면 다른 값도 상승하는 경향을 수치로 표현한 것. 하지만 공분산만으로 두 확률 변수의 상관 관계를 구한다면 두 변수의 단위 크기에 영향을 받을 수 있다. 따라서 -1과 1 사이 값으로 변환하고 이를 상관 계수라 한다. 만약 상관 계수가 1에 가깝다면 서로 강한 양의 상관 관계가 있는 것이고, -1에 가깝다면 음의 상관 관계가 있는 것이다. 0이면 상관 관계가 없다. Matplotlib : 파이썬에서 자료를 차트나 플롯으로 시각화하는 패키지 Seaborn : Matplotlib을 기반으..

데이터프레임 활용

# 인덱스의 범위 확인 drink_df.index # 각 컬럼의 타입 출력 drink_df.dtypes # 데이터프레임의 행과 열의 개수 출력 drink_df.shape # Numpy 타입으로 출력 drink_df.values # 첫번째 행 출력 drink_df.values[0] for element in drink_df.values[0]: print(element) 2차원 테이블 형태 -> 데이터프레임이라고 부른다. 특정 하나의 열만을 불러올 경우에는 데이터프레임이 아니라 데이터 타입이 판다스(Pandas)에서 제공하는 또 다른 데이터 타입인 '시리즈(Series)'가 된다. # 데이터를 파악하기 위한 열의 특성(feature) 데이터 프레임의 정보 보여준다. drink_df.info() # 해당 데이..

728x90