Kaggle, Dacon
자연어 처리를 위한 라이브러리
Gensim
- 임베딩 가능
- 토픽 모델링
- LDA 등 지원
Scikit-learn
- CountVectorizer : 텍스트 내 단어 빈도수
- TfidVectorizer : TF-IDF(단어 중요도 파악) 기법을 적용하여 값 도출
- HashingVectorizer : 해시 함수로 실행시간 감소
CSV 파일 다루기
object 형식을 컴퓨터가 이해하지 못하기 때문에 임베딩(수치화 시켜야함)
column들간의 상관관계를 확인
-> 특징과 특징 사이 연관 관계 (선형 관계, 상관 관계) : 정답데이터와 상관없을 수 있음
- +1: 완전한 양의 상관관계 (한 특징이 증가할 때 다른 특징도 증가).
- 0: 상관관계 없음 (특징 간에 선형 관계가 없음).
- -1: 완전한 음의 상관관계 (한 특징이 증가할 때 다른 특징은 감소).
-> 라벨데이터(정답값) 과 연관 관계
: 어떤 특징이 라벨과 가장 높은 상관관계를 가지는지 파악
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('C:/Users/campus4D033/life_expectancy.csv')
print(df.describe())
print(df.info())
extract_df = df[['Life expectancy', 'Year', 'Alcohol', 'Percentage expenditure']]
print(extract_df.shape)
print(extract_df.isnull().sum())
print('-----결측치 처리-----')
extract_df.dropna(inplace = True)
print(extract_df.isnull().sum())
import seaborn as sns
sns.set(rc = {'figure.figsize':(12, 10)})
correlation_matrix = extract_df.corr().round(2)
sns.heatmap(data = correlation_matrix, annot=True)
plt.show()
sns.pairplot(extract_df)
plt.show()
상관 계수
: 두 변수 간의 선형 관계의 강도와 방향을 나타내는 수치
- 1 : 양의 상관관계가 가장 높다
- -1 : 음의 상관관계가 가장 높다
- 0 : 상관관계가 없다
OpenAPI 사용
import requests
import json
from bs4 import BeautifulSoup
#-------------------------------------------------인코딩-------------------------------------------------
# service_key = "oc9dQD9TcZyDCiIRueejn3i%2B8CpL0iQFb8JjJ8QmTdeWcdzdDec%2BnzgL%2B1Q8IWKAxBjf8k8gbrY2QMpTBpzDmg%3D%3D"
# url = f"http://apis.data.go.kr/B552061/frequentzoneFreezing/getRestFrequentzoneFreezing?ServiceKey=인증키&type=json&searchYearCd=2017&siDo=11&guGun=110&numOfRows=10&pageNo=1"
# response = requests.get(url)
# content = response.json()
# parsed_data = json.loads(response.text)
# print(parsed_data,type(parsed_data))
#-------------------------------------------------디코딩-------------------------------------------------
url = 'http://apis.data.go.kr/B552061/frequentzoneFreezing/getRestFrequentzoneFreezing'
service_key = "oc9dQD9TcZyDCiIRueejn3i+8CpL0iQFb8JjJ8QmTdeWcdzdDec+nzgL+1Q8IWKAxBjf8k8gbrY2QMpTBpzDmg=="
params ={'serviceKey' : service_key,
'type' : 'json',
'searchYearCd' : 2017,
'siDo' : 11,
'guGun' : 110,
'numOfRows' : 10,
'pageNo' : 1 }
response = requests.get(url, params=params)
parsed_data = json.loads(response.text)
print(parsed_data,type(parsed_data))
body = parsed_data['items']['item']
print(body)
import pandas as pd
data = pd.json_normalize(body)
print(data)
beautifulsoup
https://search.naver.com/search.naver?nso=&page=2&query=코로나&sm=tab_pge&start=1&where=web
https://search.naver.com/search.naver?nso=&page=3&query=코로나&sm=tab_pge&start=16&where=web
-> 2페이지에서 3페이지로 가니 start가 15 증가 15 * 1 = 15
https://search.naver.com/search.naver?nso=&page=10&query=코로나&sm=tab_pge&start=121&where=web
-> 10페이지는 start가 120 증가한 모습 15 * 8 = 120
검색어와 페이지 번호를 입력받아 네이버 검색 url 반환
import requests
from bs4 import BeautifulSoup
input_search = input("검색어 입력 : ")
page = int(input("검색할 페이지 : "))
# page 지정시 계산 부분
new_page = 0
if page == 1:
url = f'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query={input_search}'
elif page == 0:
url = f'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query={input_search}'
else:
new_page = (page-2) * 15 + 1
url = f'https://search.naver.com/search.naver?nso=&page={page}&query={input_search}&sm=tab_pge&start={new_page}&where=web'
print(url)
Selenium
브라우저를 통해 접근 실행
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
# open the Chrome 브라우저
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# 원하는 사이트의 url 입력
driver.get('https://www.google.com/search?q=%EC%BD%94%EB%A1%9C%EB%82%98&oq=%EC%BD%94%EB%A1%9C%EB%82%98&gs_lcrp=EgZjaHJvbWUyBggAEEUYOdIBCDI0ODRqMGo3qAIAsAIA&sourceid=chrome&ie=UTF-8')
driver.find_element(By.XPATH, '//*[@id="rso"]/div[2]/div/div/div[1]/div/div/span/a/h3')
Selenium을 사용한 금융데이터 수집
네이버의 환율 정보를 크롤링하는 학습 방법
-> 수집한 데이터를 데이터프레임으로
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
# 드라이버 생성
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# 원하는 사이트의 url 입력 - 네이버 환율 정보 테이블에 접근
driver.get('https://finance.naver.com/marketindex/?tabSel=exchange#tab_selection')
# ifram객체는 반드시 스위칭 후에 UI Element 접근 가능
driver.switch_to.frame('frame_ex1')
data = driver.find_element(By.XPATH, '/html/body/div/table')
for i in data.find_elements(By.TAG_NAME, 'tr'):
print(i.text)
d_list = []
for j in data.find_elements(By.TAG_NAME, 'tr'):
d_list.append(j.text.split())
df = pd.DataFrame(d_list)
# 데이터프레임 출력
print(df)
통계 분석 개념 및 정리
모든 특성 수치 표현
- 데이터가 수치화 되는 것이 기본
최대한 다양한 변수를 넣어 주요 변수 파악
- 한가지의 특성은 여러가지 특성으로부터 영향을 받음
통계 분석을 하는 이유
- 지수
- 추상적 개념은 직접적 관찰 어려움 -> 실제 측정값을 사용해야함
- 추상적인 내용들과 연관된 내용들이 있음 -> 관찰 가능한 다른 특성들과 연관 (추천 행동, 추천)
- 군집화
- 비지도 학습에 속함
- 비슷한 특성을 모아 하나의 집단으로
- K-평균(K-means) 군집화 알고리즘 : 홀수 형태로 값을 늘려가면서 k 값 성능을 확인
- K-최근접 이웃(KNN) 알고리즘 : 주어진 데이터 집합을 K개의 군집으로 나누는 것 (데이터 패턴 이해)
- 통계 분석의 예
- 추천 시스템
- 당근마켓 매물 분석
- 분류와 회귀
- 오차를 활용하여 회귀
- 선택지가 정해진 분류 중 하나를 선택
변수의 종류
범주형 변수 : 특정 내용 카테고리에 포함
- 순서형 (서열)
- 명목형 (비서열)
수치형 변수 : 숫자로 나타낼 수 있음
- 이산형 : 소수점으로 표현 안되는 수치적인 의미 존재
- 연속형 : 소수점으로 표현되는 연속적인 값
상관분석
- 두 변수의 연관성을 수치로 나타낸 것
- -1 ~ +1 로 상관계수를 나타냄
- +1 한 변수가 증가시 다른 변수도 증가
- -1 하나가 높으면 다른 하나가 낮다
- 상관계수가 0이면 관계 없음
'파이썬 & 머신러닝과 딥러닝' 카테고리의 다른 글
통계기반 데이터 분석 방법, 단순회귀분석, 종회귀모형, 모형의 선택, 모형의 타당성 (1) | 2024.07.03 |
---|---|
통계의 종류, 히트맵, 람다함수, 이항분포, 베르누이분포, 기하분포 (1) | 2024.07.02 |
beautifulsoup 기본 및 응용, 토큰화, 정규화, konlpy, wordcloud (0) | 2024.06.28 |
파이썬 문법 보충, 데이터 분석 라이브러리 (1) | 2024.06.28 |
20일차 - 순환신경망의 개념, RNN 드롭아웃, LSTM, 영화리뷰 분류, 로이터 기사 분류 (2) | 2024.02.07 |