"18년 서울 Data Science 스터디"의 두 판 사이의 차이

깊이있는 삽질 Ubuntu Korea Community Wiki
이동: 둘러보기, 검색
(세부 진행내용)
(세부 진행내용)
467번째 줄: 467번째 줄:
 
*** 한글이 깨진 그래프 모습 코드 결과 모습
 
*** 한글이 깨진 그래프 모습 코드 결과 모습
 
*** [[파일:mat.png|500px]]
 
*** [[파일:mat.png|500px]]
 +
* matplotlib 한글 폰트 설정
 +
** 한글 폰트 설정
 +
*** Adobe와 Google이 공동 개발한 한국, 중국, 일본에 사용되고 있는 문자를 이용 가능한 폰트 패밀리
 +
Source Han Sans를 사용하기로 합니다.
 +
*** [https://github.com/adobe-fonts/source-han-serif] [Source Han Sans 폰트 패밀리가 있는 github 주소]
  
 
=== 5주차 ===
 
=== 5주차 ===

2018년 11월 8일 (목) 07:03 판

개요

  • 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"을 눌러주세요.
print("Hello, World!")
    • Py4.png
  • 실습 - 라이브러리를 활용하여 그래프(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()
  • Py5.png


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 실전 입문 : 터닝포인트)
#!/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 주소]

5주차

  • 날짜 : 11/10
  • 참석자 :
  • 진행한 내용 :
  • 과제 :

6주차

  • 날짜 : 11/17
  • 참석자 :
  • 진행한 내용 :
  • 과제 :

7주차

  • 날짜 : 11/24
  • 참석자 :
  • 진행한 내용 :
  • 과제 :

8주차

  • 날짜 : 12/01
  • 참석자 :
  • 진행한 내용 :
  • 과제 :

후원

1. KOSSLAB(장소)


참고