이번 글은 코드잇 강의를 수강하면서 배운 내용을 주로 하여 정리되어 있습니다. (코드잇 스프린트 데이터 애널리스트 트랙 1기 훈련생)
Pandas
- 표 형태의 데이터를 간편하게 다루고 분석하기 위한 라이브러리 (numpy는 pandas에 비해 가독성이 떨어지고, 정보에 대한 레이블 삽입 불가, 한가지 데이터 타입만 사용 가능하다)
- numpy를 기반으로 만들어진 대표적인 라이브러리
- 데이터 분석에서 50% 이상 사용하는 라이브러리
- 과정
- 데이터 불러오기
- 데이터 전처리(가공)
- 데이터 분석
- 데이터 시각화
- pandas 호출
import pandas as pd # pandas 호출
데이터프레임
데이터 프레임은 여러 개의 시리즈로 구성되어 있다.
가로 줄 - 행 (row) / 세로줄 - 열 (column)
import pandas as pd
import numpy as np
dict_df = pd.DataFrame({
'category': ['skirt', 'sweater', 'coat', 'jeans'],
'quantity': [10, 15, 6, 11],
'price': [30000, 60000, 95000, 35000]
})
데이터프레임 연산
df['quantity']
df['quantity'].mean() # 10.5
df['quantity'].sum() # 42
df['quantity'].min() # 6
df['quantity'] * df['price'] # 같은 인덱스끼리 곱해짐
DataFrame을 만드는 다양한 방법
2차원 리스트와 array를 활용한 DataFrame
two_dimensional_list = [
['skirt', 10, 30000],
['sweater', 15, 60000],
['coat', 6, 95000],
['jeans', 11, 35000]
]
two_dimensional_array = np.array(two_dimensional_list)
list_df = pd.DataFrame(two_dimensional_list)
array_df = pd.DataFrame(two_dimensional_array)
# 위 데이터 프레임은 아래와 같은 결과를 출력
0 | 1 | 2 | |
0 | skirt | 10 | 30000 |
1 | sweater | 15 | 60000 |
2 | coat | 6 | 95000 |
3 | jeans | 11 | 35000 |
# DataFrame을 만들 때 columns라는 옵션을 사용해서 컬럼명을 설정하는 것도 가능하다.
list_df = pd.DataFrame(two_dimensional_list, columns=['category', 'quantity', 'price'])
array_df = pd.DataFrame(two_dimensional_array, columns=['category', 'quantity', 'price']
category | quantity | price | |
0 | skirt | 10 | 30000 |
1 | sweater | 15 | 60000 |
2 | coat | 6 | 95000 |
3 | jeans | 11 | 35000 |
사전을 이용한 DataFrame 만들기
dict_list = [
{'category': 'skirt', 'quantity': 10, 'price': 30000},
{'category': 'sweater', 'quantity': 15, 'price': 60000},
{'category': 'coat', 'quantity': 6, 'price': 95000},
{'category': 'jeans', 'quantity': 11, 'price': 35000}
]
df4 = pd.DataFrame(my_list)
Pandas로 데이터 불러오기
pd.read_csv를 활용한다.
# csv (Comma-Separated Values) : 값들이 쉼표로 나누어져있다.
import pandas as pd
burger_df = pd.read_csv("data/buger.csv")
#인덱스가 없는 경우
burger_df_2 = pd.read_csv("data/buger2.csv", header=None) # 헤더가 없어 값들이 어떤 종류의 데이터를 가르키는지 알아보기 힘들다 그래서 밑의 코드 활용
burger_df_2 = pd.read_csv("data/buger2.csv". names = [''. '', ''])
burger_df_2 = pd.read_csv("data/buger2.csv". index_col = '') # 이름으로 지정해도 되고 0과 같은 인덱스로도 지정 가능
데이터 탐색하기
데이터프레임명.shape # 데이터의 행과 열을 출력하고 싶을때
데이터프레임명.sort_values(by='', ascending=False) # sort_values() 함수로 원하는 컬럼을 기준으로 내림차순 정렬
데이터프레임명.head() # 기본적으로 앞의 5행을 출력하며 데이터의 앞부분 확인
데이터프레임명.tail() # 데이터의 뒷부분 확인
데이터프레임명.info() # 데이터의 정보를 알고 싶을 때 사용 (행과 열의 수, 컬럼명, 결측치 유무, 데이터의 종류)
데이터프레임명.describe() # 수치형으로 된 정보들이 요약되어 출력
그룹화
카테고리별로 평균 값이 보고싶을 때 활용한다.
burger_df.groupby(['category'])['calories'].mean()
'''
출력결과 :
category
Burger 645.83333
Chicken 350.00000
Name : calories, dtype: float64
'''
값을 정렬하고 싶으면 .sort_values()를 활용한다.
burger_df.groupby(['category'])['calories'].mean().sort_values() # .sort_values()의 기본 설정은 ascending=True (오름차순)
'''
출력결과
category
Chicken 350.00000
Burger 645.83333
Name : calories, dtype: float64
'''
데이터의 정렬
sort_values()의 활용
기준이 되는 칼럼을 활용하여 정렬 가능하다.
burger_df(데이터프레임명).sort_values(by='calories(칼럼명)')
DataFrame에서 일부만 선택하기
iloc (integer location)
인덱스를 통해 데이터프레임을 인덱싱하고 슬라이싱하는 것
burger_df.iloc[3 ,1]
burger_df.iloc[[2, 3], [1, 2]] # 행이 [2, 3]2와 3 열이 [1, 2]1과 2인 밑의 결과 출력
product_name | carb | protein |
Double Whopper | 49 | 48 |
Double Cheese Whopper | 50 | 52 |
burger_df.iloc[1:4 , :3] # 행이 1부터 3까지, 열이 0부터 2까지의 데이터 출력
loc (location)
이름을 인덱스로 하여 데이터프레임을 인덱싱하고 슬라이싱하는 것
burger_df.loc['Double Whopper', 'Protein'] # 48
burger_df.loc[['Whopper', 'Double Whopper'], 'Protein']
burger_df.loc[['Whopper', 'Double Whopper'], ['carb', 'protein', 'fat']] # 밑의 결과 출력
product_name | carb | protein | fat |
Whopper | 49 | 48 | 40 |
Double Whopper | 50 | 52 | 58 |
burger_df.loc['Double Whopper':'Bacon King', 'calories':'fat']
product_name | calories | carb | protein | fat |
Double Whopper | 900 | 49 | 48 | 58 |
Double Cheese Whopper | 980 | 50 | 52 | 64 |
Whopper Junior | 310 | 27 | 13 | 18 |
Bacon King | 1150 | 49 | 61 | 79 |
burger_df.loc['Double Whopper':'Bacon King']
product_name | calories | carb | protein | fat | soduim | category |
Double Whopper | 900 | 49 | 48 | 58 | 1.0 | Burgers |
Double Cheese Whopper | 980 | 50 | 52 | 64 | 1.4 | Burgers |
Whopper Junior | 310 | 27 | 13 | 18 | 0.4 | Burgers |
Bacon King | 1150 | 49 | 61 | 79 | 2.2 | Burgers |
대괄호
burger_df['calories']
burger_df[['calories','fat']]
burger_df['Double Whopper' : 'Bacon King']
product_name | calories | carb | protein | fat | soduim | category |
Double Whopper | 900 | 49 | 48 | 58 | 1.0 | Burgers |
Double Cheese Whopper | 980 | 50 | 52 | 64 | 1.4 | Burgers |
Whopper Junior | 310 | 27 | 13 | 18 | 0.4 | Burgers |
Bacon King | 1150 | 49 | 61 | 79 | 2.2 | Burgers |
DataFrame과 불린 인덱싱
dataframe을 다룰 때 빈번하게 사용되는 인덱싱이다.
burger_df['calories'] < 500 # calories가 500 이하인 제품명에 True를 출력한다
mask = burger_df['calories'] < 500 # 칼로리가 500이하인 제품의 인덱스를 mask라는 변수에 지정한다.
burger_df[mask] # 칼로리 500이하의 제품들의 데이터프레임 출력 (모든 종류의 칼럼 데이터도 함께)
burger_df[mask][['calories','protein']] # 칼로리 500이하의 제품들의 calories와 protein의 값만 담긴 데이터프레임 출력
burger_df.loc[burger_df['calories'] < 500][['calories','protein']] # 위와 동일한 코드
burger_df.loc[burger_df['calories'] < 500,['calories','protein']] # 칼로리 500이하의 제품들의 calories와 protein 칼럼의 데이터프레임 출력
burger_df.loc[burger_df['calories'] < 500,'calories':'fat'] # 칼로리 500이하의 제품들의 calories부터 fat까지의 칼럼의 데이터프레임 출력
데이터 수정 및 추가하기
결측치 확인
burger_df.info() 결측치 유무와 개수 대략적으로 파악
특정 행의 데이터를 바꾸고 싶을 때
burger_df.loc['Double Stacker King', 'sodium'] = 1.9 # nan값에 1.9라는 값 입력
burger_df.loc['Cheeseburger'] = [360, 24, 18, 21, 0.7, 'Burger'] # 행 데이터 변경
특정 열의 데이터를 바꾸고 싶을 때
burger_df.loc['sodium'] = 1 # soduim 칼럼의 데이터를 모두 1로 변경
burger_df.loc['sodium'] = [1.4, 1.3, 2.6, 3.7, 1.0, 2.3, 5.3, 6.4, 3.2, 2.1] # soduim 칼럼의 데이터를 직접 입력하여 변경
현재 데이터에 없는 값을 추가하고 싶을 때
burger_df.loc['Triple Whopper'] = [1130, 49, 67, 75, 1.1, 'Burger'] # 행 데이터 추가
특정 열에 데이터를 일괄 적용하고 싶을 때
burger_df['brand'] = 'Burger King' # brand 칼럼을 새로 만들어 Burger King이라는 데이터를 모두 입력되게 한다.
특정 조건에 따라 새로운 열을 생성할 때
예를 들어 high_calories라는 새로운 열을 생성하는데 조건에 따라서 값을 다르게 입력받게 한다.
# data.loc[조건, 새로운 열 이름] = 넣을 데이터
burger_df.loc[burger_df['calories'] >= 500], 'high_calories'] = True # 칼로리가 500이상으로 고칼로리라면 True 출력
burger_df.loc[burger_df['calories'] < 500], 'high_calories'] = False # 칼로리가 500이상으로 고칼로리라면 False 출력
pandas에서 그래프 그리기
데이터프레임명.plot()
plt.show()
데이터프레임명.plot(x='quarter', y='revenue')
plt.show()
# bar형 그래프 그리기
데이터프레임명.plot(x='quarter', y='revenue', kind='bar') # 바형 그래프 그리기
plt.show()
#원 그래프, 파이차트
데이터프레임명.plot(y='revenue', kind='pie', labels=['1Q', '2Q', '3Q', '4Q']) # 원형 차트 그리기
plt.show()
데이터프레임명.plot(x='fat', y='calories', kind='scatter') # 산점도 그래프 작성
plt.show()
이번 글에서는 pandas / 데이터프레임 만들기 및 연산 / 데이터 불러오기 / 데이터 탐색하기 / 데이터 일부 선택 / 불린 인덱싱 / 데이터 수정 및 추가하기 / 그래프 그리기가 포함된 내용을 정리했으며, 파이썬을 통해 코드를 작성하는 경우에 모두 필수적인 개념들로 꼭 잊지 말고 알아가야 하는 내용인 것 같습니다.
글 읽어주셔서 감사합니다.
출처 및 참고자료 : 코드잇 사이트 강의 '데이터 사이언스 Toolkit' https://www.codeit.kr/topics/data-science-toolkit
'프로그래밍 언어 > Python' 카테고리의 다른 글
[파이썬 개념 정리 8]Seaborn 라이브러리를 이용한 시각화 개념 (2) | 2024.07.05 |
---|---|
[파이썬 개념 정리 7]통계의 기본과 파이썬을 이용한 데이터 시각화 개념 (2) | 2024.07.05 |
[파이썬 개념 정리 6]Matplotlib 라이브러리 개념 정리 (0) | 2024.06.29 |
[파이썬 개념 정리 5]Numpy 라이브러리 개념 정리 (0) | 2024.06.29 |
[파이썬 개념 정리 4]파이썬 응용 개념 정리 (0) | 2024.06.28 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!