빅데이터 분석가 양성과정/Python

데이터 시각화 기초(3)

분석가 황규진 2024. 7. 5. 15:42

4 기온 데이터를 다양하게 시각화 하기

 

히스토그램

  • 값의 출현 빈도를 표현

 

import matplotlib.pyplot as plt
plt.hist([1, 1, 2, 3, 4, 5, 6, 6, 7, 8, 10])
plt.show()
 

 

주사위 시뮬레이션

 

임의의 수를 반환하는 랜덤 함수를 활용하여 주사위 시뮬레이션을 코드를 작성하겠다.

 

import random
print(random.randint(1,6))
3
  • 주사위를 여러 번 굴리는 상황을 가정해서 for반복문을 사용하여 코드를 작성하겠다. 주사위를 굴렸을 때마다 나타나는 숫자를 기록하기 위해 리스트형 dice 변수를 사용하겠다. 주사위는 6번 굴려 보겠다.

 

import random
random.seed(72)                       # 동일한 실습 결과 값을 얻기 위해 동일한 seed 값을 사용

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

print(dice)
[1, 5, 6, 2, 3, 6]

 

plt.hist(dice, bins=6)              # hist()함수의 bins 인자는 몇 개의 구간으로 나눌 것인지를 결정합니다.  
plt.show()
  • hist()함수의 bins 인자는 몇 개의 구간으로 나눌 것인지를 결정합니다. bins = 10 변경하여 다시 그려 보겠습니다.

 

plt.hist(dice, bins=10)              # hist()함수의 bins 인자는 몇 개의 구간으로 나눌 것인지를 결정합니다.  
plt.show()
  • 이번에는 주사위를 600번 굴리는 상황을 가정하고 각 숫자나 나타나는 빈도를 그래프로 그려보겠다. 1부터 6 중 각 숫자가 나올 확율을 모두 1/6 이다. 600번 주사위를 굴렸으니 각 숫자가 나올 빈도는 600 * 1/6 = 100 번이다.

 

import random
random.seed(72)                       # 동일한 실습 결과 값을 얻기 위해 동일한 seed 값을 사용

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

plt.hist(dice, bins=6)
plt.show()
  • 주사위를 굴리는 횟수를 크게 늘려 보겠다. 60만번 해보면 어떨까?

 

import random
random.seed(72)                       # 동일한 실습 결과 값을 얻기 위해 동일한 seed 값을 사용

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

plt.hist(dice, bins=6)
plt.show()

 

기온 데이터를 히스토그램으로 표현하기

 

  • 최고 기온 데이터만 추출

 

import csv
f = open('부산.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]

for row in data:
  if row[-1] != '':                         # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
    max_temp_list.append(float(row[-1]))    # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
 
f.close()

plt.hist(max_temp_list, bins=100, color='r')
plt.show()
  • 8월 데이터만 뽑아서 히스토그램

 

import csv
import matplotlib.pyplot as plt
import koreanize_matplotlib

f = open('부산.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_aug =[]

for row in data:
  if row[-1] != '':                             # 최고기온 데이터가 누락되지 않은 경우(데이터가 있을 경우)
    month = row[0].split('-')[1]                # 행에서 년월일 정보만 추출하여 '년', '월', '일'로 분리하고 '월' 정보만 저장
    if month =='08':                            # 월 정보가 "8월"과 일치하는지 검사
      max_aug.append(float(row[-1]))           # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장

f.close()

plt.hist(max_aug, bins=100, color='r')
plt.show()
  • 위 그래프에 1월 최고 기온 분포를 파란색으로 같이 표시

 

import csv
import matplotlib.pyplot as plt
import koreanize_matplotlib

f = open('부산.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_aug =[]
max_jan =[]

for row in data:
  if row[-1] != '':                             # 최고기온 데이터가 누락되지 않은 경우(데이터가 있을 경우)
    month = row[0].split('-')[1]                # 행에서 년월일 정보만 추출하여 '년', '월', '일'로 분리하고 '월' 정보만 저장
    if month =='08':                            # 월 정보가 "8월"과 일치하는지 검사
      max_aug.append(float(row[-1]))           # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
    if month =='01':
      max_jan.append(float(row[-1]))

f.close()

plt.hist(max_aug, bins=100, color='r', label='')
plt.hist(max_jan, bins=100, color='b')
plt.show()

bar()함수

bar(막대를 표시할 위치, 막대의 높이)

 

plt.bar([0,1,2,4,6,10], [1,2,3,5,6,7])
plt.show()