본문 바로가기
부트캠프(LIKELION AIS7)/수업

[AI스쿨 7기, 4주차] 의약품 처방정보 샘플링, 전처리, 분석, 시각화

by aimaimee 2023. 4. 19.

0306번 실습 파일 : 의약품처방정보 샘플링 / 0307번 실습 파일 : 전처리, 분석

멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의

221013

1. 08번 의약품 처방정보 강의자료

  • 5000만명 중 100만 명의 정보를 수집한 것 : 전국민 2% 샘플
  • Q. 데이터가 잘 되어 있음에도 유료로 구매하는 이유? 공공데이터는 시기성이 떨어진다.

2. 0306번 실습 파일

2.1 샘플링

  • a는 1-D array, size는 몇개를 샘플링 할 것인지
  • 전수조사는 오류가 날 수 있고, 노트북이 안 돌아갈 수 있기 때문에 표본조사로 샘플링을 먼저 한다.

2.2 넘파이로 샘플링

2.3 판다스로 샘플링

  • sample_no = raw["가입자 일련번호"].sample(10000, random_state=42)
  • 은하수를 여행하는 히치하이커에서 나온 숫자

3. 0307번 실습파일

의약품 처방정보 : https://www.data.go.kr/data/15007117/fileData.do
국가중점데이터 사용자매뉴얼 : https://drive.google.com/file/d/1QAIa3uUwTm-Usqm8QuJUywmnozoZ945m/view?usp=sharing

  • pdf 문서의 9쪽
  • Q. 시도코드가 시도명이 아니라 코드 값으로 되어 있는 이유는? 데이터 용량을 줄이거나 인코딩 에러 방지

3.1 파생변수

  • 파생변수(월, 일, 요일)
    • pd.to_datetime(df[""], format="%Y-%m-%d")
    • %Y는 4글자로 된 연도 데이터, %y는 2글자로 된 연도 데이터
    • dt.month, dt.day, dt.weekday(dt.dayofweek), dt.day_name()
    • 컬럼 수가 많아도 다 보일 수 있도록 지정 : pd.options.display.max_columns = None
  • 파생변수(시도명)
    • 0102 실습파일 참고
    • 반복문을 사용
    • 리스트 컴프리헨션을 사용 : city_name = {int(x.split(" ")[0]) : x.split(" ")[1] for x in city_list}
    • {x[:2] : x[3:] for x in city_list}
    • map : df["시도명"] = df["시도코드"].map(lambda x : city_name[x])
    • replace : df["시도명"] = df["시도코드"].replace(city_name)
  • 파생변수(연령대)
    • age_dict = {int(al.split(" ")[0]) : al.split(" ")[1] for al in age_list}
    • df["연령대"] = df["연령대코드(5세단위)"].map(age_dict)
  • 파생변수(성별)
    • gender_dict를 map을 이용해서 성별코드에 넣어줌
  • 파생변수(투여경로, 제형)

3.3 기술통계

  • Q. 일련번호의 max 값 22는 무엇을 의미할까? 해당 처방에서 처방받은 약의 수
  • 금액이 가장 큰 약에 대한 처방 내역을 찾기 : money_max = df.loc[df["금액"]==df["금액"].max(), "처방내역일련번호"]

3.4 시각화

  • 히스토그램 : 코로나 데이터에서는 월요일이 가장 적었는데, 처방은 월요일이 가장 많다.
  • 상관관계 : sns.heatmap(df.corr(), cmap="Greens", annot=True)
    • vmin = -1 : -1을 가장 연하게 표시
    • 상삼각행렬 mask 처리
    • 1로 채워진 array 만들기 : np.ones_like(corr)
    • np.triu / np.tril 위에 있는 값을 다 날릴 것이냐, 밑에 있는 값을 다 날릴 것이냐
    • np.ones(corr.shape) 도 같은 기능
  • 기간별 처방
    • 일별 처방 중 31일이 적은 이유 : 31일이 있는 달이 드물어서
  • 연령대별 처방
    • 정렬을 하고 싶다면, df=df.sort_values("연령대")
  • 그룹바이, 피봇테이블
    • 피봇테이블은 평균이 기본값이므로 지정해줄 필요 없다.
    • 합계는 aggfunc=sum으로 설정해야 한다.

4. 퀴즈

4.1 틀린 것

  • 4번 문제 : user_sample 이라는 변수에 리스트가 들어있을 때 중복된 값을 제외하고 unique 값의 갯수를 확인해 보고자 합니다. 빈칸에 알맞은 것을 순서대로 나열한 것은 무엇일까요?
    user_sample[:5]
    set(len(user_sample))
    중복을 제외한 단어가 몇 개가 있는지를 이 방법으로 찾을 수 있다.
  • 5번 문제 : 데이터프레임에서 isnull()를 통해 결측치 여부를 확인해 볼 수 있습니다.이렇게 확인한 결측치의 비율을 구해볼 수 있는 것은 무엇일까요?
    아...문제 열심히 보자 비율비율!! df.isnull.mean()
  • 6번 문제 : 판다스의 describe()를 통해 수치 데이터의 기술통계를 구했을 때 알 수 없는 값은 무엇일까요?
    또 틀렸다. 분산!!
  • 10번 문제 : 다음 중 상관 분석과 관련된 설명 중 바르지 않은 것?
    상관 계수는 두 변수 간의 인과 관계를 설명하기도 한다. (x)
    상관 계수 값은 X 와 Y 가 완전히 동일하면 +1, 전혀 다르면 0, 반대방향으로 완전히 동일하면 –1 을 가진다.
    상관 계수는 1에 가까울수록 강한 양적 선형 관계를 가진다.
    상관 계수는 -1에 가까울수록 강한 음적 선형 관계를 가진다.

댓글