본문 바로가기

Python/▶ Python & Pandas

5주차 TIL ( Pandas : 시각화 )

728x90

실습 파일(.ipynb)과 데이터 파일(.csv)을 같은 경로에 두기!

더보기
▣ 설치했음에도 불구하고 No Module Not Found 오류가 발생
 - 보통 여러 버전의 파이썬 혹은 아나콘다 등이 설치되어 있는데 
   현재 사용하고 있는 위치가 아닌 다른 위치에 설치되었을 때 이런 오류가 발생

  - 보통 오류 메시지에 보면 어느 경로에 없다는 메시지가 나오게 됩니다. 
  해당 경로에 가서 보면 여러 라이브러리가 설치되어있는 폴더를 볼 수 있는데, 
  해당 위치에 사용하고자 하는 라이브러리를 다운로드 받아 옮겨주면 보통 import 하면 해결

이번 주 첫 시각화 수업 듣는데 오후에 판다스버전때문에 수업 거의 하나도 못들었다..ㅎㅎㅎ

4시가 넘어가는 시각이어서 망정이지 오전이었으면 진짜 멘탈 날아갈뻔..

그래서 저녁먹고 아예 싹 지우고 다시 다운받았다.

보니까 아나콘다 파일말고 파일이 하나 더 있었는데 그 경로로 패키지나 라이브러리들이 다운되어있어서 업그레이드도 되지 않고 충돌 일어난 것같다.

이제 깔-끔

 

Matplotlib

  •  파이썬의 대표적인 시각화 라이브러리 ( 정적인 특징 )
  •  아쉽게도 한글 지원은 되지 않음
import matplotlib.pyplot as plte

 

matplotlib 에 한글적용

import koreanize_matplotlib

 

 

그래프에 retina display 적용

# 시각화 했을 때 디스플레이 선명도 up
%config InlineBackend.figure_format = 'retina'

 

glob

  • 특정경로 내 파일 목록 확인
# 파일 이름이 길거나 특수문자 등이 포함되었을 때 직접 타이핑하면 한 글자라도 틀리면 오류가 납니다.

from glob import glob

files = glob("data/seoul-covid*.csv")
file_paths = sorted(files)
file_paths

 

nunique

  • 지정 컬럼의 유일 값 확인 (결측치 포함 X)
# 전체 데이터프레임의 행의 갯수와 "연번"의 유일값을 확인하면 중복값이 없는 것으로 확인
# shape와 nunique()로 행의 수와 유일값이 일치하는지 확인

df["연번"].nunique()

 

set_index()

  • ( )안에 컬럼 넣어주면 그 컬럼으로 인덱스 설정
  • 인덱스로 지정하고 꼭 그DataFrame에 다시 할당해주어야함..

 

sort_index()

  • 인덱스 값 기준으로 정렬

 

isnull(). +. sum()

  • .isnull()로 결측치 구함. 결측치들의 합계 구하기위해 .sum()
# 결측치의 합계를 구합니다.
# isnull()
df.isnull().sum()

 

isnull(). +. mean()

  • .isnull()로 결측치 구함. 결측치들의 평균 구하기위해 .mean()
# 평균(mean)을 통해 결측치의 비율을 구합니다.
df.isnull().mean()

 

value_counts()

  • 해당 컬럼의 빈도수 구하는 식
  • value_counts 는 없는식임 . 오류.
  • 빈도 비율  value_counts(normalize = 1 ( or True))

df.hist ( bins )

  • bins = 막대 개수

히스토그램으로 얻을 수있는 정보 :

1) 시간경과에 따른 변화 분석(시간 변수가 있는 경우)
2) 수치형이나 범주형 변수에 상관없이 해당 변수의 빈도수 파악 가능 
3) 수치데이터여도 연속된 데이터가 아니라 끊어진 데이터가 있다는 것 파악 가능
4) 연속적 데이터인 경우 구간 설정하여 원하는 구간마다의 빈도수 확인 가능
5) 수치데이터 임에도 변주형으로 볼 수 있는 데이터도 있다는 것 확인 가능

 

axhline , axvline (수평선, 수직선)

  • plt.axhline( c : 컬러 , ls : 라인 스타일)

 

 

crosstab

  • 두 개의 변수에 대한 빈도 수 구할 때 사용

pd.crosstab()의 소스코드를 보게 되면 내부 pd.pivot_table() 
pd.crosstab() 은 pivot_table()을 사용하기 쉽게 한번 더 감싸(wrapping) 놓은 기능
pd.crosstab() > pivot_table() 

 

 

  • crosstab의 Normalize

 normalize : bool, {'all', 'index', 'columns'}, or {0,1}, default False
    
 Normalize by dividing all values by the sum of values.

    - If passed 'all' or `True`, will normalize over all values. 행과 열 전체에 대한 비율
    - If passed 'index' will normalize over each row. 행에 대한 비율
    - If passed 'columns' will normalize over each column. 열에 대한 비율

 

Boolean Indexing으로 특정 조건 값 찾기

  • .loc[조건, 열]

 

'강남구'에서 '일요일'날 확진

강남구에서 일요일날 확진된 사람들의 데이터
df.loc[df['거주구'] == '강남구' & df['요일명'] =='일', ['거주구', '요일명']]

근데 여기서 각 조건에 ()씌워주지 않으면 에러 발생

df.loc[(df['거주구'] == '강남구') & (df['요일명'] =='일'), ['거주구', '요일명']]

 

 

거주구 '강남구'이며 여행력이 '일본'

거주구가 강남구이며, 여행력이 일본인 데이터 찾기
# = 할당
# == 같음을 비교
# != 다름을 비교

강남 = df["거주구"] == "강남구"
일본 = df["여행력"] == "일본"

df[강남 & 일본]

 

isin()

  • 컬럼명. isin([조건1, 조건2, ...]) =>조건들은 리스트 형태로 묶어줌

 거주구 '강남구','송파구','서초구' 인 사람들의 접촉력

df.loc[df["거주구"].isin(["강남구", "송파구", "서초구"]), "접촉력"].value_counts()

 

str.contains()

  • 찾으려는 문자열 중 일부 문자열 값으로 찾음

 

 거주구 '강남구','송파구','서초구' 인 사람들의 접촉력

# | => or
# & => and
# '강남' | '서초' 인줄 알았는데 아님
# unsupported operand type(s) for |: 'str' and 'str' 이런 에러 뜸
df.loc[df["거주구"].str.contains("강남|서초|송파"), "거주구"].value_counts()

 

~조건 : 반대값 찾기

#  접촉력이 해외유입인 데이터에 대해 "해외유입" 변수 만들기
df['해외유입'] = df['접촉력'] == '해외유입'
df.loc[df['해외유입'], '국내해외'] = '해외'
df.loc[~df['해외유입'], '국내해외'] = '국내'

이거 올린 이유는 수업시간에는 분명 '국내해외'라는 컬럼이 없었는데 어떻게 된거지? 했는데

코드 치다 보니까 .loc(조건, 열) 하면서 생성된 것 같다.

 

 

 

❗ str.contains()와 isin() 의 차이
str.contains() : 찾으려는 문자열을 포함만 해도 반환 가능 , 문자열 억세서이기때문에 시리즈에서만사용가능
isin() : 찾으려는 문자열과 정확히 일치해야 반환 가능 

 

 

pivot_table

  • pivot_table()은 groupby()를 사용하기 쉽게 만들어 놓은 기능
# 거주구별 해외유입 여부에 따른 빈도수 구하기
# gu_over_count
# pivot_table 은 그래도 직관적인 것 같다...
pd.pivot_table(data=df, index='거주구',
                              columns='국내해외', values='환자',
                              aggfunc = 'count')

  pivot, pivot_table 공통점 index, columns, values 를 공통적으로 사용
 pivot 은 형태 변환만 제공 테이블 재배치, 연산 제공 x . pivot_table 은 연산을 함께 제공합니다.
 pivot_table 은 aggfunc 등의 기능을 제공합니다.

❗ values에 기준 컬럼을 지정한다고 했을 때는 주로 "환자" 컬럼같은 유니크하고 결측치도 없는 것으로 지정

 

 

 

💡 +시각화 변경 시리즈 💡 

  • secondary_y : 우측에 지정 컬럼으로 보조 축 설정
  • stacked : 데이터 겹쳐서 보이게하기
  • subplots = True : 밑에 별도로 하나 더 생성
  • (앞에 plot X) style.background_gradient : 바둑판처럼 생성되어 빈도 수 높은 곳 색깔 진해짐
  • (앞에 plot X)style.bar : bar가 바둑판위에서 생성됨

 

실습자료 복습하다가 궁금한 점

date_range로 전체 기간 데이터 만들기 부분에서 
all_day = last_Day와 first_day 찾아서 pd.date_range로 기간설정 
#type = datetime
그 이후에 데이터프레임으로 만들어 줄 때 

all_day.to_frame() => 이 방식으로 하면 값잘나옴
pd.DataFrame(all_day) => 이 방식으로 하면 안 나옴

무슨 차이이지....

# all_day.to_frame()

# pd.DataFrame(all_day)

 

crosstab :

 pd.crosstab()의 소스코드를 보게 되면 내부 pd.pivot_table() 
 pd.crosstab() 은 pivot_table()을 사용하기 쉽게 한번 더 감싸(wrapping) 놓은 기능
 pd.crosstab() > pivot_table() 

 

pivot_table:

  pivot, pivot_table 공통점 index, columns, values 를 공통적으로 사용
  pivot 은 형태 변환만 제공 테이블 재배치, 연산 제공 x . pivot_table 은 연산을 함께 제공
  pivot_table 은 aggfunc 등의 기능을 제공합니다.

 

728x90

'Python > ▶ Python & Pandas' 카테고리의 다른 글

6주차 Seaborn  (0) 2023.02.06
5주차 plotly  (1) 2023.02.05
4주차 WIL  (1) 2023.01.19
TIL ②일차  (0) 2023.01.11
TIL ①-2일차  (0) 2023.01.10