Chapter 14. ์ข ํฉ ์์ #
ํ์ต๋ชฉํ์ ๊ธฐ๋ํจ๊ณผ
ํ์ต๋ชฉํ
CCTV์ ์ธ๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค๋ณด๊ณ ๋ถ์ํ๊ณ ์๊ฐํํด๋ณด์.
๊ธฐ๋ํจ๊ณผ
๋ถ์/์ฒ๋ฆฌํ ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ํ๋ด์ด ํจ๊ณผ์ ์ผ๋ก ์ค๋ช ํ ์ ์๋ค.
์ค๋น์์ #
#1. ํ์ฌ ์
์คํ
#2. ๋ฐํ์ -> ๋ฐํ์ ๋ค์ ์์
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
'sudo' is not recognized as an internal or external command,
operable program or batch file.
'sudo' is not recognized as an internal or external command,
operable program or batch file.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
plt.rc('font', family='NanumBarunGothic')
plt.text(0.3, 0.3, 'ํ๊ธ', size=100)
plt.show()

์ธ๊ตฌ๋ฐ์ดํฐ ์ฝ๊ธฐ#
์ธ๊ตฌ๋ฐ์ดํฐ๋ฅผ read_csv()๋ก ์ฝ์ด์จ๋ค.
์ต์ sep๋ ๋ฐ์ดํฐ๊ฐ ํญ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์์ผ๋ ํญ๊ธฐ์ค์ผ๋ก ์นผ๋ผ์ ์ฝ์ด๋ผ๋ ์๋ฏธ์ด๋ค.
์ต์ header๋ ์นผ๋ผ๋ช (์นผ๋ผ ์ธ๋ฑ์ค)๋ฅผ ์ง์ ํ๋ ์ต์ ์ผ๋ก ์๋ ์ฝ๋์์๋ 2ํ์ ์นผ๋ผ๋ช ๋ก ์ฌ์ฉํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
์ต์ usecols๋ ์ฌ์ฉํ ์นผ๋ผ ๋ฒํธ๋ฅผ ์ง์ ํ๋ ์ต์ ์ผ๋ก ๋ฆฌ์คํธ์์ ์ ํ ์นผ๋ผ๋ฒํธ์ ํด๋นํ๋ ์นผ๋ผ๋ง ์ฌ์ฉํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
์ต์ thousands๋ ์ซ์ ๋ฐ์ดํฐ์ ์ธ์๋ฆฌ๋ง๋ค ๋ค์ด๊ฐ ์๋ ์ปด๋ง๋ฅผ ์ ๊ฑฐํ๊ณ ์ฝ์ผ๋ผ๋ ์๋ฏธ์ด๋ค. ์ปด๋ง๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ์ฝ์ผ๋ฉด ๋ฌธ์์ด๋ก ์ฒ๋ฆฌ๋๋ค.
import pandas as pd
url = 'https://raw.githubusercontent.com/HaesunByun/common/main/data/population_in_Seoul.txt'
pop_Seoul = pd.read_csv(url, sep = '\t',header = 2, usecols = [1, 3, 6, 9, 13],thousands =',')
pop_Seoul
์์น๊ตฌ | ๊ณ | ๊ณ.1 | ๊ณ.2 | 65์ธ์ด์๊ณ ๋ น์ | |
---|---|---|---|---|---|
0 | ํฉ๊ณ | 10013781 | 9733655 | 280126 | 1518239 |
1 | ์ข ๋ก๊ตฌ | 161984 | 151217 | 10767 | 28073 |
2 | ์ค๊ตฌ | 136469 | 126175 | 10294 | 23794 |
3 | ์ฉ์ฐ๊ตฌ | 246165 | 229579 | 16586 | 39439 |
4 | ์ฑ๋๊ตฌ | 307193 | 299042 | 8151 | 44728 |
5 | ๊ด์ง๊ตฌ | 365990 | 350417 | 15573 | 48989 |
6 | ๋๋๋ฌธ๊ตฌ | 362793 | 346156 | 16637 | 60367 |
7 | ์ค๋๊ตฌ | 400678 | 395619 | 5059 | 66764 |
8 | ์ฑ๋ถ๊ตฌ | 454532 | 442494 | 12038 | 72172 |
9 | ๊ฐ๋ถ๊ตฌ | 316750 | 312985 | 3765 | 61660 |
10 | ๋๋ด๊ตฌ | 333495 | 331238 | 2257 | 60023 |
11 | ๋ ธ์๊ตฌ | 535495 | 531037 | 4458 | 82682 |
12 | ์ํ๊ตฌ | 482509 | 478019 | 4490 | 82245 |
13 | ์๋๋ฌธ๊ตฌ | 325875 | 312642 | 13233 | 53038 |
14 | ๋งํฌ๊ตฌ | 386086 | 374570 | 11516 | 53283 |
15 | ์์ฒ๊ตฌ | 460532 | 456339 | 4193 | 62761 |
16 | ๊ฐ์๊ตฌ | 595703 | 589302 | 6401 | 85992 |
17 | ๊ตฌ๋ก๊ตฌ | 438308 | 405837 | 32471 | 67432 |
18 | ๊ธ์ฒ๊ตฌ | 251370 | 232583 | 18787 | 38508 |
19 | ์๋ฑํฌ๊ตฌ | 404766 | 371903 | 32863 | 59373 |
20 | ๋์๊ตฌ | 407802 | 395014 | 12788 | 63378 |
21 | ๊ด์ ๊ตฌ | 516662 | 499374 | 17288 | 76664 |
22 | ์์ด๊ตฌ | 434801 | 430568 | 4233 | 58332 |
23 | ๊ฐ๋จ๊ตฌ | 549898 | 544804 | 5094 | 72602 |
24 | ์กํ๊ตฌ | 680883 | 674095 | 6788 | 89539 |
25 | ๊ฐ๋๊ตฌ | 457042 | 452646 | 4396 | 66401 |
๋ฐ์ดํฐํ๋ ์์ ํ์ธํด๋ณด๊ณ ์ด๋ค ์์ ์ด ํ์ํ์ง ์๊ฐํด๋ณด์.
์นผ๋ผ๋ช ์ ๋ณ๊ฒฝํด์ค์ผ ํ ํ์๊ฐ ์๋ค. ์๋์ ๊ฐ์ด ์นผ๋ผ๋ช ์ ๋ณ๊ฒฝํด์ฃผ์.
pop_Seoul.columns = ['์ง์ญ๊ตฌ', '์ธ๊ตฌ์', 'ํ๊ตญ์ธ', '์ธ๊ตญ์ธ', '๊ณ ๋ น์']
pop_Seoul
.set_index()ํจ์๋ก โ์ง์ญ๊ตฌโ ์ด์ ์ธ๋ฑ์ค๋ก ์ง์ ํด๋ณด์. ๋ํ inplace ์ต์ ์ True๋ก ์ค์ ์๋ณธ ๋ฐ์ดํฐํ๋ ์์ ๋ฐ๋ก ์ ๋ฐ์ดํธํด๋ณด์.
์์น๊ตฌ ์ธ๊ตฌ์ ๋๋น CCTV์๋ฅผ ๋ถ์ํ๊ธฐ ์ํ ์์ ์ด๋ฏ๋ก index 0์ ์๋ โํฉ๊ณโ ํ์ ํ์ํ์ง ์์ ๋ฐ์ดํฐ์ธ๊ฒ ๊ฐ๋ค. ์ญ์ ํ์. ๋ํ inplace ์ต์ ์ True๋ก ์ค์ ์๋ณธ ๋ฐ์ดํฐํ๋ ์์ ๋ฐ๋ก ์ ๋ฐ์ดํธํด๋ณด์.
CCTV ๋ฐ์ดํฐ ์ฝ๊ธฐ#
url = 'https://raw.githubusercontent.com/HaesunByun/common/main/data/CCTV_in_Seoul.csv'
CCTV_Seoul = pd.read_csv(url)
CCTV_Seoul
Unnamed: 0 | ๊ธฐ๊ด๋ช | ์๊ณ | 2017๋ ๋์ด์ | 2018๋ | 2019๋ | 2020๋ | |
---|---|---|---|---|---|---|---|
0 | 0 | ๊ฐ๋จ๊ตฌ | 2780 | 1292 | 430 | 584 | 932 |
1 | 1 | ๊ฐ๋๊ตฌ | 773 | 379 | 99 | 155 | 377 |
2 | 2 | ๊ฐ๋ถ๊ตฌ | 748 | 369 | 120 | 138 | 204 |
3 | 3 | ๊ฐ์๊ตฌ | 884 | 388 | 258 | 184 | 81 |
4 | 4 | ๊ด์ ๊ตฌ | 1496 | 846 | 260 | 390 | 613 |
5 | 5 | ๊ด์ง๊ตฌ | 707 | 573 | 78 | 53 | 174 |
6 | 6 | ๊ตฌ๋ก๊ตฌ | 1561 | 1142 | 173 | 246 | 323 |
7 | 7 | ๊ธ์ฒ๊ตฌ | 1015 | 674 | 51 | 269 | 354 |
8 | 8 | ๋ ธ์๊ตฌ | 1265 | 542 | 57 | 451 | 516 |
9 | 9 | ๋๋ด๊ตฌ | 485 | 238 | 159 | 42 | 386 |
10 | 10 | ๋๋๋ฌธ๊ตฌ | 1294 | 1070 | 23 | 198 | 579 |
11 | 11 | ๋์๊ตฌ | 1091 | 544 | 341 | 103 | 314 |
12 | 12 | ๋งํฌ๊ตฌ | 574 | 314 | 118 | 169 | 379 |
13 | 13 | ์๋๋ฌธ๊ตฌ | 962 | 844 | 50 | 68 | 292 |
14 | 14 | ์์ด๊ตฌ | 1930 | 1406 | 157 | 336 | 398 |
15 | 15 | ์ฑ๋๊ตฌ | 1062 | 730 | 91 | 241 | 265 |
16 | 16 | ์ฑ๋ถ๊ตฌ | 1464 | 1009 | 78 | 360 | 204 |
17 | 17 | ์กํ๊ตฌ | 618 | 529 | 21 | 68 | 463 |
18 | 18 | ์์ฒ๊ตฌ | 2034 | 1843 | 142 | 30 | 467 |
19 | 19 | ์๋ฑํฌ๊ตฌ | 904 | 495 | 214 | 195 | 373 |
20 | 20 | ์ฉ์ฐ๊ตฌ | 1624 | 1368 | 218 | 112 | 398 |
21 | 21 | ์ํ๊ตฌ | 1873 | 1138 | 224 | 278 | 468 |
22 | 22 | ์ข ๋ก๊ตฌ | 1002 | 464 | 314 | 211 | 630 |
23 | 23 | ์ค๊ตฌ | 671 | 413 | 190 | 72 | 348 |
24 | 24 | ์ค๋๊ตฌ | 660 | 509 | 121 | 177 | 109 |
๋ฐ์ดํฐํ๋ ์์ ํ์ธํด๋ณด๊ณ ์ด๋ค ์์ ์ด ํ์ํ์ง ์๊ฐํด๋ณด์.
โ๊ธฐ๊ด๋ช โ์ ์ธ๋ฑ์ค๋ก ์ง์ ํด๋ณด์. ๋ํ inplace ์ต์ ์ True๋ก ์ค์ ์๋ณธ ๋ฐ์ดํฐํ๋ ์์ ๋ฐ๋ก ์ ๋ฐ์ดํธํด๋ณด์.
๋ฐ์ดํฐ ํฉ์น๊ธฐ#
CCTV_Seoul์ โ์๊ณโ์ด ๋ฐ์ดํฐ๋ฅผ pop_Seoul์ โCCTV์โ ์ด์ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํฉ์ณ๋ณด์.
ํฉ์น ๋ฐ์ดํฐ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๊ธฐ#
to_csv(โํ์ผ๋ช โ)๋ก ํฉ์น ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์. ํ์ผ๋ช ์ โCCTVnPop_in_Seoul.csvโ๋ก ํ๋ค.
์ด๋ ๊ฒ ์ ์ฒ๋ฆฌ ์์ ์ ๊ฑฐ์น ๋ฐ์ดํฐํ๋ ์์ ๋ค์ ์ฌ์ฉ์ ์ํด ์ ์ฅํด ๋์ ํ ๋ค์ด๋ก๋ ๋ฐ์ ๋์ผ๋ฉด ์ถํ์ ๋์ผ ์์ ์ ํ์ง ์์๋ ๋๋ค.
์ ์ฅํ ํ์ผ์ read_csv()๋ก ๋ถ๋ฌ์๋ณด์. ๋ถ๋ฌ์จ ํ, set_index()๋ก ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ์ ์์ง๋ง, ํ์ผ์ ๋ถ๋ฌ์ฌ ๋ index_col ์ต์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ์๋ ์๋ค.
df = pd.read_csv('CCTVnPop_in_Seoul.csv', index_col = 0)
df
๋ฐ์ดํฐ ๋ถ์#
numpy์ corrcoef()ํจ์๋ฅผ ํตํด โ์ธ๊ตฌ์โ์ โCCTV์โ์์ ์๊ด๊ณ์๋ฅผ ํ์ธํด๋ณด์.
corrcoef() ๊ดํธ์์ ์๊ด๊ณ์๋ฅผ ํ์ธํ๊ณ ์ ํ๋ ์นผ๋ผ์ ์ด๋ฆ์ ๋ช ์ํ๋ค.
import numpy as np
print (np.corrcoef(df['์ธ๊ตฌ์'], df['CCTV์']))
corr()ํจ์๋ ๋ชจ๋ ์นผ๋ผ ๊ฐ์ ์๊ด ๊ณ์๋ฅผ ๋งคํธ๋ฆญ์ค ํํ๋ก ๋ฐํํ๋ ํจ์์ด๋ค.
df.corr()
๋ฐ์ดํฐ ์๊ฐํ#
CCTV์์ ์๊ฐํ#
์์น๊ตฌ๋ณ โCCTV์โ๋ฅผ ์ํ๋ง๋ ๊ทธ๋ํ๋ก ๊ทธ๋ ค๋ณด์.
color_palette()ํจ์๋ก ์ฌ์ฉํ ํ๋ ํธ์ ์ ๊ฐฏ์๋ฅผ ์ง์ ํ๋ค.
ํ๋ ํธ ์ด๋ฆ์ ๋ค์ ๋งํฌ๋ฅผ ํตํด ํ์ธ ํ ์ ์๋ค. https://seaborn.pydata.org/tutorial/color_palettes.html
import matplotlib.pyplot as plt
import seaborn as sns
colors=sns.color_palette(palette='hls', n_colors=len(df['CCTV์']))
df['CCTV์'].plot(kind='barh', grid = True, color=colors)
plt.show()
์ ๋ ฌํ ๊ฐ๋ก๋ง๋ ๊ทธ๋ํ๋ก ๊ทธ๋ ค๋ณด์. ์ ๋ ฌ์ sort_values()๋ก ํ ์ ์๋ค.
df['CCTV์'].sort_values().plot(kind='barh', grid = True, color=colors)
plt.show()
์ธ๊ตฌ์์ CCTV์์ ์๊ฐํ#
โ์ธ๊ตฌ์โ์ โCCTV์โ๋ก ์ฐํฌ๋ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ณด์.
plt.figure(figsize=(10,8))
plt.scatter(df['์ธ๊ตฌ์'], df['CCTV์'], s = 50)
plt.xlabel('์ธ๊ตฌ์')
plt.ylabel('CCTV์')
plt.grid()
plt.show()
์ธ๊ตฌ์ ๋๋น CCTV ๊ธฐ์ค์ ๊ธ๊ธฐ#
์ธ๊ตฌ์ ๋๋น ์ ์ CCTV ์ ์ ๊ธฐ์ค์ ์ ๊ทธ์ด๋ณด์.
numpy์ polyfit(a, b, n)ํจ์๋ ๋ ๋ฐ์ดํฐ a, b๋ฅผ ๋ํํ๋ n์ฐจ ๋ฐฉ์ ์์ ๊ณ์๋ฅผ ๊ตฌํ๋ ํจ์์ด๋ค.
โ์ธ๊ตฌ์โ์ โCCTV์โ๋ฅผ ๋ํํ๋ 1์ฐจ ๋ฐฉ์ ์์ ๊ณ์๋ฅผ ๊ตฌํด๋ณด์.
fp = np.polyfit(df['์ธ๊ตฌ์'], df['CCTV์'], 1)
print(fp)
์์์ ๊ตฌํ ๊ณ์๋ฅผ numpy์ poly1d()ํจ์์ ์ ๋ฌ์ธ์๋ก ๋ฃ์ด์ฃผ๋ฉด 1์ฐจ ๋คํญ์ ํจ์๋ฅผ ๊ตฌํ ์ ์๋ค.
poly1d()๋ 1์ฐจ ๋คํญ์์ ๋ง๋ค์ด ์ฃผ๋ ํจ์์ด๋ค.
f = np.poly1d(fp)
print(f)
df[โ์ธ๊ตฌ์โ]์ df[โCCTV์โ]๋ฅผ ๋ํํ๋ ๋คํญ์ ํจ์ f๋ฅผ ๊ตฌํ์ผ๋ฏ๋ก ๊ทธ f์ ์ธ๊ตฌ์๋ฅผ ๋ฃ์ด๋ณด์.
f์ ๋ฃ์ ์ธ๊ตฌ์๋ฅผ ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด numpy์ linspace()ํจ์๋ก ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ๋ฑ๋ถํ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
linspace()ํจ์๋ก 100000๋ถํฐ 700000๊น์ง 100๊ฐ๋ก ๋ฑ๋ถํ ๋ฐฐ์ด์ ๋ง๋ค์ด x์ถ ๋ฐ์ดํฐ๋ก ์ฌ์ฉํ์.
์ฌ๊ธฐ์ 100000~700000๋ฅผ ๋ฒ์๋ก ์ค ์ด์ ๋ ์ธ๊ตฌ์๊ฐ ๊ฐ์ฅ ๋ฎ์ ์ง์ญ๊ตฌ๊ฐ 136469, ๊ฐ์ฅ ๋์ ์ง์ญ๊ตฌ๊ฐ 680883์ด๊ธฐ ๋๋ฌธ์ด๋ค.
fx = np.linspace(100000, 700000, 100)
print(fx)
๋ฑ๋ถ๋ฐฐ์ด fx๋ฅผ x์ ๊ฐ์ผ๋ก ์ฃผ๊ณ , ์์์ ๋ง๋ ํจ์ f์ fx๋ฅผ ๋ฃ์ด y์ ๊ฐ์ ๊ณ์ฐํ๋ค. x์ y๊ฐ ๋ง๋๋ ์ขํ์ ์ ์ ์ฐ์ ํ, ์ ์ผ๋ก ์ด์ด ์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ณด์.
์ต์ ls๋ line style, lw๋ line width์ด๋ค.
plt.plot(fx, f(fx), ls='dashed', lw=3, color='g')
plt.xlabel('์ธ๊ตฌ์')
plt.ylabel('CCTV์')
plt.show()
์ธ๊ตฌ์ ๋๋น CCTV์์ ๊ธฐ์ค์ (๋ํ์ง์ ) ๊ทธ๋ํ์ ์ฐํฌ๋ ๊ทธ๋ํ๋ฅผ ๊ฐ์ด ๋ํ๋ด๋ณด์.
plt.figure(figsize=(10,8))
plt.scatter(df['์ธ๊ตฌ์'], df['CCTV์'], s = 50)
plt.plot(fx, f(fx), ls='dashed', lw=3, color='g')
plt.xlabel('์ธ๊ตฌ์')
plt.ylabel('CCTV์')
plt.grid()
plt.show()
์ค์ CCTV์์ ์ค ์ธ๊ตฌ์ ๋๋น ๊ธฐ์ค์ด ๋๋ CCTV์์ ์ค์ฐจ๋ฅผ ๊ณ์ฐํด๋ณด์.
์ค ์ธ๊ตฌ์ ๋๋น CCTV์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ ์ ์๋ค. ์์์ ๊ตฌํ 1์ฐจ ๋คํญ์ fํจ์์ ์ค โ์ธ๊ตฌ์โ๋ฅผ ๋ฃ์ผ๋ฉด ์ค ์ธ๊ตฌ์ ๋๋น ์ ์ CCTV์๊ฐ ๋์จ๋ค.
f(df['์ธ๊ตฌ์'])
์ค โCCTV์โ์์ ์ค ์ธ๊ตฌ์ ๋๋น ์ ์ CCTV์๋ฅผ ๋นผ๋ฉด ๊ทธ ์ค์ฐจ๋ฅผ ๊ตฌํ ์ ์๋ค.
์ค โCCTV์โ๊ฐ ์ ์ CCTV์๋ณด๋ค ๋ง์ ์๋, ํน์ ์ ์ ์๋ ์์ผ๋ฏ๋ก ์ค์ฐจ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ์ ๋๊ฐ์ ์ทจํ๋ค.
df['์ค์ฐจ'] = np.abs(df['CCTV์'] - f(df['์ธ๊ตฌ์']))
df.head(5)
์ค์ฐจ๊ฐ ํฐ ์์ 10๊ฐ๊ตฌ๋ฅผ ํ์ธํด๋ณด๊ธฐ ์ํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํด๋ณด์.
df.sort_values(by='์ค์ฐจ', ascending=False, inplace = True)
df.head(5)
์์ 10๊ฐ๊ตฌ ๊ตฌ์ด๋ฆ ํ์ํ๊ธฐ#
์ค์ฐจ๊ฐ ํฐ ์์ 10๊ฐ๊ตฌ์ ํด๋นํ๋ ์ฐํฌ๋ ์ ์์น์ ๊ตฌ์ด๋ฆ์ ํ์ํด๋ณด์.
plt.figure(figsize=(10,8))
plt.scatter(df['์ธ๊ตฌ์'], df['CCTV์'], s = 50)
plt.plot(fx, f(fx), ls='dashed', lw=3, color='g')
for n in range(10):
plt.text(df['์ธ๊ตฌ์'][n], df['CCTV์'][n]-100, df.index[n], fontsize = 10)
plt.xlabel('์ธ๊ตฌ์')
plt.ylabel('CCTV์')
plt.grid()
plt.show()
colorbar ์ถ๊ฐ#
์ค์ฐจ๋ฐ์ดํฐ๋ฅผ ์๊ณผ ์ฐ๊ฒฐํ์ฌ colorbar()๋ฅผ ์์ฑํด๋ณด์.
scatter ๊ทธ๋ํ์์ c = df[โ์ค์ฐจโ]์ ๊ฐ์ด ์ปฌ๋ฌ(c) ์ต์ ์ ์ค์ฐจ ๋ฐ์ดํฐ์ ์ฐ๋์์ผ์ค๋ค.
plt.scatter(df['์ธ๊ตฌ์'], df['CCTV์'], s = 50, c = df['์ค์ฐจ'])
๊ทธ๋ฐ ํ์ colorbar()๋ฅผ ๋ณด์ด๊ฒ ํ๋ค.
plt.colorbar()
plt.colorbar()๊น์ง ์ถ๊ฐํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
plt.figure(figsize=(10,8))
plt.scatter(df['์ธ๊ตฌ์'], df['CCTV์'], s = 50, c = df['์ค์ฐจ'])
plt.plot(fx, f(fx), ls='dashed', lw=3, color='g')
for n in range(10):
plt.text(df['์ธ๊ตฌ์'][n], df['CCTV์'][n]-100, df.index[n], fontsize = 10)
plt.colorbar()
plt.xlabel('์ธ๊ตฌ์')
plt.ylabel('CCTV์')
plt.grid()
plt.show()
๋ง๋ฌด๋ฆฌ#
์ธ๊ตฌ์ ๋ฐ์ดํฐ์ CCTV ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ ๋ถ๋ฌ์๋ค.
์ด๋ค ๋ฐ์ดํฐ์์ ๋ถํ์ํ ๋ฐ์ดํฐ๋ ์ ๊ฑฐํ๊ณ ํ์ํ ๋ฐ์ดํฐ๋ก๋ง ํฉ์น๋ ์์ ์ ํด์ ํ๋์ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ง๋ค์๋ค.
์ธ๊ตฌ์ ๋๋น CCTV์์ ์๊ด๊ด๊ณ๋ฅผ ํ์ ํด๋ณด์๋ค.
์์น๊ตฌ๋ณ CCTV์๋ฅผ ๋ง๋๊ทธ๋ํ๋ก ๋ํ๋ด๋ณด์๋ค.
์ธ๊ตฌ์ ๋๋น CCTV์์ ๋ํ์ง์ ์ ๊ทธ๋ ค๋ณด์๋ค.
์ค์ธ๊ตฌ์ ๋๋น CCTV ์์ ๊ธฐ์ค ์ธ๊ตฌ์ ๋๋น CCTV ์์ ์ค์ฐจ๋ฅผ ๊ตฌํด ๋ณด์๋ค.
์ฐํฌ๋๊ทธ๋ํ์ colorbar()๋ฅผ ์ด์ฉํ์ฌ ์ค์ฐจ๋ฅผ ํํํด๋ณด์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ง์ญ๊ตฌ๋ณ ์ธ๊ตฌ์ ๋๋น ์ ์ CCTV์์ ์ค CCTV ์์ ์ค์ฐจ๋ฅผ ํ์ ํด๋ณด๊ณ ์ค์ฐจ๊ฐ ์ 10๊ฐ๊ตฌ๋ฅผ ํ์ํด๋ณด๋ ์์ ๋ฅผ ๋ค๋ค๋ณด์๋ค.