Python 학습 일지

2024. 8. 6. 18:37Upstage AI Lab

전반적인 총평

대부분 그렇게 어렵지 않았다. 학교에서 python에 대해 알려주는 내용 정석대로 커리 큘럼이 구성되어 있었다.

녹화된 인터넷 강의랑 실시간 인터넷 강의가 동시에 진행되었다. 두 개로 나뉘어서 작성해보겠다.

#1 실시간 Zoom 강의

김용담 강사님께서 강의를 해주셨다.

강의의 전반적인 구성과 진행 방식은 좋았다. 수업을 받을 때마다 '여러번 많이 진행해본 분이시구나'라는 생각이 들었다.

 

적절한 쉬는 시간의 분배, 적절한 난이도의 분배가 좋았다.

조금은 난이도가 있었던 것은 프로그램이 작동할 때 CS단위에서 어떻게 프로그램이 작동되고 구성되는지에 대해 알려주실 때이다.

 

그래도 대부분이 아는 내용이라 크게 어려운 것은 없었다.

 

가장 많이 배운 부분은 API이용해서 날씨 정보 가져오고, 모듈 단위 개발하는 것을 배울때 정말 많이 배웠다.

앞으로 본격적인 Langchain 팀 프로젝트를 하기 전에 보통 프로그램 개발을 어떻게 하는지 알려주시는 시간이었는데 어렵지 않은 코드로 큰 흐름을 잡을 수 있었다.

 

과제로 내주신 것은 정답 공개를 안 해주셨기 때문에 내가 따로 작성한 코드를 적어 둔다.

 

문제

프로젝트 설명

  • openweathermap에 있는 API중에서 5 day weather forecast API를 사용.
    (API Reference : https://openweathermap.org/forecast5)
  • 새로운 API Reference를 읽고, 해당 API를 이용하여 앞으로 5일간의 온도를 예측한 그래프를 시각화하는 코드를 구현합니다.
  • 이번에도 City를 기준으로, API Requests를 하는 코드를 구현합니다.

해설 (개인 풀이)

# main.py

from data_fetcher import DataFetcher
from data_processor import DataProcessor
from visualizer import Visualizer
# from logger import Logger

def main():
    api_key = ''		# 각자 API key 작성
    city = input("Which City? ")
    
    fetcher = DataFetcher(api_key, city)
    processor = DataProcessor()
    visualizer = Visualizer()
    # logger = Logger()
    
    raw_data = fetcher.fetch_weather()
    date, temp = processor.process_data(raw_data)
    # logger.save_data(date, temp)
    visualizer.plot_data(date, temp)

if __name__ == "__main__":
    main()
# data_fetcher.py

import requests

class DataFetcher:
    def __init__(self, api_key, city):
        self.api_key = api_key
        self.city = city
        
    def fetch_weather(self):
        url = f"https://api.openweathermap.org/data/2.5/forecast?q={self.city}&appid={self.api_key}"
        response = requests.get(url=url)
        data = eval(response.content)  # eval : 문자열로 표현된 Python 표현식을 실행하고 그 결과를 저장하는 함수 but 이렇게 하면 보안상의 문제가 있을 수도 있다.
        return data
# data_processor.py

# data가 JSON 형태로 제공됨.
# JSON -> 딕셔너리, 리스트
class DataProcessor:
    def process_data(self, data):
        temp_list = []
        date_list = []

        for item in data['list']:
            temp = item['main']['temp'] - 273
            dt_txt_str = item['dt_txt']
            
            temp_list.append(temp)
            date_list.append(dt_txt_str)
        
        return date_list, temp_list
# visualizer.py

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

class Visualizer:
    def plot_data(self, date, temp, output_file='output2.png'):
        plt.figure(figsize=(12, 4))
        sns.lineplot(x=date, y=temp)
        plt.title('5 Day Weather Forecast', fontsize=12)
        
        num_ticks = 5  # 표시할 눈금의 수
        tick_indices = np.linspace(0, len(date) - 1, num_ticks, dtype=int)
        plt.xticks(tick_indices, [date[i] for i in tick_indices])
        
        plt.savefig(output_file)
        print(f"Graph saved to {output_file}")
        plt.show()

결과 사진 (서울)

서울 날씨 예측

다음주랑 이어지는 프로젝트가 Langchain 팀 프로젝트인데 시작하기전에 좋은 경험이었다고 생각한다.

개인적으로 느낀 프로젝트 진행 흐름에 대해 적어본다.

  1. main 함수 먼저 짜기 (팀원 다같이)
    -> 팀원 전체가 프로그램이 어떤 흐름으로 돌아가고, 각 module은 어떤 역할을 해야하는지 공유한다.
  2. main 함수에서 사용할 module 역할 배분해서 개발.
    -> OOP 장점(encapsulation, polymorphism) 극대화

이후에는 RAG에 대해서도 배웠다. 이건 인강 이야기에 작성해보겠다.

#2 녹화된 인터넷 강의

여기에서도 대학에 가면 알려주는 거랑 비슷하게 python 교육 과정 구성 + 웹 크롤링 + numpy, pandas + RAG 이렇게 배웠다.

 

대학에서 배운 내용은 수월하게 했다.

웹 크롤링은 말만 많이 들어봤지 자세히 배운 경험은 없어서 생소했지만 그렇게 어렵지는 않았다.

(범수 순장님 생각이 난다... 크롤러 만들어서 필요한 정보 끌어와주는 챗봇 만들기 하셨었는데 그립읍니다🥲)

 

numpy, pandas도 그렇게 어렵지는 않았다.

근데 이거는 프로젝트하고 꾸준하게 많이 쓰면서 익숙하게 만들어야 할 영역이다.

그냥 외운다고 외우면 외워지겠지만 오랜 시간 동안 기억은 못한다. (프로젝트 얼른 해보고 싶다)

 

RAG는 강의 듣는데 뭔말인가 싶었다.

예전에 논문 리뷰한 seq2seq, 바다나우 attention만 알아듣고 나머지는 읭? 싶었다.

 

원래 인강 진도보다 조금 늦게 들으면서 이해하고 넘어가야 겠다. AI하는데 Tranformer를 모른다? 말이 안된다.

 

다행히 이번주 zoom 실강 때 목, 금 git을 하는데 git은 학교에서 OSS(Open Source Software)하면서 배운 것도 있고 배운 자료도 있어서 수월하게 배울 듯 싶다.

 

git로 협업하는 방법을 학교 수업에서 못 배웠었는데 그것만 집중해서 배우면 될 듯 싶다.

 

왜 이 이야기를 했냐?

그때 RAG와 Langchain 복습과 실습을 할 생각이다. 강의에서 용어가 온통 원어인 영어로 구성 되어 있어서 이해하기가 힘들다.

당연하다. 나름 신생 분야고 발전이 계속 이루어지는 분야이기 때문에 어쩔 수 없다.

(계속 배우고 혹시 나중에 필요하다고 느끼면 나도 나중에 유학...)

 

얼른 얼른 진도 따라가자 들어야 할 양이 많다.

(원래 CS 데일리 복습이랑, 하루에 1문제 알고리즘 할려고 했는데 양이 많아서 나중에 좀 안정화 되면 그때 그걸 봐야 할 듯...)

 

끝:)

'Upstage AI Lab' 카테고리의 다른 글

Git 학습일지 2  (0) 2024.08.11
Git 학습 일지  (0) 2024.08.10
컴퓨터 구조 + 부트캠프 생활 특강  (0) 2024.07.25
컴퓨터 구조  (2) 2024.07.22
OT 및 인공지능 기술 특강  (0) 2024.07.16