📌kosis 복습
matplotlib 계열은 한글 시각화를 지원하지 않음. koreanize_matplotlib
라이브러리로 한글폰트 사용하기
파일 불러올 때 glob
사용해서 변수에 지정해서 사용 권장
df.drop()
how='any'
: 디폴트. 결측치가 하나라도 있으면 삭제. 'all'
: 모두 결측치면 삭제처방정보 공공데이터에 데이터가 잘 되어 있음에도 유료로 구매하는 이유
=> 해당 공공데이터는 시기성이 떨어짐
=> 데이터셋에 따라 이유가 다름
외부 데이터 참고
데이터를 처리하고 분석할 때, 데이터에 대한 정보를 외부에서 추가로 수집해야 할 필요가 있음
데이터가 수집된 분야에 대한 지식을 알고 있다면 더 유의미하고 정확한 데이터 분석이 가능함
관련된 또 다른 데이터 확보, 관련 분야 논문, 관련 분야 종사자의 의견 등 다양한 정보가 참고할만한 외부 데이터가 될 수 있음
논문이나 칼럼을 읽고 데이터에 대한 새로운 인사이트를 얻어 분석할 수도 있고, 다른 데이터의 변수와의 상관관계를 도출해낼 수도 있음
데이터가 너무 커서 일부만 샘플링함
seed는 42로 고정
random.seed()
보다 random generator(rng)
를 사용해 시드를 사용할 것을 권장함# np.random.seed(42)
# sample_no = np.random.choice(raw["가입자 일련번호"].unique(), 10000)
rng = np.random.default_rng(42)
sample_no = rng.choice(raw["가입자 일련번호"].unique(), 10000)
sample_no
sample_no = raw["가입자 일련번호"].sample(10000, random_state=42)
분석 이전에 도메인 지식을 충분히 숙지하고 분석 시작하기
시도명같은 텍스트 데이터를 코드값으로 변경해서 사용하는 이유?
=> 데이터 용량을 줄이기 위해
Series와 매칭 가능한 딕셔너리도 map을 통해 적용할 수 있음
map(함수 or 반복가능한 객체)
map
을 적용할 Series와 잘 맞춰줘야 함map
대신 replace
사용 가능age_code = """1 00~04세
2 05~09세
3 10~14세
4 15~19세
5 20~24세
6 25~29세
7 30~34세
8 35~39세
9 40~44세
10 45~49세
11 50~54세
12 55~59세
13 60~64세
14 65~69세
15 70~74세
16 75~79세
17 80~84세
18 85세+"""
age_list = age_code.split("\n")
# 딕셔너리 컴프리헨션
# 반복문으로 직접 key, value값 지정해서 딕셔너리 생성할 수도 있음
age_dict = {int(age.split(" ")[0]) : age.split(" ")[1] for age in age_list}
df["연령대"] = df["연령대코드(5세단위)"].map(age_dict)
# 투여경로 처리
drug_type = "내복제:A, 주사제:B, 외용제:C, 기타:D" # 홈페이지에서 copy
drt_dict = {drt.split(":")[1].strip() : drt.split(":")[0].strip() for drt in drug_type.split(",")}
df["투여경로"] = df["약품일반성분명코드"].str[6].map(drt_dict)
# 제형명칭 처리
table = pd.read_html("https://www.health.kr/drug_info/basedrug/main_ingredient.html")[1]
df_table = table[["제형코드", "제형명칭"]]
df_table_dict = df_table.set_index("제형코드")["제형명칭"].to_dict()
df["제형명칭"] = df["약품일반성분명코드"].str[-2:].map(df_table_dict)
sns.heatmap()
vmin
, vmax
: 값의 최소, 최대 범위 지정np.ones_like(corr)
: corr의 배열만큼 1로 채워진 array 만들기
np.ones(corr.shape)
로도 사용할 수 있음np.triu()
: matrix를 상삼각행렬로 만드는 numpy math
가독성을 높이기 위해 대각행렬 기준으로 한쪽의 데이터들만 masking 기법을 통해 plot
코드 정리
corr = df.corr()
mask = np.triu(np.ones_like(corr))
sns.heatmap(corr, annot=True, cmap="Blues", mask=mask)
cmap 팔레트
print(plt.colormaps())
seaborn에서는 데이터프레임에 등장한 값의 순서대로 자동 정렬함
data=df.sort_values()
로 데이터프레임 자체를 정렬해서 시각화퀴즈정리
변수에 리스트가 들어있을 때 unique 값의 개수를 확인하는 법
=> len(set(변수))