안녕하세요 개발하는 노비입니다.

이번 포스팅에서는 SQL 개발자(SQLD) 를 합격하기 위한 가장 빠르고 확실한 방법을 알려드리려고 합니다.

 

 

[ 시험준비기간 ]

3주 ( 비전공자 + 이전에 MySQL 다뤄본 적은 있음 )

 

[ 교재 선정 ] 

1. SQL 전문가 가이드 (선택)

한마디로, 시험을 보기 전 공부해야할 개념서적이라고 볼 수 있습니다.

컴퓨터공학 혹은 SQL 에 대한 기본 개념이 없는 비전공자라면, 가볍게 읽어보신 후 문제집을 푸는 것이 훨씬 효율적입니다. 책 가격이 5만원이기 때문에 사는 것은 비추이고 도서관에서 빌려서 보는 것을 추천드립니다.

 

※ 만약 책을 구할 수 없는 분이라면, 아래 포스팅을 참고하세요.

 

https://nomadcoder.tistory.com/entry/DAsP-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%A0%84%EB%AC%B8%EA%B0%80-%EA%B0%80%EC%9D%B4%EB%93%9C-2013-%EA%B5%90%EC%9E%AC-%EC%97%86%EC%9D%B4-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EB%B2%95

 

[ DAsP ] 데이터아키텍처 전문가 가이드 2013 교재 없이 공부하는 법

현재 데이터아키텍처 전문가 가이드 2013 Edition 이 전국 품절인 상태입니다. (무슨 생각이신지...) 저도 멘붕을 겪은 입장으로서, 책없이 공부할 수 있는 방법을 찾아냈습니다. 첫번째, http://www.dbgu

nomadcoder.tistory.com

 

2. SQL 자격검정 실전문제 (필수)

필수적으로 구매해 2번 ( 최소 1번 이상) 풀어볼 것을 추천드립니다.

한국데이터산업진흥원에서 SQL 전문가 가이드를 기반으로 만든 문제집이라고 볼 수 있습니다.

저는 시험보기전까지 시험범위 문제를 모두 풀어보았고, 틀린문제와 헷갈리는 개념의 문제들만 1번 더 복습했습니다. 

 

[ 합격생의 시험공부 방법 ] 

 

(시험 3주 전) SQL 자격검정 실전문제 눈으로 읽기 + SQL 전문가 가이드 이용해 개념 공부

(시험 2주 전) SQL 자격검정 실전문제 집중해서 풀어보기

(시험 1주 전) 틀린 문제, 헷갈리는 개념 1번 더 복습하기

 

 개념 공부 전에, 실전문제집을 풀어보는 이유는 뭔가요?

SQL전문가 가이드는 약 800페이지에 육박하는 책으로 모든 개념을 꼼꼼하게 공부하기 (오직 제기준) 굉장히 힘듭니다. 실전문제집을 먼저 풀어보면, 데이터산업진흥원 쪽에서 중요하게 생각하는 개념이 무엇인지 대략 알 수 있습니다. 그러면, 데이터분석 전문가 가이드 책으로 공부할 때 문제로 출제된 개념들만 빠르게 읽고 넘어갈 수 있습니다.

 

[ 추가 꿀팁 - 기출문제 확인하기] 

 

Google 에 "SQL 개발자 기출문제" 라고 검색하셔서 기출문제들을 보고 시험을 응시하는 것을 추천해드립니다. 시험문제로 기존에 기출되었던 문제들이 다시 출제되는 경우가 몇문제 있기 때문입니다.

 

※ SQL 자격검정 실전문제 대신, 기출문제만 풀면 안될까요?

SQL 자격검정 실전문제 >>> 기출문제의 중요도를 가진다고 생각합니다. 인터넷에 돌아다니는 기출문제는 마지막 총점검 차원으로 1,2문제 운좋게 더 맞고 싶으신 분들을 위해서 추천드리고, 만약 SQL 자격검정 실전문제를 다 풀지 못하신 분들은 실전문제집 먼저 다 푸시는 것을 권해드립니다.

 

[ 자격증이 데이터분석 직무에 도움이되나요? ]

 

현실적으로 sqld는 개나소나 다따는 자격....에헴.

제 생각엔 반반인 것 같습니다. 데이터분석 직무를 희망하시는 분이라면, DB 에서 데이터를 불러와 전처리할 수 있는 역량이 필수적이기 때문에 SQL문을 다룰 수 있어야합니다. 하지만, 이러한 역량을 가지고 있다는 것을 SQL 개발자 자격증으로만 어필하기엔 어려울 것 같습니다.

자격증과 함께 실제 데이터 모델링 프로젝트에서 sql 문을 사용한 내역을 보여준다면, sql 에 대한 개념과 실무능력을 구비하고 있다는 점을 어필할 수 있을 것 같습니다.

반응형

안녕하세요 개발하는 노비입니다.

이번 포스팅에서는 데이터 분석 준전문가(ADsP)를 합격하기 위한 가장 빠르고 확실한 방법을 알려드리려고 합니다.

 

[ 시험준비기간 ]

3주 ~ 4주 ( 비전공자 + 이전에 공부해본 적 없음)

 

[ 교재 선정 ]

 

1. 데이터분석 전문가 가이드 (선택)

한마디로, 시험을 보기 전 공부해야 할 개념 서적이라고 볼 수 있습니다.

통계학 혹은 데이터 분석에 대한 기본 개념이 없는 비전공자라면, 가볍게 읽어보신 후 문제집을 푸는 것이 훨씬 효율적입니다. 책 가격이 5만 원이기 때문에 사는 것은 비추이고 도서관에서 빌려서 보는 것을 추천드립니다.

 

2. 데이터분석 자격검정 실전문제 (필수)

필수적으로 구매해 최소 1번 이상 , 2번 풀어볼 것을 추천드립니다.

한국데이터진흥원에서 데이터 분석 전문가 가이드를 기반으로 만든 문제집이라고 볼 수 있습니다.

저는 시험보기전까지 시험 범위 문제를 모두 풀어보았고, 틀린 문제와 헷갈리는 개념의 문제들만 1번 더 복습했습니다. 

 

3. 기타 시중문제집 (선택)

시험 1주 전 불안한 마음에 예상문제를 풀어야겠다고 생각이 들어, 작년에 사다 두고 책장에 처박아 뒀던 시중 문제집을 꺼내 조금 풀어봤습니다.

 

시험 유경험자로서, 기타 시중 문제집은 꼭 구매하지 않아도 무방하다고 생각합니다.

시중문제집은 데이터 분석 전문가 가이드에 나온 개념이 너무 딱딱하고 이해하기 어려운 분들이 좀 더 쉽고 간략하게 풀어낸 개념서적을 보고 싶을 때 사용하는 용도가 적합할 것 같습니다. 만약 다양한 문제를 풀어보고 싶어 구매를 고민하시는 분들이라면, 데이터분석 자격검정 실전문제를 반복학습할 것을 더 추천해드립니다.

 

[ 합격생의 시험공부 방법 ]

 

(시험 4주 전) 데이터분석 자격검정 실전문제를 개념 모르는 상태에서 대충 풀어보기

(시험 4주 전) 데이터분석 전문가 가이드에 나온 개념들 빠르게 읽기

(시험 2,3주 전) 데이터분석 자격검정 실전문제 집중해서 풀어보기

(시험 1주 전) 틀린 문제, 헷갈리는 개념 1번 더 복습하기

 

개념 공부 전에, 실전문제집을 풀어보는 이유는 뭔가요?

데이터분석 전문가 가이드는 약 1000페이지에 육박하는 책으로 모든 개념을 꼼꼼하게 공부하기 (오직 제기준) 굉장히 힘듭니다. 실전문제집을 먼저 풀어보면, 데이터산업진흥원 쪽에서 중요하게 생각하는 개념이 무엇인지 대략 알 수 있습니다. 그러면, 데이터분석 전문가 가이드 책으로 공부할 때 문제로 출제된 개념들만 빠르게 읽고 넘어갈 수 있습니다.

 

[ 추가 꿀팁 - 기출문제 확인하기]

 

Google에 "데이터 분석 준전문가 기출문제" 라고 검색하셔서 기출문제들을 보고 시험을 응시하는 것을 추천해드립니다. 시험문제로 기존에 기출되었던 문제들이 다시 출제되는 경우가 몇문제 있기 때문입니다.

( 제가 본 블로그 https://kuklife.tistory.com/115?category=813020  )  

 

[ 자격증이 데이터분석 직무에 도움이 되나요? ]

 

크게 도움되지는 안될 것 같습니다.^ㅜ 왜냐하면 ADsP는 데이터 분석이 어떤 과정으로 이루어지는 지에 대한 폭넓고 얇은 개념을 공부하기 때문에,  취업용으로 활용할 때는 데이터 분석에 대한 기초지식과 관심이 있는 정도의 매리트를 가지는 것 같습니다.  데이터 분석 직무를 희망하시는 취준생분이라면, python을 공부하시거나 kaggle 혹은 dacon에서 제공되는 프로젝트에 참여해 분석 및 모델링한 경험을 포트폴리오로 만드는 것이 더욱 경쟁력 있을 것입니다.

 

반응형
목차
1. 개요
2. Data 설명
3. EDA
4. 결론
5. 참고 url

# 개요

https://www.kaggle.com/c/instacart-market-basket-analysis

 

Instacart Market Basket Analysis

Which products will an Instacart consumer purchase again?

www.kaggle.com

당신이 꼼꼼하게 계획된 식료품 리스트를 기반으로 쇼핑을 하든, 충독적으로 쇼핑하든, 우리의 음식구매패턴은 우리가 누구인지 정의한다. 식료품 주문 및 배달 앱인 Instacart는 필요할 때 냉장고와 선반안에 당신이 가장 좋아하는 것으로 쉽게 채울 수 있도록 하는 것을 목표로 한다. 인스타카트 앱을 통해 상품을 고른 후, 자신의 장바구니를 검토하고 구매한다. 

Instacart의 데이터 분석팀은 이 즐거운 쇼핑 경험을 제공하는 데 큰 역할을 한다. 현재 그들은 사용자가 어떤 제품을 다시 구매할지 예측하거나, 처음 구매하거나, 다음에 장바구니에 추가할지를 예측하는 모델을 개발하기 위해 트랜잭션 데이터를 사용한다. 최근에, Instacart는 300만 개의 데이터를 오픈했다.


이 경쟁에서, Instacart는 kaggle 에서 어떤 제품이 사용자의 다음 구매에 포함될 것인지를 예측하기 위한 데이터분석 모델을 찾고 있다.


# Data 설명
Data Data Column
  • order_products_train_df : train(현재) 구매자군의 제품주문내역
  • order_products_prior_df : prior(과거) 구매자군의 제품주문내역
  • orders_df : 주문정보
  • products_df : 제품정보
  • aisles_df : 제품 상세카테고리
  • departments_df : 제품 카테고리
  • order_id : 주문 고유 아이디
  • user_id : 소비자 고유 아이디
  • product_id  : 제품 고유 아이디
  • eval_set : 소비자 군 ( prior / train / test )
  • order_number : 주문번호  
  • order_dow : 요일
  • order_hour_of_day : 일일 중 시간  
  • days_since_prior_order : 
  • add_to_cart_order : 장바구니 담은 제품 개수
  • reordered : 재주문 제품 개수 
  • product_name : 제품 이름 
  • aisle_id : 제품 상세카테고리 고유 아이디
  • department_id : 제품 카테고리 고유 아이디
  • aisle :  제품 상세카테고리
  • department : 제품 카테고리

# EDA

Step1 . 라이브러리 / DataSet 불러오기

 

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt
import seaborn as sns
color = sns.color_palette()

%matplotlib inline

pd.options.mode.chained_assignment = None
# matplotlib 한글 폰트 깨짐 방지

from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name) ​
order_products_train_df = pd.read_csv(r'파일저장 경로\order_products__train.csv')
order_products_prior_df = pd.read_csv(r'파일저장 경로\order_products__prior.csv')
orders_df = pd.read_csv(r'파일저장 경로\orders.csv')
products_df = pd.read_csv(r'파일저장 경로\products.csv')
aisles_df = pd.read_csv(r'파일저장 경로\aisles.csv')
departments_df = pd.read_csv(r'파일저장 경로\departments.csv')

 

Step 2 . EDA

 

  • 각 그룹군 그래프로 나타내기
cnt_srs = orders_df.eval_set.value_counts()
plt.figure(figsize=(12,8)) 
sns.barplot(cnt_srs.index, cnt_srs.values, alpha=0.8, color=color[1]) 
plt.ylabel('총 갯수', fontsize=12) 
plt.xlabel('고객 Type 군', fontsize=12) 
plt.title('각 고객군의 수', fontsize=15) 
plt.show()

def get_unique_count(x):
    return len(np.unique(x))

cnt_srs = orders_df.groupby("eval_set")["user_id"].aggregate(get_unique_count)
cnt_srs

 

  • 각 고객별로 가장 많이 주문한 개수를 그래프로 나타내기
cnt_srs = orders_df.groupby("user_id")["order_number"].aggregate(np.max).reset_index()
cnt_srs = cnt_srs.order_number.value_counts()

plt.figure(figsize=(12,8))
sns.barplot(cnt_srs.index, cnt_srs.values, alpha=0.8, color=color[2])
plt.ylabel('구매 발생 횟수', fontsize=12)
plt.xlabel('Maximum 구매 갯수', fontsize=12)
plt.xticks(rotation='vertical')
plt.show()

 

  • 요일별 구매량 추이 확인
plt.figure(figsize=(20,15))
sns.countplot(x="order_dow", data=orders_df, color=color[0]) # order_dow 는 요일을 의미
plt.xlabel('요일', fontsize=12)
plt.ylabel('구매량', fontsize=12)
plt.xticks([2,3,4,5,6,0,1],['월','화','수','목','금','토','일'])
plt.title("요일별 구매량", fontsize=15)
plt.show()

  • 각 시간대별로 구매개수 그래프로 나타내기
orders_df

                        order_id      user_id        eval_set        order_number    order_dow  order_hour_of_day  days_since_prior_order  

0 2539329 1 prior 1 2 8 NaN
1 2398795 1 prior 2 3 7 15.0
2 473747 1 prior 3 3 12 21.0
3 2254736 1 prior 4 4 7 29.0
4 431534 1 prior 5 4 15 28.0
... ... ... ... ... ... ... ...
3421078 2266710 206209 prior 10 5 18 29.0
3421079 1854736 206209 prior 11 4 10 30.0
3421080 626363 206209 prior 12 1 12 18.0
3421081 2977660 206209 prior 13 1 12 7.0
3421082 272231 206209 train 14 6 14 30.0
plt.figure(figsize=(12,8))
sns.countplot(x="order_hour_of_day", data=orders_df, color=color[1])
plt.ylabel('구매량', fontsize=12)
plt.xlabel('하루 중 시간', fontsize=12)
plt.title("하루 중 구매량", fontsize=15)
plt.show()

 

  • 요일별/ 시간대별 구매 추이 확인
grouped_df = orders_df.groupby(['order_dow','order_hour_of_day'])['order_number'].aggregate('count').reset_index()
grouped_df = grouped_df.pivot('order_dow','order_hour_of_day','order_number')

plt.figure(figsize = (18,9))
sns.heatmap(grouped_df)
plt.title('요일별/시간별 구매량')
plt.yticks([2,3,4,5,6,0,1],['월','화','수','목','금','토','일'])
plt.show()

 

  • prior 고객군 대상 분석
plt.figure(figsize=(12,8))
sns.countplot(x='days_since_prior_order', data= orders_df, color=color[3])
plt.ylabel('판매량',fontsize=12)
plt.xlabel('prior 주문 일수', fontsize = 12)
plt.xticks(rotation='vertical')
plt.title('prior 구매의 일별 빈도분포')

#판매량이 가장 높은 요일은 30일, 낮은 요일은 25일 이다. 1일~7일까지는 증가추세이고, 8일~29일까지는 감소추세이다.

# prior 고객군의 재주문율
order_products_prior_df.reordered.sum() / order_products_prior_df.shape[0]

0.5896974667922161

# train 고객군의 재주문율
order_products_train_df.reordered.sum() / order_products_train_df.shape[0]

0.5985944127509629

# prior 고객들 중 재주문한 경험이 있을 경우 1, 없을 경우 0 으로 데이터를 정제한다.

grouped_df = order_products_prior_df.groupby('order_id')['reordered'].aggregate('sum').reset_index()
grouped_df['reordered'].ix[grouped_df['reordered'] > 1] = 1
grouped_df.reordered.value_counts() / grouped_df.shape[0]

1 0.879151

0 0.120849 

 

해석 ) prior 고객들 중 재주문한 경험이 있는 경우는 약 88% prior 고객들 중 재주문한 경험이 없는 경우는 약 12%

 

# train 고객들 중 재주문한 경험이 있을 경우 1, 없을 경우 0 으로 데이터를 정제한다.

grouped_df = order_products_train_df.groupby('order_id')['reordered'].aggregate('sum').reset_index()
grouped_df['reordered'].ix[grouped_df['reordered'] > 1] = 1
grouped_df.reordered.value_counts() / grouped_df.shape[0]

 

1 0.93444

0 0.06556

 

해석 ) prior 고객들 중 재주문한 경험이 있는 경우는 약 93% prior 고객들 중 재주문한 경험이 없는 경우는 약 7%

# grouped_df 은 구매자별로 add_to_cart_order 에 담았던 제품의 총 개수

grouped_df = order_products_train_df.groupby('order_id')['add_to_cart_order'].aggregate('max').reset_index()

# cnt_srs 는 add_to_cart_order 에 담긴 각각의 값이 나온 개수
cnt_srs = grouped_df['add_to_cart_order'].value_counts()

 

plt.figure(figsize=(12,8))
sns.barplot(cnt_srs.index, cnt_srs.values, alpha=0.8)
plt.ylabel('발생 건수', fontsize = 12)
plt.xlabel('add_to_cart_order 에 담긴 제품의 개수', fontsize = 12)
plt.xticks(rotation='vertical')
plt.show()

order_products_prior_df.head()

                                      order_id                    product_id              add_to_cart_order     reordered

0 2 33120 1 1
1 2 28985 2 1
2 2 9327 3 0
3 2 45918 4 1
4 2 30035 5 0
order_products_prior_df.tail()

                                           order_id                   product_id        add_to_cart_order        reordered

32434484 3421083 39678 6 1
32434485 3421083 11352 7 0
32434486 3421083 4600 8 0
32434487 3421083 24852 9 1
32434488 3421083 5020 10 1
order_products_prior_df = pd.merge(order_products_prior_df, products_df, on= "product_id" , how="left")
order_products_prior_df = pd.merge(order_products_prior_df, aisles_df, on='aisle_id', how='left')
order_products_prior_df = pd.merge(order_products_prior_df, departments_df, on='department_id', how='left')
order_products_prior_df.head()

                  order_id    product_id   add_to_cart_order reordered  product_name  aisle_id  department_id  aisle  department

0 2 33120 1 1 Organic Egg Whites 86 16 eggs dairy eggs
1 2 28985 2 1 Michigan Organic Kale 83 4 fresh vegetables produce
2 2 9327 3 0 Garlic Powder 104 13 spices seasonings pantry
3 2 45918 4 1 Coconut Butter 19 13 oils vinegars pantry
4 2 30035 5 0 Natural Sweetener 17 13 baking ingredients pantry

 

  • 판매개수 높은 제품 확인
cnt_srs = order_products_prior_df['product_name'].value_counts().sort_values(ascending=False).reset_index().head(20)
cnt_srs.columns = ['제품 이름','판매 갯수']
cnt_srs

# organic 제품이 대다수의 상위권을 차지한 것을 알 수 있다

                                                          제품 이름                                  판매 갯수

0 Banana 472565
1 Bag of Organic Bananas 379450
2 Organic Strawberries 264683
3 Organic Baby Spinach 241921
4 Organic Hass Avocado 213584
5 Organic Avocado 176815
6 Large Lemon 152657
7 Strawberries 142951
8 Limes 140627
9 Organic Whole Milk 137905
10 Organic Raspberries 137057
11 Organic Yellow Onion 113426
12 Organic Garlic 109778
13 Organic Zucchini 104823
14 Organic Blueberries 100060
15 Cucumber Kirby 97315
16 Organic Fuji Apple 89632
17 Organic Lemon 87746
18 Apple Honeycrisp Organic 85020
19 Organic Grape Tomatoes 84255

 

  • 제품의 각 상세 카테고리별 판매량
cnt_srs = order_products_prior_df['aisle'].value_counts().head(20)
plt.figure(figsize=(12,8))
sns.barplot(cnt_srs.index, cnt_srs)
plt.xlabel('제품 상세 카테고리' , fontsize= 15)
plt.ylabel('구매량', fontsize= 15)
plt.xticks(fontsize = 15, rotation='vertical')
plt.show()

plt.figure(figsize=(10,10))
temp_series = order_products_prior_df['department'].value_counts()
labels = np.array(temp_series.index)
sizes = np.array((temp_series / temp_series.sum())* 100)
plt.pie(sizes, labels=labels, autopct='%1.1f%%' , startangle= 200)
plt.title('제품 카테고리 분포', fontsize= 15)
plt.show()

# produce(29.2%) 제품군 > dairy eggs(16.7%) > snacks(8.9%) > beverages(8.3%)제품군이 가장 많이 판매됬음을 알 수 있다

 

  • 제품 카테고리 별 재주문 현황

 

grouped_df = order_products_prior_df.groupby(['department'])['reordered'].aggregate('mean').reset_index()

plt.figure(figsize=(12,8))
sns.pointplot(grouped_df['department'].values,grouped_df['reordered'].values, alpha = 0.8 , color= color[2])
plt.xlabel('제품 카테고리', fontsize = 18)
plt.ylabel('재주문율' , fontsize= 18)
plt.xticks(rotation = 'vertical', fontsize = 15)
plt.yticks(fontsize = 15)
plt.title('제품 카테고리의 재주문율 ')
plt.show()

# dairy eggs 제품군의 재주문율이 가장 높다 personal care 제품군의 재주문율이 가장 낮다.

grouped_df = order_products_prior_df.groupby(['department_id', 'aisle'])['reordered'].aggregate('mean').reset_index()

fig, ax = plt.subplots(figsize=(15,20))
ax.scatter(grouped_df.reordered.values, grouped_df.department_id.values)

for i, txt in enumerate(grouped_df.aisle.values):
    ax.annotate(txt, (grouped_df.reordered.values[i],grouped_df.department_id.values[i]), rotation=45 , ha='center',va='center', color='green')

plt.xlabel('재주문율',fontsize = 20)
plt.ylabel('제품 카테고리 id',fontsize = 20)
plt.title('다른 제품 카테고리의 재주문율' , fontsize =20)
plt.show()

  • 장바구니에 추가와 재주문율의 상관관계에 대해 알아보기
order_products_prior_df['add_to_cart_order_mod'] = order_products_prior_df['add_to_cart_order'].copy()
order_products_prior_df['add_to_cart_order_mod'].ix[order_products_prior_df['add_to_cart_order_mod'] > 70] = 70
grouped_df = order_products_prior_df.groupby(['add_to_cart_order_mod'])['reordered'].aggregate('mean').reset_index()

plt.figure(figsize=(12,8))
sns.pointplot(grouped_df['add_to_cart_order_mod'].values, grouped_df['reordered'].values, alpha=0.8, color=color[2])
plt.xlabel('장바구니에 추가' , fontsize = 15)
plt.ylabel('재주문율', fontsize= 15)
plt.title('장바구니 추가와 재주문율 관계', fontsize=15)
plt.xticks(rotation= 'vertical')
plt.show()


# 제일 처음 장바구니에 추가된 제품이 나중에 추가된 제품에 비해 다시 주문될 가능성이 높다.
#이를 통해, 소비자들이 자주 사용하는 제품 먼저 주문 후 새로운 제품을 찾는 경향을 가지고 있음을 알 수 있다.

 

 

  • 요일별 재주문 추이 
order_products_train_df = pd.merge(order_products_train_df,orders_df,on='order_id',how='left')
grouped_df = order_products_train_df.groupby(['order_dow'])['reordered'].aggregate('mean').reset_index()

plt.figure(figsize=(12,8))
sns.barplot(grouped_df['order_dow'].values, grouped_df['reordered'].values,alpha=0.8, color = color[3])
plt.xlabel('요일', fontsize = 15)
plt.ylabel('재주문율',fontsize  =15)
plt.xticks(rotation='vertical')
plt.ylim(0.5,0.7)
plt.show()

 

  • 일일 시간대별 재주문율 추이
grouped_df= order_products_train_df.groupby('order_hour_of_day')['reordered'].aggregate('mean').reset_index()
plt.figure(figsize=(12,8))
sns.barplot(grouped_df['order_hour_of_day'].values, grouped_df['reordered'].values, alpha=0.8,color=color[4])
plt.xlabel('하루 중 시간', fontsize =15)
plt.ylabel('재주문율', fontsize =15)
plt.title('일별 재주문율', fontsize = 15)
plt.ylim(0.5,0.7)
plt.show()

 

  • 요일별/ 일일 시간대별 재주문율 현황확인
order_products_train_df

       order_id  product_id add_to_cart_order reordered  user_id eval_set  order_number  order_dow  order_hour_of_day  days_since_prior_order

0 1 49302 1 1 112108 train 4 4 10 9.0
1 1 11109 2 1 112108 train 4 4 10 9.0
2 1 10246 3 0 112108 train 4 4 10 9.0
3 1 49683 4 0 112108 train 4 4 10 9.0
4 1 43633 5 1 112108 train 4 4 10 9.0
... ... ... ... ... ... ... ... ... ... ...
1384612 3421063 14233 3 1 169679 train 30 0 10 4.0
1384613 3421063 35548 4 1 169679 train 30 0 10 4.0
1384614 3421070 35951 1 1 139822 train 15 6 10 8.0
1384615 3421070 16953 2 1 139822 train 15 6 10 8.0
1384616 3421070 4724 3 1 139822 train 15 6 10 8.0
grouped_df = order_products_train_df.groupby(['order_dow', 'order_hour_of_day'])['reordered'].aggregate('mean').reset_index()
grouped_df = grouped_df.pivot(values = 'reordered', columns= 'order_hour_of_day',index='order_dow')
plt.figure(figsize=(12,8))
sns.heatmap(grouped_df)
plt.title('요일별 재주문율 vs 일일별 재주문율 ')
plt.xlabel('하루 중 구매시간')
plt.ylabel('요일')
plt.yticks([2,3,4,5,6,0,1],['월','화','수','목','금','토','일'])
plt.show()


# 결과

 

prior 고객군 insight

  • prior 고객군의 최대 구매시간은 토요일 오후 1~3시 와 일요일 10시이다.
train 고객군 insight

  • train 고객군의 최대 구매시간은 수요일과 토요일 아침 6~7시간대이다.
  • train 고객군은 하루 중 6,7,8시에 재주문율이 가장 높고 9시 ~12시까지 주문율이 감소하는 경향을 보인다.

종합 insight

  • 시간별 판매량 : 아침 9시에 판매량이 가장 높고, 새벽 3시에 판매량이 가장 낮다.아침 9시~ 17시까지이 판매량의 70% 를 차지한다.
  • 요일별 판매량 : 판매량이 가장 높은 요일은 30일, 낮은 요일은 25일 이다. 1일~7일까지는 증가추세이고, 8일~29일까지는 감소추세이다.
  • 제품군에 따른 주문율 :produce(29.2%) 제품군 > dairy eggs(16.7%) > snacks(8.9%) > beverages(8.3%)제품군이 가장 많이 판매됬음을 알 수 있다
  • 상세 제품군에 따른 주문율 : organic 제품이 대다수의 판매 상위권을 차지한 것을 알 수 있다
  • 상세 제품군에 따른 재주문율 : dairy eggs 제품군의 재주문율이 가장 높다 personal care 제품군의 재주문율이 가장 낮다.
  • 장바구니와 관련된 구매성향 : 제일 처음 장바구니에 추가된 제품이 나중에 추가된 제품에 비해 다시 주문될 가능성이 높다. 이를 통해, 소비자들이 자주 사용하는 제품 먼저 주문 후 새로운 제품을 찾는 경향을 가지고 있음을 알 수 있다.

# 필사 참고 URL

 

https://www.kaggle.com/sudalairajkumar/simple-exploration-notebook-instacart

 

 

Simple Exploration Notebook - Instacart

Explore and run machine learning code with Kaggle Notebooks | Using data from Instacart Market Basket Analysis

www.kaggle.com

반응형

'Kaggle' 카테고리의 다른 글

[ Kaggle ] 초간단 Kaggle 에서 API로 데이터셋 다운받기  (0) 2020.03.30

1. CMD 창에서 kaggle 다운받기

$ pip install kaggle

 

2. Kaggle > My Count > API 에서 Create New API Token 을 누른 후 C:\Users\<Username>\.kaggle 에 다운받기

 

api token 다운받을 경로

3. 호출하려는 API 주소를 복사한다. 

 

예를들어 Instacart Market Basket Analysis 의 DataSet 을 다운로드하려고 한다.

맨 아래로 스크롤을 내려 Data API 주소를 클릭해 복사한다

 

4. 복사한 API 주소를 CMD 창에 붙여넣는다

5. 다운로드 완료된 것을 확인한다

 

 

 

참고 링크

https://github.com/Kaggle/kaggle-api

 

Kaggle/kaggle-api

Official Kaggle API. Contribute to Kaggle/kaggle-api development by creating an account on GitHub.

github.com

 

반응형

제 1장 정보 요구 사항 개요

제 1절 정보 요구 사항

  • 사용자의 정보 요구 사항이란 사용자가 일반적으로 수행하는 과정에서 정보시스템 개발의 필요성에 의해 수집되고 요약된 요청 사항이다
  • 정보 요구 사항은 요구 사항 수집, 요구 사항 분석 및 정의, 요구 사항 상세화, 요구 사항 검증화 단계로 진행된다.
  • 사용장의 정보 요구 사항을 유형별로 분류하면 인터페이스 요건,기능 개선 요건, 성능 개선 요건, 보안 개선 요건의 4가지로 분류할 수 있다

 

제 2절 정보 요구 사항 관리

  • 정보 요구 사항은 통합적인 관점에서 관리되어야 하며, 데이터나 애플리케이션 한쪽만 반영된 요구 사항 관리는 적절하지 못하다.
  • 정보 요구 사항을 관리하기 위한 프로세스는 6개의 주요 모듈로 이루어져 있다.( 요구 사항 발송,요구 사항 수렴, 요구 사항 검토, 영향도 분석, 공식화 , 반영 작업 계획 수립)
  • 사용자 정보 요구 사항을 반영하기 위해 사용자는 요청 사항 중 미결 사항이 있는 경우 담당자의 확인을 통해 확정해야 한다.
  • 데이터아키테처 전문가는 전체적인 표준 및 애플리케이션에 대한 영향도 분석을 한다.

 

 

제 2장 정보 요구 사항 조사

 

제 1절 정보 요구 사항 수집

  • 사용자 정보 요구 사항을 좀 더 명확하게 정의하고 기업과 업종에 대한 이해를 하기 위해 관련된 문서를 수집한다
  • 수집된 문서는 별동의 양식으로 정리하여 재차 요구하지 않도록 한다
  • 사용자와의 면담을 위해 필요한 진행 절차는 계획 및 준비, 면담 수행, 면담 결과 분석, 분석 결과 피드백으로 진행한다.
  • 현업 부서 및 전산 부서를 대상으로 다르게 면담 요지를 구성한다.
  • 현업 부서 면담 내용에 포함될 주요 사항으로는 면담 취지, 목적, 수행 방법, 향후 수행 방향에 대한 의견, 현재 사용하고 있는 정보시스템에 대한 개인적인 의견 등을 포함한다.
  • 전산 부서 면담 내용에 포함될 주요 사항으로는 시스템 분야 및 활용 현황,현재 시스템 운영 조직 및 문제점, 전체 애플리케이션 현황 및 유지 보수 , 진행중인 개발 프로젝트 등을 포함한다.
  • 면담 대상자는 업무에 대한 명확한 이해를 가능하게 해 줄 수 있는 사람으로 선정해야 한다. 면담 일정과 면담 내용은 사전에 공지하여 준비한다.
  • 사용자 면담 결과를 분석한 결과 중 부서 간 이해 관계에 따라 이견이 발생할 수 있는 사안은 반드시 담당자들과 사전 조정 작업이 필요하다.
  • 정보의 고유가 필요한 경우나 단순한 토론 이상이 요구되는 경우에 워크숍을 활용한다. 서로 관련있는 부서들은 반드시 포함하여 실시한다.
  • 사용자가 처리하고 있는 업무 기능들을 일목요연하게 정리하고자 한다면 현행 업무 조사서를 활용한다.
  • 현행 시스템에서 사용되고 관리되는 프로그램 목록이나 화면 목록도 정보 요구 사항의 중요한 수단이다.
  • 테이블 목록이나 각각의 레이아웃과 정의서를 이용하여 현행 데이터의 문제점과 사용자 정보 요구 사항을 도출할 수 있기 때문에 수집해야 할 자료 중 하나이다.

 

제 2절 정보 요구 사항 정리

  • 정보 요구 수집 유형별로 요구 사항을 정리한다
  • 사용자 면담 내용에 대해서는 정리 후 오류가 있는지를 반드시 면담자에게 확인하다.
  • 워크숍에서 발행한 이슈 사항이나 특이 사항인 경우에 지속적인 관심을 가지고 해결할 수 있도록 별도의 리스트를 작성한다.
  • 사용자로부터 접수된 정보 요구 사항에 대해 우선순위 분석을 실시한다.
  • 정보 우선순위 분석을 위해 화폐가치 산출 방법과 상대적 중요도 산정 방법을 이용한다.

 

제 3절 정보 요구 사항 통합

  • 1차적으로 정보 요구 사항을 동일한 부서 내 중복 요건이 있는지 확인한다.
  • 동일 부서 내 정보 요구 사항을 정리한 후 부서 간 정보 요구 사항으로 검토한다.
  • 동일한 정보 요구 사항은 부서 간 협의를 통해 하나로 통합하고 별동의 번호를 부여하여 관리한다.

 

 

제 3장 정보 요구 사항 분석

 

제 1절 분석 대상 정의

  • 사용장의 정보 요구 사항에 대해 수집한 기초 자료를 바탕으로 현행 업무 및 현행 시스템에 대한 분석 대상을 정의함으로써 사용자의 정보 요구 사항을 구체화하고, 상세화하는 작업의 효율성을 이루고자 한다.
  • 현행 업무에 대한 분석 대상은 현행 업무 흐름도, 업무 설명서, 업무 분장 기술서 등이다.
  • 현행 시스템의 분석 대상을 선정하기 위해서는 업무 영역/현행 시스템 매트릭스를 작성하여 관련 있는 현행 시스템을 정의하고, 정의된 현행 시스템에 대한 관련 자료를 분석 대상으로 정의한다.

 

제 2절 전사아키텍처 관리 시스템

  • 정보 요구 사항에 대한 분석 및 상세화 작업으로 프로세스 관점과 객체지향 관점으로 구분할 수 있다.
  • 프로세스 관점으로는 조직의 업무 프로세스를 기본 프로세스까지 분해하는 과정을 통해 기본 프로세스에서 필요로 하는 정보 항목에 대해 정리한 후 최종 정보 항목을 도출하는 과정이다.
  • 객체지향 관점에서는 사용장의 정보 요구 사항에 대한 사건 흐름을 상세하게 기술한다. 대안 흐름, 예외 사항 등 비기능적인 정보 요구 사항도 기술한다.
  • 최종적으로 유즈케이스 다이어그램 및 유즈케이스 정의서를 통해 해당 클래스 엔터티를 도출하고 클래스 간의 관계 및 클래스의 특성을 나타내는 속성을 도출함으로써 최종적인 정보 요구 사항의 상세화 작업이 종료된다.

 

제 3절 정보 요구 사항 확인

  • 최종적으로 작성된 산출물에 대해서 정보 요구 사항을 제시한 담장자와 세부 재검토를 통하여 누락 사항 및 보완 사항을 도출하기 위한 계획을 수립하고, 사전에 계획된 재검토 기준에 맞게 재검토를 실시한다.
  • 재검토 결과에서 도출된 추가 및 보완 사항이 존재하는 경우에 내용을 문서로 정리한 후 해당 산출에 추가 반영 여부를 확인하고 미반영 시 미반영 사유의 타당성을 검토한다.
  • 기술한 재검토 기준에는 완전성,정확성,일관성,안정성 측면 모두를 고려하여 체크 리스트르 작성하여 실시한다.

 

 

참고자료

' 데이터아키텍처 전문가 가이드. 한국데이터베이스진흥원 2010 p.196'

' 데이터아키텍처 전문가 가이드. 한국데이터베이스진흥원 2010 p.214'

' 데이터아키텍처 전문가 가이드. 한국데이터베이스진흥원 2010 p.231'

 

제 2절 정보 요구 사항 분석.pdf
0.13MB

반응형

현재 데이터아키텍처 전문가 가이드 2013 Edition 이 전국 품절인 상태입니다. (무슨 생각이신지...)

 

 

저도 멘붕을 겪은 입장으로서, 책없이 공부할 수 있는 방법을 찾아냈습니다. 

 

 

 

첫번째, http://www.dbguide.net/index.db  로 이동합니다.

 

두번째, 사이트의 상단바 > D가이드 > DA 클릭

 

 

세번째, 데이터아키텍처 준전문가 시험범위에 해당되는 범위만 프린트하

 

해당 페이지에 나오는 내용들은 데이터아키텍처 전문가 가이드에 나와있는 내용과 100% 일치하므로 번거롭지만 시험범위를 확인 후 포함되는 내용만 프린트하여 보는것을 권장드립니다.

 

 

반응형

제 1장 전사아키텍처 개요

제 1절 전사아키텍처 정의

  • 전사 아키텍처는 기업의 경영 목표를 지원하기 위해 IT 인프라가 어떻게 구성되고 작동되어야 하는가를 체계화하는 것으로, 복잡한 기업의 모습을 다양한 관점에서 표현하여 정보를 구축하고 활용하는 것이다. 전사 아키텍처의 목적은 IT 투자 대비 효과를 최대화하고, 기업의 목적을 가장 잘 달성할 수 있는 방식으로 IT 인프라를 구성하는 것이다.
  • 전사아키텍처는 최근 세계적으로 정부 기관과 민간 기업의 IT 혁신을 위한 주된 관심사이다.데이터아키텍처 전문가는 기업이 필요로 하는 데이터 아키텍처를 정의하기 위해서 이러한 전사아키텍처의 개념을 이해하고 활용할 수 있어야 한다.

제 2절 전사아키텍처 프레임워크

  • 전사 아키텍처 프레임웤는 전사아키텍처를 어떻게 표현하고 운영할 것인가에 대한 전체적인 사고의 틀로서, 전사아키텍처 프로젝트 수행 시 이해 당사자 간의 의사소통 수단이 된다.
  • 전사 아키텍처 프레임워크에는 많은 참조 모델이 있다. 이책에서는 전사 아키텍처 방향과 원칙,아키텍처 매트릭스를 정의하는 전사아키텍처 정책 영역,전사아키텍처의 구체적인 모습을 표현하는 형행 및 목표 아키텍처,이행 계획을 포함하는 아키텍처 정보영역, 구축된 전사아키텍처를 어떻게 관리하고 활용할 것인가를 정의하는 전사아키텍처 관리 영역으로 구분하였다. 아키텍처 영역은 흔히 비즈니스,데이터,애플리케이션,기술아키텍처 등으로 구분된다.

제 3절 전사아키텍처 참조모델

  • 전사 아키텍처 참조 모델에는 국방과 공공 참조 모델이 활성화되어 있는데, 업무 참조 모델, 데이터 참조 모델,서비스 참조 모델, 기술 참조 모델, 성과 참조 모델 등으로 구성된다.
  • 전사 아키텍처 수립 담당자는 기업의 아키텍처를 정의할 때 상위 기관 또는 산업별 전사아키텍처 참조 모델을 참조해야 상호운용성을 촉진할 수 있고, 중복을 배제하고 재사용을 증대시킬 수 있는 아키텍처를 정의할 수 있다.

제 4절 전사아키텍처 프로세스

  • 전사 아키텍처 프로세스는 전사아키텍처를 구축하고 관리하는 전체 절차에 관한 것으로 작업의 단계와 공정,작업 내용 등을 포함한다. 전사 아키텍처 프로세스는 일반적인 방법론이 있지만, 기업의 전사 아키텍처 도입 목적에 맞게 프로세스를 조정할 수 있다.
  • 전사아키텍처 프로세스는 전사아키텍처 비전 수립,전사 아키텍처 구축, 전사아키텍처 관리,전사아키텍처 활용 단계로 구분된다. 전사아키텍처 비전 수립에서는 기업의 전사아키텍처 환경을 분석하여 기업이 추구해야 할 전사아키텍처 방향을 수립한다.전사 아키텍처 관리에서는 전사아키텍처 정보를 관리하고 활요하기 위한 체계와 시스템을 구축하며,전사아키텍처 활용에서 목표 아키텍처 달성을 위한 이행 계획을 수립하고 일상적인 IT 관리 프로세스에 전사아키텍처 정보를 활용한다.

제 2장 전사아키텍처 구축

제 1절 전사아키텍처 방향 수립

  • 전사 아키텍처는 방향 수립은 전사아키텍처를 구축하는 목적과 목표 이미지를 정립하는 것으로, 다수의 이해 관계자가 이를 공유함으로써 전사아키텍처 추진 과정에서 발생할 수 있는 의견 충돌을 사전에 방지할 수 있다.
  • 전사아키텍처 방향 수립은 기업의 환경 분석을 바탕으로 전사아키텍처의 목적과 범위를 정하고 궁극적으로 달성하고자 하는 비전을 수립하는 것이다. 그리고 이를 달성하기 위한 기본 원칙과 아키텍처별 원칙을 정의하는 것도 포함한다.

제 2절 전사아키텍처 정보 구성 정의

  • 전사아키텍처 정보는 기업을 잘 이해하기 위해 필요한 업무와 정보기술에 대한 정보로서 활용할 만한 가치가 있고 관리가 용이한 정보라고 할 수 있다.아키텍처 매트릭스는 기업이 전사아키텍처 정보로 관리할 산출물의 수준을 정의한 틀이다.
  • 아키텍처 매트릭스는 일반적으로 의사결정 유형(관점) 과 아키텍처 정보 유형() 의 두 축을 기준으로 2차원의 매트릭스 형태를 띠고 있다. 두 축이 만나는 각 셀에 기업이 관리하고자 하는 전사 아키텍처 산출물이 정의된다.
  • 의사결정 유형은 조직의 의사결정 계층을 구분한 것으로, 정보의 상세화 정도를 나타낸다. 아키텍처 정보 유형은 특성이 비슷한 아키텍처 정보를 그룹화한 것으로 기업의 모든 전사아키텍처 정보를 도메인으로 구분한 것이다.

 

제 3절 전사아키텍처 정보 구축

  • 아키텍처 정보를 구축하기 위해서는 우선 기존에 작성된 자료를 수집해야 한다.수집해야 할 자료는 정의된 아키텍처 매트릭스에 따라 다르다. 전사아키텍처 정보를 구축하는 방법에는 상향식과 하향식이 있으며, 장단점을 파악하여 기업의 상황에 맞는 방식을 선택하는 것이 바람직하다.
  • 현행 아키텍처 정보의 구축은 현재의 업무나 정보시스템에 대하여 기존의 자료를 분석하여 전사 아키텍처 정보를 구축하는 것을 말한다.일반적으로 상위 수준의 업무 기능과 시스템에 대한 분류체계를 정의한 후 나머지 하위의 정보 구축은 병렬적으로 수행한다.
  • 목표 아키텍처 구축은 현행 아키텍처에 대한 문제점과 개선 사항을 도출하고, 이를 목표 아키텍처에 반영하는 방식으로 진행한다.일반적으로 비즈니스아키텍처를 먼저 정의하고, 이를 효율적으로 지원하는 정보기술아키텍처를 정의한다. 목표 아키텍처의 구축 범위는 전사아키텍처 구축의 목적에 따라 다르지만 초기 전사아키텍처 수립 시 현행 아키텍처와는 달리 개념적 수준까지 정희하고, 개념적 수준 이항의 산출물 작업은 실제 시스템 구축 단계에서 수행하는 것이 일반적이다.

 

 

제 3장 전사아키텍처 관리 및 활용

제 1절 전사아키텍처 관리 체계

  • 전사아키텍처를 도입할 때 아키텍처 정보를 정확하게 구축하는 것도 중요하지만, 더 중요한 것은 정보를 관리하고 활용할 수 있는 체계를 정립하는 것이다. 전사잌텍처 관리 체계는 전사아키텍처를 유지 관리하는 조직과 프로세스 측면의 기반을 구축하는 것을 포함한다.
  • 전사아키텍처 관리 조직 체계는 관리를 위해 필요한 직무와 직무 간의 관계,업무 분장을 정립하는 것이다. 전사아키텍처 관리 프로세스 체계는 전사아키텍처를 수립하고 관리하기 위한 활동을 정의하는 것이다. 전사아키텍처 인력 관리 체계는 전사아키텍처 관리를 담당하는 직무별 역량을 정의하고 이를 확보하기 위한 방안을 정의하는 것이다
  • 전사아키텍처 관리 체계 정착을 위해서는 장기적인 접근이 필요하다. 전사아키텍처 수립 효과는 IT 관련 조직만의 노력으로 달성될 수 없으며 전사적인 추진 체계가 구축되어야한다.

 

제 2절 전사아키텍처 관리 시스템

  • 전사아키텍처 관리 시스템은 전사아키텍처 정보를 구축,관리, 활용하는 모든 업무 프로세스를 효과적으로 지원하기 위한 시스템을 말한다.
  • 전사아키텍처 관리시스템은 전사아키텍처 정보를 생산하는 모델링 도구 영역, 정보를 저장 관리하는 전산아키텍처 리포지토리, 정보를 활용하는 전사아키텍처 포털, 전사아키텍처 정보 활용 영역으로 구분할 수 있다.

 

제 3절 전사아키텍처 활용

  • 전사아키텍처가 활성화되기 위해서는 실제 IT 관리 업무에 실질적인 도움을 줄 수 있어야 한다. 이를 위해서는 구축된 전사아키텍처 정보를 바탕으로 IT 투자에 대한 의사결정이 이루어지고, 전사의 모든IT 자원의 관리가 이를 기준으로 이루어질 수 있도록 전사아키텍처 활용을 활성화하려는 적극적인 노력이 필요한다.
  • 전사아키텍처의 활용 영역은 크게 2가지로 구분할 수 있다. 전사아키텍처 수립 후 목표 아키텍처를 달성하기 위한 이행 계획을 수립하고 그에 따라서 프로젝트를 추진하는 기준으로 삼는 것과 전사 아키텍처 정보를 활용하여 일상의 IT 업무를 지원하는 것이다.
  • 데이터아키텍처 전문가는 기업에서 정의한 전사아키텍처 정보와 항상 연계하여 생각하고, 전사 아키텍처에서 정의된 원칙을 준수하고 전사아키텍처를 기준으로 데이터아키텍처를 구체화하고 관리할 수 있어야한다. 또한 데이터 부문에서 발생하는 변경 사항이 전사아키텍처 정보에 잘 반영되도록 해야한다.

 

참고자료

' 데이터아키텍처 전문가 가이드. 한국데이터베이스진흥원 2010 p.57'

' 데이터아키텍처 전문가 가이드. 한국데이터베이스진흥원 2010 p.79'

' 데이터아키텍처 전문가 가이드. 한국데이터베이스진흥원 2010 p.99'

 

 

ADsP 1절 전사아키텍처 이해 요약 pdf.pdf
0.15MB

 

반응형

[ 사용 예시 ]

상품리스트에서 관리자 번호로 저장해놓았을 경우 해당 관리자 번호의 이름을 가져와 사용자에게 보여주고 싶을 때 구현한다.

 

 

[ 구현 방법 ]

1.   Helper 폴더 아래 -> ManagerNameConverter 클래스 생성

 

2.     IValueConverter 상속 및 인터페이스 구현하기

 

- IValueConverter 를 상속 후 빨간 밑줄이 쳐졌을 경우 마우스를 갖다대고 , using System.Windows.Data; 누르기

- 다시 한번 빨간 밑줄 쳐졌을 경우 마우스를 갖다대고 , 인터페이스 구현 누르기

- 아래와 같이 기본 인터페이스 구현됬는지 확인하기

3. 상품에 저장한 관리자 번호를 받아온다.

4.     받아 온 관리자 번호를 관리자 이름으로 변환시킨다

5.   상품 리스트 보여주는 UserControl (혹은 window/page...)의 xaml 에서 바인딩 시켜준다.

-  UserControl에 Resource 추가하기

- 관리자 출력하는 datagrid에 바인딩시키기

<DataGridTextColumn Header="관리자" Width="1.5*" Binding="{Binding ManagerNum, Converter={StaticResource ManagerNameConver}}" />

반응형

+ Recent posts