IT/프로젝트

[모두의 데이터 분석 with 파이썬]_Part 2. 데이터 시각화 기초

호랑구야 2020. 8. 19. 09:00

* 다음 내용은 [모두의 데이터 분석 with 파이썬] 을 읽고 실습한 내용입니다.

** 중간에 csv 파일 전부를 출력한 결과는 보여주는데에는 의미가 없다고 생각해 간략하게 줄였습니다. 

 

 

 

 

02datavisualization
In [1]:
from IPython.core.display import display, HTML
display(HTML("<style> .container{width:90% !important;}</style>"))

Unit04

In [2]:
#% matplotlib inline: 별도의 창이 아니라, 주피터 노트북 안에서 그래프 결과를 보고 싶을 때 설정
import matplotlib.pyplot as plt
plt.title('plotting')
plt.plot([10, 20, 30, 40])
plt.show()
<Figure size 640x480 with 1 Axes>

입력한 리스트 값이 y축 값으로 입력, x축은 자동으로 0부터 1씩 증가한다. plt.title('제목 문자열'): 제목 plt.show(): 그래프를 그리라는 명령어

In [3]:
import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[12,43,25,15])
plt.show()

첫 번째 리스트가 x축 값, 두 번째 리스트가 y축 값

In [4]:
import matplotlib.pyplot as plt
plt.title('legend')
plt.plot([10, 20, 30, 40],
          color = 'skyblue',
          linestyle = '--',
          label='asc')
plt.plot([40, 30, 20, 10],
          'pink',
          ls = ':',
          label='desc')
plt.legend(loc = 7)
plt.show()

label: 범례
plt.legend(): 범례를 따로 출력, 괄호안 생략 가능.

2 9 1
6 10 5,7
3 8 4
0은 그래프 따라 자동으로 위치 선정

color = '색 이름' or '색 이름': 선 색 지정

r g b k y: 각 색의 약자

linestyle = '' or ls = '' : 선 스타일

-- , :

In [5]:
import matplotlib.pyplot as plt
plt.title('legend')
plt.plot([10, 20, 30, 40],
          'r.--',
          label='asc')
plt.plot([40, 30, 20, 10],
          'y^:',
          label='desc')
plt.legend(loc = 7)
plt.show()

'색상,마커모양,선모양' 순으로 간단히 나타낼 수도 있다.

Unit05

In [6]:
import csv
f = open('seoul.csv')
data = csv.reader(f)
next(data)
result = []

for row in data:
    if (row[-1]) != '':
        result.append(float(row[-1]))
print('데이터의 길이는', len(result), '\n')
print(result)
데이터의 길이는 39997 

[20.7, 22.0, 21.3, 22.0, 25.4 ...자체 생략... 23.1, 24.3, 29.8, 30.6, 29.5]

if문 내용: 최고기온의 값이 비어있지 않다면, result의 값으로 추가해라.
len(데이터): 데이터의 길이

In [7]:
import csv
import matplotlib.pyplot as plt

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

for row in data:
    if (row[-1]) != '':
        result.append(float(row[-1]))

plt.figure(figsize = (10,2))
plt.plot(result,'r')
plt.show()

plt.figure(figsize = (a,b)): 가로로 a인치, 세로로 b인치로 크기를 조정

In [8]:
date = '1999-12-31'
print(date.split('-')[0])
print(date.split('-')[1])
print(date.split('-')[2])
1999
12
31
In [9]:
import csv
f = open('seoul.csv')
data = csv.reader(f)
next(data)
result = []

for row in data:
    if row[-1] != '':
        if row[0].split('-')[1] == '08':
            result.append(float(row[-1]))    
plt.figure(figsize = (10,2))
plt.plot(result, 'hotpink')            
plt.show
Out[9]:
<function matplotlib.pyplot.show(*args, **kw)>

가장 더운 달인 8월의 최고 기온을 그래프로 그림

In [10]:
import csv
f = open('seoul.csv')
data = csv.reader(f)
next(data)
result = []

for row in data:
    if row[-1] != '':
        if row[0].split('-')[1] == '12' and row[0].split('-')[2] == '31':
            result.append(float(row[-1]))

plt.plot(result, 'hotpink')            
plt.show
Out[10]:
<function matplotlib.pyplot.show(*args, **kw)>

특정 날짜의 매년 온도를 확인하는 방법

In [11]:
import csv
import matplotlib.pyplot as plt

f = open('seoul.csv')
data = csv.reader(f)
next(data)
high = []
low = []
avg = []

for row in data:
    if row[-1] != '' and row[-2] != '' :
        if 1983 <= int(row[0].split('-')[0]):
            if row[0].split('-')[1] == '12' and row[0].split('-')[2] == '31':
                high.append(float(row[-1]))
                low.append(float(row[-2]))
                avg.append(float(row[-3]))
                
plt.rc('font', family = 'Malgun Gothic')
plt.title('마지막 날의 기온 변화 그래프')
plt.rcParams['axes.unicode_minus'] = False
plt.plot(high, 'hotpink', label = 'high')
plt.plot(low, 'skyblue', label = 'low')
plt.plot(avg, 'yellowgreen', label = 'avg')
plt.legend()
plt.show()

plt.rcParams['axes.unicode_minus'] = False : - 기온 표시가 제대로 나오지 않을 때 쓰는 코드

Unit06

In [12]:
import matplotlib.pyplot as plt
plt.hist([1,1,2,3,4,5,6,6,7,8,10])
plt.show()
In [13]:
import matplotlib.pyplot as plt
import random
dice = []

for i in range(1000000):
    dice.append(random.randint(1,6))
    
print(dice)
plt.hist(dice, bins = 6)
plt.show()
IOPub data rate exceeded.
The notebook server will temporarily stop sending output
to the client in order to avoid crashing it.
To change this limit, set the config variable
`--NotebookApp.iopub_data_rate_limit`.

Current values:
NotebookApp.iopub_data_rate_limit=1000000.0 (bytes/sec)
NotebookApp.rate_limit_window=3.0 (secs)

randint(a,b): a 이상 b 이하의 정수 중 하나를 무작위로 선택한다 plt.hist(bins = ) : 가로축의 구간 갯수 설정 속성

In [14]:
import csv
import matplotlib.pyplot as plt

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

for row in data:
    if row[-1] != '':
        result.append(float(row[-1]))
        
plt.hist(result, bins = 100, color = 'r')
plt.show()
In [15]:
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]
    if row[-1] != '' :
        if month == '08':
            aug.append(float(row[-1]))
            
plt.hist(aug, bins = 100, color = 'r')
plt.show()
In [16]:
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 == '01':
            jan.append(float(row[-1]))
        if month == '08':
            aug.append(float(row[-1]))

plt.hist(jan, bins = 100, color = 'blue', label = 'jan')
plt.hist(aug, bins = 100, color = 'red', label = 'aug')
plt.legend()
plt.show()
In [17]:
import matplotlib.pyplot as plt
import random
import numpy as np
result = []

for i in range(13):
    result.append(random.randint(1, 1000))
print(sorted(result))
plt.boxplot(result)
plt.show()

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)))
[29, 43, 65, 69, 139, 182, 294, 357, 509, 549, 810, 819, 852]
1/4: 69.0
2/4: 294.0
3/4: 549.0
In [18]:
import csv
f = open('seoul.csv')
data = csv.reader(f)
next(data)
result = []

for row in data:
    if row[-1] != '':
        result.append(float(row[-1]))
        
import matplotlib.pyplot as plt
plt.boxplot(result)
plt.show()
In [19]:
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 == '01':
            jan.append(float(row[-1]))
        if month == '08':
            aug.append(float(row[-1]))

plt.boxplot(jan)
plt.boxplot(aug)
plt.show()
In [20]:
plt.boxplot([jan, aug])
plt.show()
In [21]:
import csv
import matplotlib.pyplot as plt

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

month = [[],[],[],[],[],[],[],[],[],[],[],[]]

for row in data:
    if row[-1] != '':
        month[int(row[0].split('-')[1])-1].append(float(row[-1]))
plt.boxplot(month)
plt.show()
In [22]:
import csv
import matplotlib.pyplot as plt

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

day = []

for i in range(31):
    day.append([])
    
for row in data:
    if row[-1] != '':
        if row[0].split('-')[1] == '08':
            day[int(row[0].split('-')[2])-1].append(float(row[-1]))
            
plt.style.use('ggplot')
plt.figure(figsize = (10, 5), dpi = 300)
plt.boxplot(day, showfliers = False)

plt.show()

plt.style.use('ggplot'): 그래프의 스타일을 지정하는 코드, 회색의 격자무늬와 2/4 선의 색이 바뀜

반응형