1. 개발 환경 세팅: 아나콘다 vs 주피터
데이터 분석을 시작하려면 환경 설정이 중요하다. 가장 많이 쓰이는 두 가지 방법이 있다.
- 아나콘다(Anaconda): 파이썬과 판다스(Pandas), 넘파이(NumPy) 같은 필수 라이브러리가 한 번에 설치되는 '종합 선물 세트'. 초보자에게 가장 추천한다.
- 주피터 노트북(Jupyter Notebook): 웹 브라우저에서 코드를 한 줄씩 실행하고 결과를 바로 확인하는 에디터. 아나콘다를 깔면 자동으로 같이 설치된다.
설치 팁:
- 아나콘다 공식 홈페이지에서 다운로드 및 설치.
- 설치 후 Anaconda Navigator를 실행하고 Jupyter Notebook 실행.
- 만약 아나콘다가 무겁다면, 파이썬 설치 후 CMD에서 pip install jupyter로 가볍게 설치도 가능하다.
2. Pandas 기초: 데이터프레임 만들기
가장 기본적인 데이터프레임(표)을 직접 만들어보는 실습이다.
Python
# 딕셔너리를 활용한 DataFrame 생성
import pandas as pd
data = {
'이름': ['철수', '영희', '민수', '지민'],
'나이': [25, 30, 45, 22]
}
df = pd.DataFrame(data)
df
3. 실전 예제: 엑셀 데이터로 학점 계산하기
엑셀 파일을 불러와서 총점과 평균을 구하고, 조건문(if)을 활용해 학점(A~F)을 부여하는 로직이다.
Python
import pandas as pd
import numpy as np
# 엑셀 파일 불러오기
df = pd.read_excel("c:/pandas/data/0122.xlsx")
# 파생변수 생성 (총점, 평균)
df["총점"] = df["국어"] + df["영어"] + df["수학"]
df["평균"] = round(df["총점"] / 3, 1)
# 학점 부여 로직 (List Comprehension & 삼항 연산자 활용)
hak = []
for i in df["평균"]:
hak.append("A" if i >= 90 else "B" if i >= 80 else "C" if i >= 70 else "D" if i >= 60 else "F")
df["학점"] = hak
df
4. 갭마인더(Gapminder) 데이터 분석
국가별 기대수명과 GDP 데이터를 다루는 갭마인더 데이터셋을 활용해 원하는 행/열을 추출하고 통계를 내보았다.
4-1. 데이터 로드 및 슬라이싱 (iloc 활용)
Python
import pandas as pd
# 탭(Tab)으로 구분된 tsv 파일 읽기
df = pd.read_csv("c:/pandas/data/gapminder.tsv", sep="\t")
# 특정 열 추출 (iloc 활용)
# 0부터 4까지 2간격으로 열 선택
a = list(range(0, 5, 2))
list2 = df.iloc[:, a]
print(list2)
4-2. 국가별 평균 수명과 GDP 구하기 (groupby)
Python
# 국가별 그룹화 후 평균 계산
list3 = df.groupby('country')['lifeExp'].mean()
list4 = df.groupby('country')['gpdPercap'].mean()
# 한국 데이터만 추출
korea_lifeExp = list3['Korea, Rep.']
korea_gdp = list4['Korea, Rep.']
print(f"한국의 평균 수명: {korea_lifeExp:.2f}세")
print(f"한국의 평균 GDP: {korea_gdp:.2f}달러")
4-3. 한국의 연도별 기대수명 그래프 시각화
Python
import matplotlib.pyplot as plt
# 한국 데이터만 필터링
korea = df[df['country'] == 'Korea, Rep.']
# 꺾은선 그래프 그리기
plt.plot(korea['year'], korea['lifeExp'], marker='o')
plt.title('South Korea Life Expectancy')
plt.xlabel('Year')
plt.ylabel('Life Expectancy')
plt.show()
5. [심화] 네이버 날씨 크롤링 & 시각화
requests와 BeautifulSoup으로 네이버 날씨 정보를 가져와 정제(RegEx)하고, Matplotlib으로 시각화한 뒤 엑셀로 저장까지 하는 종합 예제다.
Python
import pandas as pd
import matplotlib.pyplot as plt
import requests
from bs4 import BeautifulSoup
import re
# 1. 크롤링 (서울 날씨)
url = "https://search.naver.com/search.naver?query=서울+이번주+날씨"
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')
# 2. 데이터 정제 (정규표현식으로 숫자만 추출)
temps_low = []
for item in soup.select('.day_data .lowest'):
clean_temp = re.findall(r'[-+]?\d+', item.text)
if clean_temp:
temps_low.append(int(clean_temp[0]))
temps_high = []
for item in soup.select('.day_data .highest'):
clean_temp = re.findall(r'[-+]?\d+', item.text)
if clean_temp:
temps_high.append(int(clean_temp[0]))
# 임시 요일 데이터 (실제 크롤링 시 요일 태그도 가져오면 더 좋음)
days = ['오늘', '내일', '모레', '글피', '5일후', '6일후', '7일후']
# 3. DataFrame 생성
weather_df = pd.DataFrame({
'Day': days[:7],
'Low': temps_low[:7],
'High': temps_high[:7]
})
# 4. 시각화 (한글 폰트 설정 포함)
plt.figure(figsize=(10, 6))
plt.rcParams['font.family'] = 'Malgun Gothic' # 윈도우 기준
plt.rcParams['axes.unicode_minus'] = False
plt.plot(weather_df['Day'], weather_df['High'], label='최고 기온', marker='o', color='red')
plt.plot(weather_df['Day'], weather_df['Low'], label='최저 기온', marker='o', color='blue')
plt.title('이번 주 서울 기온 변화 추이', fontsize=16)
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend()
# 그래프 저장 및 출력
plt.savefig('weekly_temperature.png', dpi=300)
plt.show()
# 5. 엑셀 저장
with pd.ExcelWriter('S-Traffic_Data.xlsx') as writer:
weather_df.to_excel(writer, sheet_name='이번주날씨', index=False)

6. 함수사용하기 df[컬럼].apply(매개변수)
Python
import pandas as pd
import numpy as np
# 데이터 불러오기 및 기초 계산
df = pd.read_excel("c:/pandas/data/0122.xlsx")
df["총점"] = df["국어"] + df["영어"] + df["수학"]
df["평균"] = round(df["총점"] / 3, 1)
# 1. 학점 구하는 함수 만들기 (def)
# 점수(jj)가 들어오면 등급을 뱉어내는 자판기 같은 함수
def hakjum(jj):
if jj >= 90: return "A"
elif jj >= 80: return "B"
elif jj >= 70: return "C"
elif jj >= 60: return "D"
else: return "F"
# apply() 적용: '평균' 열의 모든 값에 hakjum 함수를 적용해라!
df["학점"] = df["평균"].apply(hakjum)
# 2. 합격/불합격 판정 함수 만들기
# 학점(aa)이 A나 B면 합격, 아니면 불합격
def bigo(aa):
if aa in ("A", "B"):
return "합격"
else:
return "불합격"
# apply() 적용: '학점' 열의 모든 값에 bigo 함수를 적용해라!
df["결과"] = df["학점"].apply(bigo)
# 결과 확인
df
끝.
'AI딥러닝 > Python' 카테고리의 다른 글
| 파이썬 그래프와 스프링부트 자바 연동 (0) | 2026.01.26 |
|---|---|
| txt,xlsx,csv 파일을 Oracle DB에 저장해보자! (0) | 2026.01.26 |
| Import를 이용한 Main파일 실행 (0) | 2026.01.20 |
| Python DB. sqlite3 설치 실행 (0) | 2026.01.20 |
| Python 엑셀로 저장하기 (0) | 2026.01.20 |