본문 바로가기
Make the Learning Curve/Python

[Python] Pandas 튜토리얼 (Feat.DACON _ Ch 05 - 07)

by 에이도 2021. 1. 8.

-

 

 

 

 

안녕하세요, 에이도입니다! 

 

이 글에서는  DACON Ch 5 - Ch 7 실습하며 학습한 pandas 튜토리얼 내용입니다.

 

 

 

시작해보겠습니다. 😊


Ch5. 통계함수

목표 : 다양한 통계 함수를 DataFrame에 적용

 

 

  • DataFrame['컬럼'].unique() : 컬럼의 고윳값 리스트 반환
  • DataFrame['컬럼'].value_counts() : 컬럼의 고윳값 카운트 반환
# 특정 column의 고유값 리스트 반환
data['도시'].unique()

[out]
array(['서울', '부산', '인천', '대구', '대전', '광주', '수원', '울산', '고양', '용인', '총합'],
      dtype=object)

 

 

 

# 특정 column의 고유값 카운트 반환
data['도시'].value_counts()

[out]
수원    1
광주    1
고양    1
용인    1
울산    1
대전    1
인천    1
총합    1
부산    1
서울    1
대구    1
Name: 도시, dtype: int64

 

 


수치를 이용한 함수

  • pd.DataFrame.sum() : 각 컬럼의 합계를 반환
  • pd.DataFrame.max() : 각 컬럼의 최댓값을 반환
  • pd.DataFrame.idxmax() : 특정 컬럼의 최댓값의 인덱스 반환
  • pd.DataFrame.min() : 각 컬럼의 최솟값을 반환
  • pd.DataFrame.idxmin() : 특정 컬럼의 최솟값의 인덱스 반환
  • pd.DataFrame.mean() : 각 컬럼의 평균을 반환
  • pd.DataFrame.median() : 각 컬럼의 중앙값을 반환
  • pd.DataFrame.var() : 각 컬럼의 분산을 반환
  • pd.DataFrame.std() : 각 컬럼의 표준편차를 반환

 

# 수치 계산에 사용할 데이터만 선택하여 새로운 dataframe에 저장
df = data.iloc[:10, 1:]
df

 

# 각 컬럼의 합
df.sum()

[out]

인구수    26030340
남자     12880779
여자     13150052
dtype: int64

 

# 각 컬럼중 최댓값 
df.max()

[out]
인구수    9741381
남자     4757642
여자     4984229
dtype: int64

 

 

#각 컬럼 최댓값의 index 반환 
print ( df['인구수'].idxmax()) 
print ( df['남자'].idxmax()) 
print ( df['여자'].idxmax()) 

[out]
0
0
0

 

 

 

 

# 컬럼 최댓값의 index를 이용하여 인구가 가장 많은 도시 찾기 
#data.loc[ 가장 큰 값의 index ]['도시']
data.loc[df['인구수'].idxmax()]['도시']

[out]
'서울'

 

# 각 컬럼의 최소값을 반환
df.min()

[out]

인구수    1061440
남자      523803
여자      534617
dtype: int64

 

# 특정 컬럼의 최소값의 인덱스 반환
df['인구수'].idxmin()

[out]

9

 

 

# 컬럼 최솟값의 index를 이용하여 인구가 가장 적은 도시 찾기 
data.loc[df['인구수'].idxmin()]['도시']

'용인'

 

 

# 각 컬럼의 중앙값을 반환
df.mean()

[out]
인구수    2603034.0
남자     1288077.9
여자     1315005.2
dtype: float64

 

 

# 각 컬럼의 분산을 반환
df.var()

[out]
인구수    6.996348e+12
남자     1.658060e+12
여자     1.843244e+12
dtype: float64

 

 

# 각 컬럼의 표준편차를 반환
df.std()

[out]
인구수    2.645061e+06
남자     1.287657e+06
여자     1.357661e+06
dtype: float64

 

 

 

ch 5 과제

problem = ['총합', '최대값', '최소값' ,'평균값','중앙값','분산','표준편차']

for i in ['인구수','남자','여자']:
    df_sum = df[i].sum() 
    df_max = df[i].max()
    df_min= df[i].min()
    df_ave = int(df_sum/len(df))
    df_mean_ = df[i].mean()
    df_var = df[i].var()
    df_std = df[i].std()
    if i == '인구수': 
            population = [df_sum, df_max, df_min, df_ave,df_mean_, df_var, df_std]
            
    elif i == '남자': 
            man = [df_sum, df_max, df_min, df_ave,df_mean_, df_var, df_std]
            
            
    elif i == '여자': 
            woman = [df_sum, df_max, df_min, df_ave,df_mean_, df_var, df_std]
    
# print(population, man, woman)
# list(map(int, list_a))

population = list(map(int,population))

man = list(map(int,man))

woman = list(map(int,woman))


submission = {'문제':problem,
            '인구수':population,
             '남자': man,
              '여자': woman} 

submission = pd.DataFrame(submission)
submission

 

 

 


Ch6. 컬럼 연산

  • 목표 : 컬럼 간에 사칙연산을 수행

 

 

산술 연산

  • 기존에 가지고 있는 컬럼들을 이용하여 새로운 컬럼을 만들 수 있습니다.
  • 판다스의 컬럼끼리는 산술 연산자를 이용하여 연산이 가능합니다.
# 컬럼끼리 덧셈
data['남자+여자'] =data['남자'] + data['여자']
data
# print(data['인구수'] == data['남자+여자'])

 

 

 

 

 

# 컬럼끼리 뺄쎔
data['남자 - 여자'] =data['남자'] -  data['여자']
data

 

 

 

 

# 컬럼끼리 차이의 절대값
data['남자 - 여자_절대값'] = data['남자 - 여자'].abs()

data

 

 

 

 

# 컬럼 비율 
data['남자/여자'] = data['남자']/data['여자']
data

 

 

  • 하나의 상수를 이용한 연산
data['여자_100명당_남자수'] = data['남자/여자']*100
data

 


Ch7. 비교 연산자를 이용한 판별

  • 목표 : ==, !=, >, >=, <, <= 와 같은 비교 연산자 학습

 

pandas에서도 ==,!=, > , >=, < , <=와 같은 비교 연산자가 사용 가능합니다.

 

 

# 인구수 200만명 이상의 도시 판별

data['인구수'] >= 2000000

[out]
0      True
1      True
2      True
3      True
4     False
5     False
6     False
7     False
8     False
9     False
10     True
Name: 인구수, dtype: bool

 


 

 

# 인구수 200만명 이상인 도시를 카운트 
(data['인구수'] >=2000000). sum()

[out]
5

 

 


 

 

# 인구수 200만명 이상인 도시일 경우( True) 반환 된 로우만 확인
data[data['인구수'] >= 2e+6] 

 

 

 

# 인구수 중앙값 이상의 도시의 로우 확인
data[data['인구수']> data['인구수'].median()][:-1]

 

 

 

 

 

# 인구수 중앙값 이상의 도시만 확인
print(data[data['인구수']> data['인구수'].median()]['도시'][:-1],'\n')

print(data[data['인구수']>= data['인구수'].median()]['도시'][:-1])

[out]
0    서울
1    부산
2    인천
3    대구
Name: 도시, dtype: object 

0    서울
1    부산
2    인천
3    대구
4    대전
Name: 도시, dtype: object

 

 

 

# 남자가 여자보다 더 많은 도시 출력
data[data['남자']>data['여자']]['도시']

[out]
2    인천
4    대전
6    수원
7    울산
Name: 도시, dtype: object

 

 

# 남자+여자의 합이 인구와 다른 도시의 로우 출력
data[data['인구수']!= data['남자+여자']]

 

 

 

 

# 남자+여자의 합이 인구와 다른 도시 출력
data[data['인구수']!= data['남자+여자']]['도시']

[out]
0     서울
9     용인
10    총합
Name: 도시, dtype: object

 

 

submission =data[data['인구수']!= data['남자+여자']]

submission.to_csv('data/data7_pandas.csv', index = False)

 

 

이것으로 pandas 튜토리얼 ( DACON)을 마치겠습니다! 

 

감사합니다 :) 

 

 

댓글