✅실습 파일(.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)
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/009.gif)
❗ 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 등의 기능을 제공합니다.
'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 |