일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 조합
- 문제풀이
- matplotlib
- MacOS
- barh
- Slicing
- 등비수열
- INSERT
- SQL
- 등차수열
- pandas
- Folium
- pandas 메소드
- 통계학
- plt
- 리스트
- tree.fit
- 순열
- maplotlib
- 재귀함수
- pandas filter
- numpy
- 기계학습
- 스터디노트
- 머신러닝
- Machine Learning
- python
- 파이썬
- 자료구조
- DataFrame
Archives
- Today
- Total
코딩하는 타코야끼
[스터디 노트] Week5_2일차 [unit12 ~ 20] - EDA(CCTV) 본문
728x90
반응형
1. Matplotlib 기초
📍plt.plot( )
- x와 y는 동일한 길이의 배열 또는 리스트로, 각각 x축과 y축에 대응하는 데이터를 나타냅니다.
- plt.plot() 함수는 많은 선택적 매개변수를 가집니다. 아래는 주요 매개변수들의 설명입니다:
- color: 선의 색상을 지정합니다.
- linestyle: 선의 스타일을 지정합니다. ('-', '--', '-.', ':' 등)
- linewidth: 선의 너비를 지정합니다.
- marker: 데이터 포인트에 표시할 마커의 스타일을 지정합니다. ('o', '.', '^', 's' 등)
- label: 이 그래프에 대한 레이블을 지정합니다. 이 레이블은 plt.legend() 호출 시 범례에 사용됩니다.
t = np.arange(0, 12, 0.01) y = np.sin(t) def draw_graph1(): plt.figure(figsize = (10, 6)) plt.plot(t, np.sin(t), label = "sin") plt.plot(t, np.cos(t), label = "cos") plt.title("Example of sinewave") plt.xlabel("time") plt.ylabel("Amplitude") plt.grid() plt.legend() plt.show() draw_graph1()
t = np.arange(0, 5, 0.5)
def draw_graph2():
plt.figure(figsize = (10, 6))
plt.plot(t, t, "r--")
plt.plot(t, t**2, "bs")
plt.plot(t, t**3, "g^")
draw_graph2()
📍 plt.scatter( )
- plt.scatter() 함수는 여러 가지 선택적 매개변수를 가집니다:
- s: 각 점의 크기를 설정합니다. 스칼라 또는 배열로 설정할 수 있습니다.
- c: 점의 색상을 설정합니다. 색 이름, 문자열, RGB 튜플 또는 배열을 사용할 수 있습니다.
- marker: 점의 모양을 설정합니다.
- alpha: 점의 투명도를 설정합니다. 0(완전 투명)에서 1(완전 불투명)까지의 값을 사용할 수 있습니다.
- edgecolors: 점 주변의 색상을 설정합니다.
colormap = t def draw_graph4(): plt.figure(figsize = (10, 6)) plt.scatter(t, y, s=50, c=colormap, marker=">") plt.colorbar() plt.show() draw_graph4()3
2. 데이터 시각화
def draw_graph6():
data_result["CCTV 비율"].sort_values().plot(
kind = "barh",
grid = True,
title = "CCTV 비율이 높은 구",
figsize = (5, 5))
draw_graph6()
3. 데이터의 경향을 표시
def draw_graph7():
plt.figure(figsize = (14, 6))
plt.scatter(data_result["인구수"], data_result["소계"], s=50)
plt.xlabel("인구수")
plt.ylabel("CCTV")
plt.grid()
plt.show()
draw_graph7()
📍 Numpy를 이용한 1차 직선 만들기
- numpy가 제공하는 간단한 함수를 이용해서 1차 직선을 만들어 그래프로 비교하자
📎 절차
- np.polyfit : 직선을 구성하기 위한 계수 계산한다.
- np.poly1d : polyfit으로 찾은 계수로 python에서 사용할 함수로 만들어 준다.
fp1 = np.polyfit(data_result["인구수"], data_result["소계"], 1)
fp1
>>>
array([1.11155868e-03, 1.06515745e+03])
# polyfit 에서 찾은 계수를 넣어서 함수 완성
f1 = np.poly1d(fp1)
f1
>>>
poly1d([1.11155868e-03, 1.06515745e+03])
# 인구 400000인 구에서 서울시의 전체 경향에 맞는 적당한 CCTV 수
f1(400000)
>>>
1509.780925241333
- 경향선을 그리기 위해 X데이터 생성
# np.linspace(a, b, n): a부터 b까지 n개의 등간격 데이터 생성
fx = np.linspace(100000, 700000, 100)
def draw_graph8():
plt.figure(figsize = (14, 6))
plt.scatter(data_result["인구수"], data_result["소계"], s=50)
plt.plot(fx, f1(fx), ls="dashed", lw=3, c="g")
plt.xlabel("인구수")
plt.ylabel("CCTV")
plt.grid()
plt.show()
draw_graph8()
4. 강조하고 싶은 데이터를 시각화하기
fp1 = np.polyfit(data_result["인구수"], data_result["소계"], 1)
# 경향(trend)를 구하는 함수 만들기
f1 = np.poly1d(fp1)
fx = np.linspace(100000, 700000, 1000)
data_result["오차"] = data_result["소계"] - f1(data_result["인구수"])
data_result.head(1)
# 경향 대비 CCTV를 많이 가진 구(내림차순)
data_result_f = data_result.sort_values("오차", ascending = False)
# 경향 대비 CCTV를 적게 가진 구(오름차순))
data_result_t = data_result.sort_values("오차", ascending = True)
from matplotlib.colors import ListedColormap
# color map을 사용자 정의(user define)로 세팅
color_step = ["#e74c3c", "#2ecc71", "#95a5a6", "#2ecc71", "#3498db", "#3498db"]
my_cmap = ListedColormap(color_step)
⚡️ 함수화 및 출력
def draw_graph9():
plt.figure(figsize = (14, 6))
plt.scatter(data_result["인구수"], data_result["소계"],
c=data_result["오차"], s=50, cmap=my_cmap)
plt.plot(fx, f1(fx), ls="dashed", lw=3, c="grey")
for i in range(5):
# 오차가 큰 데이터 5개, 구 이름을 명시
plt.text(data_result_f["인구수"][i] * 1.02,
data_result_f["소계"][i] * 0.98,
data_result_f.index[i],
fontsize = 10)
# 오차가 작은 데이터 5개, 구 이름을 명시
plt.text(data_result_t["인구수"][i] * 1.02,
data_result_t["소계"][i] * 0.98,
data_result_t.index[i],
fontsize = 10)
plt.xlabel("인구수")
plt.ylabel("CCTV")
plt.grid()
plt.colorbar()
plt.show()
draw_graph9()
반응형
'zero-base 데이터 취업 스쿨 > 스터디 노트' 카테고리의 다른 글
[스터디 노트] Week5_4일차 [unit14 ~ 21] - EDA(범죄) (0) | 2023.08.16 |
---|---|
[스터디 노트] Week5_3일차 [unit1 ~ 11] - EDA(범죄) (0) | 2023.08.16 |
[스터디 노트] Week5_1일차 [unit1 ~ 11] - EDA(CCTV) (0) | 2023.08.16 |
[스터디 노트] Week4_3일차 [unit31 ~ 47] - 알고리즘 문제 풀이 (0) | 2023.07.31 |
[스터디 노트] Week4_2일차 [unit19 ~ 34] - 알고리즘 (0) | 2023.07.31 |