Groupby
df.groupby(["시군구명", "지번본번지"])["건물명"].value_counts()
'''
시군구명 지번본번지 건물명
강릉시 1 세인트존스호텔 16
효산콘도미니엄 13
임당시장 7
명정그린빌라 4
2 강릉종합운동장 2
..
횡성군 1060 SK강림주유소 1
1511 횡성(인천방향)휴게소 6
횡성휴게소(인천방향) 3
1530 횡성휴게소(강릉방향) 17
횡성(강릉방향)휴게소 6
Name: 건물명, Length: 9517, dtype: int64
'''
groupby 특징
위와 같이 column을 묶어서 어떤 컬럼을 기준으로 표현할 수 있다.
Groupby 명령의 결과물도 결국은 dataframe 두 개의 column으로 groupby를 할 경우, index가 두개 생성된다.
unstack() = Group으로 묶여진 데이터를 matrix 형태로 전환해줌
swaplevel() = Index level을 변경할 수 있음
dff = df.groupby(["가해자연령층", '발생월'])['사망자수'].sum()
dff , dff.swaplevel()
'''
(가해자연령층 발생월
20세이하 1 5
2 6
3 8
4 5
5 9
..
불명 8 0
9 0
10 0
11 0
12 0
Name: 사망자수, Length: 96, dtype: int64,
발생월 가해자연령층
1 20세이하 5
2 20세이하 6
3 20세이하 8
4 20세이하 5
5 20세이하 9
..
8 불명 0
9 불명 0
10 불명 0
11 불명 0
12 불명 0
Name: 사망자수, Length: 96, dtype: int64)
'''
Groupby - gropued
추출된 group 정보에는 세가지 유형의 적용이 가능하다
특정 컬럼에 여러개의 function을 적용할 수 있다.(sum, mean 등)
Pivot Table
Index 축은 groupby와 동일함, Column에 추가로 labeling 값을 추가하여, Value에 numeric type 값을 aggregation 하는 형태
Crosstab
Merge
pd.merge(df_a, df_b, on = 기준 column, how = option)
concat
같은 형태의 데이터를 붙이는 연산작업
norm = 원점에서부터의 거리
-norm = 변화량의 절대값
-norm = 피타고라스 정리를 이용한 유클리드 거리
두 벡터 사이의 각도
정사영 =
유사역행렬 (Moore-Penrose 역행렬)
인 경우
인 경우
유사역행렬을 이용하면 연립방정식의 해를 구할 수 있다.
연립방정식은 행렬을 사용하면 로 표현할 수 있다.
이를 유사역행렬을 사용하면
또한 유사 역행렬을 이용하면 선형모델로 해석하는 선형 회귀식을 찾을 수 있다.
선형회귀분석은 X와 y가 주어진 상황에서 계수 beta를 찾아야한다.
미분은 함수 f의 주어진점 에서의 접선의 기울기를 구한다.
한 점에서의 접선의 기울기를 알면, 어느 방향으로 점을 움직여야 함수값이 증가, 감소하는지 알 수 있다.
미분값을 빼면 함수값이 극소값으로 감소하게 되며, 이를 경사하강법(gradient descent)이라 한다.
경사하강법을 이용해 선형모델을 찾게 되면, 역행렬을 이용하지 않고 얻을 수 있다.
선형회귀의 목적식은 이고 를 찾아야 하므로 목적식의 그레디언트 벡터를 구해야 한다
복잡해 보이지만, 를 계수 에 대해 미분한 결과인 만 곱해지는 것과 같다.
목적식을 최소화하는 를 구하는 경사 하강법 알고리즘은 다음과 같다.
확률적 경사하강법(SGD)
확률적 경사하강법은 모든 데이터를 사용해서 업데이트하는 대신 데이터 한개 또는 일부를 활용하여 업데이트한다. 볼록하지 않은(non-convex)목적식은 SGD를 통해 최적화 할 수 있다.
전체 데이터 가 아닌 미니배치(를 사용하여 업데이트하므로 연산량이 b/n으로 감소한다.