티스토리 뷰

반응형
제 3회 스파르톤(2022-09-18) 생존일지 START

 

귀여운 내 캐릭터와 우리조 [최강라탄탄]

 

현재 듣는 강의 part1 : 40분만에 끝내는 파이썬 문법

현재 시각 12:08분, 평소 관심있던 파이썬에 대해서 배워보기로 했다. 구글에서 사용할 수 있는 코랩이라는 플랫폼을 알게되었다. 평소에는 리플릿을 사용했었는데, 새로운 파이썬 IDE를 알게되서 현재 기분 좋은 상태. 빠르게 학습해본다.

 

이번 시간 느낀점

파이썬 배운지 오래되서 까먹었을까봐 기초 문법부터 들었다. 생각보다 본격적인 기초 영상이다. 이 정도 기초만 알면 이후 강의를 듣는데 문제 없다는 의미일까? 

 

이번에 배운 내용

people = [
          {'name':'영수','age':30},
          {'name':'희정','age':15},
          {'name':'영민','age':13},
          {'name':'혜지','age':18},
          {'name':'철산','age':24}
]
# 문제 : 나이가 20보다 큰 사람을 출력해라
for person in people:
  if person['age'] > 20:
    name = person['name']
    print(name)

기초 학습 강의를 듣고 조건문과 반복문을 써서 매우 간단한 문제를 풀었다. 

 

현재시각 12:37. 다음 강의를 들으러간다.

 


 

현재 듣는 강의 part2 : 파이썬 데이터 분석

현재 시각 12:39분, 파이썬으로 데이터를 분석하는 방법이 무엇인지 배워본다. 우선 데이터 분석을 위해 사용할 툴을 설치해준다. 아나콘다라는 툴이다.

파이썬을 설치? 파이썬을 설치한다는 행위는 일종의 번역팩을 설치한다고 생각하면 됩니다. 컴퓨터는 101010001 과 같은 언어만 알아들을 수 있습니다. 파이썬이라는 언어의 문법으로 된 것을 101010001과 같은 컴퓨터의 언어로 번역해 줄 수 있도록, 번역기를 설치하고 프로그래밍을 쉽게 할 수 있는 기본 코드(예를 들면, 기본 함수)를 설치하는 것입니다.
아나콘다란? 아나콘다는 분석을 도와줄 패키지매니징 플랫폼입니다. 물론 아나콘다가 없어도 분석을 할 수는 있어요. 아나콘다를 쓰는 이유는 우리가 개발하는데 필요한 기본적인 도구들을 모아 놓은 공구 상자라고 생각하시면 됩니다. 

 

아래의 과정으로 설치를 진행했다. 생각보다 설치가 오래 걸리더라..

 

Anaconda | The World's Most Popular Data Science Platform

Anaconda is the birthplace of Python data science. We are a movement of data scientists, data-driven enterprises, and open source communities.

www.anaconda.com

 

 

아 .. 설치하는데 거의 15분 걸린듯? 왜이리 느린걸까.. 

음 파이썬 기초를 다시 배운다. 아까 기초 강의를 들었던터라 빠르게 스킵하며 들었다. 현재시각 01:48, 드디어 엑셀 데이터를 활용한 데이터 분석 강의를 듣는다! 이제 조금 졸린듯? 배는 고프지 않다. 


아 !! 오늘 토트넘 경기하는 날이다. 와.. 손흥민이 리그 경기에서 선발 제외되는 모습은 진짜 오랜만에 본다.. 클케히 조합이라니 콘테는 무슨 생각일까. 그 찐따같은 토트넘이 전반에만 2골을 넣는다? 레스터 작년에는 그래도 중위권인데 올해는 꼴찌네.. 제이미 바디가 나이가 들은 걸까 왜 손흥민과 같이 골을 못 넣지? 아 코딩 해야하는데 오늘 경기가 생각보다 볼만하다? 물론 토트넘이 잘해서가 아니다. 수비 다 뚫리고 환장하는 패스는 여전하다.

2시다. ox 퀴즈가 시작한다. 게임은 처음 2번 정도 시행착오를 겪더니 무슨 원인인지는 모르겠지만 그 뒤로 계속 페이지가 새로고침 된다... 퀴즈를 참가할 수 없다... 3시까지 좀 쉬다 와야겠다..

손흥민이 드디어 골을 넣었다! 소리지를뻔 했다.. 드디어 ㅠㅠㅠㅠㅠㅠ 감격 ㅠㅠ 그동안 마음고생이 얼마나 심했을까 ㅠㅠ 대표팀에 합류하기 전에 골을 넣고 들어와서 마음이 한결 가벼울 수 있겠다. 소중한 한 골이다. 제이미 바디도 교체로 들어왔다. 경기는 지금부터 시작인듯?

손흥민이 멀티골을 넣었다 ㅠㅠ 아ㅠㅠㅠㅠ대박... 손흥민이 폭주하고 있다. 왼발 감차는 무조건이지 ㅠㅠ

손흥민이 해트트릭을 했다.. 오프사이드인 줄 알았던 골이 온사이드다 ㅠㅠ세상에 ㅠㅠㅠ 골 계속 못 넣어서 까이다가 드디어 골을 넣나 싶더니 바로 해트트릭을 꽂는다????

오늘 경기 본 내가 승자다. 손흥민이 10경기만에 교체로 출전해서 해트트릭을 하고 그걸 라이브로 봤다 ㅠㅠ미쳤다

밤을 새니까 이런것도 보는구나. 고오오맙다 스파르톤!!


그리고 3시가 넘었는데 이제 진짜로 코딩을 해야겠다. 스파르톤에서 공유해준 데이터 엑셀 파일을 데이터화하고 그걸 분석할 수 있는 라이브러리인 판다스를 이용하기로 한다.

 

판다스(Pandas)란? 파이썬에서 사용되는 데이터 분석 라이브러리 입니다. 관계형 데이터를 행과 열로 구성된 객체로 만들어 줍니다. 우리가 불러온 데이터를 다루기 쉽게 도와주는 도구입니다. 파이썬에는 다양한 라이브러리들이 있습니다. 데이터를 분석하기 위해서 내가 원하는 기능을 구현해서 쓰기보다는, 이미 구현된 기능이 있는지 찾아보고 어떻게 쓰는 건지 공부해서 활용하는 경우가 훨씬 많을꺼에요. 

판다스 라이브러리를 불러오는 방법은 간단하다. 이름이 기니깐 pd라고 줄인다.

import pandas as pd

스파르톤에서 공유해준 chicken_07 파일을 불러오기 위해선 pd.read_csv('파일경로+파일이름') 기능을 이용한다.

import pandas as pd
chicken07 = pd.read_csv('./data/chicken_07.csv')

로우가 제법 많다. 이 많던 로우를 마지막 5개만 불러와보겠다.

chicken07.tail(5) # 마지막 5개 데이터 불러오기

기본적인 통계치를 모두 보여주는 함수는 describe() 함수이다

chicken07.describe() # 기본 통계치 불러오기
# count : 갯수
# mean : 평균
# std : 표준편차
# min : 최솟값
# max : 최댓값

 

그 외 다양한 함수는 아래와 같다.

set(chicken07['성별']) # 중복 제거
len(set(chicken07['성별'])) # 중복 제거된 데이터 개수 확인
# 출력 결과 : 2

set(chicken07['연령대']), len(set(chicken07['연령대']))
# 출력 결과 : ({'10대', '20대', '30대', '40대', '50대', '60대이상'}, 6)

chicken08 = pd.read_csv('./data/chicken_08.csv')
chicken09 = pd.read_csv('./data/chicken_09.csv')
# 데이터 합치기
chicken_data = pd.concat([chicken07,chicken08,chicken09])
print(chicken_data)

chicken_data = chicken_data.reset_index(drop = True) # 기존에 있던 index 전부 삭제
print(chicken_data)

4시가 되었다. 스파르톤이란 이름답게 마라톤을 게임에서 구현한 이벤트를 참여해보겠다. 매우 귀엽다. 나는 중간에 장애물에 걸려서 거의 뒤에서 달렸다ㅋㅋㅋ 50몇등? 거의 꼴찌격이지만 그래도 완주는 했다 귀엽다 ㅋㅋ


이제 데이터를 가지고 시각화를 하는 단계를 배워보겠다. 시각화에 사용하는 라이브러리는 맷플롯이라고 따로 있다.

맷플롯(Matplotlib)이란? 파이썬에서 사용되는 시각화 라이브러리 입니다. 판다스가 관계형 데이터를 다루는데 사용된다면, Matplotlib은 그 데이터들을 시각화 하는데 사용합니다. 가장 기초가 되는 Matplotlib을 이용해서 바 차트들을 그릴 수 있습니다.

맷플롯 라이브러리를 불러오는 방법은 간단하다. 이름이 기니깐 plt라고 줄인다.

import pandas as pd
import matplotlib.pyplot as plt

기존에 가져왔던 데이터를 가공해서 필요한 정보만 뽑아 본다. 우선 '요일별 통화건수의 모든 합'을 구하는 코드이다.

sum_of_calls_by_week = chicken_data.groupby('요일')['통화건수'].sum()
sum_of_calls_by_week # 요일별 통화건수의 모든 합 구하기
# 출력 결과 :
요일
금    159290
목    118210
수    118295
월    108492
일    158864
토    165949
화    108243
Name: 통화건수, dtype: int64

출력된 결과를 토대로 그래프를 그려보겠다. 그래프를 그리는 코드는 아래와 같다.

plt.figure(figsize = (8,5)) # 그래프의 사이즈
plt.bar(sum_of_calls_by_week.index, sum_of_calls_by_week) #
# bar 그래프 그리기, # bar 그래프에 x축, y축 값을 넣어줍니다.
plt.title('요일에 따른 치킨 주문량 합계') # 그래프 이름 지정
plt.show() # 그래프 실행

하지만 에러가 뜬다. 왜냐하면 그래프가 한글을 지원하지 않는데, 제목을 한글로 했기 때문이다. 한글이 허용되는 글꼴로 바꿔줘야한다.

plt.rcParams['font.size'] # 그래프 설정 되어 있는 폰트 사이즈
# 출력 결과 : 10.0
plt.rcParams['font.family'] # 그래프 설정 되어 있는 폰트 글꼴
# 출력 결과 : ['sans_serif']
plt.rcParams['font.family'] = 'Malgun Gothic' # 글꼴 변경
# Apple은 'AppleGothic', Windows는 'Malgun Gothic'을 추천
# 출력 결과 : ['Malgun Gothic']

 

 

다시 그래프 show를 해보면 그래프가 잘 나타난다.

그래프를 그리는 법을 알았으니 본격적으로 데이터를 가공해본다. 아까 위의 데이터에서 오름차순 정렬한 데이터이다.

# 요일 별로 더해주기
sum_of_calls_by_week = call_data.sum() # 우상향 그래프(오름차순)
sorted_sum_of_calls_by_week = sum_of_calls_by_week.sort_values(ascending=True)
sorted_sum_of_calls_by_week
# 출력 결과 : 
요일
화    108243
월    108492
목    118210
수    118295
일    158864
금    159290
토    165949
Name: 통화건수, dtype: int64

이 데이터를 월화수목금토일 순서에 맞게 다시 재정렬해주자.

# 요일별 데이터 순서 정하기
weeks = ['월', '화', '수', '목', '금', '토', '일'] # 우리가 정한 순서
sum_of_calls_by_weeks = chicken_data.groupby('요일')['통화건수'].sum().reindex(weeks) # 인덱스 다시 정렬

plt.figure(figsize=(8,5)) # 그림의 사이즈
plt.bar(sum_of_calls_by_weeks.index, sum_of_calls_by_weeks) # 바 그래프
plt.title('요일에 따른 치킨 주문량 합계') # 그래프의 제목
plt.show() # 그래프 그리기

우리는 아래 그래프를 통해 금요일, 토요일, 일요일에 치킨을 많이 주문하는 것을 알 수 있다.

이렇듯 데이터를 가공하여 시각화하면 데이터를 좀더 파악하기 편한것을 알 수 있었다.


5시다. 밖은 아직 어둡다. 그리고 지금 듣고 있는 강의는 몇분 남지 않았다. 다행히 6시까지는 마무리 될듯 하다. 커피를 마시지 않고 버텼다. 잠은 아직 오지 않는다. 손흥민의 해트트릭을 봐서일까? 아직 흥분감이 가시지 않은 듯 하다. 


가지고 있는 데이터로 응용을 해보자. '연령대 별로 치킨 주문량이 다른지' 알 수 있도록 그래프를 그려본다.

group_data = chicken_data.groupby('연령대')
call_data = group_data['통화건수']
sum_of_calls_by_age = call_data.sum()
sum_of_calls_by_age # 연령대별 통합 건수의 총합
sum_of_calls_by_age = sum_of_calls_by_age.sort_values(ascending=True)
print(sum_of_calls_by_age)

# 출력 결과 : 
연령대
10대       66967
60대이상     75413
50대      136148
20대      155159
30대      216488
40대      287168
Name: 통화건수, dtype: int64

plt.figure(figsize=(8,5)) # 그림의 사이즈
plt.bar(sum_of_calls_by_age.index, sum_of_calls_by_age) # 바 그래프
plt.xlabel('연령대') # x축에 이름을 붙여줍니다
plt.title('연령대별 치킨 전체 주문량') # 그래프의 제목
plt.show() # 그래프 그리기

다음은 '서울에서 치킨은 어디에서 가장 많이 먹을까'를 알 수 있도록 그래프를 그려본다.

group_data = chicken_data.groupby('시군구')
call_data = group_data['통화건수']
sum_of_calls_by_city = call_data.sum()
sum_of_calls_by_city = sum_of_calls_by_city.sort_values(ascending=False)
print(sum_of_calls_by_city)
# 데이터가 많은 관계로 출력 결과 생략

plt.figure(figsize=(10,5)) # 그림의 사이즈
plt.bar(sum_of_calls_by_city.index, sum_of_calls_by_city) # 바 그래프
plt.xlabel('지역별') # x축에 이름을 붙여줍니다
plt.xticks(rotation = 45) # x축이 45도 기울어진다
plt.title('지역별 치킨 전체 주문량') # 그래프의 제목
plt.show() # 그래프 그리기

이렇듯 그래프를 잘 그리면 그래프를 보고 필요한 정보를 수정하고, 추가하고, 응용할 수 있게된다.


그럼 배운 것을 응용해보자.

Q1. 피자를 가장 많이 시켜먹는 요일은 언제인가요?

import pandas as pd
pizza = pd.read_csv('./data/pizza_09.csv')
print(pizza)

pizza_sum = pizza.groupby('요일').sum()['통화건수']
pizza_sum

# 출력 결과 : 
요일
금    42603
목    33638
수    35501
월    34618
일    58074
토    52460
화    32462
Name: 통화건수, dtype: int64

weeks = ['월', '화', '수', '목', '금', '토', '일']
pizza_sum_weeks = pizza_sum.reindex(weeks)
pizza_sum_weeks

import matplotlib.pyplot as plt
plt.figure(figsize=(8,5)) # 그림의 사이즈
plt.bar(pizza_sum_weeks.index, pizza_sum_weeks) # 바 그래프
plt.title('요일별 피자 주문 총량') # 그래프의 제목
plt.show() # 그래프 그리기

 

Q2. 피자를 가장 많이 시켜먹는 구는 어디인가요?

pizza2 = pd.read_csv('./data/pizza_09.csv')
pizza_gu_data = pizza2.groupby('발신지_구').sum()['통화건수'].sort_values(ascending=True)

plt.figure(figsize=(8,5)) # 그림의 사이즈
plt.bar(pizza_gu_data.index, pizza_gu_data) # 바 그래프
plt.title('구별 피자 주문 총량') # 그래프의 제목
plt.show() # 그래프 그리기


현재 시각 05:48, 스파르톤이 마무리되어 간다. 강의 2개를 끝까지 다 듣고 완주하였다. 폐막식을 기다리며 창 밖을 바라본다. 아직 밖은 어둡다. 잘 준비를 슬슬하려 책상 정리를 시작한다.


폐막식을 기다리는 모두의 모습. 많은 사람들이 밤샘 스파르톤에서 살아남았다.

다시 창밖을 보니 급격하게 밝아졌다. 아침해가 뜨고 말았고 나는 밤샘을 해버리고 말았다. 생각보다 시간이 잘 갔고 좋은 경험이 추가된 것 같다.

 

주최하는 회사 측에서 준비를 많이 한것 같고, 서버가 터지지 않게 상시 대기하고 있던 인력들도 대단한 것 같다. 재밌었습니다 ㅎㅎ

현재 시각 06:15, 자러간다

반응형
댓글
공지사항