
이번 주는 대용량 데이터를 시각화하여 유의미한 관찰을 하는 법, 그리고 웹크롤링에 대해 배웠다.
pandas, seaborn, matplotlib 등을 불러올 일이 많아서 지피티한테 무슨 차이냐고 물어봤다.
🐼 1. Pandas: 데이터 다루는 도구 (엑셀 장인 느낌)
"데이터를 불러오고, 가공하고, 분석하는 일" 담당
- 표(테이블) 형태의 데이터를 다룸 (엑셀처럼 행/열로 구성)
- .read_csv(), .groupby(), .pivot_table() 같은 거 다 pandas 기능
- 결측치 처리, 정렬, 필터링, 집계 등 전부 여기서 함
📊 2. Matplotlib: 시각화의 뼈대 담당 (그래프 그리는 캔버스 느낌)
"가장 기본적인 시각화 도구" — 선, 막대, 히트맵, 파이차 등 직접 그림 그리는 툴
- plt.plot(), plt.bar(), plt.figure() 같은 함수들
- seaborn이나 다른 시각화 도구들도 결국 matplotlib 위에 얹혀서 돌아감
🖌️ 3. Seaborn: 예쁜 시각화 자동화 도구 (감성 + 똑똑한 스타일)
"matplotlib보다 더 예쁘고 똑똑한 시각화"를 쉽게 만들어주는 도구
- pandas 데이터프레임과 호환 완전 좋음
- 기본 스타일이 깔끔하고, 색상도 예쁘게 잘 나옴
- sns.barplot(), sns.heatmap(), sns.boxplot() 등등
✨ 비유로 말하면:
pandas: 요리 재료 정리해주는 셰프 보조
matplotlib: 직접 요리하는 도구 (냄비, 프라이팬)
seaborn: 자동으로 이쁘게 데코도 해주는 고급 조리기구 ✨
그렇다고 한다.
이번 주 첫번째 실습시간에는 ' 서울시 공공자전거 대여이력 정보'를 이용해서 데이터분석을 진행하였다.
pandas로 데이터 정리 & 전처리
pd.to_datetime(..., errors='coerce'): 날짜 변환 시 잘못된 값은 NaT로 처리
len(df): 전체 행 개수 확인
value_counts(): 특정 열에서 값별 개수 확인
df['성별'].replace({'f': 'F', 'm': 'M'}): 값 소문자 → 대문자 치환
df[df['생년'].astype(int) <= 2020]: 2020년 이후 태어난 사람 필터링
.dt.hour, .dt.day_name(): 날짜에서 시간과 요일 추출
그룹별 분석
df.groupby('성별')['이용시간(분)'].mean(): 성별 평균 이용시간
df.groupby(['성별', '연령대'])['이용시간(분)'].mean(): 성별+연령대 조합별 평균 이용시간
.value_counts(): 요일별 대여 건수 확인
pivot_table 구성 요소 정리
index: 행 기준 그룹
columns: 열 기준 그룹
values: 실제로 계산할 대상 데이터
aggfunc: 그룹값 집계 방법 (count, mean, sum, ...) (+ aggfunc='count'일 땐 values에 아무 열 넣어도 동일한 결과!)
일반 그래프 시각화
# 시각화
이용자수.plot(kind='bar', color='salmon', figsize=(8,5))
plt.title('요일별 대여 건수')
plt.xlabel('요일')
plt.ylabel('이용 건수')
plt.grid(axis='y', linestyle='--', alpha=0.6)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

이거는 요일별로 대여건수를 찾아본 건데 예상대로 월요일이 많았다.
그냥 이날 출근하는 사람이 많아서 그런듯 지하철도 월요일이 사람 제일 많음 ㄱ-
Heatmap으로 시각화
# 피벗테이블로 요일-시간대별 대여 건수 계산
heatmap_data = df.pivot_table(index='H대여일시', columns='H요일', values='대여일시', aggfunc='count')
# index => y축, columns = x축, values = 값 계산할 기준 열 aggfunc = 값을 어떻게 계산할지 함수
# 시각화
plt.figure(figsize=(8, 5)) # 전체 그림 크기 설정 : (가로길이, 세로길이)
sns.heatmap(heatmap_data, cmap='YlGnBu', annot=True, fmt=".0f")
# cmap : 색깔, annot : 각 칸에 숫자 표시, fmt : 숫자 포맷
plt.title('요일 + 시간대별 대여 건수 Heatmap')
plt.xlabel('요일')
plt.ylabel('대여시간 (시)')
plt.tight_layout()
plt.show()

이건 heatmap써서 데이터 시각화해본 거임
가장 밀도가 높은 시간대가 7-8, 18-19네 추측이 맞았구랴 ㅋ 사실 누구나 할 수 있는 추측이긴 함
두번째 실습시간에는 드디어 웹 크롤링을 진행하였음
난 금요일에 휴가를 써서 목요일에 미리 내가 관심있는 주제로 크롤링을 했다. 난 전시를 보러 다니는 걸 좋아해서(아마) 미술관 홈피를 찾아다니다가 환기미술관이 적절해보여서 그 사이트를 이용했다. 관계자분께 양해말씀 드림
텍스트 크롤링


잘 됐죠 ? 미술작품이 아니라 출판목록을 크롤링한 게 함정이긴 한데 어쨌든 미술관이니까 ㅋ
이미지 크롤링
count = 0
for img in images[:18]:
src = img.get('src')
print(src)
if not src.endswith('svg'):
img_data = requests.get(src).content
with open(f'books/book_{count}.jpg', 'wb') as f:
f.write(img_data)
print(f"Saved book_{count}.jpg")
count += 1
if count == 17:

이미지 크롤링과 테이블 크롤링도 이어서 했다.
폴더에 이미지를 잘 불러왔다.
데이터분석보단 크롤링이 재밌구나 난 프로젝트 때 노가다 하는 걸로?

본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.
'HANCOM AI ACAMEMY > 학습일지 🗒️' 카테고리의 다른 글
| [스나이퍼팩토리] 한컴AI아카데미 15주차 (0) | 2025.05.08 |
|---|---|
| [스나이퍼팩토리] 한컴AI아카데미 14주차 (2) | 2025.05.02 |
| [스나이퍼팩토리] 한컴AI아카데미 12주차 (0) | 2025.04.17 |
| [스나이퍼팩토리] 한컴AI아카데미 11주차 (1) | 2025.04.11 |
| [스나이퍼팩토리] 한컴AI아카데미 10주차 (1) | 2025.04.04 |
댓글