(EDA강의)matplotlib 기초

지며리·2022년 11월 24일
0
post-custom-banner

구별 인구수와 CCTV 설치 대수의 산포도 및 추세선을 그려보고 경향에서 크게 벗어난 데이터를 강조해보자

import matplotlib.pyplot as plt
# import matplotlib as mpl
plt.rcParams["axes.unicode_minus"] = False 
#마이너스 부호 때문에 폰트가 깨질 수가 있어 설정하는 코드

rc("font", family =" Malgun Gothic")
# %matplotlib inline
get_ipython().run_line_magic("matplotlib","inline")
# 한글이 깨질 수 있어 설정하는 코드

fpl = np.polyfit(data_result["인구수"],data_result["소계"],1)
# 인구수를 x , 소계(cctv대수)를 y로 할 때 1차식(선형회귀식) 계수 생성

f1= np.poly1d(fpl)
# fpl 계수를 대입한 1차함수 생성

fx=np.linspace(100000, 700000, 100)
# 경향선을 그리기 위한 x데이터 생성

data_result["오차"]= data_result["소계"]-f1(data_result["인구수"])
# data_result 데이터 셋에 "오차" 콜룸 추가

# 추세선에서 많이 떨어져 있는 구 산출용으로 정렬
df_sort_f=data_result.sort_values(by="오차", ascending = False) #내림차순
df_sort_t=data_result.sort_values(by="오차", ascending = True) #오름차순

# colormap을 사용자 정의로 세팅
from matplotlib.colors import ListedColormap
color_step = ["#e74c3c","#2ecc71","#95a9a6","#2ecc71","#3498db","#3498db"]
my_cmap = ListedColormap(color_step)

# 산포도, 추세선, 경향에서 많이 벗어난 구 표기
def drawGraphFinal():
    plt.figure(figsize=(14,10))
    plt.scatter(
    	data_result["인구수"], 
    	data_result["소계"], 
    	s=50, # 마커의 사이즈 
    	c=data_result["오차"], # 색이 달라지는 기준 값 
    	cmap=my_cmap)
    plt.plot(
    	fx,
        f1(fx), 
        ls = "dashed", 
        lw = 3, #선 굵기 
        color = "g")
        
    # 오차 + 상위 5개 구 이름 표기
    for n in range(5):
        plt.text(
        df_sort_f["인구수"][n]*1.02, 
        df_sort_f["소계"][n]*0.98, 
        df_sort_f.index[n], fontsize = 15)
    
    # 오차 - 하위 5개 구 이름 표기
    for n in range(5):
        plt.text(
        df_sort_t["인구수"][n]*1.02, 
        df_sort_t["소계"][n]*0.98, 
        df_sort_t.index[n], fontsize = 15)
    
    plt.xlabel("인구수")
    plt.ylabel("CCTV")
    plt.colorbar()
    plt.grid(True)
    plt.show()

기타 matplotlib 기초

import matplotlib.pyplot as plt
from matplotlib import rc
from matplotlib import font_manager

f_path = "C:/Windows/Fonts/malgun.ttf"

font_manager.FontProperties(fname = f_path).get_name()

rc("font",family="Malgun Gothic")
# %matplotlib inline
get_ipython().run_line_magic("matplotlib","inline")

# matplotlib는 기본적으로 한국어를 지원하지 않는다
# 한글이 깨지지 않으려면 위와 같이 한글 폰트를 불러와야 한다.

plt.figure(figsize = (10,6))
# 데이터를 그리기 위한 배경 설정

plt.plot([0,1,2,3,4,5,6,7,8,9],[1,1,2,3,4,2,3,5,-1,3])
# 데이터 x축과 y축 값 설정

plt.show()
# 그래프 출력

def drawGraph():
    plt.figure(figsize = (10, 6))
    plt.plot(t, np.sin(t), label = "sin") #그래프이름 "sin"으로 설정
    plt.plot(t, np.cos(t), label = "cos")
    plt.grid(True) # 그래프에 격자 넣기
    plt.legend(loc="upper right") #범례
    plt.title("Example of sinwave") #그래프 제목 넣기
    plt.xlabel("time") # x축 이름
    plt.ylabel("Amplitude") #y축 이름
    plt.show()

plt.figure(figsize = (10, 6))
plt.plot(t,t, "r--") # red ---
plt.plot(t,t**2, "bs") # blue square
plt.plot(t, t**3, "g^") # green triangle
plt.show()

t = list(range(0,7))
y = [1,4,5,8,9,5,3]
def drawGraph2():
    plt.figure(figsize=(10, 6))
    plt.plot(
        t, #x 값
        y, #y값
        color = "green",
        linestyle = "dashed",
        marker = "o",
        markerfacecolor = "blue",
        markersize = 15

    )
    plt.xlim([-0.5, 6.5]) # x축 범위
    plt.ylim([0.5, 9.5])  # y축 범위
    plt.grid()
    plt.show()


def drawGraph3():
    plt.figure(figsize = (10, 6))
    plt.scatter(t, y) # 산포도 그리기
    plt.show()    
 
 
def drawGraph4():
    plt.figure(figsize = (20, 6))
    plt.scatter(t, y, s= 100, c= colormap, marker= ">")
    plt.colorbar() # 컬러바 넣기
    plt.show()


profile
쉽고 유익하게 널리널리
post-custom-banner

0개의 댓글