Knowledge๐Ÿฆข/๋ฐ์ดํ„ฐ ๋ถ„์„

[ํ˜ผ๊ณต ๋ฐ์ดํ„ฐ๋ถ„์„6] ๋ถ„ํฌ ์š”์•ฝํ•˜๊ธฐ

ํŒŒ์นดํŒŒ์˜ค 2024. 5. 6. 18:28

 

< ์‚ฐ์ ๋„ ๊ทธ๋ฆฌ๊ธฐ >

์‚ฐ์ ๋„๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๋ฟŒ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์ด๋‹ค

 

# ์ง€๋‚œ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

pd.read_csv

import pandas as pd
import numpy as np

root = '/content/drive/MyDrive/แ„’แ…ฉแ†ซแ„€แ…ฉแ†ผ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅแ„‡แ…ฎแ†ซแ„‰แ…ฅแ†จ'
file_address = root + '/ns_book7.csv'

df = pd.read_csv(file_address, low_memory = False)
df

 

 

# ๋งทํ”Œ๋กฏ๋ฆฝ ํŒจํ‚ค์ง€ ์ž„ํฌํŠธํ•˜๊ธฐ

import matplotlib.pyplot as plt

plt.scatter([1,2,3,4], [1,2,3,4])
plt.show()

 

 

plt.scatter(df['๋ฒˆํ˜ธ'], df['๋Œ€์ถœ๊ฑด์ˆ˜'])
plt.show()

 

 

average = df['๋Œ€์ถœ๊ฑด์ˆ˜'] / df['๋„์„œ๊ถŒ์ˆ˜']
plt.scatter(average , df['๋Œ€์ถœ๊ฑด์ˆ˜'], alpha = 0.1)
plt.show()

 

 

 

< ํžˆ์Šคํ† ๊ทธ๋žจ ๊ทธ๋ฆฌ๊ธฐ >

 

# ํžˆ์Šคํ† ๊ทธ๋žจ์˜ ๋œป

๊ตฌ๊ฐ„์•ˆ์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋กœ ๊ทธ๋ฆฐ ๊ฒƒ์ด๋‹ค!

 

๋งทํ”Œ๋กฏ๋ฆฝ์œผ๋กœ ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๊ทธ๋ฆด ๋•Œ๋Š” hist() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

bins ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ๊ฐ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค

๋งŒ์•ฝ bins๋ฅผ 100์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ๋”์šฑ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ๋‹ค

 

plt.hist([0,3,5,6,7,7,9,13], bins = 5)
plt.show()

 

 

# ํžˆ์Šคํ† ๊ทธ๋žจ์˜ ๊ตฌ๊ฐ„์„ ์ •ํ™•ํ•˜๊ฒŒ ํ™•์ธํ•˜๊ธฐ

 

import numpy as np
np.histogram_bin_edges([0,3,5,6,7,7,9,13], bins=5)

# ๊ฒฐ๊ณผ
array([ 0. ,  2.6,  5.2,  7.8, 10.4, 13. ])

 

 

# ๊ตฌ๊ฐ„ ์กฐ์ •ํ•˜๊ธฐ

 

ํ•œ ๊ตฌ๊ฐ„์˜ ๋„์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ๋‹ค๋ฅธ ๊ตฌ๊ฐ„์—๋Š” ๋„์ˆ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ ์Šค์ผ€์ผ๋กœ ๋ฐ”๊พธ์–ด ๋กœ๊ทธ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

๊ทธ๋Ÿฌ๋ฉด ํฐ ๊ฐ’์ผ์ˆ˜๋ก ๋„์ˆ˜ ํฌ๊ธฐ๊ฐ€ ๋งŽ์ด ์ค„์–ด๋“ค์–ด ์ž‘์€ ๊ฐ’๊ณผ์˜ ์ฐจ์ด๊ฐ€ ์ค„์–ด๋“ ๋‹ค

 

 

 

# y์ถ•์„ ๋กœ๊ทธ ์Šค์ผ€์ผ๋กœ ๋ฐ”๊พธ๊ธฐ

 

yscale() ํ•จ์ˆ˜์— 'log'๋ฅผ ์ง€์ •ํ•œ๋‹ค๋ฉด ๋ฐ‘์ด 10์ธ ๋กœ๊ทธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

 

plt.hist(df['๋Œ€์ถœ๊ฑด์ˆ˜'])
plt.yscale('log')
plt.show()

 

 

# x์ถ•์˜ ๊ตฌ๊ฐ„์„ ๋” ์„ธ์„ธํ•˜๊ฒŒ ๋‚˜๋ˆ ๋ณด๊ธฐ

 

bins = 100 ์œผ๋กœ 100๊ฐœ์˜ ๊ตฌ๊ฐ„ ๋‚˜๋ˆ ๋ณด๊ธฐ

 

plt.hist(df['๋Œ€์ถœ๊ฑด์ˆ˜'], bins=100)
plt.yscale('log')
plt.show()

 

 

# ๋„์„œ๋ช…์˜ ๊ธธ์ด์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ๊ทธ๋ž˜ํ”„, ๊ตฌ๊ฐ„์€ 100๊ฐœ ๊ตฌํ•˜๊ธฐ

 

1) ์ •๊ทœ๋ถ„ํฌ์— ๊ฐ€๊นŒ์šธ ์ˆ˜ ์žˆ๊ณ 

2) ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์— ํŽธ์ค‘๋œ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ๋‹ค

 

title_len = df['๋„์„œ๋ช…'].apply(len)
plt.hist(title_len, bins=100)
plt.show()

 

 

# x์ถ•์—๋„ ๋กœ๊ทธ ์Šค์ผ€์ผ ์ ์šฉ์‹œ์ผœ๋ณด๊ธฐ

 

plt.hist(title_len, bins=100)
plt.xscale('log')
plt.show()

 

 

# ์ƒ์ž ์ˆ˜์—ผ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ

 

์ƒ์ž ์ˆ˜์—ผ ๊ทธ๋ฆผ์€ ์ตœ์†Ÿ๊ฐ’, ์„ธ ๊ฐœ์˜ ์‚ฌ๋ถ„์œ„์ˆ˜, ์ตœ๋Œ“๊ฐ’ ์ด๋ ‡๊ฒŒ ๋‹ค์„ฏ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์š”์•ฝํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฐ๋‹ค

boxplot() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

 

plt.boxplot(df[['๋Œ€์ถœ๊ฑด์ˆ˜', '๋„์„œ๊ถŒ์ˆ˜']])
plt.yscale('log')
plt.show()

 

 

# ์ƒ์ž ์ˆ˜์—ผ ๊ทธ๋ฆผ ์ˆ˜ํ‰์œผ๋กœ ๊ทธ๋ฆฌ๊ธฐ

 

vert = False

plt.boxplot(df[['๋Œ€์ถœ๊ฑด์ˆ˜', '๋„์„œ๊ถŒ์ˆ˜']], vert = False)
plt.xscale('log')
plt.show()

 

 

# ์ˆ˜์—ผ ๊ธธ์ด ์กฐ์ •ํ•˜๊ธฐ

 

whis = 10

๊ธฐ๋ณธ๊ฐ’ 1.5๋ฅผ 10์œผ๋กœ ๋ฐ”๊พธ์–ด์„œ IQR์˜ 10๋ฐฐ ๋ฒ”์œ„ ์•ˆ์—์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ˆ˜์—ผ ๊ทธ๋ฆฌ๊ธฐ

 

์ œ 1์‚ฌ๋ถ„์œ„์ˆ˜ (25%) ์™€ ์ œ 3์‚ฌ๋ถ„์œ„์ˆ˜ (75%) ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ -> IQR

plt.boxplot(df[['๋Œ€์ถœ๊ฑด์ˆ˜', '๋„์„œ๊ถŒ์ˆ˜']], whis=10)
plt.yscale('log')
plt.show()

 

 

< ํŒ๋‹ค์Šค์˜ ๊ทธ๋ž˜ํ”„ ํ•จ์ˆ˜ >

 

# ์‚ฐ์ ๋„ ๊ทธ๋ฆฌ๊ธฐ

 

ํŒ๋‹ค์Šค ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ๊ฐ์ฒด์˜ plot์†์„ฑ ์ค‘ scatter ๋ฉ”์„œ๋“œ๋กœ ์‚ฐ์ ๋„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค

df.plot.scatter('๋„์„œ๊ถŒ์ˆ˜', '๋Œ€์ถœ๊ฑด์ˆ˜', alpha = 0.1)
plt.show()

 

 

# ํžˆ์Šคํ† ๊ทธ๋žจ ๊ทธ๋ฆฌ๊ธฐ

 

๋งทํ”Œ๋กฏ๋ฆฝ์œผ๋กœ ๊ทธ๋ฆด ๋•Œ๋Š” ๋„์„œ๋ช… ๊ธธ์ด์— ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ–ˆ์—ˆ๋Š”๋ฐ

ํŒ๋‹ค์Šค๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์— apply()๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•œ ๋‹ค์Œ ๋ฐ”๋กœ plot.hist() ํ˜ธ์ถœ

 

df['๋„์„œ๋ช…'].apply(len).plot.hist(bins=100)
plt.show()

 

 

# ์ƒ์ž ์ˆ˜์—ผ ๊ทธ๋ฆฌ๊ธฐ

 

df[['๋Œ€์ถœ๊ฑด์ˆ˜', '๋„์„œ๊ถŒ์ˆ˜']].boxplot()
plt.yscale('log')
plt.show()