python basic(2021-07-11)

04. 파이썬 기초 문법 - (1)

  • 4) 변수 & 기본연산

    변수는 데이터를 저장할 수 있는 공간입니다. 어떤 데이터가 저장되고, 저장된 데이터로 무엇을 할 수 있는지 살펴보겠습니다.

    a = 3  # 3을 a에 넣는다
    print(a)
    • 주피터 노트북 사용 팁!
      - 코드 블록을 실행하는 단축키는 - Shift +Enter
      - 노트북에서는 변수 이름만 입력해도 출력

      b = a  # a를 b에 넣는다
      print(b)
      a = a + 1  # a+1을 다시 a에 넣는다
      print(a)
      num1 = a * b  # a*b의 값을 num1이라는 변수에 넣는다
      print(num1)
      num2 = 99  # 99의 값을 num2이라는 변수에 넣는다
      print(num2)
  • 5) 자료형

    1. 숫자, 문자열, 참거짓

      num = 12  # 숫자가 들어갈 수도 있고,
      print(num)
      name = 'Harry'  # 변수에는 문자열이 들어갈 수도 있고,
      print(name)
      number_status = True  # True 또는 False -> "Boole" 형이 들어갈 수도 있습니다.
      print(number_status)
    • ✍깜짝 퀴즈

      # 출력값을 예측해보세요
      
      num1 = '12'
      
      num2 = '23'
      
      total = num1 + num2
      print(total)
    1. 리스트 형

      waiting_list = []  # 비어있는 리스트 만들기
      waiting_list.append('이현호')  # 리스트에 문자열 데이터를 넣는다
      print(waiting_list)
      waiting_list.append('이범규')  # 리스트에 '이범규'라는 문자열을 하나 더 넣는다
      print(waiting_list)
      waiting_list.append(['고영희','황철수'])  # 리스트에는 또 다른 리스트가 추가될 수 있습니다
      list_food
      # print 로 값 확인해보기
      # waiting_list의 값은? ['이현호', '이범규', ['고영희', '황철수']]
      # waiting_list[0]의 값은? '이현호'
      # waiting_list[2]의 값은? ['고영희', '황철수']
      # waiting_list[2][0]의 값은? '고영희'
    2. Dictionary 형

      eng_kor_dict = {}  # 비어있는 딕셔너리 만들기
      
      eng_kor_dict = {'apple': '사과', 'pear': '배'}
      eng_kor_dict['apple']
      #eng_kor_dict['사과']
      #eng_kor_dict['banana']
      # 딕셔너리에 추가하고 싶을 때
      eng_kor_dict['banana'] = '바나나'
      eng_kor_dict
      # print 로 값 확인해보기
      # eng_kor_dic의 값은? {'apple': '사과', 'pear': '배', 'banana': '바나나'}
      # eng_kor_dic['apple']의 값은? '사과'
      # eng_kor_dic['pear']의 값은? '배'
      # eng_kor_dict['banana']의 값은? '바나나'
    3. Set 형

      group1 = set([1, 2, 3, 4, 2, 1])
      group2 = set([1, 2, 3, 1, 6])
      print(group1)       # {1, 2, 3, 4}
      print(group2)       # {1, 2, 3, 6}
      # 교집합
      print(group1 & group2) # {1, 2, 3}
      
      # 합집합
      print(group1 | group2) # {1, 2, 3, 4, 6}

      리스트에 있는 데이터에 접근할 때 list_name[0] 와 같은 방법으로 접근합니다.
      딕셔너레이 있는 데이터에 접근할 때는 dictionary_name["키값"] 의 방법을 이용합니다.
      셋은 리스트를 ()로 감싸주어 사용합니다.

05. 파이썬 기초 문법 - (2)

  • 6) 조건문

    [💻코드 **조건문 01]**

    age = 20
    
    if age >= 20:
        print('성인입니다')  # 조건이 참이면 성인입니다를 출력
    else:
        print('청소년이에요')  # 조건이 거짓이면 청소년이에요를 출력
    
    # age = 17 로 하면 무엇이 출력될까요?

    [💻코드 **조건문 02]** if / elif / else

    # 조건을 여러 개 사용하고 싶을 때
    age = 65
    
    if age > 80:
        print('아직 정정하시군요')
    elif age > 60:
        print('인생은 60부터!')
    else:
        print('아직어려요!')
    
    # age = 20 하면 무엇이 출력될까요?

    파이썬은 들여쓰기(indent)로 코드의 블록(시작과 끝) 단위를 나눕니다. 들여쓰기를 잘못하면 들여쓰기 에러(indentation error) 가 발생하죠! 따라서 들여쓰기가 매우 중요합니다.

  • 7) 반복문

    반복문은, 리스트나 문자열의 요소들을 하나씩 꺼내쓰는 형태입니다. 즉, 임의의 열(sequense, 리스트나 문자열처럼)의 항목들을 그 순서대로 꺼내어 반복합니다.

    [💻코드 **반복문 01]** 기본

    fruits = ['사과', '배', '감', '귤']
    
    for fruit in fruits:  # fruit 은 우리가 임의로 지어준 이름입니다.
        print(fruit)  # 사과, 배, 감, 귤 하나씩 꺼내어 출력합니다.

    [💻코드 **반복문 02]** 살짝 응용해볼까요? - 과일 갯수 세기

    fruits = ['사과', '배', '배', '감', '수박', '귤', '딸기', '사과', '배', '수박']
    
    count = 0
    for fruit in fruits:
        if fruit == '사과':
            count = count + 1
    
    # 사과의 갯수를 출력합니다.
    print(count)
    
  • 8) 함수

    • 처음부터 필요한 내용은 아니에요!

    • 컨셉 정도만 기억해주세요.

    • 함수는 어떤 값을 넣어주고 값을 반환 해주는 코드 블럭

    • 같은 일을 줄여줌

      [💻코드 함수 **01]** 기본

      def sum(a, b):
      	return a + b
      
      print(sum(3,5))
      def print_name(name):
      	print("반갑습니다 "+name+" 님")
      
      print_name("이현호)

      리스트와 딕셔너리는 [ ]를 사용합니다.
      함수는 ( )를 사용하죠! 또 () 나 [] 를 사용하는 것에는 어떤 것이 있는지 떠올려보아요!

06. Quiz_파이썬 기초 문법!

  • 9) Quiz_01 - 리스트

    number_list = [0, [1, 2], 3]
    print(number_list[1]) # 예측해 보아요
    
    number_list = [0, [1, 2], 3]
    # 2를 출력하고 싶어요!
    • 정답

      print(number_list[1]) // [1, 2]
      
      print(number_list[1][1]])
      first_list = number_list[1] // [1, 2]
      print(first_list[1]) // 2
  • 10) Quiz_02 - 딕셔너리

    students = [{"name":"현호", "age": 23}, {"name":"범규", "age": 24}, {"name":"건희", "age":25}]
    print(students[1]["name"]) # 무엇이 출력될까요?
    # 건희를 출력해보세요!
    • [코드스니펫] - 딕셔너리 퀴즈

      students = [{"name":"현호", "age": 23}, {"name":"범규", "age": 24}, {"name":"건희", "age":25}]
  • 11) Quiz_03 - Set

    group1 = set([1, 1, 2, 2, 3, 3])
    group2 = set([1, 3, 5, 7, 9])
    print(group1) # 무엇이 출력될까요?
    print(group2) # 무엇이 출력될까요?
    print(group1 & group2) # 교집합
    print(group1 | group2) # 합집합
    • [코드스니펫] - set 퀴즈

      group1 = set([1, 1, 2, 2, 3, 3])
      group2 = set([1, 3, 5, 7, 9])
  • 12) Quiz_04 - 조건문

    answer = (4 + 5) * 2 + 3
    x = ? # ?에 알맞은 숫자를 넣어주세요
    answer = answer + x
    
    if answer == 30:
    	print("정답입니다")
    else:
    	print("오답입니다")
    # 정답입니다를 출력해주세요
    • 정답

      answer = (4 + 5) * 2 + 3
      x = 9 
      answer = answer + x
      
      if answer == 30:
      	print("정답입니다")
      else:
      	print("오답입니다")
      // 정답입니다
  • 13) Quiz_05 - 반복문

    data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    total = 0
    
    for number in data:
    	total = total + number
    
    print(total) # 무엇이 출력될까요?
  • 14) Quiz_06 - 함수

    # 데이터 부분
    data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    data2 = {"첫번째값" : 4, "두번째값" : 10}
    # 함수 정의
    def sum(a, b):
    	return a + b
    
    print(sum(1, 4)) # 무엇이 출력될까요?
    print(sum[0, 2])) # 무엇이 출력될까요?
    print(sum(data[0], data[3])) # 무엇이 출력될까요?
    print(sum(data(3), data(5))) # 무엇이 출력될까요?
    print(sum(data2["첫번째값"], data2["두번째값"])) # 무엇이 출력될까요?
    • [코드스니펫] - 함수 퀴즈

      data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      data2 = {"첫번째값" : 4, "두번째값" : 10}
    • 정답

      # 데이터 부분
      data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      data2 = {"첫번째값" : 4, "두번째값" : 10}
      # 함수 정의
      def sum(a, b):
      	return a + b
      
      print(sum(1, 4)) # 함수 예제와 같습니다
      print(sum[0, 2])) # error! 함수는 ( ) 기호를 사용합니다. 
      print(sum(data[0], data[3])) # 리스트에 있는 데이터에 접근합니다
      print(sum(data(3), data(5))) # error! 리스트에는 []를 써야합니다
      print(sum(data2["첫번째값"], data2["두번째값"])) # dictionary에는 []를 싸야합니다.

07. Pandas

  • 15) 엑셀로 분석해보기

    우리가 쉽게 접할 수 있는 엑셀로 데이터 분석을 한번 해 볼까요?

    엑셀로 분석을 해보면서 어떤 점이 불편한지, 이런 것들이 파이썬으로는 가능한지 한번 이야기 해 봅시다.

    • 기본적인 데이터 분석은 엑셀로도 가능!

    • 월별 데이터를 하나의 파일로 만들어서 계산하기 → 연간 데이터 만들기

    • 비어있는 데이터 채우기

    • 엑셀을 배우는 것과 파이썬을 배우는 것 중 어떤 문법이 쉬울까요

    • 250메가 파일 다루는데 걸리는 시간

      그럼 이제 파이썬을 가지고 데이터 분석을 해 봅시다.
      먼저 가장 기초적인 도구인 Pandas부터 다루어 보겠습니다!

  • 16) Pandas란?

    파이썬에서 사용되는 데이터 분석 라이브러리 입니다. 관계형 데이터를 행과 열로 구성된 객체로 만들어 줍니다. 우리가 불러온 데이터를 다루기 쉽게 도와주는 도구입니다. 글로 읽어서는 잘 이해가 되지 않으니 실제로 써보면서 익혀봅시다.

08. 기초 데이터 다루기

  • 17) 판다스 불러오기

    • 파이썬에는 다양한 라이브러리들이 있습니다. 내가 원하는 기능을 구현해서 쓰기보다는, 이미 구현된 기능이 있는지 찾아보고 어떻게 쓰는 건지 공부해서 활용하는 경우가 훨씬 많을꺼에요.

    • 판다스를 사용하려면 가장 먼저 해야할 일은 '판다스를 불러오는 것' 입니다.

    • 우리는 pandas를 불러와 보겠습니다. 그리고 pandas라고 부리면 너무 기니까 pd라고 부르도록 할게요.

      import pandas as pd

      네 아무일도 일어나지 않아요. 그럼 잘 불러왔는지 어떻게 아냐구요?

      pandas의 기능을 한번 써볼게요!

  • 18) 데이터 불러오기

    데이터를 다루기 위해서는 데이터를 불러와야 합니다.

    이미 다 준비 해 놓은 데이터를 어떻게 불러올 수 있을까요?

    아래와 같이 입력해서 불러 와 보겠습니다.

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

    네 눈치 채셨겠지만 pd.read_csv('파일의경로+파일의이름') 이렇게 파일을 불러옵니다.

    ./는 현재 디렉토리를 의미해요. 그러니까 ./data/chicken_07.csv 는 현재 디렉토리의 하위에 data라는 디렉토리에 있는 chicken_07.csv 파일을 가리킵니다.

  • 19) 데이터 살펴보기

    데이터를 불러왔으면 한번 살펴봐야겠죠?

    데이터를 살펴봐야 한다면 무엇부터 봐야할까요?

    • 몇개의 열들로 이루어져 있나요?

    • 각각의 열들은 어떤 데이터들이 들어있나요?

    • 성별, 종목, 성공여부와 같은 데이터 인가요?

    • 횟수, 갯수와 같은 데이터 인가요?

    • 시간과 같이 연속된 데이터 인가요?

    • 몇개의 행으로 이루어져 있나요?

      다음과 같은 코드를 입력해서 데이터를 살펴봅시다.

      chicken07.tail(5)

      이렇게 보입니다.

      요일, 성별, 연령 등의 컬럼은 데이터를 분류할 수 있는 성질을 가지고 있죠. 반면에 통화 건수나 날짜등의 데이터는 범위가 존재합니다. 총합 혹은 범위를 지정해서 데이터를 자르거나 합할 수 있습니다.

      ## 데이터의 기본 통계치
      chicken07.describe()

    • count : 갯수

    • mean : 평균

    • std : 표준편차

    • min : 최솟값

    • max : 최댓값

      범위 데이터가 기준일과 통화건수 두 개 뿐이라, 이 두 개에 대해서만 나왔습니다.

09. Pandas 연습하기

  • 20) 성별 데이터 살펴보기

    예측이 가능한 쉬운 데이터들 부터 살펴보겠습니다.

    우리의 데이터 chicken07 중 성별 컬럼을 선택해서, 집합으로 만들어 보겠습니다. 데이터를 집합으로 만들면 중복값이 제거되어 구성 요소들을 알 수 있거든요!

    그리고 구성 요소들의 갯수도 세어줄게요. len()은 리스트의 길이(length)를 측정해주는 함수입니다.

    gender_range = set(chicken07['성별'])
    print(gender_range, len(gender_range))
    # {'남', '여'} 2
  • 21) 연령대 데이터 살펴보기

    연령대는 어떻게 구성 되어있나 볼까요?

    총 6개의 종류로 이루어진 데이터군요, 각 연령 별로 분포를 본다면 의미있는 결과를 도출할 수 도 있어보이네요. 이어서 다른 컬럼들도 살펴보겠습니다.

    age_range = set(chicken07['연령대'])
    print(age_range, len(age_range))
    # {'50대', '60대이상', '40대', '30대', '10대', '20대'} 6
    • [✍Quiz] 직접 해 볼까요?

      앞으로 실습이 필요한 부분이 나오면 "✍"모양으로 알려줄게요!
      퀴즈설명 영상을 먼저 보고 → 정해진 시간동안 혼자 한다음 → 함께하기 영상을 보세요!

      • Q. 퀴즈 설명

        • 요일 데이터 살펴보기
        • 시군구 데이터 살펴보기
        • 읍면동 데이터 살펴보기
      • A. 함께 하기

        day_range = set(chicken07['요일'])
        print(day_range, len(day_range))
        # {'일', '수', '금', '화', '목', '월', '토'} 7
        
        city_range = set(chicken07['시군구'])
        print(city_range, len(city_range))
        # {'관악구', '광진구', '도봉구', ...} 25
        
        town_range = set(chicken07['읍면동'])
        print(town_range, len(town_range))
        # {'시흥동', '창성동', '상계동', ...} 425
  • 22) 데이터 합치기

    데이터는 여러 방향으로 합칠 수 있어요. 가로, 세로 무슨말인지 말 모르시겠다구요?
    한번에 다 설명드리는게 아니라 하나씩 해보면서 이해시켜 드릴게요.
    이번 주에 합쳐 볼 데이터는 같은 형태의 데이터를 아래로 합쳐 보겠습니다. 지금 우리가 불러온 데이터는 7월 한달치입니다. 그렇다면 8월, 9월 더 나아가서 1년치의 데이터를 분석 해야한다면 어떻게 해야할까요?

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

    데이터는 잘 합쳐진 것 같은데 인덱스가 이상합니다!

    76495 rows × 9 columns - 9개의 열에 76495개의 행이 있는데 우리의 인덱스는 24116로 끝나네요. 기존의 9월 데이터가 갖고 있던 인덱스를 그대로 유지해서 그렇습니다. 인덱스를 다시 넣어줍시다.

    chicken_data = chicken_data.reset_index(drop=True)
    chicken_data

    성공!

10. 시각화, Matplotlib

  • 23) Matplotlib 이란?

    파이썬에서 사용되는 시각화 라이브러리 입니다. 판다스가 관계형 데이터를 다루는데 사용된다면, Matplotlib은 그 데이터들을 시각화 하는데 사용합니다. 가장 기초가 되는 Matplotlib을 이용해서 바 차트들을 그려봅시다.

  • 24) Matplotlib 불러오기

    • Matplotlib도 사용하려면 불러와야 합니다.

    • 판다스를 불러왔던 것 처럼 Matplotlib도 불러오겠습니다. 마찬가지로 너무 길기 때문에 plt라고 부르도록 하겠습니다.

      import pandas as pd
      import matplotlib.pyplot as plt

      마찬가지로 아무 일도 일어나지 않습니다. Matplotlib을 사용하러 가 봅시다.

11. Matplotlib 부딪혀보기

  • 25) 요일에 따른 총 통화건수

    • 첫 번째로 요일별로 총 통화 건수 살펴보겠습니다.

    • 머릿속에서는 이미 완성된 그래프가 그려지는 군요

    • 위 그래프를 그리는데 적어도 x축, y축, 그래프 제목이 필요해 보이네요

    • 아래 코드를 통해 어떻게 그릴 수 있는지 살펴봅시다.

    • 요일별 치킨 데이터는 굉장히 많겠죠? 월 - 15, 화 - 5.... 그 다음주 월 - 9, 화 - 19... 이런식 입니다.

    • 우리가 원하는 데이터는 요일을 기준으로 통화 건수를 모두 더한 데이터 입니다.

      sum_of_calls_by_week = chicken_data.groupby('요일')['통화건수'].sum()
      sum_of_calls_by_week

      네 이렇게 보니 요일별 통화건수의 총합의 데이터가 보이네요. 이제 이 데이터를 가지고 그래프를 그려봅시다.

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

      으악! 😱

  • 26) 한글 설정하기

    폰트를 설정해주지 않아 한글이 깨지는 현상을 만난 것 입니다. 한글을 지원하는 폰트를 설정해서 그래프를 그려봅시다.

    • 현재 설정되어 있는 폰트를 살펴봅시다. 환경 마다 다를 수 있겠죠?

      print('설정 되어 있는 폰트 사이즈 :', plt.rcParams['font.size'])
      print('설정 되어 있는 폰트 글꼴 :', plt.rcParams['font.family'])
    • 한글을 지원하는 폰트로 바꾸어줍니다.

      # Apple은 '**AppleGothic**', Windows는 '**Malgun Gothic**'을 추천
      plt.rcParams['font.family'] = "Malgun Gothic"
    • 다시 그래프를 그려봅시다.

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

    • 여전히 한글이 뜨지 않는다면?

      선택한 글꼴이 한글을 지원하지 않거나 matplotlib에서 이용할 수 없는 경우, 설치가 안되어있는 경우 등등 다양한 이유가 있을 수 있습니다.

      • 나눔글꼴 설치하기 (다운로드 링크)

        나눔글꼴을 설치하고 다시 폰트를 설정해줍시다. (주피터 노트북 재실행이 필요할 수 있어요!)
        
        ```python
        plt.rcParams['font.family'] = "NanumGothic"
        ```
        
        폰트를 설치했는데도, 주피터 노트북을 재실행해도 여전히 인식을 못한다면 아래처럼 matplotlib이 참조하는 폰트 목록을 새로고침해주세요.
        
        ```python
        import matplotlib.font_manager as fm
        
        fm._rebuild()
        ```

        또는 이용 가능한 폰트를 찾아줄 수도 있습니다.

      • font_manager 를 불러와 줍니다.

        # fontmanager 임포트하기
        import matplotlib.font_manager as fm
        
        # 이용 가능한 폰트 중 '고딕'만 선별
        fonts_list = [f.name for f in fm.fontManager.ttflist if 'Gothic' in f.name]
        
        fonts_list
        # ['Franklin Gothic Book', 'Kozuka Gothic Pro', 'Showcard Gothic', ...]
      • 위에서 나온 폰트 중 하나를 골라 설정해줍니다.

        plt.rcParams['font.family']="Malgun Gothic"

12. Matplolib 그래프 입맛대로 바꿔보기

  • 27) 정렬을 해봅시다

    우리가 그린 그래프도 의미가 있으나 보통의 바 그래프는 우 상향 그래프나, 좌 상향 그래프로 정렬해서 어떤 항목이 가장 높은지 보면서 인사이트를 추가적으로 얻을 수 있습니다. 가장 적은 요일 순으로 정렬 해봅시다.

    sum_of_calls_by_week = chicken_data.groupby('요일')['통화건수'].sum()
    sum_of_calls_by_week
    • 코드가 너무 길죠?

    • 체이닝(Chaining)이라고 하는 나열법인데, 익숙하면 편해요. 하지만 지금은 잘라서 살펴보겠습니다.

    • chicken_data.groupby('요일') :일단 데이터를 요일 별로 그룹을 지어줍니다.

    • 모든 데이터는 월~일요일을 기준으로 7 덩어리가 되었겠죠?

    • chicken_data.groupby('요일')['통화건수'] : 그 중에서 통화 건수를 선택합니다

    • chicken_data.groupby('요일')['통화건수'].sum() : 요일 별 통화 건수의 총합을 sum_of_calls_by_week 변수에 저장합니다.

      # 요일 별로 모아주기
      groupdata = chicken_data.groupby('요일')
      # '통화건수' 열만 떼어보기
      call_data = groupdata['통화건수']
      # 요일 별로 더해주기
      sum_of_calls_by_week = call_data.sum()
      sorted_sum_of_calls_by_week = sum_of_calls_by_week.**sort_values(ascending=True)**
      
      plt.figure(figsize=(8,5)) # 그림의 사이즈
      plt.bar(sorted_sum_of_calls_by_week.index, sorted_sum_of_calls_by_week) # 바 그래프
      plt.title('요일에 따른 치킨 주문량 합계') # 그래프의 제목
      plt.show() # 그래프 그리기

      이렇게 살펴보니 목요일이 가정 적고, 토요일이 전화 주문량이 가장 많음을 알 수 있습니다.

  • 28) 요일 순서대로 그려봅시다

    그릴 그래프의 종류는 같습니다. 데이터도 그대로 입니다. 단지 우리는 요일별로 정렬을 다시 할 뿐입니다. 앞에서 정렬되지 않은 index를 사용했다면, 이번에는 index를 우리가 정한 순서대로 정렬해서 사용해 봅시다.
    
    ```python
    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() # 그래프 그리기
    ```
    
    
    a = 3

    print(a)
    3
    In [5]:
    b = a
    b
    Out[5]:
    3
    In [10]:
    a = a + 1
    a
    Out[10]:
    6
    In [11]:
    num1 = a + b
    num1
    Out[11]:
    9
    In [13]:
    number_status = True
    number_status
    Out[13]:
    True
    In [14]:
    name = 'harry'
    name
    Out[14]:
    'harry'
    In [15]:
    waiting_list = []
    waiting_list.append('lee')
    waiting_list
    Out[15]:
    ['lee']
    In [17]:
    waiting_list.append(['kim','park'])
    waiting_list
    Out[17]:
    ['lee', ['kim', 'park']]
    In [18]:
    waiting_list[0]
    Out[18]:
    'lee'
    In [20]:
    waiting_list[1][0]
    Out[20]:
    'kim'
    In [21]:
    eng_kor_dict = {}
    eng_kor_dict = {'apple':'りんご', 'pear':'なし'}
    eng_kor_dict
    Out[21]:
    {'apple': 'りんご', 'pear': 'なし'}
    In [22]:
    eng_kor_dict['apple']
    Out[22]:
    'りんご'
    In [23]:
    group1 = set([1,2,3,4,2,1])
    In [24]:
    group1
    Out[24]:
    {1, 2, 3, 4}
    In [25]:
    group2 = set([1,2,3,1,6])
    group2
    Out[25]:
    {1, 2, 3, 6}
    In [26]:
    group1 & group2
    Out[26]:
    {1, 2, 3}
    In [27]:
    group1 | group2
    Out[27]:
    {1, 2, 3, 4, 6}
    In [29]:
    age = 17

if age >= 20:
print("成人です")
else:
print("青少年です")

青少年です
In [33]:
age = 85
if age > 80:
print("まだまだ元気ですね")
print("まだまだ元気ですね")
elif age > 60:
print("人生は60から")
else:
print("まだ若いです")
まだまだ元気ですね
まだまだ元気ですね
In [38]:
fruits = ['りんご','なし','かき','みかん']

for fruit in fruits:
print(fruit)
りんご
なし
かき
みかん
In [45]:
fruits = ['りんご','なし','かき','みかん','すいか','いちご','りんご','なし','みかん']

count = 0

for fruit in fruits:
if fruit == 'みかん':
count = count + 1
count
Out[45]:
2
In [47]:
def sum(a, b):
return a + b

sum(3,4)
sum(3,5)
Out[47]:
8
In [48]:
def print_name(name):
print("nice to meet you" + name + "san")

print_name("lee")
nice to meet youleesan
In [49]:
number_list = [0,[1,2],3]
number_list
Out[49]:
[0, [1, 2], 3]
In [50]:
number_list[1]
Out[50]:
[1, 2]
In [51]:
number_list[1][1]
Out[51]:
2
In [52]:
students = [{"name":"현호", "age": 23}, {"name":"범규", "age": 24}, {"name":"건희", "age":25}]
students
Out[52]:
[{'name': '현호', 'age': 23},
{'name': '범규', 'age': 24},
{'name': '건희', 'age': 25}]
In [53]:
students[1]['name']
Out[53]:
'범규'
In [54]:
students[2]['name']
Out[54]:
'건희'
In [55]:
group1 = set([1, 1, 2, 2, 3, 3])
group2 = set([1, 3, 5, 7, 9])
print(group1)
{1, 2, 3}
In [56]:
print(group2)
{1, 3, 5, 7, 9}
In [57]:
print(group1 & group2)
{1, 3}
In [58]:
print(group1 | group2)
{1, 2, 3, 5, 7, 9}
In [59]:
answer = (4+5)*2+3
x = 9
answer = answer + x

if answer == 30:
print("correct")
else:
print("incorrect")
correct
In [63]:
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
total = 0

for number in data:
total = total + number

total
Out[63]:
55
In [64]:
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data2 = {"첫번째값" : 4, "두번째값" : 10}

def sum(a,b):
return a + b

print(sum(1,4))
5
In [70]:
print(sum(0,2))
2
In [71]:
print(sum(data[0], data[3]))
5
In [73]:
print(sum(data[3], data[5]))
10
In [74]:
print(sum(data2["첫번째값"], data2["두번째값"]))
14
In [75]:
import pandas as pd
In [77]:
chicken07 = pd.read_csv('./data/chicken_07.csv')
chicken07
Out[77]:
기준일 요일 성별 연령대 시도 시군구 읍면동 업종 통화건수
0 20190701 월 남 30대 서울특별시 강남구 논현동 치킨 8
1 20190701 월 여 30대 서울특별시 강남구 개포동 치킨 10
2 20190701 월 여 30대 서울특별시 강남구 논현동 치킨 16
3 20190701 월 여 30대 서울특별시 강남구 수서동 치킨 5
4 20190701 월 여 30대 서울특별시 강남구 대치동 치킨 5
... ... ... ... ... ... ... ... ... ...
26374 20190731 수 여 60대이상 서울특별시 중랑구 면목동 치킨 20
26375 20190731 수 여 30대 서울특별시 중랑구 중화동 치킨 5
26376 20190731 수 여 10대 서울특별시 중랑구 면목동 치킨 5
26377 20190731 수 여 60대이상 서울특별시 중랑구 망우동 치킨 5
26378 20190731 수 남 40대 서울특별시 중랑구 면목동 치킨 22
26379 rows × 9 columns

In [78]:
chicken07.tail(5)
Out[78]:
기준일 요일 성별 연령대 시도 시군구 읍면동 업종 통화건수
26374 20190731 수 여 60대이상 서울특별시 중랑구 면목동 치킨 20
26375 20190731 수 여 30대 서울특별시 중랑구 중화동 치킨 5
26376 20190731 수 여 10대 서울특별시 중랑구 면목동 치킨 5
26377 20190731 수 여 60대이상 서울특별시 중랑구 망우동 치킨 5
26378 20190731 수 남 40대 서울특별시 중랑구 면목동 치킨 22
In [79]:
chicken07.describe()
Out[79]:
기준일 통화건수
count 2.637900e+04 26379.000000
mean 2.019072e+07 12.346109
std 8.869258e+00 14.961707
min 2.019070e+07 5.000000
25% 2.019071e+07 5.000000
50% 2.019072e+07 5.000000
75% 2.019072e+07 14.000000
max 2.019073e+07 279.000000
In [83]:
set(chicken07['성별']), len(set(chicken07['성별']))
Out[83]:
({'남', '여'}, 2)
In [84]:
set(chicken07['연령대']), len(set(chicken07['연령대']))
Out[84]:
({'10대', '20대', '30대', '40대', '50대', '60대이상'}, 6)
In [85]:
set(chicken07['요일']), len(set(chicken07['요일']))
Out[85]:
({'금', '목', '수', '월', '일', '토', '화'}, 7)
In [89]:
chicken08 = pd.read_csv('./data/chicken_08.csv')
chichen09 = pd.read_csv('./data/chicken_09.csv')
In [90]:
chicken_data = pd.concat([chicken07,chicken08,chichen09])
In [91]:
chicken_data
Out[91]:
기준일 요일 성별 연령대 시도 시군구 읍면동 업종 통화건수
0 20190701 월 남 30대 서울특별시 강남구 논현동 치킨 8
1 20190701 월 여 30대 서울특별시 강남구 개포동 치킨 10
2 20190701 월 여 30대 서울특별시 강남구 논현동 치킨 16
3 20190701 월 여 30대 서울특별시 강남구 수서동 치킨 5
4 20190701 월 여 30대 서울특별시 강남구 대치동 치킨 5
... ... ... ... ... ... ... ... ... ...
24112 20190930 월 남 20대 서울특별시 중랑구 면목동 치킨 8
24113 20190930 월 여 40대 서울특별시 중랑구 신내동 치킨 5
24114 20190930 월 여 40대 서울특별시 중랑구 면목동 치킨 19
24115 20190930 월 남 40대 서울특별시 중랑구 신내동 치킨 5
24116 20190930 월 남 40대 서울특별시 중랑구 중화동 치킨 5
76495 rows × 9 columns

In [92]:
chicken_data = chicken_data.reset_index(drop= True)
In [93]:
chicken_data
Out[93]:
기준일 요일 성별 연령대 시도 시군구 읍면동 업종 통화건수
0 20190701 월 남 30대 서울특별시 강남구 논현동 치킨 8
1 20190701 월 여 30대 서울특별시 강남구 개포동 치킨 10
2 20190701 월 여 30대 서울특별시 강남구 논현동 치킨 16
3 20190701 월 여 30대 서울특별시 강남구 수서동 치킨 5
4 20190701 월 여 30대 서울특별시 강남구 대치동 치킨 5
... ... ... ... ... ... ... ... ... ...
76490 20190930 월 남 20대 서울특별시 중랑구 면목동 치킨 8
76491 20190930 월 여 40대 서울특별시 중랑구 신내동 치킨 5
76492 20190930 월 여 40대 서울특별시 중랑구 면목동 치킨 19
76493 20190930 월 남 40대 서울특별시 중랑구 신내동 치킨 5
76494 20190930 월 남 40대 서울특별시 중랑구 중화동 치킨 5
76495 rows × 9 columns

In [94]:
import pandas as pd
import matplotlib.pyplot as plt
In [96]:
sum_of_calls_by_week = chicken_data.groupby('요일')['통화건수'].sum()
sum_of_calls_by_week
Out[96]:
요일
금 159290
목 118210
수 118295
월 108492
일 158864
토 165949
화 108243
Name: 통화건수, dtype: int64
In [103]:
plt.figure(figsize=(8,5))
plt.bar(sum_of_calls_by_week.index, sum_of_calls_by_week)
plt.title('요일에 따른 치킨 주문량 합계')
plt.show()

In [98]:
plt.rcParams['font.size']
Out[98]:
10.0
In [99]:
plt.rcParams['font.family']
Out[99]:
['sans-serif']
In [101]:
plt.rcParams['font.family'] = "AppleGothic"
In [102]:
plt.rcParams['font.family']
Out[102]:
['AppleGothic']
In [104]:
sum_of_calls_by_week = chicken_data.groupby('요일')['통화건수'].sum()
In [107]:
groupdata = chicken_data.groupby('요일')
call_data = groupdata['통화건수']
sum_of_calls_by_week = call_data.sum()
sorted_sum_of_calls_by_weeks = sum_of_calls_by_week.sort_values(ascending=True)
sorted_sum_of_calls_by_weeks
Out[107]:
요일
화 108243
월 108492
목 118210
수 118295
일 158864
금 159290
토 165949
Name: 통화건수, dtype: int64
In [109]:
plt.figure(figsize=(8,5))
plt.bar(sorted_sum_of_calls_by_weeks.index, sorted_sum_of_calls_by_weeks)
plt.title('요일에 따른 치킨 주문량 합계')
plt.show()

In [147]:
weeks = ['월','화','수','목','금','토','일']
chicken_sum_of_calls_by_week = chicken_data.groupby('요일')['통화건수'].sum().reindex(weeks)
chicken_sum_of_calls_by_week
Out[147]:
요일
월 108492
화 108243
수 118295
목 118210
금 159290
토 165949
일 158864
Name: 통화건수, dtype: int64
In [148]:
plt.figure(figsize=(8,5))
plt.bar(chicken_sum_of_calls_by_week.index,chicken_sum_of_calls_by_week)
plt.title('요일에 따른 치킨 주문량 합계')
plt.show()

In [114]:
chicken_data.groupby('연령대')['통화건수'].sum()
Out[114]:
연령대
10대 66967
20대 155159
30대 216488
40대 287168
50대 136148
60대이상 75413
Name: 통화건수, dtype: int64
In [117]:
groupdata = chicken_data.groupby('연령대')
call_data = groupdata['통화건수']
sum_of_calls_by_age = call_data.sum()
sorted_sum_of_calls_by_age = sum_of_calls_by_age.sort_values(ascending= True)
sorted_sum_of_calls_by_age
Out[117]:
연령대
10대 66967
60대이상 75413
50대 136148
20대 155159
30대 216488
40대 287168
Name: 통화건수, dtype: int64
In [121]:
plt.figure(figsize=(8,5))
plt.bar(sorted_sum_of_calls_by_age.index, sorted_sum_of_calls_by_age)
plt.xlabel('연령대')
plt.title('연령대별 치킨 전체 주문량')
plt.show()

In [122]:
groupdata = chicken_data.groupby('시군구')
call_data = groupdata['통화건수']
sum_of_calls_by_city = call_data.sum()
In [126]:
sorted_sum_of_calls_by_city = sum_of_calls_by_city.sort_values(ascending=False)
sorted_sum_of_calls_by_city
Out[126]:
시군구
강서구 87521
강남구 71456
관악구 63593
서초구 58178
노원구 56383
송파구 54510
성동구 49662
구로구 49635
서대문구 47464
영등포구 45061
강북구 44965
중구 42424
강동구 38339
은평구 34849
마포구 28250
성북구 27926
용산구 24060
중랑구 23381
동대문구 22485
종로구 16360
금천구 16096
양천구 13034
동작구 9621
광진구 7211
도봉구 4879
Name: 통화건수, dtype: int64
In [128]:
plt.figure(figsize=(10,5))
plt.bar(sorted_sum_of_calls_by_city.index, sorted_sum_of_calls_by_city)
plt.xlabel('지역별')
plt.xticks(rotation = 45)
plt.title('지역별 치킨 전체 주문량')
plt.show()

In [129]:
pizza09 = pd.readcsv('./data/pizza_09.csv')
In [130]:
pizza09
Out[130]:
일자 요일 성별 연령 발신지
시도 발신지구 발신지동 통화건수
0 20190901 일 남 30대 서울특별시 강남구 삼성동 9
1 20190901 일 남 30대 서울특별시 강남구 논현동 10
2 20190901 일 남 30대 서울특별시 강남구 개포동 5
3 20190901 일 여 50대 서울특별시 강남구 삼성동 7
4 20190901 일 여 50대 서울특별시 강남구 도곡동 5
... ... ... ... ... ... ... ... ...
18220 20190930 월 남 20대 서울특별시 중랑구 묵동 5
18221 20190930 월 남 30대 서울특별시 중랑구 면목동 5
18222 20190930 월 여 20대 서울특별시 중랑구 면목동 11
18223 20190930 월 여 20대 서울특별시 중랑구 중화동 5
18224 20190930 월 여 50대 서울특별시 중랑구 망우동 5
18225 rows × 8 columns

In [131]:
sum_of_calls_by_week = pizza09.groupby('요일')['통화건수'].sum()
sum_of_calls_by_week
Out[131]:
요일
금 17147
목 16226
수 17136
월 16949
일 30772
토 24951
화 14902
Name: 통화건수, dtype: int64
In [144]:
weeks = ['월','화','수','목','금','토','일']
pizza_sum_of_calls_by_week = pizza09.groupby('요일')['통화건수'].sum().reindex(weeks)
pizza_sum_of_calls_by_week
Out[144]:
요일
월 16949
화 14902
수 17136
목 16226
금 17147
토 24951
일 30772
Name: 통화건수, dtype: int64
In [145]:
plt.figure(figsize=(8,5))
plt.bar(pizza_sum_of_calls_by_week.index, pizza_sum_of_calls_by_week)
plt.title('요일에 따른 피자 주문량 합계')
plt.show()

In [134]:
sumof_calls_by_area = pizza09.groupby('발신지구')['통화건수'].sum()
sumof_calls_by_area
Out[134]:
발신지

강남구 8961
강동구 7025
강북구 8757
강서구 12042
관악구 10218
광진구 1230
구로구 6137
금천구 2461
노원구 7408
도봉구 965
동대문구 5761
동작구 1665
마포구 4841
서대문구 7819
서초구 6536
성동구 7959
성북구 3817
송파구 6042
양천구 1695
영등포구 4914
용산구 3318
은평구 4496
종로구 2345
중구 7349
중랑구 4322
Name: 통화건수, dtype: int64
In [135]:
sortedsum_of_calls_by_area = sum_of_calls_by_area.sort_values(ascending=False)
In [136]:
sorted_sum_of_calls_by_area
Out[136]:
발신지

강서구 12042
관악구 10218
강남구 8961
강북구 8757
성동구 7959
서대문구 7819
노원구 7408
중구 7349
강동구 7025
서초구 6536
구로구 6137
송파구 6042
동대문구 5761
영등포구 4914
마포구 4841
은평구 4496
중랑구 4322
성북구 3817
용산구 3318
금천구 2461
종로구 2345
양천구 1695
동작구 1665
광진구 1230
도봉구 965
Name: 통화건수, dtype: int64
In [138]:
plt.figure(figsize=(20,10))
plt.bar(sorted_sum_of_calls_by_area.index, sorted_sum_of_calls_by_area)
plt.xlabel('지역구')
plt.title('구에 따른 피자 주문량 합계')
plt.show()

In [140]:
pizza_sum = pizza09.groupby('요일').sum()['통화건수']
pizza_sum
Out[140]:
요일
금 17147
목 16226
수 17136
월 16949
일 30772
토 24951
화 14902
Name: 통화건수, dtype: int64
In [149]:
plt.figure(figsize=(8,5))
plt.bar(chicken_sum_of_calls_by_week.index,chicken_sum_of_calls_by_week)
plt.bar(pizza_sum_of_calls_by_week.index,pizza_sum_of_calls_by_week)
plt.title('요일별 치킨과피자 주문량')
plt.show()

In [ ]:

좋은 웹페이지 즐겨찾기