1. 기업맞춤형 빅데이터 분석가 양성과정 소개
2. 기업맞춤형 빅데이터 분석가 양성과정 노트목록
https://crosefrog.tistory.com/entry/20210104-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-4%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240105-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-5%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240109-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-7%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240111-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-9%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240115-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-11%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240116-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-12%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
3. 첫째 마당_기온 공공 데이터.ipynb / 둘째 마당_데이터 시각화 기초.ipynb / 시작하기 전에_첫째 마당.ipynb
4. Notion 일과 삶 & 빅데이터 분석가 양성과정 대시보드
https://lifemoment.notion.site/497bff9488aa4dec9171d08224a7a978?pvs=4
5. Google Colaboratory Notebook
https://colab.research.google.com/drive/1LlD-S9IL1JVmdD9qqV_nhrJKTBvdmzBN#scrollTo=IvFCQaOxCoyZ
https://colab.research.google.com/drive/1Dq8JCwpwzVNe6HF_Ixcpwm1MiE7IOz-h#scrollTo=GW0_5PyQtg0P
https://colab.research.google.com/drive/1FymjutQ7loFd2cYAo-jCr1tu_FGNF0Zq#scrollTo=nPl_crRthvNL
6. Naver 블로그 포스팅
https://blog.naver.com/moment_by_moment/223325821806
7. 필기노트
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()
모두의 데이터분석 with 파이썬
(실생활 예제로 시작하는 데이터 분석 첫걸음)
바닷가 출신이지만, 몇 가지 생선만 골라서 먹는 사람이 있다.
밥상에 생선을 잘 올리지 않는다.
술안주로 회보단 육류를 생각하는 사람들이 많다.
대부분, 굶주리면 먹게 된다.
안동과 서울은 내륙이다.
서울 횟집 매운탕은 C급이다.
모든 음식의 1순위는 ‘산도(신선도)’이다.
C급은 양념으로 어느정도 먹을 수 있는 정도.
신 김치와 썩은 김치는 구분이 된다.
육류: 돼지, 소, 닭, 오리
기상 자료 개방 포털 (https://data.kma.go.kr)
아래한글로 작성된 문서를 메모장으로 열어보면,
자기만의 방식으로 저장된 것을 확인할 수 있다.
어떤 자료를 넘기면, 각자 자기만의 방식으로 저장하게 된다.
→ 데이터에선, 아스키 코드로 본다. (아스키 파일)
CSV파일은 기본값 ‘,’로 구분하여 저장하게 된다.
Excel 프로그램이 인식할 수 있음
데이터 분석을 할 때, 통계 자료를 제공하는 사이트를 뒤져서 특정 자료로 접근하는 것이 수월할 것이다.
- csv 파일 열어보기
import csv
f = open('서울.csv', 'r')
data = csv.reader(f)
print(data)
f.close()
- 1번 라인, import csv는 csv 모듈을 불러옴
각 행의 데이터가 대괄호([])로 둘러쌓임: 리스트
각 행, 리스트 데이터의 각 요소가 작은 따옴표(’ ‘)로 둘러쌓임: 문자열
누락된 데이터를 확인하기는 어렵다.
가장 쉬운 것: 제외하기
- 헤더 확인하기
: next( )함수는 data의 한 행 데이터를 반환 후 data에서 그 행을 삭제
- 이터러블한 데이터 중에서 next( )함수로 차례 차례 요소를 꺼낼 수 있는 것을 ‘이터레이터’라고 함
- 리스트, 딕셔너리, 문자열, 튜플 등은 모두 ‘이터러블’(요소를 차례 차례 하나씩 꺼낼 수 있는)하다고 함.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)
# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)
f.close()
데이터에서 어떤 정보를 추출해 낼 수 있는가?
→ 어떤 의미있는 정보를 자료로부터 끄집어내기 위해서
- 언제 가장 더웠고, 얼마나 더웠을까?
- 일교차가 가장 큰 날은 1년 중 언제였을까?
#사람마다 더위를 느끼는 정도가 다르다.
어떤 사람은 습도가 높을수록, 어떤 사람은 온도가 높을수록 덥다고 느낄 수 있다.
→ 가장 더웠던 날은 언제이고, 얼마나 더웠을까? 라는 질문을 다듬어서
기온, 습도, 풍속 등 정확한 정보로 언급하는 것이 신뢰성이 있다.
⇒ 기상 관측 이래, 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
- 일별로 기록된 최고기온 중, 가장 높은 값은 얼마인가?
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_Data = ''
for row in data:
# 최고 기온 정보는 행(리스트)의 맨 마지막 요소
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재할 수 없는 최고 기온.
else:
row[-1] = float(row[-1])
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은"\\ + max_data +"일이며 "+ str(max_temp) +"도였습니다.")
혼자 공부하는 파이썬
모두의 데이터분석 with 파이썬
이것이 MySQL이다.
혼자 공부하는 자바 스크립트
- 기온 공공 데이터에 질문하기 - 데이터에서 원하는 정보를 얻기
파이썬 코드 작성 - 서울의 최고 기온이 가장 높았던 날은 언제였고 몇 도였을까?
‘data’의 각 행은 리스트 형이었음
date_list → 날짜를 요소로 하는 리스트
온도만 들어있는 리스트를 뽑고, 데이터만 들어있는 리스트를 뽑으면 된다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
header = next(data) # header 제거
max_temp = -999
max_data = ''
for row in data:
#최고 기온 정보는 행(리스트)의 맨 마지막 요소.
if row[-1] == '': # 맨 마지막 요소가 누락되었다면
row[-1] = -1000 # 존재 할 수 없는 최고 기온.
else:
row[-1] = float(row[-1]) # 문자열 형 -> 숫자형으로 변환
if max_temp < row[-1]:
max_temp = row[-1]
max_date = row[0]
f.close()
print("서울의 최고 기온이 가장 높았던 날은 "\\
+ max_date +"일이며 "+ str(max_temp) +"도였습니다.")
학연, 지연, 혈연은 중요치 않지만, 이유모르게 더 친근한 느낌이 드는 이유이기도 하다.
뭔가 의미있는 정보를 만들어내려고 하는 것이다.
최고 온도가 얼마이고 몇 도인지 궁금하다면 필요한 정보를 뽑아내야 한다.
공부하고 있는 아버지
→ 아들이 자연스럽게 책을 보는 것이 문화가 된다고 생각한다.
연합고사라 불리는 고등학교 시험이 있다.
서울에서 떨어진 곳에 있는 형, 누나들이 같이 살았다.
중학교 3학년 때 도서관에 앉아있는 것이 삶의 일부가 되었다.
→ 자연스럽게 나의 삶이 변하게 된다.
내 삶의 방식을 은연중에 보고 배운다.
→ 자연스럽게 보고 배울 것이다.
어떤 일을 스스로 할 수 있게 되기까지 10년은 걸린다.
아직 20살 넘어서 10년이 되지 않았다.
가르치는 입장, 구직하는 입장에서 보면
시간이 필요하다. → 이 시간을 줄일려고 노력하는 것이다.
- 공통의 목적: 주어진 기간안에 큰 성장을 이루길 바란다.
둘째 마당- 데이터 시각화 기초
- 기본 그래프 그리기
matplotlib 라이브러리란?
기본 그래프 그리기
import matplotlib.pyplot as plt
plt.plot([10, 20, 30, 40]) # y-축 데이터만 전달 했음.
plt.show()
import matplotlib.pyplot as plt
# x-축 데이터와 y-축 데이터 모두 전달
# x-축 데이터 개수와 y-축 데이터 개수 일치
plt.plot([1, 2, 3, 4], [10, 20, 30, 40])
plt.show()
- 앞 페이지의 그래프와 비교할 것
- numpy 모듈은 python으로 수학 계산을 고속으로 처리하기 위해 만들어졌다.
import numpy as np
x = np.arange(5)
print(x)
print(type(x))
=>
[0 1 2 3 4]
<class 'numpy.ndarray'>
x = range(5)
print(x)
print(list(x))
print(type(x))
=>
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
x = np.arange(1, 5)
print('x:', x)
print('2*x:', 2*x)
print('2*x+1:', 2*x+1)
=>
x: [1 2 3 4]
2*x: [2 4 6 8]
2*x+1: [3 5 7 9]
import numpy as np
x = np.arange(1, 5)
y = 2*x + 1
plt.plot(x, y, 'bo--')
plt.show()
- 그래프에 옵션 추가하기
- 그래프에 제목 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.show()
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--')
plt.title('My Income')
plt.xlabel('year')
plt.ylabel('$')
plt.show()
N개의 그래프를 하나의 그림(figure)에 넣기
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo-')
plt.plot(x,y2,'rs:')
plt.title('title')
plt.show()
그래프에 범례 넣기
x = [1, 2, 3, 4]
y = [3, 5, 7, 9]
plt.plot(x,y,'bo--', label='me')
plt.legend()
plt.show()
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend()
plt.show()
- 웃자고 하는 소리 -
나는 한결 같이 꾸준히 노력했다. 비록 초기값이 너 보자 작지만 ...
너도 한결 같이 꾸준히 노력했다. 초기값이 나보다 높은 곳에서 시작하였하여
한 동안 나보다 큰 값을 가졌지만
너가 방황하는 동안 나는 늘 한결 같이 노력했다.
웃자고 하는 소리였습니다.
거렇다고 파란선이 승자냐? 그건 아니죠. x 축의 값이 4.0을 지나면서 또 어떤 일이 생길지 모릅니다. ㅎㅎㅎㅎ
x = [1, 2, 3, 4]
y1 = [3, 5, 7, 9]
y2 = [4, 6, 6, 8]
plt.plot(x,y1,'bo--', label='me')
plt.plot(x,y2,'rs--', label='you')
plt.title('title')
plt.legend(loc=4)
plt.show()
지구 평균 기온 상승을 그래프로 보이고 싶다.
왜 보이고 싶은가? 보이고 싶은 목적이란 무엇인가?
온도가 많이 상승한다고 하면, 이런 그래프를 보여주고 싶다.
평균기온이 상승한다고 하면, 그래프를 보고 설득시켜야 한다.
→ 내 말을 설득시키기 위해서
1908년 1년 평균치 온도부터 2023년 평균온도까지
여름 평균, 겨울 평균, 연평균을 모두 그린 다음,
내가 말하고자 하는 내용을 잘 나타내는 것을 보여주면 된다.
낚시를 한창 다니던 시절
옛날에는 한강이 얼었다.
서울 살아보면, 한강이 어는 일은 매우 드문 일이다.
내가 표현하고 싶은 것을 데이터에서 어떻게 보여줄것인가
- 데이터 읽어 오기
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
for row in data:
print(row[-1]) # 최고 기온값만 출력
f.close()
- 데이터를 리스트에 저장하기
: 누락 데이터를 제외하고 최고 기온 값만 추출하여 리스트 형 데이터를 만든다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data) # 헤더 제거
max_temp_list =[] # 최고 기온 데이터를 저장하기 위해 미리 빈 리스트 생성
for row in data:
# 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[-1] != '':
# row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
max_temp_list.append(float(row[-1]))
f.close()
print(max_temp_list)
print( len(max_temp_list) )
- 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(max_temp_list, 'r')
plt.show()
- 날짜 데이터 추출하기
‘서울.csv’파일에서 구한 데이터는 아래와 같은 형태의 데이터이다.
['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
위 리스트에서 날짜에 해당하는 정보는 첫 번쨰 요소로 단순 문자열로 기록되어 있다.
'\\t2009-06-14'
여기서 연, 월, 일 정보를 추출한다고 하자.
먼저 replace() 함수를 사용하여 \t를 제거한다.
date = '\\t2009-06-14'
date = date.replace('\\t', '')
print(date)
그리고 ‘2009-06-14’의 문자열은 split()함수를 이용하여 연, 월, 일을 분리한다.
ymd = date.split('-')
print(ymd)
=> ['2009', '06', '14']
print(ymd[0]) # 년: year
print(ymd[1]) # 월: month
print(ymd[2]) # 일: day
=>
2009
06
14
1년 중 가장 더운 8월 달의 최고 기온 데이터만 추출하여 그래프로 그린다.
import csv
f = open('서울.csv', encoding='cp949')
data = csv.reader(f)
next(data)
max_temp_list =[]
for row in data:
if row[-1] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '08': # ['\\t2009-06-14', '108', '20.2', '18.2', '23.8']
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'r')
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] != '': # 누락된 데이터가 아닐 경우(데이터가 있을 경우)
if row[0].split('-')[1] == '01' and row[0].split('-')[2] =='24':
max_temp_list.append(float(row[-1])) # row[-1]은 문자열 데이터임으로 float() 함수를 사용하여 숫자형 데이터로 변환 후 저장
f.close()
plt.figure(figsize=(16, 4))
plt.plot(max_temp_list, 'b.-')
plt.title('max. temp of January 24 every year')
plt.ylabel('temp')
plt.grid()
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('서울.csv', 'r', encoding='cp949')
data = csv.reader(f)
next(data)
high = []
low = []
year =[]
for row in data :
if row[-1] != '' and row[-2] != '':
if 1981 <= int(row[0].split('-')[0]) :
if row[0].split('-')[1] == '09' and row[0].split('-')[2] == '30':
high.append(float(row[-1]))
low.append(float(row[-2]))
year.append(int(row[0].split('-')[0]))
plt.rc('font', family='NanumBarunGothic')
plt.title('달빛샘 생일의 기온 변화 그래프(9월 30일)')
plt.plot(year, high, 'r', label='최고')
plt.plot(year, low, 'b', label='최저')
plt.legend()
plt.show()