[BoostCamp] DAY9 AI Math#4
[BoostCamp] DAY9 AI Math#4
1. Pandas 활용하기
이번 수업을 듣다보니 pandas에서 일어나는 연산을 SQL에서도 가능할 것이라 생각을 하였다. 그래서 둘을 비교하며 이해해보기로 하였다.
- Group By
※해당 실습에서는 아래의 데이터를 활용하여 실습한다.
1) 그룹으로 묶어보자.
- pandas –> df.groupby(“Team”)[“Points”].sum()
- Team은 묶음의 기준이 되는 컬럼이다.
- Points는 묶음을 적용받는 컬럼이다.
- sum()은 적용 받는 연산이다.
- MYSQL –> SELECT Team, SUM(Points) FROM df GROUP BY Team;
- df 테이블에서 Team 컬럼을 기준으로 묶은 뒤 Points 값들을 합하라는 뜻이다.
여러 그룹으로도 묶을 수 있을 까?
- pandas
- MySQL
At Pandas
※ Group by 명령의 결과물도 결국은 dataframe이다.
※ 두개의 column으로 gruop by를 할 경우, index가 두개 생성된다.
PLUS in Padas
Pandas에는 Group으로 묶여진 데이터를 matrix 형태로 전환해주는 ustack
이라는 메소드가 존재한다.
위의 예제에서는 Team을 기준으로 Year을 나누었다. 그렇다면, Year을 기준으로 나눈 뒤 Team별로 기준을 나눌 수 있을 까?
Pandas
* swaplevel() 메소드를 통해 기존에 Team, Year순서였던 정렬을 바꿔주었다.
* sort_index() 메소드를 통해 index를 기준으로 정렬을 한다.
* 만약, sort_index()에 (현재 year, team 순, default=0) 1의 값을 주었다면 team명을 기준으로 정렬되었을 것이다.
MySQL
* ORDER BY 에는 ASC, DESC의 방법이 존재한다.
* ASC : 오름차순 정렬
* DESC : 내림차순 정렬
* ORDER BY에서 기준이 될 column들은 GROUP BY와 같이 나열하면 된다.
2) Gruop by로 묶인 df를 추출 가능할까?
Pandas –> grouped = df.groupby(“Team”)
- Team으로 묶인 Group들이 grouped에 할당된 것을 확인할 수 있다.
- Tuple 형태로 그룹의 key값과 Value값이 추출된다.
- 특정 key값을 가진 그룹의 정보만 추출 가능하다.
-
추출된 group정보에는 세가지 유형의 apply가 가능하다.Aggregation
요약된 통계정보를 추출해 준다.
만약 여러 결과(합, 평균 등)을 알고 싶다면 sum, np.mean과 같은 function을 리스트에 넣어서 매개변수로 넘겨주면 된다.
Transformation
- Key값 별로 요약된 정보가 아니다.
- 개별 데이터의 변환을 지원한다.
※ 알아두자!!
max나 min 처럼 Series 데이터에 적용된느 데이터들은 key값을 기준으로 Grouped된 데이터 기준이다.
Filtration
- 특정 정보를 제거하여 보여주는 필터링 기능이다.
- 특정 조건으로 데이터를 검색할 때 사용한다.
위에서 배운 내용을 실습해보자.
우선 우린 위와 같은 데이터를 가지고 실습을 진행할 것이다.
-
월별 통화량을 계산해보자.
월을 기준으로 group을 묶어주고 각 달별 핸드폰 사용량을 합해주면 된다. -
네트워크 종류에 따른 통화량을 알아보려면 어떻게 해야할 까?
우선 item에서 call값을 가진 row만 추출한다. 그리고 network로 groupby하여 사용량을 합해주면 된다. -
월, 사용 내용에 따른 사용 날짜
month오 item으로 grouping을 한다. 그후 그룹화된 데이터 프레임에 date의 갯수를 센다.
이를 좀더 보이 좋게matrix
형태로 나타내보자.
-
여러 데이터를 보여주는 표도 생성 가능할까?
월간 각 item에 대해 분석해보았다.- 사용 기간의 min, max, sum을 보여준다.
- networktype의 갯수를 세어보았다.
- 사용 날짜들의 min, first, nunique를 구해보았다.
그렇다면 위와 같이 표로도 표현이 가능하다면, 피봇테이블도 만들 수 있지 않을 까?
2. Pivot table & Crosstab
1) pivot table
피봇 테이블(pivot table)이란? 자신이 원하는 데이터만을 가지고 원하는 행과 열에 데이터를 배치하여 만들어진 새로운 테이블
그렇다면 판다스에서는 어떻게 pivot테이블을 얻을 수 있을 까?
- [“duration”]
- table을 구성하는 valuesms duration이다.
- index=[df_phone.month, df_phone.item]
- table의 index를 정해준다.
- 해당 예제에서는 month에 따른 item이 index가 된다.
- columns=df_phone.network
- table을 구성하는 column을 정해준다.
- aggfunc=”sum”
- table 값을 어떻게 구성할 것인지 정해준다.
- default는 평균값이다.
- fill_value = 0
- 값이 존재하지 않는 cell을 무엇으로 채울지 정한다.
- default는 NAN이다.
2) crosstab
- 특히 두 칼럼에 교차 빈도, 비율, 덧셈등을 구할때 사용한다.
- pivot table의 특수한 형태이다.
- User-Item Rating Matrix 등을 만들 때 사용한다.
- ** pandas.crosstab(index, columns, values=None, aggfunc=None)**
- index : index가 되는 column을 지정해주자.
- columns : column이 되는 column을 지정해주자.
- value : 해당 index와 columns에따라 분류될 값을 정해준다.
- aggfunc : table에 값을 넣을 때 어떤 값을 넣을 것인가?
3. Merge & Concat
1) merge
- SQL에서의 Merge와 같은 기능을 가진다.
- 들어가기전에 join에 대해 알아보자.
Type of join
실습 data
left join
-
At Pandas
how에서 어떻게 두 table을 합칠 것인지 정할 수 있다.
현재는left
값을 주었으므로 Left Join을 할 것이다. -
At SQL
위의 Pandas에서 실행한 값과 동일하다.
LEFT 즉, table a의 subject_id를 기준으로 합했기 때문에 table_b에서 같은 subject_id를 가지고 있는 row만 합쳐졌다. 또한, table_b에 존재하지 않아 매칭되지 않은 table_a의 데이터는 NULL로 채워졌다.
RIGHT join
-
At Pandas
-
At SQL
FULL(outer) join
-
At Pandas
-
At SQL
ORACLE에는 FULL JOIN이 존재하지만, MYSQL에는 존재하지 않는다. 즉, RIGHT JOIN과 LEFT JOIN을 UNION해주어야한다.
Inner join
-
At Pandas
-
At SQL
그 외…
** pd.merge()**
- on : 합쳐지는 두 테이블 사이에 같은 이름을 가진 column이 있다면 해당 column을 기준으로 join
- ex) on=”subject_id”
- left_on, right_on : 왼쪽 오른쪽의 table이 합쳐질 때 key가 되는 column을 지정해준다.
- left_index, right_index : index를 기준으로 join한다.
그외에도 다양한 기능들이 있으니 공식사이트에서 알아보자.
2.확률론 맛보기
INTRO. 딥러님에서 확률론이 필요한 이유
- 딥러닝은 확률론 기반의 기계학습 이론에 바탕을 두고 있다.
- 기계학습에서 사용되는 손실함수들의 작동 원리는 데이터 공간을 통계적으로 해석해서 유도한다.
- 회귀 문제 : 손실함수로 이용되는 L2-norm은 예측 오차의 분산을 가장 최소화하는 방향으로 학습하도록 유도한다.
- 분류문제 : 교차엔트로피는 모델 예측의 불확실성을 최소화하는 방향으로 학습하도록 유도한다.
- 분산, 불확실성을 최소화하기 위해서 -> 측정방법을 알아야한다.
1) 이산 확률 변수 VS 연속 확률 변수
- 확률 변수는 확률 분포에 따라 이산형과 연속형확률 변수로 구분하게 된다.
- 이산형 : 확률 변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링
- 연속형 : 데이터 공간에 정의된 확률 변수의 밀도 위 에서의 적분을 통해 모델링
확률분포는 데이터의 초상화이다.
- 데이터 공간을 x*y라 표기하고 D는 데이터의 공간에서 데이터를 추출하는 분포이다.
- D는 이론적으로 존재하는 확률분포이므로 사전에 알수 없다.
- 데이터는 확률 변수로
(X, y) ~ D
라 표기한다. - P(X)는 입력 X에 대한 주변확률 분포로 y에 대한 정보를 주진 않는다.
- 조건부확률 분포 P(X|y)는 데이터 공간에서 입력 X와 출력 y 사이의 관계를 리모델링한다.
- P(X|y) : 입력 변수 X에 대해 정답이 y일 확률
- 로지스틱 회귀에서 softmax(Wφ + b)은 데이터 x로 부터 추출된 특징패턴 φ과 가중치 행렬 W를 통해 조건부확률 P(y|φ)를 계산한다.
- 회귀문제에서는 조건부 기대값을 추정한다.
- P(X|y) : 입력 변수 X에 대해 정답이 y일 확률
- 데이터 공간을 x*y라 표기하고 D는 데이터의 공간에서 데이터를 추출하는 분포이다.
기대값?
- 확률 분포가 주어지면 데이터를 분석하는데 사용 가능한 여러 종류의 통계적 범함수를 계산할 수 있다.
- 기대값은 데이터를 대표하는 통계량이다
- 확률 분포를 통해 다른 통계적 범함수를 계산하는데 사용한다.
- 기대값을 이용해 분산, 첨도, 공분산등 여러 통계량을 계산할 수 있다.
2) 몬테카를로 샘플링
- 기계학습의 많은 문제들은 확률분포를 명시적으로 모를 때가 대부분이다.
- 확률 분포를 모를 때 데이터를 이용하여 기댓값을 계산하려면 몬테카를로 샘플링을 사용하여야 한다.
- 몬테카를로 샘플링은 독립추출만 보장된다면 대수의 법칙에 의해 수렴성이 보장된다.
3. 그외 이모저모
- 강의
- 오늘 Pandas강의는 기존에 알고 있던 SQL과 비슷한 부분이 있어 함께 공부하는 시간을 가져보았다.
- 확률론 부분은 다소 생소한 내용이 있어 공부하는데 어려움이 있었다. 좀 더 봐야 이해가 잘 될 수 있지 않을까 생각이 된다.
- 피어 세션
- 오늘은 풀스텍 머신러닝 엔지니어링, Pythorch 입문등에 대한 내용을 다룬 세미나를 들었다.
- 풀스텍 머신러닝 엔지니어링은 꽤 흥미로운 분야라 앞으로 더 진도가 나간 내용들을 접한다면 정말 재미있을 것같다.
- 혼자 공부할때와 다른 시각으로 바라보는 pytorch를 보니 새로웠다. 많은 것들을 배울 수 있을 것같아 기대된다.
- 나중에라도 공부할 내용
- https://aldente0630.github.io/data-science/2018/08/05/a-beginners-guide-to-optimizing-pandas-code-for-speed.html
- http://www.notespoint.com/pandas-groupby/
- https://medium.com/bigdatarepublic/advanced-pandas-optimize-speed-and-memory-a654b53be6c2
댓글남기기