Python 데이터 분석

Python 데이터분석 기초 27 - 기술 통계(일변량(one variable), 이변량(two variable))

코딩탕탕 2022. 11. 4. 11:17

 

 

# 기술 통계
# - 자료를 정리 및 요약하는 기초적인 통계
# - 데이터 분석 전에 전체적인 데이터 분포의 이해와 통계적 수치 제공
# - 추론통계의 기초자료로 많이 쓰인다.
# 기술통계량 유형 - 대표값, 산포도, 비대칭도 : 왜도, 첨도
# 기술 통계 분석 - 정보의 손실을 최대로 줄이면서 데이터를 효과적으로 요약할 수 있는 분석방법.

# 돗수 분포표 : 특정 구간에 속하는 자료의 수를 나타내는 표

# 일변량(one variable) - 명목형 - 빈도 분석
import pandas as pd
import matplotlib.pyplot as plt

frame = pd.read_csv('../testdata/ex_studentlist.csv')
print(frame) # csv파일을 불러와서 호출한다.
print(frame.info()) # 칼럼 정보를 확인

print(frame['age'].mean(), frame['age'].var(), frame['age'].std())
# plt.plot(frame['age'])
# plt.show()

print(frame['bloodtype'].unique()) # 값이 뭐가 있는 지 확인 가능하다.

# bloodtype별 인원수
data1 = frame.groupby(['bloodtype'])['bloodtype'].count()
print(data1) # groupby 방법

data2 = pd.crosstab(index=frame['bloodtype'], columns='count')
print(data2) # crosstab 방법

print('---')
# 이변량(two variable) - 명목형(성별, 혈액형) - 빈도 분석
data3 = pd.crosstab(index=frame['bloodtype'], columns=frame['sex'])
print(data3)

print()
data4 = pd.crosstab(index=frame['bloodtype'], columns=frame['sex'], margins=True)
print(data4)

print()
data4.columns = ['남','여','합계']
data4.index = ['A', 'AB', 'B', 'O', '합계']
print(data4)

<console>
   name sex  age  grade absence bloodtype  height  weight
0   김길동  남자   23      3       유         O   165.3    68.2
1   이미린  여자   22      2       무        AB   170.1    53.0
2   홍길동  남자   24      4       무         B   175.0    80.1
3   공기밥  남자   23      3       무        AB   182.1    85.7
4   손세수  여자   20      1       유         A   168.0    49.5
5   박미희  여자   21      2       무         O   162.0    52.0
6   강가에  여자   22      1       무         O   155.2    45.3
7   이희수  여자   23      1       무         A   176.9    55.0
8   이철린  남자   23      3       무         B   178.5    64.2
9   박치기  남자   22      2       무         B   176.1    61.3
10  박수호  남자   24      4       유         O   167.1    62.0
11  임동민  남자   22      2       무        AB   180.0    75.8
12  김민수  남자   21      1       무         A   162.2    55.3
13  이겨라  여자   23      3       무         O   176.1    53.1
14  김미진  여자   22      2       무         B   158.2    45.2
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15 entries, 0 to 14
Data columns (total 8 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   name       15 non-null     object 
 1   sex        15 non-null     object 
 2   age        15 non-null     int64  
 3   grade      15 non-null     int64  
 4   absence    15 non-null     object 
 5   bloodtype  15 non-null     object 
 6   height     15 non-null     float64
 7   weight     15 non-null     float64
dtypes: float64(2), int64(2), object(4)
memory usage: 1.1+ KB
None
22.333333333333332 1.2380952380952384 1.1126972805283737
['O' 'AB' 'B' 'A']
bloodtype
A     3
AB    3
B     4
O     5
Name: bloodtype, dtype: int64
col_0      count
bloodtype       
A              3
AB             3
B              4
O              5
---
sex        남자  여자
bloodtype        
A           1   2
AB          2   1
B           3   1
O           2   3

sex        남자  여자  All
bloodtype             
A           1   2    3
AB          2   1    3
B           3   1    4
O           2   3    5
All         8   7   15

    남  여  합계
A   1  2   3
AB  2  1   3
B   3  1   4
O   2  3   5
합계  8  7  15

 

age에 대한 그래프