ROKEY
[20250211] 파이썬 프로그래밍 - Python 활용 심화 2
kode-daks
2025. 2. 13. 12:20
수업 목표
- JSON 데이터 형식을 이해하고 파이썬에서 사용할 수 있다.
- API를 활용하여 날씨 데이터를 가져올 수 있다.
- 수집한 데이터를 활용하여 시각화 할 수 있다.
- 텍스트 데이터에서 이메일과 전화번호를 추출할 수 있다.
- 로그 파일에서 오류 메시지를 추출할 수 있다.
1. JSON과 API 활용 기초
JSON (JavaScript Object Notation)
- JSON은 데이터를 저장하고 전송하는 데 사용하는 경량 데이터 형식
- 사람과 기계가 모두 읽기 쉬운 텍스트 기반 구조
- 주요 데이터 구조 : 객체(딕셔너리)와 배열(리스트)
JSON 문자열을 파이썬 객체로 변환
import json
json_string = '{"name":"Alice","age":25,"city":"Seoul"}'
data = json.loads(json_string)
print(data["name"])
파이썬 객체를 JSON 문자열로 변환
python_dict = {"name":"Bob", "age":30, "city":"Busan"}
json_output = json.dumps(python_dict, indent=4)
print(json_output)
JSON 파일 입출력
# 저장
with open("data.json", "w") as f:
json.dump(python_dict, f, indent=4)
# 불러오기
with open("data.json", "r") as f:
loaded_data = json.load(f)
print(loaded_data)
API (Application Programming Interface)
- 프로그램 간 데이터와 기능을 주고 받을 수 있도록 하는 인터페이스
- REST API : HTTP 프로토콜을 기반으로 JSON 형태의 데이터를 주고 받는 방식
- e.g. OpenWeatherMap 날씨 정보 : https://openweathermap.org/
import json
import requests
import matplotlib.pyplot as plt
# 맥북 한글 깨짐 해결
from matplotlib import rc
rc('font', family='AppleGothic')
# plt.rcParams["font.family"]="Malgun Gothic"
plt.rcParams["axes.unicode_minus"] = False
apikey = ""
cities = ['Seoul', "New York", "Tokyo", "Sydney"]
temp_min_list = []
temp_max_list = []
k2c = lambda k: k - 273.15
for city in cities:
api = "http://api.openweathermap.org/data/2.5/weather?q={city}&APPID={key}"
url = api.format(city=city, key=apikey)
res = requests.get(url)
data = json.loads(res.text)
# print(data)
print(f'도시 : {data["name"]}')
print(f'날씨 : {data["weather"][0]["description"]}')
print(f'최저기온 : {k2c(data["main"]["temp_min"])}')
print(f'최고기온 : {k2c(data["main"]["temp_max"])}')
print(f'습도 : {data["main"]["humidity"]}')
temp_min_list.append(k2c(data["main"]["temp_min"]))
temp_max_list.append(k2c(data["main"]["temp_max"]))
# 산점도
plt.figure(figsize=(6,6))
plt.scatter(cities, temp_min_list, color="blue", label="최저기온")
plt.scatter(cities, temp_max_list, color="red", label="최고기온")
plt.title("도시별 기온")
plt.xlabel("도시")
plt.ylabel("기온")
plt.grid(True)
plt.legend()
plt.show()
2. 정규 표현식 활용
텍스트 데이터에서 이메일 주소나 전화번호 추출 프로그램
email_pattern = r'[a-zA-Z0-9.]+@[a-zA-Z0-9]+.[a-zA-Z]{2,}'
phone_pattern = '(0-9){2,3}-(0-9){3,4}-(0-9){4}'
emails = re.findall(email_pattern, sample_text)
for email in emails: print(f"- {email}")
3. 정규 표현식 프로젝트
e.g. 로그 파일 오류 메시지 추출
4. 데이터 통합 및 보고서 자동화
그래프 pdf 저장하기
from matplotlib.backends.backend_pdf import PdfPages
with PdfPages(file) as pdf:
pdf.savefig()
plt.show()
Python
Rokey
20250211