💻프로그래밍/🕵️‍♀️모두의데이터분석

[파이썬] 06. 히스토그램/상자그림/랜덤값

hyerimmy 2021. 1. 26. 16:50

📅 스터디 날짜 | 2021.01.21

📖 모두의 데이터 분석 | Unit 06 p77-94


#1 히스토그램

  • hist() : 데이터를 히스토그램으로 그릴 수 있는 함수 plt.hist([1,1,3,5])
  • bins : 가로축의 구간 개수를 설정하는 속성 옵션 plt.hist(dice, bins=6)
import matplotlib.pyplot as plt
plt.hist([1,2,3,4,5,6,6,7,8,10]) #hist()함수를 통해 히스토그램 생성
plt.show()

출력결과 : 입력한 값들이 히스토그램으로 표현됨.

 

import matplotlib.pyplot as plt
import random

dice = []
for i in range(100) :
    dice.append(random.randint(1,6))

plt.hist(dice, bins=6) #bins로 가로축의 구간 개수를 6으로 설정
plt.show()

출력결과 : 가로축의 개수가 6개임을 알 수 있음.

 


# 예제1. 1907년부터 2018년까지 수집된 서울의 8월 최고 기온을 히스토그램으로 표현

import csv
import matplotlib.pyplot as plt

f = open('seoul.csv')
data = csv.reader(f)
next(data)
aug = []

for row in data :
    month = row[0].split('-')[1] #날짜데이터를 분리해 month값을 저장
    if row[-1] != '' : #빈 데이터가 아니라면
        if month == '08' : #8월달이라면
            aug.append(float(row[-1])) #aug리스트에 최고기온값 추가
        
plt.hist(aug, bins=100, color = 'r')
plt.show()

예제1 출력결과

 

# 예제2. 1907년부터 2018년까지 수집된 서울의 1월과 8월 최고 기온을 히스토그램으로 표현

import csv
import matplotlib.pyplot as plt

f = open('seoul.csv')
data = csv.reader(f)
next(data)
jan = []
aug = []

for row in data :
    month = row[0].split('-')[1]
    if row[-1] != '' :
        if month == '08' : # 8월달이라면 
            aug.append(float(row[-1])) # aug 리스트에 최고 기온 값 추가
        if month == '01' : # 1월달이라면
            jan.append(float(row[-1])) # jan 리스트에 최고 기온 값 추가
        
plt.hist(aug, bins=100, color = 'r', label = 'Aug') # 빨간색
plt.hist(jan, bins=100, color = 'b', label = 'Jan') # 파란색
plt.legend() #범례출력
plt.show()

예제2 출력결과

 

#2 주사위 시뮬레이션

  • randint() : random모듈의 함수로, 설정한 범위의 숫자가 무작위롤 출력된다.
  • 예를 들어, randint(a,b)이면 a이상 b이하의 정수 중 하나의 숫자를 무작위로 출력
  • 주사위를 던지는 횟수를 늘릴수록 특정 숫자가 나오는 횟수가 전체의 1/6에 가까워진다는 것을 '큰수의 법칙'이라 한다.
import random
dice = []
for i in range(5) : # 5번 반복
    dice.append(random.randint(1,6)) #dice리스트에 1이상6이하의 랜덤한 값을 입력
print(dice) #dice리스트 출력

출력결과

 

import matplotlib.pyplot as plt
import random
dice = []
for i in range(1000) : #1000번 반복
    dice.append(random.randint(1,6))
#print(dice)
plt.hist(dice, bins=6)
plt.show()

출력결과 : 거의 모든 막대의 높이가 균등함 (큰 수의 법칙)

 

#3 상자 그림

  • 상자그림(boxplot)
    : 자료에서 얻어낸 최댓값, 최솟값, 상위 1/4, 2/4(중앙), 3/4에 위치한 값을 보여주는 그래프
  • plt.boxplot() : 데이터를 상자그림으로 그리는 함수
  • sort() : 작은값부터 큰 값 순서대로 정렬
  • 이상치 (outlier) : 다른 수치에 비해 너무 크거나 작은 값 
plt.boxplot(list, showfliers=False) #이상치 값 보이지 않도록 하는 설정

 

 

 

+ 상자그림에 해당하는 위치의 값을 출력하고자 한다면

import numpy as np
result = np.array(result)
print("1/4: "+str(np.percentile(result,25)))
print("2/4: "+str(np.percentile(result,50)))
print("3/4: "+str(np.percentile(result,75)))

 

 

 

# 기온 데이터를 상자그림으로 표현하기
## 서울의 1월과 8월의 최고 기온 (1)

import csv
f = open ('seoul.csv')
data = csv.reader(f)
next(data)
jan = []
aug = []

for row in data :
    month = row[0].split('-')[1]
    if row[-1] != '' :
        if month == '01' :
            jan.append(float(row[-1]))
        if month == '08' :
            aug.append(float(row[-1]))

import matplotlib.pyplot as plt
plt.boxplot(jan) # 1월 최고기온 상자그림으로 나타내기
plt.boxplot(aug) # 8월 최고기온 상자그림으로 나타내기
plt.show()
# 기온 데이터를 상자그림으로 표현하기
## 서울의 1월과 8월의 최고 기온 (2)

import csv
f = open ('seoul.csv')
data = csv.reader(f)
next(data)
jan = []
aug = []

for row in data :
    month = row[0].split('-')[1]
    if row[-1] != '' :
        if month == '01' :
            jan.append(float(row[-1]))
        if month == '08' :
            aug.append(float(row[-1]))

import matplotlib.pyplot as plt
plt.boxplot([jan,aug]) #두 리스트를 하나의 리스트에 원소로 넣어, 이를 상자그림으로
plt.show()


# 예제1. 서울의 매달마다 최고 기온의 데이터를 상자그림으로 나타낸다면?

import csv
f = open ('seoul.csv')
data = csv.reader(f)
next(data)

#월별 데이터를 저장할 리스트 month 생성
month = [[],[],[],[],[],[],[],[],[],[],[],[]]

for row in data :
	#월과 같은 번호의 인덱스에 월별 데이터 저장
    mon = row[0].split('-')[1]
    if row[-1] != '' :
        month[int(mon)-1].append(float(row[-1])) #int빼먹지 않도록 주의!

import matplotlib.pyplot as plt
plt.boxplot(month)
plt.show()

예제1 출력결과

 

 

# 예제2. 서울의 8월 일별 최고 기온의 데이터를 상자그림으로 나타낸다면?

import csv
f = open ('seoul.csv')
data = csv.reader(f)
next(data)

# 31일의 일별 최고 기온을 저장할 수 있는 리스트 생성 (반복문 활용)
day = []
for i in range(31) :
    day.append([])

for row in data :
    m = row[0].split('-')[1] 	# month값 추출
    d = row[0].split('-')[2] 	# day값 추출
    if row[-1] != '' : 			# 빈 값이 아니라면
        if m == '08' :			# 8월 데이터라면
            day[int(d)-1].append(float(row[-1]))

import matplotlib.pyplot as plt
plt.style.use('ggplot')				#그래프 스타일 지정
plt.figure(figsize=(10,5), dpi=300)		#그래프 크기 수정
plt.boxplot(day, showfliers=False) 		#아웃라이어 값 생략
plt.show()

예제2 출력결과

 

 

 

 


😤

상자그림으로 데이터를 꽤나 다양하게 볼 수 있다는 점이 인상깊었다.

이번 스터디는 한 유닛만 공부하고 깃허브 계정을 만들었다. 깃허브.. 도저히 이해가 안 가서 유튜브 영상 보려고 한다.