파이썬 데이터분석 첫걸음 - 1주차

0. 주피터노트북

colab으로 만들어진? 주피터노트북은 링크 공유받아서 써봤는데, 내가 컴퓨터에 설치해서 써본 건 처음이다.
회사의 아이맥에도 아나콘다(https://www.anaconda.com/products/individual)
설치하고 집에 있는 윈도우 데스크탑에도 설치했다.

1. set

파이썬 기본문법은 대충 다 아는 내용일 줄 알았는데,
list, dict 리스트와 딕셔너리까지는 알았지만, set에서 멈칫했다.

settest = set([1,2,2,2,1,2,3,3]) # 이렇게 넣으면
print(settest)
# {1,2,3}

settest2 = {1,2,2,2,1,2,3,3} # 혹시나해서 해봤더니 이렇게 해도 마찬가지로
print(settest2)
# {1,2,3}

set에 넣으면 중복된 원소는 알아서 사라진다(?).
set은 수학의 집합처럼 교집합, 합집합 연산을 할 수 있었다.

settest3 = set([1,3,5,5]) 
setor = settest2 | settest3 #합집합
print(setsum)
# {1,2,3,5}
setand = settest2 & settest3 #교집합
print(setand)
# {1,3}

2. pandas 판다스

pandas를 아예 처음 써보는 건 아니어서 처음은 비교적 쉽게 쫓아갈 수 있었다.
실습을 위해 준비해주신 csv 파일을 읽어와서 pandas 데이터프레임으로 만들었다.
7월 8월 9월의 데이터를 다 불러와서 하나의 데이터프레임 data frame으로 합쳤다.
판다스에서는 2차원 표를 이렇게 데이터프레임이라는 형식?으로 만들어서 다룬다.

import pandas as pd # pandas를 불러와서 앞으로 pd라는 약칭으로 판다스를 쓰겠다는 의미

chicken07 = pd.read_csv('./data/chicken_07.csv') # ' ' 안에 읽어올 파일 경로
chicken08 = pd.read_csv('./data/chicken_08.csv')
chicken09 = pd.read_csv('./data/chicken_09.csv')
chicken_data = pd.concat([chicken07, chicken08, chicken09]) # 합칠 데이터프레임들의 list를 넣어주어야한다
### 주의: 같은 형태를 갖고 있는 데이터들을 합치는 방법이다. 기본적으로 column명과 column수가 동일해야한다는 의미. 

print(chicken_data) #를 해보면 합쳐져서 나오긴 하는데 index가 반복된다.
### chicken07의 인덱스가 그대로 나오고, chicken08의 인덱스가 다시 0부터 시작된다는 뜻!
### 강의에서는 이 인덱스를 처음부터 하나의 데이터였던 것처럼 만들기 위해 아래 코드를 추가했다.
chicken_data = chicken_data.reset_index(drop=True)

# 다른 방법으로는 concat으로 합치는 과정에서 아래와 같이 해주어도 된다.
chicken_data = pd.concat([chicken07, chicken08, chicken09], ignore_index=True)


# groupby, sum을 통해 그래프를 그리기 위해 원하는 데이터를 추출, 정제하는 과정
sum_of_calls_by_week = chicken_data.groupby('요일')['통화건수'].sum().sort_values(ascending=True) 
# 체이닝Chaining 방식 > 실행한 코드의 결과(리턴된 값)에 이어서 바로 다음 코드를 적용(?)하는 방식

# 체이닝 방식으로 하지 않으면 대충 아래와 같은 과정이 된다.
group = chicken_data.groupby('요일')
calls = groupby['통화건수']
sum_of_calls_by_week = calls.sum()
sorted_sum_of_calls_by_week = sum_of_calls_by_week.sort_values(ascending=True) 

groupby('요일')을 통해 데이터를 '요일'이라는 기준으로 group하고 그 group된 데이터에서 '통화건수'를 불러와서 sum으로 통화건수를 다 합치는 계산을 한다는 개념인데, groupby한 데이터는 어떻게 생겼나하고 print를 찍어보면 제대로 보여주진 않는다. 그래서 약간은 완전히 이해되지 않는 느낌이지만, DB에서 쓰는 SQL문에서의 group by를 써보았으니 대충 느낌은 알 수 있었다.
마지막의 sort_values(ascending=True) 를 통해 데이터를 오름차순으로 정렬했다. 내림차순으로 하고 싶을 때는 sort_values(ascending=False) 를 쓰면 된다.(dscending=True)로 해봤더니 안되더라.

3. matplotlib.pyplot 그래프 그리기

이 라이브러리를 이용해 그래프 그릴 때 기본 폰트가 sans serif 로 설정되어있어서 한글이 깨지는 문제를 해결하기 위해 아래 코드를 실행해준다.

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = "AppleGothic" # 맥일 경우 (띄어쓰기 없음 주의)
plt.rcParams['font.family'] = "Malgun Gothic" # 윈도우일 경우 (띄어쓰기 있음 주의)

가장 간단한 막대그래프 그리기를 배웠다.

plt.figure(figsize=(8,5)) # 그래프의 전체 사이즈 설정, 왼쪽 숫자가 가로, 오른쪽이 세로
plt.bar(sorted_sum_of_calls_by_week.index, sorted_sum_of_calls_by_week)
# 왼쪽이 아래에 나오는 레코드명(여기선 요일), 오른쪽은 그 레코드에 따른 수치, 값(여기선 통화건수합계) 

plt.title('요일별 치킨주문량') # 테이블의 제목
plt.show() # 위에서 설정한 표(테이블)를 출력하는 함수

좋은 웹페이지 즐겨찾기