[이솦] 파이선으로 배우는 AI 기초 03
- 파이썬의 입출력 함수와 문자열 포맷팅 방법을 소개하고 있습니다.
- pandas 라이브러리를 사용하여 데이터 처리 방법을 설명하고, BeautifulSoup을 이용한 웹 스크래핑 방법을 제시합니다.
- Prophet 라이브러리를 활용해 달러 환율의 미래 추이를 예측하고, 환율 예측 결과를 바탕으로 환전 금액을 계산하는 예제를 제공합니다.
오늘 공부한 것은 입출력 함수 입니다.
print()
print(3*4)
print('Hello world')
print("우리나라 인구는 점점 감소하고 있습니다.")
print('올해 인구가 작년보다',10,'만 명' '줄어듭니다')
숫자는 그대로, 글자는 따옴표로 (큰 따옴표든 작은 따옴표든 상관없이), 숫자와 글자가 같이 나올때는 글자는 따옴표로, 숫자는 그대로 씁니다. 문장을 여러개로 나눠서 쓰려면 '\n'을 사용합니다.
파이썬은 출력시에 값의 서식을 글자와 숫자를 지정해서 할수 있습니다. 숫자는 계산이 되고 글자는 계산이 안되겠죠. 소괄호 안에 서식 지정자와 출력할 값입력하며 서식 지정자 문자열 포맷팅로 서식을 변경할수 있습니다.
자료형 | 서식 지정자 | 설명 |
---|---|---|
정수 | %d | decimal interger, 정수형 자료 출력 |
실수 | %f | • fixed point, 실수형 자료에 사용하며 소수점 아래 여섯째 자리까지 출력•f 앞에 점(.)과 출력할 소수점 아래 자릿수 입력예 %2.f→ 소수점 아래 둘째 자리까지 출력 |
문자열 | %s | string, 문자형 자료 출력 |
이렇게 서식이 진행되며, 정수와 실수의 차이는 정수는 숫자, 실수는 소수점 있는 숫자입니다 . 기본적으로 소수점 6자리 까지 출력입니다.
print('3* 4 = %d' %(3*4))
print('오늘 기온은 %f도 입니다.'%12.3)
print("지구온난화는 %s" %'우리모두 관심을 가져야 합니다.')
print('오늘 기온은 %f도 이고 날씨는 %s 입니다.' % (12.3, '맑음'))
1번에서는 3*4 라는 문자열을 % d(정수)로 바꾸고, %을 3*4로 치환
2번에서는 %f 실수 치환
3번에서는 %s 문자열 치환
4번은 실수와 문자열 치환입니다.
이때 1번에서 맨처음 3*4는 ' '로 묶여서 숫자가 아니라 문자라는게 중요합니다.
format () 함수를 쓰면 숫자를 문자열의 형태로 변환하여 출력할수 있습니다.
print('{}의 키는 {}이고 몸무게는 {}입니다.'.format('에디','170','비밀'))
이때 {}중괄호의 수와 foramt 다음에 나오는 갯수의 합이 같아야 합니다.
print('올해 우리나라 인구는 5162만명 입니다.')
print('올해 우리나라 인구는 %d만명 입니다.' % 5162)
print('올해 우리나라 인구는 {}만명 입니다.'.format(5162))
이렇게 여러 방법으로 출력이 가능합니다.
input()
사용자로 부터 어떤 자료를 입력 받을때 사용, 모든 입력값은 문자열로 인식, 계산을 위해서 입력 받은것을 숫자로 변환하고 싶다면 자료형을 변환해야 하고 이것을 형변환 (Casting)이라고 함
자료형 | 형변환 함수 | 설명 | 예시 |
---|---|---|---|
정수형 | int(값) | 정수형으로 변환 | int(4.5) ⇒ 4 |
실수형 | float(값) | 실수형으로 변환 | float(4) ⇒ 4.0 |
모든 숫자 (정수, 실수)모두 가능 | eval(표현식) | 정수형/실수형 | eval(3*3)⇒9eval(3*3.1) ⇒ 9.3 |
문자형 | str(값) | 문자열로 변환 | str(123)⇒ '123' |
name = input('당신의 이름은?')
print('하이 %s. 만나서 반가워.'%name)
이렇게 이름을 입력하면 name이란 변수를 지정해 주고, 그걸 변수값을 출력 가능
실제로는 머신 러닝에서는 단순히 두 함수를 써서 출력하는 일은 많지 않고, 파일 입력을 받음.
실제로는 이런식으로 많이 쓴다.
df = pd.read_csv('rollercoasters.csv') #데이터 입력
#데이터프레임의 기초 정보(데이터 개수, 속성명 속성별 개수, 속성의 데이터 유형) 출력
df.info()
df.shape # 데이터프레임의 행과 열의 개수를 쌍으로 출력
df.head() # 데이터프레임의 상위 5개 행 출력
df.tail() # 데이터프레임의 하위 5개 출력
df.describe() # 통계량 출력
물론 위 코드는 코드의 일부로 가지고 있는 csv 파일을 넣어서 테스트 해보면
!pip install pandas
import pandas as pd
df = pd.read_csv('csv 파일') #데이터 입력
#데이터프레임의 기초 정보(데이터 개수, 속성명 속성별 개수, 속성의 데이터 유형) 출력
df.info()
df.shape # 데이터프레임의 행과 열의 개수를 쌍으로 출력
df.head() # 데이터프레임의 상위 5개 행 출력
df.tail() # 데이터프레임의 하위 5개 출력
df.describe() # 통계량 출력
Word Meaning Synonym Antonym count 3963 3963 3750 unique 2330 3073 3290 top realize 특정한 assignment, work, undertaking freq 12 14 5
으로 결과치가 잘 나온다. 이런 데이터를 다시 다른 라이브러리를 불러서 차트로 만드는 것도 가능하다.
마지막 실습은 입력된 달러를 원으로 바꾸는 코드이다.
dollar = eval(input('환전할 달러 금액'))
rate = eval(input('오늘의 환율'))
won = dollar * rate
print (won)
input 이 두번이다. 다른식으로 바꾸는 것도 응용이 가능할것같은데, 인터넷에서 데이터를 가져와서 하는 걸로 바꿔 보자.
import requests
from bs4 import BeautifulSoup
def get_exchange_rate():
url = "https://www.google.com/search?q=usd+to+krw"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
rate = soup.find("span", class_="DFlfde SwHCTb").text
return float(rate.replace(",", ""))
dollar = float(input('환전할 달러 금액: '))
rate = get_exchange_rate()
won = dollar * rate
print(f"환전할 달러 금액: {dollar} USD")
print(f"오늘의 환율: {rate} KRW/USD")
print(f"환전된 금액: {won:.2f} KRW")
BeautifulSoup을 사용해서 구글 사이트에서 검색을 한후에 스크래핑 해서 결과를 내게 된다.
그럼 이걸 지난번에 한 prophet 함수를 이용해서 4년전부터 지금까지의 환율을 계산해 추이를 보고 현재의의 달러 환전 금액과 90일 후 환전 금액의 차이를 계산해 보자.
# 라이브러리 설치 (이미 설치된 경우 생략 가능)
!pip install yfinance prophet requests beautifulsoup4
import yfinance as yf
import pandas as pd
from prophet import Prophet
import requests
from bs4 import BeautifulSoup
def get_current_exchange_rate():
url = "https://www.google.com/search?q=usd+to+krw"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
rate = soup.find("span", class_="DFlfde SwHCTb").text
return float(rate.replace(",", ""))
# 환율 데이터 가져오기
ticker = 'KRW=X'
start_date = '2021-07-01'
end_date = '2024-07-01'
# Yahoo Finance에서 환율 데이터 다운로드
data = yf.download(ticker, start=start_date, end=end_date)
data.reset_index(inplace=True)
# Prophet이 요구하는 형식으로 데이터 준비
df = pd.DataFrame({'ds': data['Date'], 'y': data['Close']})
# Prophet 모델 정의 및 학습
model = Prophet(daily_seasonality=True)
model.fit(df)
# 미래 예측 기간 설정 (90일)
future = model.make_future_dataframe(periods=90)
forecast = model.predict(future)
# 예측 결과에서 90일 후의 환율을 가져오기
predicted_rate = forecast.loc[forecast['ds'] == future['ds'].max(), 'yhat'].values[0]
# 사용자가 입력한 달러 금액 환전
dollar = float(input('환전할 달러 금액: '))
current_rate = get_current_exchange_rate()
won_current = dollar * current_rate
won_predicted = dollar * predicted_rate
# 출력
print(f"환전할 달러 금액: {dollar} USD")
print(f"오늘의 환율: {current_rate} KRW/USD")
print(f"환전된 금액 (오늘의 환율 기준): {won_current:.2f} KRW")
print(f"90일 후 예측된 환율: {predicted_rate:.2f} KRW/USD")
print(f"환전된 금액 (90일 후 예측된 환율 기준): {won_predicted:.2f} KRW")
# 예측 결과 및 구성 요소 시각화
model.plot(forecast)
model.plot_components(forecast)
환전할 달러 금액: 1000.0 USD
오늘의 환율: 1387.59 KRW/USD
환전된 금액 (오늘의 환율 기준): 1387590.00 KRW
90일 후 예측된 환율: 1466.27 KRW/USD
환전된 금액 (90일 후 예측된 환율 기준): 1466270.09 KRW
환율은 더 오를것 같다. 이 망할 정부...