💻프로그래밍/🕵️♀️모두의데이터분석
[파이썬] 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()
# 예제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()
# 예제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 주사위 시뮬레이션
- 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()
# 예제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()
😤
상자그림으로 데이터를 꽤나 다양하게 볼 수 있다는 점이 인상깊었다.
이번 스터디는 한 유닛만 공부하고 깃허브 계정을 만들었다. 깃허브.. 도저히 이해가 안 가서 유튜브 영상 보려고 한다.