[데이터에듀]ADP실기 데이터 분석 전문가 모의고사 1회 1번 파이썬 코드

2021. 6. 3. 12:44빅데이터 잡아라/ADP

반응형

안녕하세요 :) 

안녕하세요~

데이터에듀에서 나온 ADP실기 데이터 분석 전문가의 모의고사가 R로만 짜여저 있어서

ADP실기를 파이썬(python)언어로 보시는 분들을 위해 

제가 파이썬 언어로 바꾸면서 코딩을 한 내용을 공유드리고자 합니다.

ADP 실기 모의고사 1회 

01. 정형 데이터마이닝 (사용 데이터: Lotto)

lotto.csv
0.02MB

1) 연관규칙분석을 수행하기 위해 lotto 데이터셋을 transaction 데이터로 변환하시오. (단, 본 분석에서 로또번호가 추첨된 순서는 고려하지 않고 분석을 수행하도록 한다.) 그리고 변환된 데이터에서 가장 많이 등장한 상위 10개의 로또번호를 막대그래프로 출력하고 이에 대해 설명하시오.

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
from collections import Counter
import matplotlib.pyplot as plt
from apyori import apriori

path = './모의고사 1회/lotto.csv'
data= pd.read_csv(path)
ddata=data[['num1','num2','num3','num4','num5','num6']]
ddata

R에서는 데이터 형태를 변형하기 위해 'reshape2' 라이브러리를 설치하여 '트랜잭션'데이터의 형태를 변환한다.

하지만 python에서 대체할 수 있는 'reshape' 형태의 라이브러리가 없다. 가장 비슷한 라이브러리는 TransactionEncoder()이다. 

ddata= ddata.astype('string')
df_list=ddata.values.tolist()
te = TransactionEncoder()
te_ary = te.fit(df_list).transform(df_list)
df = pd.DataFrame(te_ary, columns=te.columns_)

결과는 아래와 같다. 

 

가장 많이 나온 숫자 상위 10개를 뽑습니다.

import numpy as np
list_count = np.array(df_list).flatten().tolist()
count=Counter(list_count)
sorted_C_union = sorted(count.items(), key=lambda x: (-x[1], x[0]))
d = pd.DataFrame.from_dict(sorted_C_union)
#가장 많이 뽑힌 숫자 상위 10개 뽑기
d.rename(columns={0:'num', 1:'count'}, inplace=True)
d=d.sort_values(by='count', ascending=False)[:10]

시각화를 합니다. 

plt.figure(figsize=(20,16))
plt.xticks(fontsize = 18 )
plt.bar(d['num'].values, d['count'].values)

 

2) 변환한 데이터에 대해 apriori함수를 사용하여 다음 괄호 안의 조건을 반영하여 연관규칙을 생성하고, 이를 'rules_1'이라는 변수에 저장하여 결과를 해석하시오(최소 지지도: 0.002, 최소 신뢰도: 0.8, 최소조합 항목수: 2개, 최대조합 항목 수 :6개) 그리고 도출된 연관규칙들을 향상도를 기준으로 내림차순 정렬하여 상위 30개의 규칙을 확인하고, 이를 데이터프레임으로 변환하여 csv파일로 출력하시오.

(python에서는 최소 지지도와 최소 신뢰도를 함께 옵션으로 넣는 함수가 없는것 같다.., 혹시 아시는 분은 댓글로 남겨주시면 정말 감사하겠습니다..ㅜㅜ.. 그래서 단계적으로 연관규칙을 생성했습니다..)

 

from mlxtend.frequent_patterns import apriori
#최소 지지도 0.002 
frequent_itemsets = apriori(df, min_support=0.002, use_colnames=True)

#최소 신뢰도 0.8를 위한 작업
frequent_ = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.8)

 

연관규칙을 모두 생성했다. 

여기서, 조건절(Antecedent)은 위 예시의 규칙에서 ‘만일 ~라면’에 해당하는 부분입니다. 결과절(Consequent)은 그 뒷부분에 해당하는 내용입니다. 

#최대 조합수 6개 최소 조합수 2개 
freq=frequent_[ (frequent_['antecedent_len'] >= 2) &  (frequent_['antecedent_len'] <= 6)]
freq

 

향상도인 "lift"를 기준으로 규칙들을 내림차순 정렬한 후, 상위 30개의 규칙을 확인한다. 

result = freq.sort_values(by='lift', ascending=False)[:30]
result

 

result.to_csv('./result.csv')

결과물을 csv 파일로 생성한다. 

데이터프레임 변환 없이 아래와 같이 csv파일이 생긴다는걸 알 수 있다.

 

 

 

*참고자료

http://rasbt.github.io/mlxtend/user_guide/frequent_patterns/association_rules/#confidence

 

Association rules - mlxtend

From here you can search these documents. Enter your search terms below.

rasbt.github.io

 

 

▼ ADP실기 데이터분석전문가 모의고사 1회 2번 보러가기 

https://shiningyouandme.tistory.com/28

 

[데이터에듀]ADP실기 데이터 분석 전문가 모의고사 1회 파이썬 코드

(데이터에듀) ADP실기 데이터 분석 전문가가 드디어 출판 되었습니다! ADP실기 공부를 어떻게 해야할지 막막하신분들은 한번 훑어보는 것도 괜찮을 것 같더라구요! 다만 모의고사가 R코드로 되어

shiningyouandme.tistory.com