Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- GIT
- 영어한글폰트차이
- seaborn
- FinanceDataReader
- 깃허브블로그
- Requests
- 데이터수집
- 120주요질문
- github blog
- Github
- 구글폰트
- 수치형변수
- Beautifulsoup
- numpy
- hackerrank
- 네이버금융
- 비밀지도
- SettingWithCopyWarning
- PANDAS
- Python
- 서울정보소통광장
- 카카오채용코테'
- Repositories
- 프로그래머스
- 숫자형
- googlefont
- dataframe
- 깊은복사
- 한국주식
- 해커랭크
Archives
- Today
- Total
데린이 재영
판다스(Pandas) 이해하기 - Series, DataFrame 본문
목표 설정
- 멋쟁이사자 AI 스쿨 3일차(220921) 학습 내용 정리하기
- Pandas 라이브러리에 대해 이해하기
배운 내용 정리
- 분석에 주로 사용할 라이브러리
- pandas, numpy, matplotlib, seaborn 등
- 시각화 - 심리적인 정보 전달 (다양한 라이브러리로 데이터 표현 가능)
- Matplotlib : 정적인 데이터 표현 (수학적 연산에 대한 그래프를 그려주는 라이브러리)
- Javascript : 동적인 데이터 표현
- Pandas (판다스)
- 엑셀과 같이 행, 열로 된 구조를 다루는 데이터 분석 도구
- DataFrame과 Series 이해 필요
- Numpy (넘파이)
- 파이썬에서 사용할 수 있는 공학용 계산기
- 파이썬은 접착제 언어라서 다른 언어와의 연결을 통해 직간접적으로 성능 향상 가능
- Pandas 주요 기능
- df[[컬럼명, ...]] : 2개 이상의 컬럼 가져오기
- df.loc[] : 행을 기준으로 데이터 가져올 때 사용 (인덱스 값을 기준으로 가져오는 경우)
- df.iloc[행, 열] : 순서를 기준으로 가져올 때 사용 (정수값만 넣을 수 있음)
- df.set_index() : 인덱스 부여하는 기능, 컬럼명을 넣으면 index 값으로 들어감 (이때 loc 사용하면 인덱스 값을 넣을 때 오류남)
- df.reset_index() : index 지정해준거 리셋하는 방법 ( df로 다시 할당해줘야지 저장됨 )
- del df["컬럼명"] 또는 df = df.drop(["컬럼명"], axis=1) : 열을 기준으로 데이터 삭제하는 방법
- del은 df에 다시 부여 X, drop은 df에 다시 할당해줘야 저장됨
- bool index / boolean index ( | : or & : and )
- 예) df[“약품명”].str.contains(“vita|비타”) ▶ 'vita' 또는 '비타' 가 들어간 항만 True, 나머지 False 나옴Pandas 주요 기능
- bool Indexing (dataset)
- 예) df_1 = df[df[“dataset”] == “I”] ▶ df[“dataset”] == “I” 가 True인 것만 df_1로 저장
- df.head() : 상위 5개 데이터 가져오기 ▶ df.iloc[:5] 기능
- df.tail() : 하위 5개 데이터 가져오기 ▶ df.iloc[-5:] 기능
- df.sample(개수) : 랜덤하게 데이터 추출
- random_state : 같은 환경에서 같은 값이 나오게, 실험을 비교하기 위해 사용 (값이 크건 작건 상관 없고, 값 고정 역할)
- frac : 추출할 표본의 비율 (예: frac=0.05, 전체 데이터 중에서 5%만 가져오겠다. frac=1은 전체 데이터를 뜻 함)
- 데이터 요약하기
- df.info() : 데이터 프레임의 정보를 확인 할 수 있음 (결측치 개수, 컬럼별 데이터 타입 등)
- df.shape : 데이터 프레임의 크기를 확인할 수 있음 ▶ (행, 열)로 반환
- df.dtype : 컬럼별 데이터 타입만 확인할 수 있음
- df.describe() : 수치형 변수에 대한 기술통계 값 (총 개수, 평균, 표준편차, 최솟값, 최댓값, 사분위수)
- df. describe(include="object") : 범주형 변수에 대한 기술통계 값 ( 총 개수, 유일값, 최빈값, 최빈값의 빈도수)
- 파생변수 만들기
- df[새로운 컬럼 이름] = df[칼럼].str.lower() ▶ 소문자 변경하여 새로운 컬럼 생성
- df[새로운 컬럼 이름] = df[칼럼].str.contains(문자찾기) ▶ 문자 찾고 새로운 컬럼 생성
- 정렬하기
- df.sort_values(by=컬럼명, ascending=False)
- df.sort_values(by=[컬럼명, ... ], ascending=[False, True])
- ascending : 오름차순/내림차순 설정 가능
- 파일로 저장하기 / 파일 불러오기
- df.to_csv("저장할 파일 이름", index=False, encoding="cp949") ▶ index=False : 저장 시, 인덱스 추가X
- pd.read_csv("파일 이름", encoding="cp949")
- "cp949" : 한글을 지원하는 인코딩 (엑셀 파일로 저장할 때 주로 사용)
- df.corr() : 상관계수를 알 수 있음
- -1 ~ +1 사이의 값을 가짐
- +1에 가까우면 양의 상관을 가짐
- defalt 값 : 피어슨 상관계수
- 데이터 개수 세기
- df.count() : 각 열에 몇 개의 데이터가 있는지 알 수 있음 (Null 값 제외)
- df.size() : 각 열에 몇개의 데이터가 있는지 알 수 잇음 (Null 값 포함)
- df["컬럼명"].value_counts() : 특정 컬럼의 요소별 빈도수 구하기
- df["컬럼명"].value_counts(normalize=True) ▶ 전체 빈도수의 합을 1로 만들어 줌 (정규화)
- Group by
- dataset별 기술통계 구할 수 있음 (한눈에 비교하기 좋음)
Pandas 내용 보충
Series : 1차원 자료구조
- 1차원 리스트와 유사하지만 Series는 index에 이름을 부여할 수 있음
DataFrame : 2차원 자료구조
- 행(row)와 열(column) 으로 이루어 짐
1. Series
📍시리즈 만드는 방법
: dictionary, list, np.array 를 pd.Series로 타입 변환 가능
>>> age = [10, 20, 30]
>>> pd.Series(data=age)
0 10
1 20
2 30
dtype: int64
: index 이름 부여 (dtype은 인덱스의 데이터 타입이 아님)
>>> price = [1200, 2000, 3000]
>>> pd.Series(data=price, index=['떡볶이', '라면', '우동'])
떡볶이 1200
라면 2000
우동 3000
dtype: int64
📍시리즈와 리스트의 차이
(i) 연산
nums = [1, 5, 7, 9, 11]
s_nums = pd.Series(data=nums)
s_nums * 10
>>>
0 10
1 50
2 70
3 90
4 110
dtype: int64
- nums * 10 를 하면, 안에 있는 요소들이 10번 반복됨
- nums + 3 를 하면, 아래와 같은 오류 발생
TypeError: can only concatenate list (not "int") to list
(ii) 인덱스
bunsick_price = [3000, 1500, 4000, 2000, 3500]
bunsick_list = ["떡볶이", "어묵", "순대", "닭강정", "우동"]
bunsick = pd.Series(data=bunsick_price, index=bunsick_list)
bunsick
>>>
떡볶이 3000
어묵 1500
순대 4000
닭강정 2000
우동 3500
dtype: int64
print(bunsick[0])
print(bunsick["닭강정"])
>>>
3000
2000
- 인덱스 값에 이름을 부여할 수 있다.
- dictionary 와 유사하게 값과 이에 대응되는 인덱스 값으로 서로 연결되어 있음
(iii) index와 value
bunsick.index
>>> Index(['떡볶이', '어묵', '순대', '닭강정', '우동'], dtype='object')
bunsick.values
>>> array([3000, 1500, 4000, 2000, 3500])
- 각 데이터 타입은 pandas.core.indexes.base.Index, numpy.ndarray 이다.
2. DataFrame
📍데이터프레임 만드는 방법
pd.DataFrame(data, index)
📍데이터프레임 속성값
- index : index 반환
- columns : 컬럼 명 반환
- values : 각 값들을 반환
- dtypes : 컬럼 데이터 타입을 반환
- T : 데이터프레임 행, 열 치환
📍데이터프레임 정렬
- sort_index() : 행으로 정렬(axis=0), 열로 정렬(axis=1)
- sort_values() : 데이터 값을 기준으로 정렬
- 오름차순 : ascending=True, 내림차순 : ascending=False
MultiIndex 란?
정렬할 때, 값들이 비교하기에 적절하지 않은 상태라면?
예를 들어, 1, 3, "4" | A c D e 등의 형태를 정렬해야한다면?
=> lambda를 이용해 같은 형태로 변환 후 정렬하기
df = pd.DataFrame({"A": [5, 1, 3, 4]}, index=['b', 'A', 'E', 'd'])
df.sort_index(key=lambda x: x.str.lower())
>>>>
a
A 1
b 5
d 4
E 3
📍데이터 선택 방법
- loc : 라벨값 기반의 2차원 인덱싱
- iloc : 순서를 나타내는 정수 기반의 2차원 인덱싱
- at : 라벨값 기반의 2차원 인덱싱 (하나의 스칼라 값만 찾음)
📍데이터 추가
- Column 추가 : df['column명'] = 추가할 데이터
- Index 추가 : df.loc['index명'] = 추가할 데이터
📍데이터 삭제
: drop() : 데이터 삭제 함수
대표적인 매개 변수
- axis = 0 or 1 (행:0, 열:1 을 기준으로 삭제)
- index : 특정 index 에 대해 데이터 삭제
- columns : 특정 column 에 대해 데이터 삭제
- inplace = True or False : 원본 데이터를 수정할 지, 말 지에 대해 선택
📍누락 데이터 처리
: Null, NaN을 처리할 때 사용하는 함수
- dropna() : 누락된 데이터가 있는 축 제외 (매개변수 : axis, how, thresh, inplace 등)
- fillna() : 누락된 데이터를 특정 값으로 대체 (ex: fillna(0))
- isnull() : Null 값인지 확인 (True, False 로 반환)
- notnull() : Null 값이 아닌지 확인 (True, False로 반환)
📍기술 통계 함수
- sum : 합
- mean : 평균
- count : Null 값을 제외한 데이터의 수를 반환
- argmin, argmax : 최소, 최대를 갖고 있는 데이터의 위치를 반환
- quantile : 0부터 1 까지의 분위수를 계산
- describe : 시리즈나 데이터프레임의 각 칼럼에 대한 요약 통계를 계산
- var / std : 표준 분산 / 표준 정규 분산
- cumsum / cumprod : 누적 합 / 누적 곱
- pct_change : 퍼센트 변화율
참고문헌
(1) 추천하는 사이트 - 정리가 잘 되어있음
https://harryp.tistory.com/868
(2) 파이썬으로 배우는 알고리즘 트레이닝
(3) 판다스 공식 문서
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.at.html
(4) Group by 그림 출처
https://pandas.pydata.org/docs/getting_started/intro_tutorials/06_calculate_statistics.html
'멋사 AI school 7기 > TIL' 카테고리의 다른 글
FinanceDataReader 란 ? - 한국 주식 정보 가져오기 (0) | 2022.10.09 |
---|---|
씨본(Seaborn) 시각화 도구 이해하기 (2) (0) | 2022.10.09 |
씨본(Seaborn) 시각화 도구 이해하기 (1) (0) | 2022.10.08 |
파이썬(Python) 제어문과 함수 이해하기 - 조건문/반복문/함수 (1) | 2022.10.08 |
파이썬(Python) 자료형 이해하기 - Number/String/List/Tuple/Dictionary/Set/Bool (1) | 2022.10.08 |
Comments