pandas2
# groupby
sql groupby와 같다.
인덱스가 같은 데이터끼리 묶어주고(split)
묶은 데이터끼리의 연산(sum, std)을 하고(apply)
모든 인덱스들끼리 모아서 보여준다(combine)
# 팀으로 묶어서 포인트들을 합한것으로 팀을 나타내라.
df.groupby("Team")["Points"].sum()
# 한 개 이상의 column을 묶을 수도 있다.
h_index = df.groupby(["Team", "Year"])["Points"].sum()
# 이렇게 만든 경우 인덱스는 멀티인덱스이다.
h_index.index
# 만들어놓은 그룹바이에서 특정 데이터만 볼 수도 있다.
h_index["Devils":"Kings"]
# 그룹바이를 테이블 형태로 나타낼수도 있다.
h_index.unstack()
# 다시 그룹바이 형태로 나타낼수도 있다.
h_index.stack()
# 모든 칼럼을 위로 올리고, 1,2,3 순으로 나타낼수도 있다.(엑셀처럼)
h_index.reset_index()
# 칼럼의 우선순위를 변경할 수도 있다. 하지만 이러면 사실 groupby의 의미가 없다.
h_index.swaplevel()
# 정렬도 가능하다.
h_index.sort_index(level=0)
h_index.sort_index(level=1)
h_index.sort_values()
# grouped
grouped = df.groupby("Team")
for name, group in grouped:
print(name) # key
print(group) # value
# grouped 데이터에 특정 그룹만 가져올수도 있다.
grouped.get_group("Devils")
# group 정보에는 세가지 유형의 apply가 가능하다
aggregation: 요약된 통계정보 추출
transformation: 해당 정보 변환
filtration: 특정 정보를 제거하여 보여주는 필터링 기능
# aggregation
grouped.agg(sum) # 그룹별, 칼럼별로 연산 수행
grouped["Points"].agg([np.sum, np.mean, np.std]) # 포인트 칼럼에 대해서만 연산수행
grouped.describe() # 그룹별, 칼럼별 요약데이터 보여줌
# transformation
aggregation과 달리 key값 별로 요약된 정보가 아니다.
grouped된 상태에서 각 column별로 모든 값에 동일한 연산이 적용된다.
사실상 map이랑 비슷한 개념으로 보면되는데 max등을 얻으면 group에서의 max를 반환한다.
# filter
특정 조건으로 데이터를 검색할때 사용한다.
필터 안에는 불린조건이 존재해야 한다.
len(x)는 grouped 된 dataframe 개수이다.
# pivot table
인덱스축은 groupby와 동일하다.
칼럼에 추가로 라벨링값을 추가하여, 값에 numeric type 값을 aggregation한다.
df_phone.pivit_table(["duration"], index=[df_phone.month, df_phone.item], columns=df_phone.network, aggfunc="sum", fill_value=0)
# groupby로도 pivot table 구현이 가능하다.
df_phone.groupby(["month", "item","network"])["duration"].sum().unstack()
# crosstab
a가 b를 몇점을 줬다
a가 b와 친구다
와 같은 데이터를 표현할때 사용한다.
pd.crosstab(index=df_movie.critic, columns=df_movie.title, values=df_movie.rating, aggfunc="first").fillna(0)
피벗테이블로도 구현 가능하다.
df_movie.pivot_table(
values=["rating"],
index=df_movie.critic,
columns=df_movie.title,
aggfunc="sum",
fill_value=0,
)
그룹바이로도 구현 가능하다.
df_movie.groupby(["critic", "title"]).agg({"rating": "first"}).unstack()
# merge
sql에서의 merge와 같은 기능이다.
두개의 데이터를 하나로 합친다.
pd.merge(df_a, df_b, on="subject_id") # 두 데이터 모두 subject_id가 있다면 그것을 기준으로 합쳐라
두 dataframe이 컬럼이름이 다를때
pd.merge(df_a, df_b, left_on="subject_id", right_on="subject_id")
# join
inner join: 양쪽 다 같은 데이터만 합친다.
left join: 왼쪽 테이블은 전부 보여주고 오른쪽 테이블은 겹치는게 없을때에는 nan으로 보여줌
right join: 오른쪽 테이블은 전부 보여주고 왼쪽 테이블은 겹치는게 없을때에는 nan으로 보여줌
full join: 같은 데이터는 같이 보여주되, 다르면 모두 없는 부분을 nan으로 보여줌
pd.merge(df_a, df_b, on="subject_id", how="inner")
pd.merge(df_a, df_b, on="subject_id", how="outer")
pd.merge(df_a, df_b, right_index=True, left_index=True)
# concat
같은 형태의 데이터를 붙이는 연산 작업이다.
# 아래로 붙일때
df_new = pd.concat([df_a, df_b])
df_new.reset_index()
df_a.append(df_b)
# 옆으로 붙일때
df_new = pd.concat([df_a, df_b], axis=1)
df_new.reset_index()
# io
import sqlite3
conn = sqlite3.connect("./data/flights.db")
cur = conn.cursor()
cur.execute("select * from airlines limit 5;")
results = cur.fetchall()
results
df_airplines = pd.read_sql_query("select * from airlines;", conn)
df_airplines.reset_index()
# xls
writer = pd.ExcelWriter('./data/df_routes.xlsx', engine='xlsxwriter')
df_routes.to_excel(writer, sheet_name='Sheet1')
# pickle
df_routes.to_pickle("./data/df_routes.pickle")
df_routes_pickle = pd.read_pickle("./data/df_routes.pickle")
df_routes_pickle.head()
df_routes_pickle.describe()
기초확률
# 확률론
딥러닝은 확률론 기반의 기계학습 이론에 바탕을 두고 있다.
기계학습에서 사용되는 손실함수들의 작동원리는 데이터공간을 통계적으로 해석해서 유도한다.
회귀분석에서 손실함수로 사용되는 L2노름은 예측오차의 분산을 가장 최소화하는 방향으로 학습하도록 유도한다.
분류문제에서 사용되는 교차엔트로피는 모델 예측의 불확실성을 최소화하는 방향으로 학습하도록 유도한다.
# 확률변수
확률 분포에 따라 이산형과 연속형으로 확률변수로 구분한다.
이산형 확률변수는 확률변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링한다.
연속형 확률변수는 데이터공간에 정의된 확률변수의 밀도위에서의 적분을 통해 모델링한다.
# 확률분포
주변확률분포는 y에 상관없이 x의 분포를 얻는 것이다.
조건부확률분포는 y가 주어졌을때의 x의 분포를 얻는 것이다.
# 조건부확률
조건부확률은 입력x에 대해서 정답이 y일 확률을 의미한다.
로지스틱회귀에서 사용했던 선형모델과 소프트맥스 함수의 결합은 데이터에서 추출된 패턴을 기반으로 확률을 해석하는데 사용된다.
# 기대값
확률분포가 주어지는 데이터를 분석하는데 사용가능한 다양한 통계적 범함수를 계산할 수 있다.
기대값은 데이터를 대표하는 통계량이면서 확률분포를 통해 다른 통계적 범함수를 계산하는데 사용한다.
기대값을 이용하여 분산, 첨도, 공분산 등의 여러 통계량을 계산할 수 있다.
# 몬테카를로 샘플링
기계학습의 많은 문제들은 확률분포를 명시적으로 모를 때가 대부분이다.
확률분포를 모를때 데이터를 이용하여 기대값을 계산하려면 몬테카를로 샘플링 방법을 사용해야 한다.
몬테카를로는 이산형이든 연속형이든 상관없이 성립한다.
몬테카를로 샘플링은 독립추출만 보장된다면 대수의 법칙에 의해 수렴성을 보장한다.
'ai tech' 카테고리의 다른 글
ai tech 11일차 (0) | 2021.02.01 |
---|---|
ai tech 10일차 (0) | 2021.01.29 |
ai tech 8일차 (0) | 2021.01.27 |
ai tech 7일차 (0) | 2021.01.26 |
ai tech 6일차 (0) | 2021.01.25 |