기출문제

FDA_2급_7회_확정답안.pdf
1.11MB


예제파일

분개장_2급_7회_01.csv
0.49MB
로그.csv
0.07MB


 

기출문제

FDA1급_제8회_확정답안.pdf
1.35MB

 


예제파일

암호 : python

분개장_08회_1급_1.csv


판다스 답안


13번

# 판다스 라이브러리 불러오기
import pandas as pd

# 파일 임포트
df_전체 = pd.read_csv("분개장_08회_1급_1.csv", encoding = 'utf-8', sep = ',')

# 외상매출금 계정코드 리스트 처리 
외상매출금_계정코드 = [10080, 10081,10082,10083,10084,10085]

# 매출 계정코드 리스트 처리
매출_계정코드 = [40001, 40002, 40003, 40004, 40005, 40006, 40007, 40008, 40009,
               40010, 40011, 40012, 40013] 
               
# 외상매출금_차변빈도, 매출액_대변빈도 칼럼 삽입
df_전체['외상매출금_차변'] = [1 if i[0] in 외상매출금_계정코드 and (i[1] > 0 or i[2] < 
0) else 0 for i in zip(df_전체['계정코드'], df_전체['차변금액'], df_전체['대변금액'])]
    
df_전체['매출_대변'] = [1 if i[0] in 매출_계정코드 and (i[1] < 0 or i[2] > 0) else 0 
    for i in zip(df_전체['계정코드'], df_전체['차변금액'], df_전체['대변금액'])]
    
# groupby : 전표번호, 전표일자
gb_전표번호_일자 = df_전체.groupby(['전표일자','전표번호'])
    
# 전표_인덱스 칼럼 삽입
df_전체['전표_인덱스'] = gb_전표번호_일자.ngroup()  

# df_외상매출금매출_총괄 dataframe 만들기 
df_외상매출금매출_총괄 = pd.DataFrame(
 {'외상매출금_차변_빈도': gb_전표번호_일자['외상매출금_차변'].sum(),
 '매출_대변_빈도': gb_전표번호_일자['매출_대변'].sum(),
 '차변합계': gb_전표번호_일자['차변금액'].sum(),
 '대변합계': gb_전표번호_일자['대변금액'].sum()}
 ).reset_index()
 
# 외상매출금_차변_빈도가 0 초과하면서 매출_대변_빈도가 0 초과하는 경우 발췌
df_외상매출금매출_발췌 = df_외상매출금매출_총괄[(df_외상매출금매출_총괄['외상매출금_차변_빈도'] >0) 
  & (df_외상매출금매출_총괄['매출_대변_빈도'] >0)]


# 상세분석 리스트 
상세분석_리스트 = [i for i in df_외상매출금매출_발췌['전표_인덱스']]
print(len(상세분석_리스트))

14번

import pandas as pd

# 파일 임포트
df_전체 = pd.read_csv("분개장_08회_1급_1.csv", encoding = 'utf-8', sep = ',')

# 외상매입금_1 계정과목 발췌
df_외상매입금_1 = df_전체[(df_전체['계정코드'] == 20001) & (df_전체['대변금액'] > 0)]

# groupby : 거래처 
gb_1 = df_외상매입금_1.groupby('거래처코드')

# 칼럼 삽입
df_외상매입금_1['거래처_인덱스'] = gb_1.ngroup()
df_외상매입금_1['대변_Max'] = gb_1['대변금액'].transform(lambda x : x.nlargest(1).max())
df_외상매입금_1['대변_2nd_Max'] = gb_1['대변금액'].transform(lambda x : x.nlargest(2).min())
df_외상매입금_1['대변_RSF'] = [ i[0]/i[1] if i[1] != 0 else -1
                    for i in zip(df_외상매입금_1['대변_Max'], df_외상매입금_1['대변_2nd_Max'])]
 # RSF 요약 테이블 작성
df_RSF = pd.DataFrame(
 {'대변_Max': gb_1['대변_Max'].max(),
 '대변_2nd_Max': gb_1['대변_2nd_Max'].max(),
 '대변_RSF': gb_1['대변_RSF'].max()
 }).reset_index()

df_RSF_2 = df_RSF[df_RSF['대변_RSF'] > 2].reset_index()

print(df_RSF_2)

15번

 

# 판다스 라이브러리 불러오기
import pandas as pd

# 파일 임포트
df_전체 = pd.read_csv("분개장_08회_1급_1.csv", encoding = 'utf-8', sep = ',')

# 계정코드_1 칼럼 삽입
df_전체['계정코드_1'] = [ i[2] if i[0] > 0 and i[1] == 0 
    else(-i[2] if i[0] < 0 and i[1] == 0      
    else(-i[2] if i[0] == 0 and i[1] > 0
    else( i[2] if i[0] == 0 and i[1] < 0
    else( i[2] if i[0] == 0 and i[1] == 0
    else 0))))
    for i in zip(df_전체['차변금액'], df_전체['대변금액'], df_전체['계정코드'])
 ]
 
# groupby : 전표번호, 전표일자
gb_전표번호_일자 = df_전체.groupby(['전표일자','전표번호']) 
 
# 칼럼 삽입
df_전체['계정코드_1_합계_중복제외'] = gb_전표번호_일자['계정코드_1'].transform(lambda x: x.unique().sum())
df_전체['계정코드_1_표준편차_중복제외'] = gb_전표번호_일자['계정코드_1'].transform(lambda x: x.unique().std())
df_전체['계정코드_1_개수_중복제외'] = gb_전표번호_일자['계정코드_1'].transform('nunique')

df_전체['전표_인덱스'] = gb_전표번호_일자.ngroup()

# groupby : 계정코드_1_합계_중복제외,계정코드_1_표준편차_중복제외
gb_계정코드_1_중복제외 = df_전체.groupby(['계정코드_1_합계_중복제외', '계정코드_1_표준편차_중복제외'])

# 인덱스 칼럼 삽입
df_전체['계정코드_1_중복제외_index'] = gb_계정코드_1_중복제외.ngroup()

 # df_분개패턴 summarize 생성
df_분개패턴_1 = pd.DataFrame({
 '계정코드_1_중복제외_레코드': gb_계정코드_1_중복제외['계정코드_1_개수_중복제외'].max(),
 '계정코드_1_전표세트_중복제외_빈도': gb_계정코드_1_중복제외['전표_인덱스'].nunique(),
 '차변합계': gb_계정코드_1_중복제외['차변금액'].sum(),
 '차변Max': gb_계정코드_1_중복제외['차변금액'].max()
 }).reset_index()

# 인덱스 칼럼 삽입
df_분개패턴_1.insert(0, 'S2_index', range(0, len(df_분개패턴_1)))

# 필터링
df_분개패턴_1_발췌 = df_분개패턴_1[df_분개패턴_1['계정코드_1_전표세트_중복제외_빈도'] == 2]

print(len(df_분개패턴_1_발췌))

 

기출문제

FDA2급_제8회_확정답안.pdf
1.22MB


예제파일

분개장_2급_8회_01.csv
1.15MB
선적.csv
0.02MB
수출송장.csv
0.03MB


판다스 코드 답안


39번

# csv 파일 불러오기 : 한글이 깨지는 경우 encoding : cp949로 시도
df = pd.read_csv('분개장_2급_8회_01.csv')

# 전표생성자 ID, 계정과목, 차변금액 조건에 해당하는 경우 칼럼 삽입
df['빈도'] = [1 if (x[0] == 60009 and x[1] == 1215 and x[2] > 100000) else 0 
		for x in zip(df['전표생성자ID'], df['계정코드'], df['차변금액'])]
        
# df_요약 테이블 생성
gb_1 = df.groupby(['전표일자', '전표번호'])

df_요약 = pd.DataFrame(
{'빈도' : gb_1['빈도'].sum()}
).reset_index()  # reset_index()를 해야 인덱스가 리셋된다.

# 필터링
df_발췌 = df_요약[df_요약['빈도'] > 0].reset_index()

# 출력
print(df_발췌)

 


40번

import pandas as pd

# csv 파일 불러오기 : 한글이 깨지는 경우 encoding : cp949로 시도
df = pd.read_csv('분개장_2급_8회_01.csv')

# 칼럼 삽입
df['수출외상매출금_빈도'] = [1 if (x[0] == '수출외상매출금' and x[1] > 0) else 0 
		for x in zip(df['계정과목'], df['대변금액'])]
        
df['외환차손_빈도'] = [1 if (x[0] == '외환차손' and x[1] > 0) else 0 
		for x in zip(df['계정과목'], df['차변금액'])]
        
        
# df_요약 테이블 생성
gb_1 = df.groupby(['전표일자', '전표번호'])

df_요약 = pd.DataFrame(
{'수출외상매출_빈도' : gb_1['수출외상매출금_빈도'].sum(),
'외환차손_빈도' : gb_1['외환차손_빈도'].sum(),
}
).reset_index()  # reset_index()를 해야 인덱스가 리셋된다.

# 필터링
df_발췌 = df_요약[(df_요약['수출외상매출_빈도'] > 0) & (df_요약['외환차손_빈도'] > 0)]


# 출력
print(df_발췌)
print(len(df_발췌))

41번

import pandas as pd
import datetime as dt

# 데이터프레임 가로 보기 확장
pd.set_option('display.max_columns', None) 

# 파일 불러오기
df_수출송장 = pd.read_csv('수출송장.csv')
df_선적 = pd.read_csv('선적.csv')

# outer join
df_조인 = df_수출송장.merge(df_선적, on = '송장번호', how = 'outer' )

# 판매일자, 선적일자, 납기일 datetime 화
df_조인['판매일자'] = pd.to_datetime(df_조인['판매일자'])
df_조인['선적일자'] = pd.to_datetime(df_조인['선적일자'])
df_조인['납기일'] = pd.to_datetime(df_조인['납기일'])


df_발췌 = df_조인[(df_조인['선적일자'].isnull()) | (df_조인['선적일자'] >= dt.datetime(2018,1,1))]

print('매출과대 : ', sum(df_발췌['송장금액']))
print('2017 매출금액: ', sum(df_조인['송장금액']) -sum(df_발췌['송장금액']))

 

AI 답안

# 필수 라이브러리 임포트
import openai
import pandas as pd
import pandas_gpt

# pandas_gpt에서 openai api 선택
pandas_gpt.completer = pandas_gpt.OpenAI('o4-mini')

# OpenAI key 텍스트 저장
with open('chatGPT_api_key.txt', 'r') as file:
    openai.api_key = file.read().strip()
    
df_전체 = pd.read_csv('분개장_2급_8회_01.csv')


질문_39 = "동일한 전표일자에 동일한 전표번호는 하나의 전표세트를 의미한다.\
전표생성자ID가 60009이며, 계정코드가 1215이고, 차변금액이 100000보다 큰 레코드가 포함되어 있는 전표세트의 개수를 구하라."


질문_40 = "동일한 전표일자에 동일한 전표번호는 하나의 전표세트를 의미한다.\
    계정과목이 수출외상매출금이며 대변금액이 0보다 크고, 계정과목이 외환차손이고 차변금액이 0보다 큰 것이 포함된 전표세의 갯수를 구하고\
    그 전표세트를 데이터프레임으로 나타내라."

 
질문_추가 = "레코드를 가장 많이 입력한 젼표생성자ID 랭킹 5위를 그래프로 보여줘. 한글이 깨지지 않게 해줘."

# 질문부분을 적절하게 수정, verbose = True는 판다스 코드를 생성해주는 파라미터
답변_1 = df_전체.ask(질문_추가,verbose=True)


print(답변_1)

아래의 주소에서 다운로드 받으세요.


https://naver.me/Ge4W9Zwj

 

FrauditEducationInstaller.zip

김태식님이 공유한 파일을 확인하세요.

mybox.naver.com

 

+ Recent posts