데이터셋의 내용과 구조를 개략적으로 살펴볼 수 있는 함수들과
통계함수들을 살펴볼 것이다.
데이터프레임 구조
import pandas as pd
df = pd.read_csv('data/auto-mpg.csv', header=None)
# 열 이름 지정
df.columns= ['mpg','cylinders','displacement','horsepower','weight', 'acceleration','model year','origin','name']
df.head()
<결과>
mpg cylinders displacement horsepower weight acceleration model year origin name
0 18.0 8 307.0 130.0 3504.0 12.0 70 1 chevrolet chevelle malibu
1 15.0 8 350.0 165.0 3693.0 11.5 70 1 buick skylark 320
2 18.0 8 318.0 150.0 3436.0 11.0 70 1 plymouth satellite
3 16.0 8 304.0 150.0 3433.0 12.0 70 1 amc rebel sst
4 17.0 8 302.0 140.0 3449.0 10.5 70 1 ford torino
Return a tuple representing the dimenstionality of the DataFrame
데이터프레임의 크기(행, 열) -> 튜플
df.shape
<결과>
(398, 9)
데이터프레임 기본 정보
df.info()
<결과>
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 398 entries, 0 to 397
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 mpg 398 non-null float64
1 cylinders 398 non-null int64
2 displacement 398 non-null float64
3 horsepower 398 non-null object
4 weight 398 non-null float64
5 acceleration 398 non-null float64
6 model year 398 non-null int64
7 origin 398 non-null int64
8 name 398 non-null object
dtypes: float64(4), int64(3), object(2)
memory usage: 28.1+ KB
데이터프레임의 기술 통계 정보 요약
카운트, 평균, 표준편차, 최대값, 최소값, 중간값, unique(고유값의 수), top(최빈값), freq(빈도수)
df.describe()
print(df.describe(),end='\n\n\n')
print(df.describe(include='all'))
<결과>
mpg cylinders displacement weight acceleration \
count 398.000000 398.000000 398.000000 398.000000 398.000000
mean 23.514573 5.454774 193.425879 2970.424623 15.568090
std 7.815984 1.701004 104.269838 846.841774 2.757689
min 9.000000 3.000000 68.000000 1613.000000 8.000000
25% 17.500000 4.000000 104.250000 2223.750000 13.825000
50% 23.000000 4.000000 148.500000 2803.500000 15.500000
75% 29.000000 8.000000 262.000000 3608.000000 17.175000
max 46.600000 8.000000 455.000000 5140.000000 24.800000
model year origin
count 398.000000 398.000000
mean 76.010050 1.572864
std 3.697627 0.802055
min 70.000000 1.000000
25% 73.000000 1.000000
50% 76.000000 1.000000
75% 79.000000 2.000000
max 82.000000 3.000000
mpg cylinders displacement horsepower weight \
count 398.000000 398.000000 398.000000 398 398.000000
unique NaN NaN NaN 94 NaN
top NaN NaN NaN 150.0 NaN
freq NaN NaN NaN 22 NaN
mean 23.514573 5.454774 193.425879 NaN 2970.424623
std 7.815984 1.701004 104.269838 NaN 846.841774
min 9.000000 3.000000 68.000000 NaN 1613.000000
25% 17.500000 4.000000 104.250000 NaN 2223.750000
50% 23.000000 4.000000 148.500000 NaN 2803.500000
75% 29.000000 8.000000 262.000000 NaN 3608.000000
max 46.600000 8.000000 455.000000 NaN 5140.000000
acceleration model year origin name
count 398.000000 398.000000 398.000000 398
unique NaN NaN NaN 305
top NaN NaN NaN ford pinto
freq NaN NaN NaN 6
mean 15.568090 76.010050 1.572864 NaN
std 2.757689 3.697627 0.802055 NaN
min 8.000000 70.000000 1.000000 NaN
25% 13.825000 73.000000 1.000000 NaN
50% 15.500000 76.000000 1.000000 NaN
75% 17.175000 79.000000 2.000000 NaN
max 24.800000 82.000000 3.000000 NaN
데이터 개수
df.count()
# 데이터 개수
print(df.count())
# 값에 대한 연산도 가능 하다. !
df.count()/len(df)
<결과>
mpg 398
cylinders 398
displacement 398
horsepower 398
weight 398
acceleration 398
model year 398
origin 398
name 398
dtype: int64
mpg 1.0
cylinders 1.0
displacement 1.0
horsepower 1.0
weight 1.0
acceleration 1.0
model year 1.0
origin 1.0
name 1.0
dtype: float64
각 열의 고유값 갯수
df['model year'].value_counts()
df['model year'].value_counts()
<결과>
73.0 40
78.0 36
76.0 34
82.0 31
75.0 30
81.0 29
70.0 29
79.0 29
80.0 29
77.0 28
72.0 28
71.0 28
74.0 27
Name: model year, dtype: int64
dropna = False : 누락된 값도 표시
df['deck'].value_counts(dropna = False)
<결과>
NaN 688
C 59
B 47
D 33
E 32
A 15
F 13
G 4
Name: deck, dtype: int64
각 열의 고유값 개수 의 타입
print(type(df['model year'].value_counts()))
<class 'pandas.core.series.Series'>
통계함수
평균값
df.mean()
df['weight'].mean()
df[['weight', 'model year']].mean()
<결과>
mpg 23.514573
cylinders 5.454774
displacement 193.425879
weight 2970.424623
acceleration 15.568090
model year 76.010050
origin 1.572864
dtype: float64
<결과>
2970.424623115578
<결과>
weight 2970.424623
model year 76.010050
dtype: float64
중간값
df.median()
mpg 23.0
cylinders 4.0
displacement 148.5
weight 2803.5
acceleration 15.5
model year 76.0
origin 1.0
dtype: float64
최대값, 최소값
print(df.max(),end='\n\n')
print(df.min())
mpg 46.6
cylinders 8.0
displacement 455.0
weight 5140.0
acceleration 24.8
model year 82.0
origin 3.0
dtype: float64
mpg 9.0
cylinders 3.0
displacement 68.0
weight 1613.0
acceleration 8.0
model year 70.0
origin 1.0
dtype: float64
표준편차
df.std()
<결과>
mpg 7.815984
cylinders 1.701004
displacement 104.269838
weight 846.841774
acceleration 2.757689
model year 3.697627
origin 0.802055
dtype: float64
상관계수
print(df.corr(),end='\n\n')
print(df[['cylinders','model year']].corr())
<결과>
mpg cylinders displacement weight acceleration \
mpg 1.000000 -0.775396 -0.804203 -0.831741 0.420289
cylinders -0.775396 1.000000 0.950721 0.896017 -0.505419
displacement -0.804203 0.950721 1.000000 0.932824 -0.543684
weight -0.831741 0.896017 0.932824 1.000000 -0.417457
acceleration 0.420289 -0.505419 -0.543684 -0.417457 1.000000
model year 0.579267 -0.348746 -0.370164 -0.306564 0.288137
origin 0.563450 -0.562543 -0.609409 -0.581024 0.205873
model year origin
mpg 0.579267 0.563450
cylinders -0.348746 -0.562543
displacement -0.370164 -0.609409
weight -0.306564 -0.581024
acceleration 0.288137 0.205873
model year 1.000000 0.180662
origin 0.180662 1.000000
cylinders model year
cylinders 1.000000 -0.348746
model year -0.348746 1.000000
Q. 상관계수 문제
통계에서 30% 이상을 약한 상관관계 , 70% 이상을 강한 상관관계라고 한다.
<출력 결과>
mpg -0.775396
cylinders 1.000000
displacement 0.950721
weight 0.896017
acceleration -0.505419
model year -0.348746
origin -0.562543
Name: cylinders, dtype: float64
cylinders mpg는 강한 상관관계
cylinders cylinders는 강한 상관관계
cylinders displacement는 강한 상관관계
cylinders weight는 강한 상관관계
cylinders acceleration는 약한 상관관계
cylinders model year는 약한 상관관계
cylinders origin는 약한 상관관계
정답
print(df.corr().loc['cylinders'],end='\n\n')
for i in df.corr().loc['cylinders'].index: #['mpg', 'cylinders', 'displacement', 'weight', 'acceleration','model year', 'origin']
if abs(df.corr().loc['cylinders'][i]) > 0.7:
print(f'cylinders {i}는 강한 상관관계')
elif abs(df.corr().loc['cylinders'][i]) > 0.3:
print(f'cylinders {i}는 약한 상관관계')
df.corr()
'Language > 파이썬' 카테고리의 다른 글
파이썬 '판다스 데이터 분석' - 함수 : sample(), .at[idx,'컬럼명'],pop('컬럼명') ,nlargest(idx, list), isin([]) (0) | 2021.07.14 |
---|---|
파이썬 '판다스 데이터 분석' - 복사 , DataFrame.copy() (0) | 2021.07.11 |
파이썬 '판다스 데이터 분석' - 엑셀 파일 읽기 (xlsx, csv), 여러 엑셀 파일 읽기,캐글 제출을 위한 DataFrame (1) | 2021.07.05 |
파이썬 '판다스 데이터 분석' - 판다스 입문 (0) | 2021.07.02 |
파이썬을 이용한 OpenCV (0) | 2021.01.31 |
댓글