Anaconda의 SF 임금 예제 의 데이터를 활용할 것입니다. 이제 데이터를 불러와야겠죠?
import pandas as pd
import numpy as np
file_path = os.getenv("HOME") + '/aiffel/data_handling/data/Salaries.csv'
sal = pd.read_csv(file_path)
sal.head(5)
저장된 데이터를 불러왔고, 어떤 형태인지 head를 통해 볼게요. (head는 원래 5개만 보여주는데 왜 5를 넣어놨지...)
DataFrame이 커서 한 눈에 안 보여 그냥 컬럼만 출력해보았습니다.
print(sal.columns)
'Id', 'EmployeeName', 'JobTitle', 'BasePay', 'OvertimePay', 'OtherPay', 'Benefits', 'TotalPay', 'TotalPayBenefits', 'Year', 'Notes', 'Agency', 'Status'의 13개 Columns이 있는 걸 확인했고 이를 통해 실습을 진행합니다.
Q1. 평균 basepay는 얼마인가요?
Q2. 최대 OvertimePay는 얼마인가요?
Q3. JOSEPH DRISCOLL의 job title은 무엇인가요?
Q4. JOSEPH DRISCOLL의 급여는 얼마인가요? (benefits 포함해서)
Q5. 월급(Benefit포함) 이 가장 높은 사람은 누구인가요?
Q6. 월급(Benefit포함) 이 가장 낮은 사람은 누구인가요?
Q7. 2011~2014년 동안의 연도별 BasePay의 평균은 각각 얼마인가요?
Q8. Job Title의 종류는 몇 개인가요?
Q9. Job Title중 가장 많은 상위 5개의 Job Title은 무엇인가요?
Q10. Chief 란 단어를 갖는 Job Title은 몇 개인가요? (chief_string()이라는 함수를 만들고 lambda 문법을 사용해 함수를 적용해 보세요)
my code
sal['BasePay'].mean()
출력값: 66327.68895967308
mycode
sal['OvertimePay'].max()
출력값: 245131.88
mycode
sal[sal['EmployeeName'] == 'JOSEPH DRISCOL']['JobTitle']
출력값:
24 CAPTAIN, FIRE SUPPRESSION
Name: JobTitle, dtype: object
mycode
sal[sal['EmployeeName'] == 'JOSEPH DRISCOLL']['TotalPayBenefits']
출력값: 24 270324.91
Name: TotalPayBenefits, dtype: float64
mycode
sal[sal['TotalPayBenefits'] == sal['TotalPayBenefits'].max()]['EmployeeName']
출력값:
0 NATHANIEL FORD
Name: EmployeeName, dtype: object
mycode
sal[sal['TotalPayBenefits'] == sal['TotalPayBenefits'].min()]['EmployeeName']
출력값:
110530 David P Kucia
Name: EmployeeName, dtype: object
mycode
sal.groupby('Year').mean()['Basepay']
출력값:
Year
2011 63595.956517
2012 65436.406857
2013 69630.030216
2014 66573.154204
Name: BasePay, dtype: float64
mycode
sal['JobTitle'].nunique()
출력값: 2158
mycode
sal['JobTitle'].value_counts()
출력값:
Transit Operator 7036
Special Nurse 4389
Registered Nurse 3736
Public Svc Aide-Public Works 2518
Police Officer 3 2421
...
CRIME LABORATORY MANAGER 1
MEDIA/SECURITY SYSTEMS SUPERVISOR 1
SHELTER OFFICE SUPERVISOR 1
WAREHOUSE WORKER 1
COURT EXECUTIVE OFFICER 1
Name: JobTitle, Length: 2158, dtype: int64
mycode
코드 작성하지 못함.
출력값:
Q1 예시 코드
sal['BasePay'].mean()
Q2 예시 코드
sal['OvertimePay'].max()
Q3 예시 코드
sal[sal['EmployeeName'] == 'JOSEPH DRISCOLL']['JobTitle']
Q4 예시 코드
sal[sal['EmployeeName'] == 'JOSEPH DRISCOLL']['TotalPayBenefits']
Q5 예시 코드
sal[sal['TotalPayBenefits']==sal['TotalPayBenefits'].max()]['EmployeeName']
Q6 예시 코드
sal[sal['TotalPayBenefits']==sal['TotalPayBenefits'].min()]
Q7 예시 코드
sal.groupby('Year').mean()['BasePay']
Q8 예시 코드
sal['JobTitle'].nunique()
Q9 예시 코드
sal['JobTitle'].value_counts().head(5)
Q10 예시 코드
import re
def chief_string(title):
title_pre = re.sub(r"([?.!,])", r" \\\\1 ", title).lower()
if 'chief' in title_pre.split():
return True
else:
return False
print(sal['JobTitle'].apply(lambda x : chief_string(x)).sum()) # 627