[day5][멋사AI] 판다스 정리

티나(Tina)·2022년 9월 22일

멋사AI

목록 보기
1/41

Pandas

dataFrame : 표라고 생각하면 된다.

데이터 타입이 하나라도 바뀌면 전체 serise 의 타입도 바뀐다.

  • 데이터 중에 하나가 np.nan 일 경우 전체 타입 dtype: float64

drop : 실수로 컬럼을 잘못 추가했거나 삭제하고자 할 때

axis 0:행, 1:컬럼을 의미합니다.
df = df.drop("종류2", axis=1) #종류2 컬럼을 지우겠다는 의미

inplace 는 지양되는 기능이다.

method traning 할 때 잘 동작하지 않기 때문이다.

df.shape  

df의 프레임 크기를 출력한다.
(8,4) 와 같은 형태로 출력되는데
해당 값은 변하지 않을거기 때문에 튜플로 반환된다.

df.describe  

기술 통계값을 보여준다.

열을 가지고 오는 방법

df["가격"] #이런식으로 dictionary와 사용법이 같다.
df[["가격", "약품명"]] #여러 컬럼을 가지고 오고 싶다면 이렇게 묶어준다.

행을 가지고 오는 방법

df.loc[1] #loc 는 locate 라는 의미이다. 인덱스 값으로 가져온다.
df.loc[[0, 2, 5]] 
iloc[0]
iloc[0:5]
#인덱스 순서상에 맞게 가져 오는 방법
loc["소화제"]
#인덱스를 가져오는 방법
df.loc[5:6]
df.set_index("약품명")

이렇게 하면 "약품명"을 index 를 지정할 수 있다.
set_index에는 컬럼명만 넣을 수 있다.
set_index는 dataFrame내의 열을 이용한 인덱스를 설정하는 함수이다.
유니크값이 아니더라도 인덱스로 지정 할 수 있다.

df.index  
#인덱스를 확인하는 방법

#인덱스를 되돌리는 방법  
df = df.reset\_index()  
#여러번 실행하면 여러개의 인덱스가 생긴다.  

컬럼을 지울 때 파이썬의 라이브러리 기능으로도 지울 수 있다.
del df["index"]
판다스에서 제공하는 기능을 사용 할 때는 drop
df = df.drop("index", axis=1)

행과 열 함께 가져오기

df.iloc[0,0]
df.iloc[:2, :2]

df.loc[0,"약품명"]
df.loc[[0,2,5], "약품명"]
df.loc[[0, 2, 5], ["약품명", "가격"]]
df.loc[5:6, ["약품명", "가격"]]

boolindex

판다스에서 인덱스를 True False 로 만들어서 가져오는 방법
df[df["약품명_소문자"].str.contains("vita|비타")]
df[df["가격"] >= 3000]

위의df는 df[시리즈로 True|False] 인 상태인거다. True 인 것만 노출된다.

구현되어있는 함수를 확인해보자
dir("약품명")[-10:]

시리즈 접근자(판다스에서 Series에서 제공하는)
https://pandas.pydata.org/docs/reference/series.html#api-series-str

| 이건 파이프라고 부르는데 or 를 의미한다.
& 이건 엔퍼센트라고 부르는데 and 를 의미한다.

정렬하기

sort_values
df.sort_values?

이런식으로 문서를 확인하는 습관을 갖자
df.sort_values(by="가격", ascending=False)
#오름차순으로 정렬한다.

df.sort_values(by=["가격", "약품명"], ascending=[False, True])
#여러 컬럼으로 정렬할 수 있다. 컬럼별로도 오름차순이나 내림차순을 정리 할 수 있다.


dataFrame을 파일로 저장할 때
df.to_csv("drug.csv", index=False)
저장된 파일을 불러올 때
pd.read_csv("drug.csv")

한글 인코딩 하려면 이렇게 해주면 된다.
encoding="cp949"

컬럼 이름 수정하는 법

df.columns = ['약품명', '가격', '세금', '지역', '종류', '약품명_소문자_1']
컬럼의 갯수와 같아야 한다.


앤스컴 콰르텔

https://ko.wikipedia.org/wiki/%EC%95%A4%EC%8A%A4%EC%BB%B4_%EC%BD%B0%EB%A5%B4%ED%85%9F

: 기술통계량은 유사하지만 분포나 그래프는 매우 다른 4개의 데이터셋이다
데이터 시각화가 중요하다.
기술통계량은 거의 동일 하더라도 시각화 해보면 완전히 다르게 나타날 수도 있다.

seaborn : 파이썬 데이터 시각화 도구
https://seaborn.pydata.org/examples/anscombes_quartet.html

import seaborn as sns

seaborn 깃헙에 있는 데이터를 가져와서 사용 할 수 있다.
https://github.com/mwaskom/seaborn-data

sns.load_dataset("anscombe")
pd.read_csv("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/anscombe.csv")

동일한 역할을 한다.

데이터의 일부만 가져오기

df.head() # 위에서 다섯개
df.tail() #아래에서 다섯개
이렇게 숫자를 지정 할 수 있다.
df.head(2)
df.tail(2)

df.iloc[:5, :3]
df.loc[:5, "x":"y"]

df.sample #랜덤하게 가지고 온다.
df.sample(3) #갯수를 정 할 수도 있다.
df.sample(frac=0.05, random_state=42)
#frac = 비율
# random_state = random의 seed 값? 랜덤값을 고정시키는 역할만 한다.

기본정보보기

df.info()

기술통계보기

df.describe() #숫자
df.describe(include="object") #객체
df["dataset"].unique() #해당 컬럼의 unique 값을 알 수 있다.
#bool Indexing dataFrame
df_1 = df[df["dataset"] =="I"]

df_1.corr
상관계수
1의 가까운 값이면 y=x 그래프

df_1.corr()

빈도수 구하기

df["dataset"].value_counts()
df["dataset"].value_counts(normalize=True) #이거는 비율로 구하기

group by

df.groupby("dataset")[["x", "y"]].describe()
df.groupby("dataset").describe()
df.groupby("dataset").corr()

막대 그래프는 범주형 데이터에 대해서 수치값을 표시 할 때 사용한다.
그래프는 수직이나 수평으로 그려볼 수 있다.
막대그래프의 단점

추천 책 - 기술 통계 부분 확인하자

https://www.hira.or.kr/ebooksc/ebook_659/ebook_659_202109300534201190.pdf

(다들 이걸 어떻게 잘 알지!?!? 난 둘다 틀림ㅜ)
dataset 은 질적 자료에 순서 자료이다.
x,y 는 양적자료의 연속자료이다.

relplot : 두 가지 변수의 관계를 나타내기 위해 주로 사용
displot : 변수 하나 혹은 두개의 값 분포를 나타내기 위해 주로 사용
catplot : 범주형 변수와 연속형 변수간의 관계를 나타내기 위해 주로 사용

참고
https://www.autodesk.com/research/publications/same-stats-different-graphs

박스플롯의 단점은?
4분위 값이 변하지 않으면 데이터의 변화가 드러나지 않는다.
\=로보스터하다.

kde - 밀도를 추정한것, 히스토그램을 부드러운 곡선을 표현한 것

써머리

  • df.width 와같이 컬럼명을 불러올 수 있는데 사용을 추천하지 않는다.
    • 컬럼이름에 띄어쓰기나 특수문자가 들어가면 문제가 생길 수 있기 때문이다.
  • 쿼리기능도 권장하지 않음
  • seaborn 으로 시각화 해보았다.
  • EDA 여러가지 방법으로 유연하게 가설을 설정하여 유추한다. 검정된 이론과 모형이 있지 않다!
  • 표준편차가 클 수록 변량과의 거리가 멀다.
  • 도수분포표는 질적데이터에도 사용할 수 있다.
profile
열심히 사는 중

0개의 댓글