«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Recent Posts
Today
Total
관리 메뉴

짜리몽땅 매거진

[Python] 데이터분석 기초 본문

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

'Data > Python' 카테고리의 다른 글

[Python] 반복문의 데이터프레임 접근  (0) 2023.09.29
[Python] 통계분석 기초  (0) 2023.09.17
[Python] 텍스트문법 응용  (0) 2023.08.29
[Python] 모듈 패키지  (0) 2023.08.25
[Python] 정규표현식  (0) 2023.08.14