[TIL] 230131 파이썬 데이터시각화(1)
by Holly Yoon파이썬 라이브러리
- pandas : 파이썬에서 사용하는 데이터분석 라이브러리, 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있음
- numpy : 다차원의 연산 → 수식계산 지원
- matplotlib : MATLAB과 비슷하게 명령어 스타일로 동작하는 함수의 모음
- 매서드체이닝하면 도움말이 잘 작동 안할 때
#?-도움말, ??-소스코드 보기, help()
df.sort_index?
- 히스토그램의 장점
- 끊어진 수치 데이터를 볼 수 있음 → 범주형 데이터
- 변수의 빈도수를 알 수 있고, 전체적인 분포를 알 수 있음
- 데이터의 대칭성, 시간 경과에 따른 변화를 분석할 수 있음
0301-실습
- 기준선 넣기
gu_count.plot.bar()
plt.axhline(5000, c="k", ls=":") # r->red, b->blue, k->black
- 연도/월 두 변수에 대한 빈도수 구하기
df_ym = pd.crosstab(index=df['연도'], columns=df['월'])
- 시각화 Case1 2중축
df_ym.T.plot(kind='bar', rot=0, figsize=(12,3), secondary_y=df['연도'][1])
- 시각화 Case2 subplots
df_ym.T.plot(kind='bar', rot=0, figsize=(12,3), subplots=True)
- 연도/요일 crosstab만들고 요일명 붙이기
df_yd= pd.crosstab(index=df['연도'], columns=df['요일'], normalize=True)*100
weekday_list = list('월화수목금토일')
df_yd.columns=weekday_list
df_yd
- 테이블 시각화 (판다스 공식 문서)-background_gradient
df_guym = pd.crosstab(index=df['거주구'], columns=df['연도월'])
df_guym.style.background_gradient()
- boolean indexing (1)
# 강남구에서 "일요일"에 확진된 데이터만 찾기
# .loc[행]
df[(df['거주구']=='강남구') & (df['요일명']=='일')]
# .loc[조건, 열]
df.loc[(df['거주구']=='강남구') & (df['요일명']=='일'),['거주구','요일명']]
- boolean indexing (2) - 조건문 별도로 남기기
강남 = df['거주구']=='강남구'
일본 = df['여행력']=='일본'
df[강남&일본]
- str.contains() - 대소문자가 섞여있을 때, 변경해주기
#예시1
df['접촉력_대문자'] = df['접촉력'].str.upper()
df.loc[df['접촉력_대문자'].str.contains("PC"),'접촉력'].value_counts()
#예시2
df.loc[df['거주구'].str.contains('강남구|송파구|서초구'), '접촉력'].value_counts()
- isin - 데이터 프레임에서도 사용가능, .str은 시리즈에만 사용가능
df.loc[df['거주구'].isin(['강남구','서초구','송파구']),'접촉력'].value_counts().to_frame()
- 새로운 파생변수 만들기
df['해외유입'] = df['접촉력']=='해외유입'
df.loc[df['해외유입'],'국내해외']='해외'
df.loc[~df['해외유입'],'국내해외']='국내'
- 국내/해외 발생자 수
df_guaboard=pd.crosstab(df['거주구'],df['국내해외'])
df_guaboard.plot(kind='bar',subplots=True)
- 비율 구하기 - 도메인에 따라 비율을 구하는 방법이 다를 수 있음
df_guaboard['해외비율'] = df_guaboard['해외']/df_guaboard['국내']
- 막대 그래프
df_guaboard[['국내','해외']].plot(kind='barh', stacked=True)
- pivot/pivot_table 공통점은 index, columns를 사용할 수 있다. pivot은 형태 반환만 제공, pivot_table은 연산을 함께 제공.
- 요일/거주구별 환자 수 - style.bar()
weekday_list = list('월화수목금토일')
df_guday = pd.pivot_table(data=df, index='거주구', columns='요일', values='환자' , aggfunc='count')
df_guday.columns = weekday_list
df_guday.style.bar()
- groupby()
gu_over = df.groupby(by=['거주구','국내해외'])['환자'].count()
gu_over.unstack(level=-1)
df.groupby(by=['연도','월'])['국내해외'].describe()
0302-증권데이터
import pandas as pd
import numpy as np
!pip install -U finance-datareader
import FinanceDataReader as fdr
url = "<https://finance.naver.com/sise/entryJongmok.naver?&page=1>"
print(url)
- 필요없는 열 삭제
df_top10 = pd.read_html(url)[0].dropna()
- 종목명 코드만 가져오기
df_krx = fdr.StockListing('KRX')[['Name','Code']]
- merge() - 종목이름으로 두 테이블 합치기
df_10 = df_top10.merge(df_krx, left_on='종목별', right_on='Name')[['Name','Code']]
df_10
- 일별 종가 데이터 테이블 만들기
#fdr.DataReader('005930', start='2022')
item_list = [fdr.DataReader(code, start='2022')['Close'] for code in df_10['Code']]
df = pd.concat(item_list, axis=1)
df.columns=df_10['Name']
- 다양한 그래프 스타일 사용하기
#폰트를 포함하고 있는 스타일을 지정시, 폰트 설정이 초기화됨.
print(plt.style.available)
# 한글폰트 사용을 위해 설치
!pip install koreanize-matplotlib
import koreanize_matplotlib
# 그래프에 retina display 적용
%config InlineBackend.figure_format = 'retina'
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
- 여러 종목 시각화
df.plot(figsize=(10,4), lw=2)
plt.legend(bbox_to_anchor=(1,1))
- 2가지 축으로 비교하기 (삼성vslg화학)
df[['삼성전자','LG화학']].plot(kind='line', secondary_y='LG화학')
- 파이썬 라이브러리
- pandas : 파이썬에서 사용하는 데이터분석 라이브러리, 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있음
- numpy : 다차원의 연산 → 수식계산 지원
- matplotlib : MATLAB과 비슷하게 명령어 스타일로 동작하는 함수의 모음
- 매서드체이닝하면 도움말이 잘 작동 안할 때
#?-도움말, ??-소스코드 보기, help()
df.sort_index?
- 히스토그램의 장점
- 끊어진 수치 데이터를 볼 수 있음 → 범주형 데이터
- 변수의 빈도수를 알 수 있고, 전체적인 분포를 알 수 있음
- 데이터의 대칭성, 시간 경과에 따른 변화를 분석할 수 있음
0301-실습
- 기준선 넣기
gu_count.plot.bar()
plt.axhline(5000, c="k", ls=":") # r->red, b->blue, k->black
- 연도/월 두 변수에 대한 빈도수 구하기
df_ym = pd.crosstab(index=df['연도'], columns=df['월'])
- 시각화 Case1 2중축
df_ym.T.plot(kind='bar', rot=0, figsize=(12,3), secondary_y=df['연도'][1])
- 시각화 Case2 subplots
df_ym.T.plot(kind='bar', rot=0, figsize=(12,3), subplots=True)
- 연도/요일 crosstab만들고 요일명 붙이기
df_yd= pd.crosstab(index=df['연도'], columns=df['요일'], normalize=True)*100
weekday_list = list('월화수목금토일')
df_yd.columns=weekday_list
df_yd
- 테이블 시각화 (판다스 공식 문서)-background_gradient
df_guym = pd.crosstab(index=df['거주구'], columns=df['연도월'])
df_guym.style.background_gradient()
- boolean indexing (1)
# 강남구에서 "일요일"에 확진된 데이터만 찾기
# .loc[행]
df[(df['거주구']=='강남구') & (df['요일명']=='일')]
# .loc[조건, 열]
df.loc[(df['거주구']=='강남구') & (df['요일명']=='일'),['거주구','요일명']]
- boolean indexing (2) - 조건문 별도로 남기기
강남 = df['거주구']=='강남구'
일본 = df['여행력']=='일본'
df[강남&일본]
- str.contains() - 대소문자가 섞여있을 때, 변경해주기
#예시1
df['접촉력_대문자'] = df['접촉력'].str.upper()
df.loc[df['접촉력_대문자'].str.contains("PC"),'접촉력'].value_counts()
#예시2
df.loc[df['거주구'].str.contains('강남구|송파구|서초구'), '접촉력'].value_counts()
- isin - 데이터 프레임에서도 사용가능, .str은 시리즈에만 사용가능
df.loc[df['거주구'].isin(['강남구','서초구','송파구']),'접촉력'].value_counts().to_frame()
- 새로운 파생변수 만들기
df['해외유입'] = df['접촉력']=='해외유입'
df.loc[df['해외유입'],'국내해외']='해외'
df.loc[~df['해외유입'],'국내해외']='국내'
- 국내/해외 발생자 수
df_guaboard=pd.crosstab(df['거주구'],df['국내해외'])
df_guaboard.plot(kind='bar',subplots=True)
- 비율 구하기 - 도메인에 따라 비율을 구하는 방법이 다를 수 있음
df_guaboard['해외비율'] = df_guaboard['해외']/df_guaboard['국내']
- 막대 그래프
df_guaboard[['국내','해외']].plot(kind='barh', stacked=True)
- pivot/pivot_table 공통점은 index, columns를 사용할 수 있다. pivot은 형태 반환만 제공, pivot_table은 연산을 함께 제공.
- 요일/거주구별 환자 수 - style.bar()
weekday_list = list('월화수목금토일')
df_guday = pd.pivot_table(data=df, index='거주구', columns='요일', values='환자' , aggfunc='count')
df_guday.columns = weekday_list
df_guday.style.bar()
- groupby()
gu_over = df.groupby(by=['거주구','국내해외'])['환자'].count()
gu_over.unstack(level=-1)
df.groupby(by=['연도','월'])['국내해외'].describe()
0302-증권데이터
import pandas as pd
import numpy as np
!pip install -U finance-datareader
import FinanceDataReader as fdr
url = "<https://finance.naver.com/sise/entryJongmok.naver?&page=1>"
print(url)
- 필요없는 열 삭제
df_top10 = pd.read_html(url)[0].dropna()
- 종목명 코드만 가져오기
df_krx = fdr.StockListing('KRX')[['Name','Code']]
- merge() - 종목이름으로 두 테이블 합치기
df_10 = df_top10.merge(df_krx, left_on='종목별', right_on='Name')[['Name','Code']]
df_10
- 일별 종가 데이터 테이블 만들기
#fdr.DataReader('005930', start='2022')
item_list = [fdr.DataReader(code, start='2022')['Close'] for code in df_10['Code']]
df = pd.concat(item_list, axis=1)
df.columns=df_10['Name']
- 다양한 그래프 스타일 사용하기
#폰트를 포함하고 있는 스타일을 지정시, 폰트 설정이 초기화됨.
print(plt.style.available)
# 한글폰트 사용을 위해 설치
!pip install koreanize-matplotlib
import koreanize_matplotlib
# 그래프에 retina display 적용
%config InlineBackend.figure_format = 'retina'
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
- 여러 종목 시각화
df.plot(figsize=(10,4), lw=2)
plt.legend(bbox_to_anchor=(1,1))
- 2가지 축으로 비교하기 (삼성vslg화학)
df[['삼성전자','LG화학']].plot(kind='line', secondary_y='LG화학')
- 파이썬 라이브러리
- pandas : 파이썬에서 사용하는 데이터분석 라이브러리, 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있음
- numpy : 다차원의 연산 → 수식계산 지원
- matplotlib : MATLAB과 비슷하게 명령어 스타일로 동작하는 함수의 모음
- 매서드체이닝하면 도움말이 잘 작동 안할 때
#?-도움말, ??-소스코드 보기, help()
df.sort_index?
- 히스토그램의 장점
- 끊어진 수치 데이터를 볼 수 있음 → 범주형 데이터
- 변수의 빈도수를 알 수 있고, 전체적인 분포를 알 수 있음
- 데이터의 대칭성, 시간 경과에 따른 변화를 분석할 수 있음
0301-실습
- 기준선 넣기
gu_count.plot.bar()
plt.axhline(5000, c="k", ls=":") # r->red, b->blue, k->black
- 연도/월 두 변수에 대한 빈도수 구하기
df_ym = pd.crosstab(index=df['연도'], columns=df['월'])
- 시각화 Case1 2중축
df_ym.T.plot(kind='bar', rot=0, figsize=(12,3), secondary_y=df['연도'][1])
- 시각화 Case2 subplots
df_ym.T.plot(kind='bar', rot=0, figsize=(12,3), subplots=True)
- 연도/요일 crosstab만들고 요일명 붙이기
df_yd= pd.crosstab(index=df['연도'], columns=df['요일'], normalize=True)*100
weekday_list = list('월화수목금토일')
df_yd.columns=weekday_list
df_yd
- 테이블 시각화 (판다스 공식 문서)-background_gradient
df_guym = pd.crosstab(index=df['거주구'], columns=df['연도월'])
df_guym.style.background_gradient()
- boolean indexing (1)
# 강남구에서 "일요일"에 확진된 데이터만 찾기
# .loc[행]
df[(df['거주구']=='강남구') & (df['요일명']=='일')]
# .loc[조건, 열]
df.loc[(df['거주구']=='강남구') & (df['요일명']=='일'),['거주구','요일명']]
- boolean indexing (2) - 조건문 별도로 남기기
강남 = df['거주구']=='강남구'
일본 = df['여행력']=='일본'
df[강남&일본]
- str.contains() - 대소문자가 섞여있을 때, 변경해주기
#예시1
df['접촉력_대문자'] = df['접촉력'].str.upper()
df.loc[df['접촉력_대문자'].str.contains("PC"),'접촉력'].value_counts()
#예시2
df.loc[df['거주구'].str.contains('강남구|송파구|서초구'), '접촉력'].value_counts()
- isin - 데이터 프레임에서도 사용가능, .str은 시리즈에만 사용가능
df.loc[df['거주구'].isin(['강남구','서초구','송파구']),'접촉력'].value_counts().to_frame()
- 새로운 파생변수 만들기
df['해외유입'] = df['접촉력']=='해외유입'
df.loc[df['해외유입'],'국내해외']='해외'
df.loc[~df['해외유입'],'국내해외']='국내'
- 국내/해외 발생자 수
df_guaboard=pd.crosstab(df['거주구'],df['국내해외'])
df_guaboard.plot(kind='bar',subplots=True)
- 비율 구하기 - 도메인에 따라 비율을 구하는 방법이 다를 수 있음
df_guaboard['해외비율'] = df_guaboard['해외']/df_guaboard['국내']
- 막대 그래프
df_guaboard[['국내','해외']].plot(kind='barh', stacked=True)
- pivot/pivot_table 공통점은 index, columns를 사용할 수 있다. pivot은 형태 반환만 제공, pivot_table은 연산을 함께 제공.
- 요일/거주구별 환자 수 - style.bar()
weekday_list = list('월화수목금토일')
df_guday = pd.pivot_table(data=df, index='거주구', columns='요일', values='환자' , aggfunc='count')
df_guday.columns = weekday_list
df_guday.style.bar()
- groupby()
gu_over = df.groupby(by=['거주구','국내해외'])['환자'].count()
gu_over.unstack(level=-1)
df.groupby(by=['연도','월'])['국내해외'].describe()
0302-증권데이터
import pandas as pd
import numpy as np
!pip install -U finance-datareader
import FinanceDataReader as fdr
url = "<https://finance.naver.com/sise/entryJongmok.naver?&page=1>"
print(url)
- 필요없는 열 삭제
df_top10 = pd.read_html(url)[0].dropna()
- 종목명 코드만 가져오기
df_krx = fdr.StockListing('KRX')[['Name','Code']]
- merge() - 종목이름으로 두 테이블 합치기
df_10 = df_top10.merge(df_krx, left_on='종목별', right_on='Name')[['Name','Code']]
df_10
- 일별 종가 데이터 테이블 만들기
#fdr.DataReader('005930', start='2022')
item_list = [fdr.DataReader(code, start='2022')['Close'] for code in df_10['Code']]
df = pd.concat(item_list, axis=1)
df.columns=df_10['Name']
- 다양한 그래프 스타일 사용하기
#폰트를 포함하고 있는 스타일을 지정시, 폰트 설정이 초기화됨.
print(plt.style.available)
# 한글폰트 사용을 위해 설치
!pip install koreanize-matplotlib
import koreanize_matplotlib
# 그래프에 retina display 적용
%config InlineBackend.figure_format = 'retina'
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
- 여러 종목 시각화
df.plot(figsize=(10,4), lw=2)
plt.legend(bbox_to_anchor=(1,1))
- 2가지 축으로 비교하기 (삼성vslg화학)
df[['삼성전자','LG화학']].plot(kind='line', secondary_y='LG화학')
'Python' 카테고리의 다른 글
데이터 시각화 교과서 요약 (0) | 2023.02.09 |
---|---|
Seaborn 튜토리얼 공부(1) (0) | 2023.02.02 |
(8) 프로그래머스 코딩테스트 Lv1 - 파이썬 (0) | 2023.01.17 |
파이썬 복습 - Unpack/예외처리 (0) | 2023.01.08 |
(7) 프로그래머스 코딩테스트 Lv1 - 파이썬 (0) | 2023.01.08 |
블로그의 정보
Study Log by Holly
Holly Yoon