Data/Python
[Python] 데이터분석 기초
쿡국
2023. 9. 12. 21:49
데이터 분석에 필요한 기초 과정
- 데이터 분석을 진행하기 위해서 ML/DL 머신러닝 기초, 기초통계 분석 공부가 필요
- 이 두 개를 배우기 위해서는 데이터프레임의 이해와 데이터 분석의 이해가 필요하다.
- 데이터프레임이란? : 기존 패키지를 사용하지 않고 리스트 형식으로 데이터를 담는 것
- 2차원 : 가로와 세로 라는 공간/x축과 y축의 공간/행렬의 개념
- 데이터프레임의 개념으로 접근하면 행은 인덱스, 열은 컬럼이 된다.
- 컬럼이 존재하는 건 결국 데이터의 성질이 형성이 된다.
- 데이터프레임을 불러오기 위해서는
## pandas 가장 많이 사용 : 데이터프레임, 시리즈 구조 데이터를 가공, 전처리 하는 패키지, 금융데이터 처음 시작되었음
## numpy도 많이 사용 : 공학적인 수학 관련 패키지들 연산이나 브로드캐스팅 등 다양하게 대용량 데이터를 쉽게 처리할 수 있음
import seaborn as sns
df = sns.load_dataset('titanic') #패키지를 이용해서 데이터 불러오기
df
survived pclass sex age sibsp parch fare embarked class who adult_male deck embark_town alive alone
0 0 3 male 22.0 1 0 7.2500 S Third man True NaN Southampton no False
1 1 1 female 38.0 1 0 71.2833 C First woman False C Cherbourg yes False
2 1 3 female 26.0 0 0 7.9250 S Third woman False NaN Southampton yes True
3 1 1 female 35.0 1 0 53.1000 S First woman False C Southampton yes False
4 0 3 male 35.0 0 0 8.0500 S Third man True NaN Southampton no True
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
886 0 2 male 27.0 0 0 13.0000 S Second man True NaN Southampton no True
887 1 1 female 19.0 0 0 30.0000 S First woman False B Southampton yes True
888 0 3 female NaN 1 2 23.4500 S Third woman False NaN Southampton no False
889 1 1 male 26.0 0 0 30.0000 C First man True C Cherbourg yes True
890 0 3 male 32.0 0 0 7.7500 Q Third man True NaN Queenstown no True
891 rows × 15 columns
데이터프레임의 이해
df_col= list(df.columns)
df_col
['survived',
'pclass',
'sex',
'age',
'sibsp',
'parch',
'fare',
'embarked',
'class',
'who',
'adult_male',
'deck',
'embark_town',
'alive',
'alone']
import pandas as pd
df_k = pd.DataFrame({'지역':['서울','인천','대구','부산','광주'],
'구분':['특별시','광역시','광역시','광역시','광역시'],
'인구':[1000,300,300,500,200]})
df_k
지역 구분 인구
0 서울 특별시 1000
1 인천 광역시 300
2 대구 광역시 300
3 부산 광역시 500
4 광주 광역시 200
print(sum(df_k['인구'])/5)
460.0
데이터 분석을 진행해 보자!
- 분석에 대한 목적이 정확해야 데이터 분석의 시작이 될 수 있다..
- 시각화 -> 나의 데이터 분석 주장을 뒷받침하는 근거를 탄탄하게 만들어 주는 것
- info
- 데이터 타입과 데이터의 누락값, 결측치 확인 필수!
- 데이터셋에 존재하는 컬럼명과 컬럼별 결측치, 컬럼별 데이터타입을 확인할 때 사용한다.
- describe
- 데이터셋의 수치형 컬럼별 주요 통계량을 summary할 때 사용한다.
- 요약통계의 개념
- 데이터 범주형, 연속형
- 데이터의 연속적인 데이터들 -> 분포를 볼 수 있다.
- 정규분포인지 아니면 어떤 분포의 형태를 보이고 있는지
- 컬럼들이 어떤 식의 분포인지를 확인하는 기초적인 힌트를 주는 것
df_k.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 지역 5 non-null object
1 구분 5 non-null object
2 인구 5 non-null int64
dtypes: int64(1), object(2)
memory usage: 248.0+ bytes
df_k.describe()
인구
count 5.000000
mean 460.000000
std 320.936131
min 200.000000
25% 300.000000
50% 300.000000
75% 500.000000
max 1000.000000
df_ex=pd.read_excel('excel_exam.xlsx')
df_ex
id nclass math english science
0 1 1 50 98 50
1 2 1 60 97 60
2 3 1 45 86 78
3 4 1 30 98 58
4 5 2 25 80 65
5 6 2 50 89 98
6 7 2 80 90 45
7 8 2 90 78 25
8 9 3 20 98 15
9 10 3 50 98 45
10 11 3 65 65 65
11 12 3 45 85 32
12 13 4 46 98 65
13 14 4 48 87 12
14 15 4 75 56 78
15 16 4 58 98 65
16 17 5 65 68 98
17 18 5 80 78 90
18 19 5 89 68 87
19 20 5 78 83 58
df_ex.info() #결측치 확인을 잘해아한다.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 20 non-null int64
1 nclass 20 non-null int64
2 math 20 non-null int64
3 english 20 non-null int64
4 science 20 non-null int64
dtypes: int64(5)
memory usage: 928.0 bytes
df_ex.describe()
id nclass math english science
count 20.00000 20.000000 20.000000 20.000000 20.000000
mean 10.50000 3.000000 57.450000 84.900000 59.450000
std 5.91608 1.450953 20.299015 12.875517 25.292968
min 1.00000 1.000000 20.000000 56.000000 12.000000
25% 5.75000 2.000000 45.750000 78.000000 45.000000
50% 10.50000 3.000000 54.000000 86.500000 62.500000
75% 15.25000 4.000000 75.750000 98.000000 78.000000
max 20.00000 5.000000 90.000000 98.000000 98.000000
* 추가 과제 1
- 직접 엑셀데이터 또는 csv파일을 만들어서 판다스로 데이터를 불러오기
- 해당 데이터를 가지고 배운 문법을 적용
import pandas as pd
df=pd.read_excel('kbo 순위.xlsx')
df
순위 팀 경기수 승 패 무 승률
0 1 LG 119 70 47 2 0.598
1 2 KT 122 66 53 3 0.555
2 3 NC 117 63 52 2 0.548
3 4 KIA 114 60 52 2 0.536
4 5 SSG 119 62 55 2 0.530
5 6 두산 117 59 57 1 0.509
6 7 롯데 118 55 63 0 0.466
7 8 한화 118 50 62 6 0.446
8 9 삼성 121 51 69 1 0.425
9 10 키움 131 51 77 3 0.398
df_col= list(df.columns)
df_col
['순위', '팀', '경기수', '승', '패', '무', '승률']
print(sum(df['경기수'])/10)
119.6
print(sum(df['승률'])/10)
0.5011
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 순위 10 non-null int64
1 팀 10 non-null object
2 경기수 10 non-null int64
3 승 10 non-null int64
4 패 10 non-null int64
5 무 10 non-null int64
6 승률 10 non-null float64
dtypes: float64(1), int64(5), object(1)
memory usage: 688.0+ bytes
df.describe()
순위 경기수 승 패 무 승률
count 10.00000 10.000000 10.000000 10.000000 10.000000 10.000000
mean 5.50000 119.600000 58.700000 58.700000 2.200000 0.501100
std 3.02765 4.575296 6.832114 9.104944 1.619328 0.064376
min 1.00000 114.000000 50.000000 47.000000 0.000000 0.398000
25% 3.25000 117.250000 52.000000 52.250000 1.250000 0.451000
50% 5.50000 118.500000 59.500000 56.000000 2.000000 0.519500
75% 7.75000 120.500000 62.750000 62.750000 2.750000 0.545000
max 10.00000 131.000000 70.000000 77.000000 6.000000 0.598000