AI딥러닝/Python

아나콘다로 시작하는 데이터 분석 - Jupyter

Ystory96 2026. 1. 22. 17:27

1. 개발 환경 세팅: 아나콘다 vs 주피터

데이터 분석을 시작하려면 환경 설정이 중요하다. 가장 많이 쓰이는 두 가지 방법이 있다.

  • 아나콘다(Anaconda): 파이썬과 판다스(Pandas), 넘파이(NumPy) 같은 필수 라이브러리가 한 번에 설치되는 '종합 선물 세트'. 초보자에게 가장 추천한다.
  • 주피터 노트북(Jupyter Notebook): 웹 브라우저에서 코드를 한 줄씩 실행하고 결과를 바로 확인하는 에디터. 아나콘다를 깔면 자동으로 같이 설치된다.

설치 팁:

  1. 아나콘다 공식 홈페이지에서 다운로드 및 설치.
  2. 설치 후 Anaconda Navigator를 실행하고 Jupyter Notebook 실행.
  3. 만약 아나콘다가 무겁다면, 파이썬 설치 후 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

 

끝.