1. 데이터 읽기
- 필요한 패키지 및 라이브러리 import
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
- 필요한 데이터를 불러와 df 변수에 저장 후 데이터 확인
df = pd.read_csv('file path')
# 상위 5개 데이터 출력
df.head()
# 데이터프레임 정보 요약 출력
df.info()
- 특정 칼럼 데이터를 중복없이 오름차순으로 정렬하여 확인
sorted(list(set(df['month']))
- 데이터 개수 확인
len(list(set(df['station'])))
2. 데이터 정제
- 수집된 데이터 중 원하는 달의 데이터만 추출하고, 불필요한 칼럼 제거
df = df[df['month'] == 202105]
df = df.drop(columns={'column name'})
3. 데이터 시각화
- 폰트 바꾸기
import matplotlib.font_manager as fm
font_dirs = ['font path']
font_files = fm.findSystemFonts(fontpaths=font_dirs)
for font in font_files:
fm.fontManager.addfont(font_file)
3.1. 호선 별 이용객 수 출력
- 이용객 수가 가장 많은 호선 순으로 막대 그래프 출력
# 호선별로 묶기
metro_line = df.groupby(['호선명']).mean().reset_index()
metro_line = df.drop(columns='사용월').set_index('호선명')
metro_line = df.mean(axis=1).sort_values(ascending=False)
plt.figure(figsize=(20,10))
plt.rc('font', family='NanumBarunGothic')
plt.rcParams['axes.unicode_minus'] = False
metro_line.plot(kind=('bar'))
plt.show()
3.2. 특정 호선에서 역별 평균 승하차 인원 데이터 추출
- 특정 호선을 이용해 새로운 데이터프레임 생성
- reset_index() : 인덱스를 재배열
metro_st = df.groupby(['호선명', '지하철역']).mean().reset_index()
metro_st_line4 = metro_st[metro_st['호선명'] == '4호선']
- 역 별 평균 승하차 인원을 구해서 데이터프레임으로 저장
df = pd.DataFrame(index=metro_st_line4['지하철역'])
df['평균 승차 인원 수'] = metro_get_on.mean(axis=1).astype(int)
3.3. 평균 승하차 인원 수 내림차순으로 막대 그래프 출력
- 평균 승차 인원 수 Top 10인 역 구하기
top10_on = df.sort_values(by='average of getting on', ascending=False).head(10)
plt.figure(figsize=(20, 10))
plt.rc('font', family='NanumBarunGothic')
plt.rcParams['axes.unicode_minus'] = False
plt.bar(top10_on.index, top10_on['average of getting on'])
for x, y in enumerate(list(top10_on['average of getting on'])):
if x == 0:
plt.annotate(y, (x-0.15, y), color='red')
else:
plt.annotate(y, (x-0.15, y))
plt.title('2021 4월 평균 승차 인원 수 Top 10')
plt.show()
3.4. 특정 호선의 혼잡 정도와 위치 좌표 데이터 병합
- 필요에 따라 함수 생성 및 데이터 병합
df = df.merge(df2, left_on='key', right_on='key')
3.5. 특정 호선의 혼잡 정도 지도 출력
- folium 라이브러리의 Map 함수 사용
import folium
- 특정 호선의 역별 평균 승하차 인원 수 및 위치 좌표 데이터 이용
- 인원 수가 0일 때도 오류가 없을까?
latitude = location[location['subway'] == '서울역']['x']
longtitude = location[location['subway'] == '서울역']['y']
map_osm = folium.Map(location=[latitude, longtitude], zoom_start=12)
# 각 역의 위치별로 원형마커를 지도에 추가
for i in df.index:
marker = folium.CircleMarker([df['x'][i],df['y'][i]],
radius = (df['average of getting on'][i]+1)/3000,
popup = [df['subway'][i],df['average of getting on'][i]],
color = 'blue',
fill_color = 'blue')
marker.add_to(map_osm)
'데이터 사이언스 > 데이터 분석' 카테고리의 다른 글
변수 선택(Feature Selection) (0) | 2021.10.05 |
---|---|
[NIPA AI 교육/기본] 데이터 분석하기(3) (0) | 2021.08.20 |
[NIPA AI 교육/기본] 데이터 분석하기(1) (0) | 2021.08.14 |
Matplotlib 기초 (0) | 2021.08.12 |
[NIPA AI 교육/기본] Pandas 분석용 함수 - 집계함수 (0) | 2021.08.11 |