강의 복습 내용

  • pandas의 라이브러리
    • groupby
    • pivot_table
    • join method
    • database connection
    • xls persistense

얻은 지식

  • pandas 함수.
  • 딥러닝의 학습방법.

pandas library

  • 수학, 코드에서 멈추지말아야 한다.

group by

  • sql에서의 groub by와 같음
    • 특정 index에 맞게 그룹화(split)
    • 그룹된index들 끼리 연산(apply)
    • 연산 결과를 다시 테이블로 합치기(combine)
  • df.groupby("묶음기준 column")["연산이 적용되는 column"].적용받는 연산
    • df.groupby("Team")["Points"].sum()
      • Team이라는 컬럼을 기준으로 값들을 묶는다, 묶일때 points라는 컬럼의 데이터를 sum해준다.
    • df.groupby(["Team","Year"])["Points"].sum()
      • 두가지 컬럼을 묶는것도 가능.
      • 두개의 index가 생성된다.
      • hierarchical index라고 한다.

hierarchical index

  • 두개의 column을 groupby할 경우, index가 두개 생성된것
  • 타입은 Series이다.
  • h_index[시작인덱스명:끝인덱스명]
    • 일반적인 indexing도 가능
  • h_index.unstack()
    • 매트릭스 형태로 바꿔준다.
    • 2번 index가 column으로 바뀐다.
  • h_index.reset_index()
    • 그룹한 모습을 풀어준다.
  • h_index.swaplevel()
    • index1과 index2를 서로 바꾼다.
  • h_index.sortlevel(level=0)
    • 지정한 level의 index를 기준으로 정렬을 진행한다.
    • h_index.sort_index(level=0)과 같은 의미
  • h_index.sort_values()
    • 결과값을 기준으로 정렬해준다.
  • h_index.std(level=1)
    • std,sum같은 기본 연산 수행도 가능하다.
    • 해당 index 레벨을 기준으로, 결과값들을 계산한다.

grouped

  • groupby에 의해 split된 상태에서 추출 가능
  • groubed = df.groupby("Team")
    • list로 변환 하여 볼수도 있음
groubed = df.groupby("Team")
for name,group in grouped:
  print(name)
  print(group)
  • 코드처럼 grouped된것을 따로 출력하여 볼 수 있음
  • group의 타입은 DataFrame이다.
  • grouped.get_group("특정그룹 이름")
    • 그룹된것에서 특정그룹을 따로 추출하는 함수
    • grouped.get_group("Devils")는 Team을 기준으로 Devils라는 그룹을 추출하라는 의미
  • apply함수를 적용 가능
    • aggregation:요약된 통계정보를 추출
    • transformation:정보를 변환
    • filtration:특정 정보 제거
  • Aggregation
    • 그룹마다 sum,max,mean을 적용
    • grouped.agg(sum)
      • 그룹내의 각 컬럼마다 해당 함수를 적용해준다.
      • 각 컬럼별 총합을 표시
    • grouped.agg(max)
      • 컬럼마다 최대인 값들만 표시한다.
  • Transformation
    • 개별 데이터의 변환을 지원
score = lambda x:(x.max())
grouped.transform(score)
"""
결과가 agg와는 다르게 압축된 결과가 아닌, 각 요소마다 해당 결과값을 넣어준다.

0 876 1 riders 2014
1 789 2 riders 2015
라는 데이터가 있을때
0 876 2 2015
1 876 2 2015
처럼 각각마다 해당 그룹에서 각 칼럼의 max인 값으로 바꿔준다.
"""

  • Filter
    • 특정조건으로 데이터를 검색할 때 사용
    • df.groupby("Team").filter(조건)
    • df.groupby("Team").filter(lambda x: x["Rank"].sum()>2)
      • 그룹한것에서 Rank컬럼의 합이 2보다 큰것만 출력한다는 의미

case study

-…..ㅓㅘㅣ호ㅓㅏㅣ호ㅓㅏㅣㅗㅓㅏ

pivot table

  • 엑셀에서 보던것
  • column에 추가로 labeling값을 추가
  • value에 numeric type값을 aggregation하는 형태
df_phone.pivot_table(["칼럼명"], # 실제 계산되는 값을가진 컬럼
                    index=[df_phone.컬럼명1,...] # 그룹화할 컬럼명
                    columns = df_phone.network # 컬럼이름
                    aggfunc = "sum" #컬럼마다 적용할 계산
                    fill_value = 0 # 없는값에 들어갈 기본값
)
  • 컬럼명에 들어간 값을 기준으로, index의 있는 컬럼으로 그룹화를 한다.
  • 이후 column에 있는 컬럼명들로 묶어서 aggfunc을 진행한다.
  • 전체 테이블 모양은 index에는 index가 그룹되어 있고, column에는 column의 값들이 있는 테이블로 각 요소는 aggfunc이 적용된 모습
  • 복잡하다.

crosstab

  • 두 칼럼에 교차 빈도, 비율, 덧셈 등을 구할 때 사용
  • pivot table의 특수한 형태
  • user-item rating matrix등을 만들때 사용
    • 테이블 컬럼이 a,b,c라고 있을때 a를 세로축인 index로, b를 가로축인 column으로 , c를 결과값으로 할때 사용
    • pivot table과 같다.

merge

  • 두개의 데이터를 하나로 합침
    • 어떤 기준으로 합치기를 진행
  • pd.merge(df_a,df_b,on="subject_id")
    • df_a와 df_b를 subject_id를 기준으로 합친다.
    • pd.merge(df_a,df_b,left_on="subject_id1",right_on="subject_id2")
    • df_a와 df_b의 기준이되는 컬럼이름이 다를때 left_on,right_on으로 특정한다.
  • join
    • pd.merge(df_a,df_b,on="subject_id", how='left')
      • how에 left라고 하면 left를 기준으로 merge되고, 우측에 없는것은 NaN으로 된다.
    • pd.merge(df_a,df_b,on="subject_id", how='right')
    • pd.merge(df_a,df_b,on="subject_id", how='outer')
    • pd.merge(df_a,df_b,on="subject_id", how='inner')
  • index를 기준으로 합치기
    • pd.merge(df_a,df_b,right_index=True,left_index = True)
      • 단순한 합치기가 된다.

concat

  • 값을 붙이는 연산
    • 아래로, 옆으로 붙이는게 있다.
    • append와 유사하다.
df_new = pd.concat([df_a,df_b])
"""
   index subject_id first_name last_name
0    0     1          alex       andrson
"""

# index컬럼을 지워준다.
df_new.reset_index(drop=True)


"""
   subject_id first_name last_name
0     1        alex       andrson
"""
  • pd.concat([df_a,df_b],axis=1)
    • axis가 0이면 아래로붙인다. 가로축기준으로
    • axis가 1이면 오른쪽으로 붙인다. 세로축기준

persistence

  • 데이터 입/출력
  • db connection기능을 제공한다.
    • sql lite와 연결
import sqlite3

conn = sqlite3.connect("./data/filights.db")
#db와 연결할 주소
cur = conn.cursor()
cur.execute("select * from airline limit 5;")#sql문 실행
results = cur.fetchall()# 결과 받아오기
  • xls persistence
    • dataframe의 엑셀 추출 코드
fdsafdsafdsafeafdsafdsa
  • pickle persistence fdsjaklf;djsak;fdsjaio

확률론 맛보기

  • 확률론 기반
  • 손실함수(loss function)들의 작동원리
  • 회귀분석
    • L2노름은 예측오차의 분산을 가장 최소화하는 방향
  • 분류문제
    • 교차엔트로피(cross-entropy)는 모델예측의 불확실성을 최소화 하는 방향으로 학습

확률분포

  • 데이터의 초상화
  • 데이터를 해석하는데 중요한 도구

확률변수

  • 확률분포에 따라구분 하는 종류가 있다.
  • 이산형 확률변수
    • 확률변수가 가질 수 있는 경우의 수 를 모두 고려하여 확률을 더해서 모델링한다.
  • 연속형 확률변수
    • 데이터 공간에 정의된 확률변수의 밀도위에서의 적분을 통해 모델링

조건부확률

  • 조건부 확률 P(y x)는 입력변수 x에 대해 정답이 y일 확률
    • 연속확률분포인경우 확률이 아닌 밀도로 해석
  • 로지스틱회귀에서는 선형모델과 소프트맥스 함수의 결합
    • 데이터에서 추출된 패턴을 기반으로 확률를 해석하는데 사용
    • 분류에서는 선형모델을 통해 softmax로 확률 벡터를 얻을 수 있다.
      • softmax는 데이터로 추출된 특징 패턴을 pi\(\phi(x)\)라고 한다.
      • 이 특징 패턴을 통해 가중치행렬W와 행렬 곱을 통해 주어진 x가 정답이 y일 확률로 해석된다.
        • $$ P(y \phi(x))$$라 써도 된다고 한다.
  • 회귀문제인경우 조건부 기대값을 추적 $$E(y x) $$
    • 조건부 기대값\(E\|y-f(x)\|_2\)을 최소화 하는 함수 f(x)와 일치

기대값이란

  • 확률분포가 주어지면 데이터를 분석하는 데 사용 가능한 여러 종류의 통계적 범함수(statistical functional)을 계산
  • 기대값은 데이터를 대표하는 통계량
    • 동시에 확률 분포를 통해 다른 통계적 범함수를 계산하는데 사용
  • 기대값은 대부분 평균이랑 동일한 개념으로 사용

몬테카를로


좀더 찾아보기

  • lambda x:x가 숫자만 나오는이유는?
    • transform부분
  • .plot으로 이미지화 할수있다.
  • crosstab을 이용하는 이유
  • sqlite3모듈

피어세션 정리

  • 발표 준비
  • simpy가 좋다.
  • softmax의 사용이유?
  • 딥러닝 관계자와 이메일 불어봄
    • 핫한데 사람 대우가 많이 약하다는 의견