상세 컨텐츠

본문 제목

데이터분석(2)_Pandas

카테고리 없음

by teminam 2023. 5. 23. 10:07

본문

1. 판다스(Pandas)

  • '웨스 맥키니'가 개발한 라이브러리
  • 데이터 작업을 쉽고 직관적으로 할 수 있도록 설계된 빠르고 유연한 자료구조(데이터 프레임)를 제공하는모듈
 

!pip install pandas
 
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (1.5.3)
Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2022.7.1)
Requirement already satisfied: numpy>=1.21.0 in /usr/local/lib/python3.10/dist-packages (from pandas) (1.22.4)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)
 

import pandas as pd
 

1-1. Series와 DataFrame

  • 2차원 표 데이터를 데이터프레임이라고 한다면, 1차원 표 데이터는 시리즈임
  • 표의 데이터 부분을 values 라고 부름
  • 표의 행 이름을 index라고 부름
  • 표의 열 이름을 columns라고 부름
  • 시리즈는 values와 index로 이루어져 있고, 데이터프레임은 values, index, columns로 이루어져 있음
  • 데이터프레임과 시리즈의 value는 넘파이의 ndarray 기반

data1 = [[67, 93, 91],
         [65, 90, 80],
         [89, 61, 13],
         [83, 66, 45],
         [77, 96, 57]]
 
 
idx1 = ['김사과', '반하나', '오렌지', '이메론', '배애리']
 
col1 = ['국어', '영어', '수학']
 
 

 

 

5. 데이터 다루기

df.head()
 

df['blood'] # 데이터 타입은 series이다. 하나의 컬럼에 순서가 매겨졌고 값이 매칭.Series이다.
 
0      A
1      A
2      A
3     AB
4      A
5      A
6      O
7      B
8      O
9      A
10     A
11     B
12    AB
13     O
14     O
Name: blood, dtype: object
 

type(df['blood'])
pandas.core.series.Series
 

df.blood
 
0      A
1      A
2      A
3     AB
4      A
5      A
6      O
7      B
8      O
9      A
10     A
11     B
12    AB
13     O
14     O
Name: blood, dtype: object

8. 결측값(Null, NaN)

  • Null은 비어있는 값, 결측값이라고 부름
  • pandas에서는 NaN(Not a Number)로 표기 된 것은 모두 결측값으로 취급

 

<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   group     14 non-null     object 
 2   company   15 non-null     object 
 3   gender    15 non-null     object 
 4   birthday  15 non-null     object 
 5   height    13 non-null     float64
 6   blood     15 non-null     object 
 7   brand     15 non-null     int64  
dtypes: float64(1), int64(1), object(6)
memory usage: 1.1+ KB

 
 
df['생년월일'].dt.month
 
0     10
1      8
2     12
3     12
4      7
5      9
6      8
7      8
8     12
9      3
10     3
11     3
12     7
13     6
14     3
15     1
Name: 생년월일, dtype: int64
 

df['생년월일'].dt.day
 
0     13
1     18
2     10
3     30
4     23
5      1
6      9
7     26
8      4
9     22
10     9
11    30
12    21
13     8
14     9
15     1
Name: 생년월일, dtype: int64

df['생년월일'].dt.time
 
0     00:00:00
1     00:00:00
2     00:00:00
3     00:00:00
4     00:00:00
5     00:00:00
6     00:00:00
7     00:00:00
8     00:00:00
9     00:00:00
10    00:00:00
11    00:00:00
12    00:00:00
13    00:00:00
14    00:00:00
15    00:00:00
Name: 생년월일, dtype: object
 

df['생년월일'].dt.hour
 
0     0
1     0
2     0
3     0
4     0
5     0
6     0
7     0
8     0
9     0
10    0
11    0
12    0
13    0
14    0
15    0
Name: 생년월일, dtype: int64

df['생년월일'].dt.second
 
0     0
1     0
2     0
3     0
4     0
5     0
6     0
7     0
8     0
9     0
10    0
11    0
12    0
13    0
14    0
15    0
Name: 생년월일, dtype: int64
 

df['생년월일'].dt.dayofweek # 요일: 0(월요일) ~ 6(일요일)
 
0     4
1     3
2     1
3     5
4     6
5     0
6     2
7     2
8     4
9     1
10    3
11    6
12    4
13    3
14    1
15    5
Name: 생년월일, dtype: int64

df['생년월일'].dt.isocalendar().week # 몇 번째 주인지 뽑을 수 있음 
 
0     41
1     33
2     50
3     52
4     29
5     36
6     32
7     35
8     49
9     12
10    10
11    13
12    29
13    23
14    10
15    52
Name: week, dtype: UInt32
 
 

17. apply

  • Series나 DataFrame에 구체적인 로직을 적용하고 싶을 때 사용
  • apply를 적용하기 위해서는 별도의 함수가 먼저 정의되야 함
  • 먼저 작성된 함수를 apply에 매개변수로 전달함

[ ]
 
 
0     1
1     1
2     1
3     1
4     0
5     1
6     1
7     0
8     1
9     1
10    0
11    1
12    1
13    1
14    1
Name: 성별, dtype: int64
 
 

df['성별'].apply(lambda x: 1 if x == '남자' else 0)  # 함수는 한번쓰고 버릴거라 람다를 사용
 
0     1
1     1
2     1
3     1
4     0
5     1
6     1
7     0
8     1
9     1
10    0
11    1
12    1
13    1
14    1
Name: 성별, dtype: int64
 

 

 
 
 

 

 

18. map

  • 딕셔너리를 통해 데이터와 같은 키의 값을 적용

21. 원 핫 인코딩(One Hot Encoding)

  • 더미변수
  • 원 핫 인코딩은 한개의 요소는 1, 나머지 요소는 0으로 만들어 카테고리형을 표현하는 방법
  • 예) df['혈액형_code']를 머신러닝/딥러닝 알고리즘에 넣어 데이터를 예측하려고 지시를 하면 컴퓨터는 값들간의 관계를 스스로 형성하게 됨 -> 만약 B형은 1, AB형은 2라는 값을 가지고 있을 때 컴퓨터는 'B형 + AB형 = O형'라는 이상한 관계를 맺을 수 있게 됨 -> 별도의 column들을 형성해주고 1개의 column에는 1, 나머지는 0으로 넣어줌으로 'A, B, AB, O형의 관계는 서로 독립적이다'라는 카테고리로 표현해주는 방식을 사용