18년 서울 Data Science 스터디: 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
imported>Gilhan |
imported>Gilhan |
||
| 527번째 줄: | 527번째 줄: | ||
plt.show() | plt.show() | ||
</pre> | </pre> | ||
*** 실행 결과 | |||
[[파일:mapt2.png|500px]] | |||
=== 5주차 === | === 5주차 === | ||
2018년 11월 8일 (목) 09:36 판
개요
- 2018년 하반기에 진행하는 데이터사이언스 스터디.
- 기간 (총 횟수) : 2018년 10월부터 2018년 12월까지(8 - 12)
- 장소 : 서울 강남 일대
- 교재 : 처음 배우는 데이터 과학
| 참가자 | ||
|---|---|---|
| 스터디장 | 홍길환 | |
| 참가자 | 배준현 | |
| 홍찬양 | ||
| 정동우 | ||
| 이승윤 | ||
| 최주영 | ||
| 박정호 | ||
모임 기록
1주차
- 날짜 : 10/13
- 참석자 : 7
- 진행한 내용 : 오리엔테이션, 교재소개, Python 설정, Pycharm(IDE) 설정, PIP 활용
- 과제 : 데이터 과학에 필요한 패키지(이승윤)
세부 진행내용
- ubuntu나 linux 등에서는 기본적으로 python3가 리눅스가 설치되면서 함께 내장되어 있습니다.
- 최신 버전인 3.7 버전으로도 업그레이드가 가능합니다.
- 하지만 3.6 버전으로도 진행이 가능하여, 3.6 버전에서 스터디를 진행하겠습니다.
user@ubuntu:~$ python3 --version Python 3.6.6
- Ubuntu에 Python 3.6 환경에서 PyCharm 설치 및 설정
- 터미널에 아래 명령어를 입력
sudo apt install snapd snapd-xdg-open
- 설치가 정상적으로 된 후, 다음 과정을 거쳐 PyCharm을 설치합니다.
- 개인용을 설치 할 예정이므로, "--classic" 버전을 설치해주세요.
sudo snap install pycharm-community --classic
- 정상적으로 설치가 된 경우 터미널에 아래와 같이 입력을 했을 때 다음과 같은 결과가 나옵니다.
user@ubuntu:~$ sudo snap install pycharm-community --classic pycharm-community 2018.2.4 from jetbrains✓ installed
- pip을 활용한 파이썬 라이브러리 설치 (링크로 대체)
- [PyCharm pip 명령어 대신 파이참을 이용해서 파이썬 패키지 모듈 설치하기]
- Pycharm 실행해보기
- 파일:Py.png
- pycharm classic ide의 아이콘을 클릭합니다.
- 실행이 되면 처음에는 기본 설정대로만 다음을 클릭합니다.
- 파일:Py2.png
- 새 프로젝트 생성
- 파일:Py3.png
- 새 파일 생성
- 새로 만든 프로젝트 명에서 마우스 오른쪽 버튼을 누르고 new에서 python file이라고 되어 있는 곳을 클릭하고 임의의 파이썬 파일명을 입력합니다.
- 아래와 같은 코드를 입력하신 후, "run"을 눌러주세요.
- 파일:Py.png
print("Hello, World!")
- 실습 - 라이브러리를 활용하여 그래프(Plot) 그려보기
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x)) plt.show()
2주차
- 날짜 : 10/20
- 참석자 : 8
- 진행한 내용 : 데이터 과학 관련 패키지 소개, 데이터 과학 관련 파이썬 기초 문법과 활용 소개
- 과제 : 데이터 과학에 필요한 파이썬 문법
세부 진행내용
- 이번 주 과제 발표는 이승윤님이 해주셨습니다.
- 발표안은 데이터 과학 관련 파이썬 라이브러리입니다.
- 데이터 과학의 구성 요소
- 데이터 수집
- 데이터 분석
- 데이터 시각화
- 데이터 과학의 구성요소
- 데이터 과학은 크게 세 가지 구성 요소로 나눌 수 있습니다.
- 수집
- 분석
- 시각화
- 데이터 수집에 사용되는 라이브러리에 대해서 알아보기로 합니다.
- 데이터 수집의 방법 중에 하나는 웹 크롤링이 있습니다.
- 크롤링이란 웹 페이지의 자원을 읽어와 이용할 수 있도록 하는 것입니다.
- [1] [크롤링 참고 자료] 파이썬으로 크롤링하기
- requests
- html 획득에 사용됩니다.
- 원하는 웹 사이트에 requests를 날려 html을 받을 수 있는 라이브러리 입니다.
- [2] [requests] requests simple 참고 자료
- beautifulsoup
- beautifulsoup는 html 파싱에 사용된다.
- html 안에 원하는 태그를 가져 올 수 있는 find(), find_all()이 있습니다.
- 태그 안의 모든 문자열을 하나의 문자열로 만들어 반환 해주는 get_text() 등의
함수를 이용하여 html 코드를 간단하게 분석할 수도 있습니다.
- [3] [beautifulsoup사용법 참고 자료] beautifulsoup 사용법 링크입니다.
- 데이터 분석
- 데이터 분석과 가공 (pandas)
- 데이터를 분석하고 가공할 수 있습니다.
- [4] [pandas 관련 발표 링크] pandas 라이브러리에 대한 설명 자료입니다.
- pandas
- 데이터 분류된 데이터와 관계형 데이터를 직관적으로 처리할 수 있도록 하는 라이브러리 입니다.
- 1차원 자료구조인 Series, 2차원 자료구조인 DataFrame, 그리고 3차원 자료구조인 Panel
총 세 가지 자료구조를 지원합니다.
빠르고 쉬운 데이터 조작을 할 수 있는 점이 특징입니다.
- numpy
- 수학적, 과학적 데이터 분석에 용이한 라이브러리 입니다.
- 파이썬의 기본 자료구조보다 빠르고 효율적인 다차원배열 객체 n-array를 제공합니다.
- 배열 원소를 다루거나 배열간의 수학계산을 수행하는 함수,
선형대수의 계산, 푸리에 변환, 난수 발생기 같은 수치와 관련된 다양한 기능을 제공합니다.
- 데이터 시각화
- 분석, 가공한 데이터를 시각화할 수 있습니다. 파이썬 시각화 라이브러리로는 matplotlib가 있습니다.
- [5] [matplotlib 시각화 발표 참고 자료]
matplotlib
- 데이터 시각화에 사용되는 라이브러리 입니다.
- 2차원 선 그래프, 막대 그래프, 원형 그래프, 히스토그램은 물론 3차원 그래프까지
데이터를 다양한 형태로 시각화 할 수 있는 라이브러리 입니다.
[세부 참고 영어 문서] Better web scraping in Python with Selenium, Beautiful Soup, and pandas
- [7] [세부 참고 영어 문서 2]
Web Scraping in Python using Scrapy
- 감사합니다.
3주차
- 날짜 : 10/27
- 참석자 : 5
- 진행한 내용 : 데이터 과학에 필요한 파이썬 문법
- 과제 : matplotlib와 dpandas 문법과 csv를 이용하여 심플한 데이터 분석
세부 진행내용
- 파이썬 프로그램 실행 방법
- 인터프리터 프롬프트에서 실행
>>> print("hello world")
hello world
>>>
- 소스 파일을 사용하여 실행
- 예) hello.py 파일 생성 -> print("hello world") 입력 -> 터미널창에서 python3 hello.py 실행
- 실행 예시
vim hello.py
python3 hello.py
cat hello.py
#!/usr/bin/python3
print("hello world")
- 편집기의 종류 : vim, emacs, pycharm
- 문법강조 기능, 들여쓰기 기능 지원
- 파이썬 문법
- 주석
- 주석 기호
#, """
- 주석 사용 케이스
- 미리 가정하고 넘어간 것들에 대한 설명
- 중요한 결정 사항에 대한 설명
- 중요한 세부 사항에 대한 설명
- 해결하고자 하는 문제에 대한 설명
- 앞으로 극복하고자 하는 문제들에 대한 설명 등등.
- 주석 사용 케이스
- 데이터 형
- 리터럴 상수 : 문자 형태로 지정되며 변하지 않음
ex) 'hello world'
- 숫자형
- 정수 - integer
2
- 부동 소수점 - float
52.3E - 4
- 문자열
- 큰따옴표(") 또는 작은 따옴표(')로 지정. 모든 공백 문자나 탭은 그대로 유지.
- 큰따옴표 또는 작은따옴표 출력시 이스케이프(\) 사용.
- r 또는 R을 사용하여 그대로 출력 가능.
- 줄바꿈시 \n 사용.
- \만 사용할 경우 끊김 없이 문자열 정의
- 여러줄의 경우 (""" 또는 )로 표현 가능
"테스트 문자열" -> 테스트 문자열
"테스트 문자열 \"" -> 테스트 문자열 \
r"테스트 문자열 \"" -> 테스트 문자열 \"
"테스트 문자열 \n 다음줄 문자열" ->
테스트 문자열
다음줄 문자열
print ('''테스트 문자열.
다음줄 문자열.
다음줄 문자열.
다음줄 문자열.
''')
- 문자열 포맷팅
- format() 문자열 생성시 다른 정보 포함하여 생성하는 함수
vim place.py
python3 place.py 데이터 사이언스 는 선릉 에서 한다
cat place.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
place = '선릉'
study = '데이터 사이언스'
# 중괄호 안에 숫자는 생략 가능
print ('{0} 는 {1} 에서 한다'.format(study, place))
python3 flt.py 0.333 ___hello___ Swaroop wrote A Byte of Python
cat flt.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 소수점 이하 셋째 자리까지 부동 소숫점 숫자 표기 (0.333)
print ('{0:.3f}'.format(1.0/3))
# 밑줄(_)ㄹ 11칸을 채우고 가운데 정렬(^)하기 (___hello___)
print ('{0:_^11}'.format('hello'))
# 사용자 지정 키워드 이용해 (Swaproop wrote A Byte of Python) 표기
print ('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
- 변수
- 변수 : 정보 저장을 위한 컴퓨터의 기억 장치의 한 부분을 가져와 이름을 붙여 사용하는 것
- 변수 식별자 규칙
- 식별자의 첫 문자는 알파벳 문자 (ASCII 대/소문자 혹은 유니코드 문자)이거나 밑줄 (_)이어야 합니다.
- 나머지는 문자 (ASCII 대/소문자 혹은 유니코드 문자), 밑줄(_), 또는 숫자 (0-9)가 될 수 있습니다.
- 식별자는 대/소문자를 구분합니다. 예를 들어, myname과 myName은 다릅니다. 전자의 `n`은 소문자이고,
후자의 `N`은 대문자입니다.
- 올바른 예 i, name_2_3 -잘못된 예 2things, this is spaced out, my-name, >a1b2_c3
- 논리적/물리적 명령행
- 물리적 명령행 : 프로그램 코드 내에서 직접 표현된 한줄
- 논리적 명령행 : 파이썬 인터프리터 관점에서 한 명령 단위
i = 5; print (i) # 세미콜론을 사용하여 하나의 물리적 명령행에 두 개의 논리적 명령행을 사용. 권장하지 않음.
- 들여쓰기
- 명령어 앞에 공백으로 한 명령의 범위를 구분, 이것은 같은 들여쓰기 단계에 있는 명령들은 반드시
같은 들여쓰기를 사용해야 함을 의미합니다.
- 들여쓰기시 파이썬 언어에서 공식적으로 추천하는 방법은 공백 4개.
i = 5
# 다음 행에서 오류가 발생합니다! 행 앞에 잘못된 공백이 한 칸 있습니다.
print ('Value is ', i)
print ('I repeat, the value is '. i)
- 연산자
- 사칙연산 : +,,-,/,*
- 거듭제공: **
- 나머지 : %
- 왼쪽 시프트 : <<
- 지정된 숫자에 대해 비트 수 만큼 왼쪽 시프트 연산
gildangsam@gildangsam-GA-MA74GM-S2H:~$ python3 Python 3.6.6 (default, Sep 12 2018, 18:26:19) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>> 2 << 2 8 >>>
2 << 2 # 8을 반환합니다. 2 는 이진수로 10 으로 표현 # 이것을 왼쪽으로 2비트 시프트 연산하면 이진수 1000 이 되고, 이것을 정수로 표현하면 8 이 됨.
- 오른쪽 시프트 : >>
- 지정된 숫자에 대해 지정된 비트 수 만큼 오른쪽 시프트 연산
gildangsam@gildangsam-GA-MA74GM-S2H:~$ python3 Python 3.6.6 (default, Sep 12 2018, 18:26:19) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>> 11 >> 1 # # 은 5를 반환. 5 >>> # 11은 이진수로 1011 로 표현됩니다. 이것으로 오른쪽으로 1비트 시프트 연산하면 이진수 101이 되고, 이것을 정수로 표현하면 5가 됨.
- 비트 AND 연산자 : &
5 & 3 # 1을 반환. 5는 이진수로 101. 3은 인진수 011. 각각의 비트를 and로 연산.
- 비트 OR 연산자 : |
5 | 3 # 7을 반환. 5는 이진수로 101. 3은 이진수로 011. 각각의 비트를 or로 연산.
- 비트 XOR 연산자 : ^
5 ^ 3 # 6을 반환. 5는 이진수로 101. 3은 이진수로 011. 각각의 비트를 xor로 연산
- 비트 반전 연산자 : ~
숫자 x의 비트 반전 연산값 -(x+1)을 반환
~5 # -6을 반환
- 비교 연산자 : <,>,<=,>=,==,!=
- 불리언 연산자 : not, and, or
x = true y = false not x = false x and y = false x or y = true
- 흐름제어
- if 문: 조건을 판별하기 위해 사용
num1 = 1
num2 = 2
if num1 == num2:
print('두 숫자는 같다')
else:
print('두 숫자는 다르다')
- while문 : 특정 조건이 참일 경우 블록의 명령문을 반복 실행
- while에도 else사용 가능
num = 1
while num < 10:
print('숫자가 10보다 작음')
num = num + 1
else:
print('숫자가 10보다 크거나 같음')
- for 문 : 열거형을 반복하여 실행할 때 사용.
# range 함수 : 첫번째 숫자 이상, 두번째 숫자 미만의 숫자 목록을 반환
for i in range(1, 5):
print(i)
else:
print('The for loop is over')
- break 문 : 루프문을 강제로 빠져나올 때 사용
num = 1
while num < 10:
if num == 5:
break
print('숫자가 10보다 작음')
else:
print('숫자가 10보다 크거나 같음')
- continue 문 : 현재 실행중인 루프 블록의 나머지 명령문들을 실행하지 않고 곧바로 다음 루프로 넘어갈 때 사용
num = 1
while num < 10:
num = num + 1
if num == 5:
continue
print(num)
- 여기까지입니다. ^^
4주차
- 날짜 : 11/03
- 참석자 : 4
- 진행한 내용 : matplotlib와 dpandas 문법과 csv를 이용하여 심플한 데이터 분석
- 과제 : 데이터 처리
세부 진행내용
- python3 matplotlib 그래프 한글 폰트 설정
- python3에서 폰트 설정 없이 한글을 matplotlib 그래프에서 그리면
한글이 깨져서 나옵니다.
- code 내용 (코드 출처 : 파이썬 jupyter notebook 실전 입문 : 터닝포인트)
- code 내용 (코드 출처 : 파이썬 jupyter notebook 실전 입문 : 터닝포인트)
#!/usr/bin/python3
import numpy as np
from matplotlib import pyplot as plt
np.random.seed(0)
x = range(5)
y = 10 + 5 * np.random.randn(5)
flg = plt.figure()
ax = flg.add_subplot(111)
ax.set_title('한글을 지정한 타이틀')
ax.bar(x, y)
plt.show()
- 한글이 깨진 그래프 모습 코드 결과 모습
- 파일:Mat.png
- matplotlib 한글 폰트 설정
- 한글 폰트 설정
- Adobe와 Google이 공동 개발한 한국, 중국, 일본에 사용되고 있는 문자를 이용 가능한 폰트 패밀리
- 한글 폰트 설정
Source Han Sans를 사용하기로 합니다.
- [8] [Source Han Sans 폰트 패밀리가 있는 github 주소]
- 이 github 주소에 있는 특정 폰트를 wget으로 다운로드 받습니다.
wget https://github.com/adobe-fonts/source-han-serif/raw/release/OTF/Korean/SourceHanSerifK-Regular.otf
mv SourceHanSerifK-Regular.otf SourceHanK-Regular.otf
mv SourceHanSerifK-Regular.otf SourceHanK-Regular.otf
mv SourceHanK-Regular.otf SourceHanSansK-Regular.otf
sudo cp SourceHanSansK-Regular.otf /usr/share/fonts/
sudo fc-cache -vf
- 여기까지가 필요한 한글 폰트 우분투 설치준비 과정이었습니다.
- 다음은 우선 특정 디렉토리에 있는 폰트(otf)를 사용하여, 직접 matplotlib
에서 한글 폰트를 이용하는 방법입니다.
#!/usr/bin/python3
import os
import numpy as np
from matplotlib import pyplot as plt, font_manager
font_manager._rebuild()
if os.name == 'nt':
font_dir = font_manager.win32FontDirectory()
else:
font_dir = '/home/gildangsam/sample-data'
font_path = os.path.join(font_dir, 'SourceHanSansK-Regular.otf')
font = font_manager.FontProperties(fname=font_path, size=14)
np.random.seed(0)
x = range(5)
y = 10 + 5 * np.random.randn(5)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('한국어를 지정한 타이틀', fontproperties=font)
ax.set_xlabel('X축', fontproperties=font)
ax.bar(x,y)
plt.show()
- 실행 결과
5주차
- 날짜 : 11/10
- 참석자 :
- 진행한 내용 :
- 과제 :
6주차
- 날짜 : 11/17
- 참석자 :
- 진행한 내용 :
- 과제 :
7주차
- 날짜 : 11/24
- 참석자 :
- 진행한 내용 :
- 과제 :
8주차
- 날짜 : 12/01
- 참석자 :
- 진행한 내용 :
- 과제 :
후원
1. KOSSLAB(장소)
참고
- 내용을 추가해주시는 건 18년 대전 ARM Study 문서를 참고해주세요