어제에 이어서 Pandas에 관한 강의였다.
강의 자체는 어렵지 않았지만 워낙 데이터를 다루는 방법이 다양하기 때문에
각 상황에서 여러가지 문법들을 자유자재로 사용할 수 있는가가 중요할 것 같다.
지금 당장은 모든 문법에 익숙해지는 것이 당연히 힘들 것이다.
천천히 하나씩 하나씩 적용해나가면서 스펙트럼을 넓혀보자.
df.groupby("Team")["Points"].sum() # Team을 기준으로 Points의 sum을 반환해준다.
df.groupby(["Team", "Year"])["Points"].sum() # 한 개 이상의 column을 묶을 수 있다.
grouped.add_prefix("points_") # column에 prefix 추가
df["Team"].value_counts() # Team별로 갯수 count
grouped = df.groupby("Team")
for name, group in grouped:
print(name) # Key
print(group) # DataFrame
# Aggregation : 요약된 통계정보를 추출
grouped.agg([np.sum, np.mean, np.std]) # group 된 상태에서 column에 함수 적용
df.get_group("Devils") # 특정 Key 값을 가진 그룹의 정보만 추출 가능
df_phone.groupby(["month", "item"]).agg(
{ #이런식으로도 사용 가능하다.
"duration": [min, max, sum],
"network_type: "count",
"date": "first"
})
# Transformation : 해당 정보를 변환
score = lambda x : (x - x.mean()) / x.std() # 정규화
grouped.transform(score) # Key 별로 요약된 정보가 아닌 개별 데이터의 변환
# Filtration : 특정 정보를 제거하여 보여주는 필터링
df.groupby("Team").filter(lambda x: len(x) >= 3) # 특정 조건으로 데이터 검색
df_new = pd.concat([df_a, df_b]) # 아래로 붙인다. (같은 Column)
df_new = pd.concat([df_a, df_b], axis = 1) # 옆으로 붙인다.
import sqlite3
# DB 연결 코드
conn = sqlite3.connect("./data.db")
cur = conn.cursor()
cur.execute("select * from col limit 5;")
results = cur.fetchall()
# DB 연결 conn을 사용하여 dataframe 생성
df_airplines = pd.read_sql_query("select * from airlines;", conn)
conda install XlsxWriter
writer = pd.ExcelWriter('./data.xlsx', engine='xlsxwriter')
df_route.to_excel(writer, sheet_name='Sheet1')
df.routes.to_pickle("./data.pickle") # 쓰기
df_routes_pickle = pd.read_pickle("./data.pickle") # 읽기
import numpy as np
def mc_int(fun, low, high, sample_size=100, repeat=10):
int_len = np.abs(high - low)
stat = []
for _ in range(repeat):
x = np.random.uniform(low=low, high=high, size=sample_size)
fun_x = fun(x)
int_val = int_len * np.mean(fun_x)
stat.append(int_val)
return np.mean(stat), np.std(stat)
def f_x(x):
return np.exp(-x**2)
mc_int(f_x, low=-1, high=1, sample_size=10000, repeat=100))
5/5 Solve
Q) 이산형 확률변수는 확률변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링한다.
A) 예
Q) 연속형 확률변수의 한 지점에서의 밀도 (density) 는 그 자체로 확률값을 가진다.
A) 아니오 (밀도 위에서의 적분으로 모델링)
Q) 몬테카를로 샘플링 방법은 변수 유형 (이산형, 연속형) 에 상관없이 사용할 수 있다.
A) 예
Q) 각 면이 나올 확률이 균등하고 독립적인 정육면체 주사위를 던진다고 하자. 확률변수 X는 주사위의 각 면의 숫자를 나타낸다고 할 때 (X ∈ {1, 2, 3, 4, 5, 6} ), X의 기대값을 구하시오 (소수점 첫째자리까지 입력).
A) 3.5
(1 + 2 + 3 + 4 + 5 + 6) * (1 / 6) = 21 / 6 = 3.5
Q) 각 면이 나올 확률이 균등하고 독립적인 정사면체 주사위를 던진다고 하자. 확률변수 X는 주사위의 각 면의 숫자를 나타낸다고 할 때 (X ∈ {1, 3, 5, 7} ), X의 분산을 구하시오 (정수값으로 입력).
A) 5
E(X) = (1 + 3 + 5 + 7) * (1 / 4) = 16 / 4 = 4
V(X) = { (1 - 4)² + (3 - 4)² + (5 - 4)² + (7 - 4)² } * (1 / 4)
= (9 + 1 + 9 + 1) * (1 / 4) = 20 / 4 = 5