Today We Learned

2018/07/05 thu :cloud:

python 정리하기

수업 목표

범죄 통계 데이터 분석 과제 점검
함수와 이름 공간 복습
Lambda 란?
과제 실습 1 (딕셔너리 - 평균 구하기)
과제 실습 2 (분산, 표준편차 구하기)

'재귀함수' = 영화 Inception

  • 함수 속 함수 = 꿈 속의 꿈
  • def _ 별 단계 = 꿈
  • return result
    • return은 킥 (꿈속에서 벗어나는 계기)
    • result는 토템 (꿈 속에서 갖고 탈출)

강력범죄 데이터

%matplotlib inline
import pandas as pd
import numpy as np
import math
import matplotlib.pyplot as plt

df = pd.read_csv('https://s3.ap-northeast-2.amazonaws.com/data10902/messy/crime_clean.csv',encoding='utf-8')

data = [d for d in df.get_values().tolist() if not math.isnan(d[-1])]
  • 데이터를 불러온다.
df.groupby(["젠더", "유형"]).agg({"명":"sum"})
  • 젠더별 유형(가해자,피해자) 명 수의 합을 표로 볼 수 있다.
df.groupby(["젠더", "대분류","유형"]).agg({"명":"mean"})
  • 젠더-대분류-유형을 그룹화하여 명 수의 평균을 볼 수 있다.
def get_sum(data):
    result = 0
    for datum in data:
        result = result + datum
    return result

def get_len(data):
    result = 0
    for datum in data:
        result = result + 1
    return result

def get_average(data):
    total = get_sum(data)
    n = get_len(data)
    result = total / n
    return result


score = [50, 60, 70]
average = get_average(score)
print(average)

Lambda - "한 줄 짜리 간단한 함수를 정의하는 간결한 문법"

lambda 는

  • Second-order function(2차 함수)
  • 함수 속 함수

리스트 이름 순으로 정렬하기

students = [('alan', 50), ('dave', 60), ('brad', 30), ('cate', 40)]
def by_name(student):
    return student[0] 
    #0번째 element 기준으로 정렬하겠다
    #이름 순으로 정렬됨
sorted(students, key=by_name)
>>> [('alan',50),('brad',30),('cate',40),('dave',60)]

#위 함수를 한 줄로 정리하는 방법 (1회용)
sorted(students, key=lambda     s:s[0])
#        리스트  함수명따로지정x 변수:표현식 

리스트 나이 순으로 정렬하기

def by_age(student):
    return student[1]
sorted(students, key=by_age)
#위와 같은 결과 나오는 lambda함수
sorted(students, key = lambda s:s[1])
>>> [('brad',30),('cate',40),('alan',50),('dave',60)]

더 쉽게

def blah (x) :
    return x+2
blah = (lambda x : x+2)
같은 값이 나오는 함수

실습 #1 40m

  • 당신은 농구팀 코치이며, 네 명의 지원자 중 한 명을 추가로 선발하고자 합니다. 다음은 각 지원자 별 최근 열 번 경기에서의 득점 기록입니다.
    candidates = {
    'alan': [8, 14, 6, 8, 14, 9, 14, 9, 15, 5],
    'brad': [11, 4, 11, 7, 9, 7, 8, 7, 10, 6],
    'cate': [16, 22, 13, 15, 12, 3, 20, 17, 13, 23],
    'dave': [24, 15, 18, 12, 9, 19, 23, 13, 14, 18],
    }
    
  • 평균 득점이 가장 높은 선수를 선발하고자 합니다. 어떤 선수를 선발해야 하는지, 그 이유는 무엇인지 설명하는 보고서를 작성하세요.

  • 힌트: 자료의 요약 수업 내용을 참고하세요. ``` average = []

for name in candidates.keys(): total = 0 n = 0 for i in candidates[name]: total += i n += 1 average.append(total/n)

print(average)

lst = list(zip(candidates.keys(), average)) print(lst)

```
sorted_averages = sorted(named_averages, key=lambda s: s[1], reverse=True)
print(sorted_averages)
[('dave', 16.5), ('cate', 15.4), ('alan', 10.2), ('brad', 8.0)]
  • 평균이 제일 높은 dave를 택한다.

실습 #2 40m

  • 당신은 농구팀 코치이며, 네 명의 지원자 중 한 명을 추가로 선발하고자 합니다. 다음은 각 지원자 별 최근 경기에서의 득점 기록 일부를 임의로 추출한 데이터입니다. 선수별로 경기 횟수가 다릅니다.
    candidates = {
    'alan': [8, 14, 6, 8, 14, 9, 14, 9, 15, 5],
    'brad': [11, 4, 11, 7, 9, 7, 8, 7, 6],
    'cate': [16, 22, 15, 12, 3, 20, 17, 13, 23],
    'dave': [24, 15, 18, 18, 12, 9, 19, 23, 13, 14, 18],
    }
    
  • 매 경기에서의 기복이 가장 적은 선수를 선발하고자 합니다. 어떤 선수를 선발해야 하는지, 그 이유는 무엇인지 설명하는 보고서를 작성하세요.

  • 힌트: 자료의 요약 수업 내용을 참고하세요.

import math
candidates = {
  'alan': [8, 14, 6, 8, 14, 9, 14, 9, 15, 5],
  'brad': [11, 4, 11, 7, 9, 7, 8, 7, 6],
  'cate': [16, 22, 15, 12, 3, 20, 17, 13, 23],
  'dave': [24, 15, 18, 18, 12, 9, 19, 23, 13, 14, 18],
}

sd = []

for name, scores in candidates.items():
    # 합계 구하기
    total = sum(scores)
    # value의 전체 개수 구하기
    n = len(scores)
    # 평균구하기
    mean = total / n

    # 분산구하기
    vsum = 0
    for x in scores:
      vsum = vsum + (x - mean)**2  # 
    var = vsum / n-1

# 표준편차 구하기
    std = math.sqrt(var)
    sd.append(std)


named_sd = list(zip(candidates.keys(), sd))

print(named_sd)
[('alan', 3.370459909270543), ('brad', 1.9019158631804098), ('cate', 5.647024782032472), ('dave', 4.237768007566061)]
  • 로 표준편차가 작은 brad를 택해야 한다.

results matching ""

    No results matching ""