ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 머신러닝 5/ 코드카타 / pandas
    [스파르타코딩클럽]데이터분석 과정/TIL,WIL 2024. 2. 2. 20:24

    머신러닝 과제

    • 문제 1 라이브러리를 통해 데이터 불러오기

    ucimlrepo 패키지 : 스크립트 및 노트북으로 데이터 세트를 쉽게 가져올 수 있는 패키지

     

    fetch_ucirepo : 데이터 프레임 및 메타데이터 정보를 포함하여 UCI ML 리포지토리에서 데이터 세트 로드

     

    df 지정해주기 

    df = pd.concat([X,y],axis= 1)

    csv파일 만들기 (bank 파일 들어갔는데 없어서 뭐지 했는데 만드는 문제였음ㅎ)

    df.to_csv('./bank_marketing.csv', index = False)
    • 문제 2 : Y 변수 인코딩 적용하기

    x가 no일 경우 0, 그렇지 않을 경우 1 반환

    범주형 데이터 사용하는 강의를 참고해서 풀었음

        if x == 'no':
            return 0
        else:
            return 1

    데이터 인코딩 코드 

    - apply 사용 : df['컬럼'].apply(함수명)

    • y_train
    y_train['y'] = y_train['y'].apply(get_binary)
    • y_test
    y_test['y'] = y_test['y'].apply(get_binary)
    • 문제 3 : 간단한 모델링 & 평가함수 생성하기

    평가 지표 : accuracy_score, f1_score -> metrics

    모델링 : LogistricRegression ->  linear_model

    from sklearn.metrics import accuracy_score, f1_score
    from sklearn.linear_model import LogisticRegression

    학습하기 : fit

    model_lor = LogisticRegression()
    model_lor.fit(X_train,y_train)

     

    결과 저장 : y_pred_train, y_pred_test

    예측 : predict

    y_pred_train = model_lor.predict(X_train)
    y_pred_test = model_lor.predict(X_test)
    • 문제 4 : 모델링 수행하기

    StandardScaler, MinMaxScaler 사용 -> preprocessing

    각각 sd_sc            mm_sc

    from sklearn.preprocessing import MinMaxScaler, StandardScaler
    mm_sc = MinMaxScaler()
    sd_sc = StandardScaler()

     

    sc 적용 (처음에는 [['sc_col']] 했는데 오류 나서 하나씩 지워봤다)

    X_train[sc_col] = sd_sc.fit_transform(X_train[sc_col])
    X_test[sc_col] = sd_sc.fit_transform(X_test[sc_col])

     

    mm 적용 (자꾸 오류나서 위에랑 다르게 적용하는건가? 싶었는데 cool이라고 했었다 ㅎ)

     X_train[mm_col] = mm_sc.fit_transform(X_train[mm_col])
     X_test[mm_col] = mm_sc.fit_transform(X_test[mm_col])

     


    SQL 코드카타

    진료과별 총 예약 횟수 출력하기
    진료과 코드, 5월예약건수를 출력하고
    진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고
    예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순으로 정렬

     

    • 예약건수 : count
    • 5월 : where apnt_ymd like '2022-05%'
    • 진료과별 : group by
    • 정렬 : 5월 예약 건수 asc, MCDP_CD asc
    SELECT MCDP_CD AS '진료과 코드', COUNT(APNT_YMD) AS 5월예약건수
    FROM APPOINTMENT
    WHERE APNT_YMD LIKE '2022-05%'
    GROUP BY MCDP_CD
    ORDER BY 5월예약건수 ASC, MCDP_CD ASC;

     

    Find Followers Count
    각 user와 follower의 수를 구하고 user_id를 오름차순으로 정렬
    • follower의 수 : count(follower_id)
    • 각 user : group by
    • 정렬 : order by user_id asc;
    SELECT user_id, COUNT(follower_id) as followers_count
    FROM Followers
    GROUP BY user_id
    ORDER BY user_id asc;

     

    Revisig Aggregation - Averages
    district가 california인  도시의 평균 인구를 구하기
    • 평균 : AVG
    • district가 california인 : district =  'california'
    SELECT AVG(POPULATION)
    FROM CITY
    WHERE DISTRICT = 'California';

     


    파이썬 코드카타

    모의고
    1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers
    가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수
    • 학생 3명 : one, two, three로 각각 만들어줌
    • 정답 확인 : for문
    • 만약 정답 i랑 같다면 : if문 사용
    • i랑 학생이 고른 답 몇 개가 같은지 : 학생[i % len(학생)]
    • 가장 많이 정답 맞춘 사람 : max
    def solution(answers):
        one = [1,2,3,4,5] 
        two = [2,1,2,3,2,4,2,5] 
        three = [3,3,1,1,2,2,4,4,5,5] 
        
        #정답 체크
        ans = [0, 0, 0]
        
        for i in range(len(answers)):
            if answers[i] == one[i % len(one)]: 
                ans[0] += 1
            if answers[i] == two[i % len(two)]:
                ans[1] += 1
            if answers[i] == three[i % len(three)]:
                ans[2] += 1
                
        #가장 많이 정답 맞춘 사람             
        answer = []
        for i in range(len(ans)):
            if ans[i] == max(ans): 
                answer.append(i+1)
        
        return answer

     


    Pandas

    • 연결 : concat

    - 2개 이상의 DataFrame을 행 혹은 열 방향으로 연결

    - 행 방향

     axis = 0이 기본값
    index가 맞지 않아도 무시하고 연결 가능, 일부 컬럼 누락 및 순서 바뀌어도 알아서 같은 컬럼으로 연결됨

    - 열 방향

    axis = 1 기본값
    • 병합 : merge

    - 2개의 DataFrame을 특정 key를 기준으로 병합할 때 사용하는 메서드

    - 서로 다른 구성이더라도 공통된 key가 있다면 병합 가능 (join과 유사)

    how : inner, left, right, outer로 병합 방법 정할 수 있음

    병합하는 컬럼의 이름이 다른 경우에는 left_on, right_on을 지정하면 drop되지 않음

     

Designed by Tistory.