오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) Yongho Ha
http://ga.yonghosee.com 에서 진행하는 구글 어날리틱스(google analytics) 에 대한 강의 슬라이드 입니다. 이 슬라이드는 샘플이지만, 초반부는 실재 강의 교재 그대로 입니다. 이것 자체로도 여러분이 GA를 이해하는데 좀 도움이 된다면 기쁘겠습니다^^ 감사합니다.
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) Yongho Ha
http://ga.yonghosee.com 에서 진행하는 구글 어날리틱스(google analytics) 에 대한 강의 슬라이드 입니다. 이 슬라이드는 샘플이지만, 초반부는 실재 강의 교재 그대로 입니다. 이것 자체로도 여러분이 GA를 이해하는데 좀 도움이 된다면 기쁘겠습니다^^ 감사합니다.
[우리가 데이터를 쓰는 법] 좋다는 건 알겠는데 좀 써보고 싶소. 데이터! - 넘버웍스 하용호 대표Dylan Ko
Gonnector(고넥터) 고영혁 대표가 주최한 스타트업 데이터 활용 세미나 '우리가 데이터를 쓰는 법' 의 첫 번째 발표 자료
세미나 : 우리가 데이터를 쓰는 법 (How We Use Data)
일시 : 2016년 4월 12일 화요일 10:00 ~ 18:00
장소 : 마루180 (Maru180) B1 Think 홀
제목 : 좋다는 건 알겠는데 좀 써보고 싶소. 데이터!
연사 : 넘버웍스 하용호 대표
빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?Yongho Ha
클라우드라는 말이 들리더니, 어느새 빅데이터가 유행했습니다. 데이터가 중요하다는 것을 겨우 받아들일까 하는 판국에, 이제는 IoT라던가 머신러닝이 중요하다고 합니다. 이 많은 유행들은 그냥 일시적인 걸까요? 아니면 동시에 나타나게된 이유가 있는 걸까요? 이것들 뒤에 큰 흐름이 있지는 않을까요? 있다면 그것은 어디에서 시작되고 있을까요? numberworks.io
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서영준 박
(과거 NDC 2014에서 했던 강연 자료입니다. 발표 당시엔 공유에 힘든 부분이 있어 게임 출시 이후에 공개되는 점 양해를 드립니다.)
프로그래머의 시각에서 게임 개발 프로세스를 보면, 여러 에이전트 들이 특정한 목적을 가지고 동시에 정보를 처리하는 일련의 로직 조합이라고 생각해볼 수 있습니다. 테크니컬 하게 정보 처리 로직을 작성하고 그 효율을 탐구하는 업무가 바로 프로그래머의 주요 업무 중 하나입니다. 그렇다면 프로그래머의 시각으로 개발 프로세스를 접근해 보면 새로운 인사이트를 얻는 부분이 있지 않을까요?
<야생의 땅:듀랑고>에는 새로움이 가득한 도전이 많이 있습니다. 이러한 새로움을 향한 도전은, 비단 게임 피처 뿐만 아니라 개발 프로세스에서도 마찬가지로 녹아 있습니다. 실제로 개발 프로세스 관리에 수많은 시도들이 있었고 지금도 계속 되고 있습니다.
그간 시도했던 여러 개발 프로세스에 대한 소개를 하고, 그것을 활용한 피처 개발, 프로토타이핑 사례 등을 공유하고자 합니다.
박동혁 : 마케터에게 필요한 Data Literacy
발표영상 https://youtu.be/YWbJxCg7y2k
---
PAP가 준비한 팝콘 시즌1에서 프로덕트와 함께 성장하는 데이터 실무자들의 이야기를 담았습니다.
---
PAP(Product Analytics Playground)는 프로덕트 데이터 분석에 대해 편안하게 이야기할 수 있는 커뮤니티입니다.
우리는 데이터 드리븐 프로덕트 문화를 더 많은 분들이 각자의 자리에서 이끌어갈 수 있도록 하는 것을 목표로 합니다.
다양한 직군의 사람들이 모여 프로덕트를 만들듯 PAP 역시 다양한 멤버로 구성되어 있으며, 여러분들의 참여로 만들어집니다.
---
공식 페이지 : https://playinpap.oopy.io
페이스북 그룹 : https://www.facebook.com/groups/talkinpap
팀블로그 : https://playinpap.github.io
[우리가 데이터를 쓰는 법] 좋다는 건 알겠는데 좀 써보고 싶소. 데이터! - 넘버웍스 하용호 대표Dylan Ko
Gonnector(고넥터) 고영혁 대표가 주최한 스타트업 데이터 활용 세미나 '우리가 데이터를 쓰는 법' 의 첫 번째 발표 자료
세미나 : 우리가 데이터를 쓰는 법 (How We Use Data)
일시 : 2016년 4월 12일 화요일 10:00 ~ 18:00
장소 : 마루180 (Maru180) B1 Think 홀
제목 : 좋다는 건 알겠는데 좀 써보고 싶소. 데이터!
연사 : 넘버웍스 하용호 대표
빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?Yongho Ha
클라우드라는 말이 들리더니, 어느새 빅데이터가 유행했습니다. 데이터가 중요하다는 것을 겨우 받아들일까 하는 판국에, 이제는 IoT라던가 머신러닝이 중요하다고 합니다. 이 많은 유행들은 그냥 일시적인 걸까요? 아니면 동시에 나타나게된 이유가 있는 걸까요? 이것들 뒤에 큰 흐름이 있지는 않을까요? 있다면 그것은 어디에서 시작되고 있을까요? numberworks.io
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서영준 박
(과거 NDC 2014에서 했던 강연 자료입니다. 발표 당시엔 공유에 힘든 부분이 있어 게임 출시 이후에 공개되는 점 양해를 드립니다.)
프로그래머의 시각에서 게임 개발 프로세스를 보면, 여러 에이전트 들이 특정한 목적을 가지고 동시에 정보를 처리하는 일련의 로직 조합이라고 생각해볼 수 있습니다. 테크니컬 하게 정보 처리 로직을 작성하고 그 효율을 탐구하는 업무가 바로 프로그래머의 주요 업무 중 하나입니다. 그렇다면 프로그래머의 시각으로 개발 프로세스를 접근해 보면 새로운 인사이트를 얻는 부분이 있지 않을까요?
<야생의 땅:듀랑고>에는 새로움이 가득한 도전이 많이 있습니다. 이러한 새로움을 향한 도전은, 비단 게임 피처 뿐만 아니라 개발 프로세스에서도 마찬가지로 녹아 있습니다. 실제로 개발 프로세스 관리에 수많은 시도들이 있었고 지금도 계속 되고 있습니다.
그간 시도했던 여러 개발 프로세스에 대한 소개를 하고, 그것을 활용한 피처 개발, 프로토타이핑 사례 등을 공유하고자 합니다.
박동혁 : 마케터에게 필요한 Data Literacy
발표영상 https://youtu.be/YWbJxCg7y2k
---
PAP가 준비한 팝콘 시즌1에서 프로덕트와 함께 성장하는 데이터 실무자들의 이야기를 담았습니다.
---
PAP(Product Analytics Playground)는 프로덕트 데이터 분석에 대해 편안하게 이야기할 수 있는 커뮤니티입니다.
우리는 데이터 드리븐 프로덕트 문화를 더 많은 분들이 각자의 자리에서 이끌어갈 수 있도록 하는 것을 목표로 합니다.
다양한 직군의 사람들이 모여 프로덕트를 만들듯 PAP 역시 다양한 멤버로 구성되어 있으며, 여러분들의 참여로 만들어집니다.
---
공식 페이지 : https://playinpap.oopy.io
페이스북 그룹 : https://www.facebook.com/groups/talkinpap
팀블로그 : https://playinpap.github.io
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
Python 프로그램을 디버깅하실 때 어떤 툴을 사용하시나요? 아무래도 가장 많이 사용하고 계신 툴은 PyCharm이 아닐까 싶습니다. PyCharm은 JetBrains에서 만든 GUI 환경에서 사용할 수 있는 Python IDE입니다.
PyCharm은:
로컬 컴퓨터에서 디버깅 모드로 (PyDev로) Python 프로세스를 실행할 수 있습니다.
로컬 컴퓨터에서 실행 중인 Python 프로세스에 Attach해 디버깅할 수 있습니다.
원격 서버에서 디버깅 모드로 (PyDev로) Python 프로세스를 실행할 수 있습니다.
하지만 원격에서 동작하고 있는 프로세스에 디버거를 Attach하는 기능은 제공하지 않고 있습니다. 또한 Python 디버깅 모듈인 pdb를 사용하여도 동작하고 있는 프로세스에 Attach하는 것은 지원하고 있지 않습니다.
로컬 환경에서는 문제 없이 돌아갔던 Python 프로그램이 원격 서버에서는 아무런 로그 없이 멈춰 버리는 경우 어디서부터 손을 대야 할지 정말 막막합니다. 이 때 GDB와 strace를 이용하면 어디에서 문제가 발생했는지 진단할 수 있습니다. 이 세션에서는 GDB와 strace를 이용해 디버깅하여 원격 리눅스 서버에서 Python Process가 Hang 되어 버리는 문제를 진단하고 해결했던 경험을 공유하려고 합니다.
1. 하용호 @yonghosee
'하용호' 라고 합니다. kth 클라우드연구소 분산기술랩에서 즐겁게 일하고
있습니다. '프리즘 파일 시스템'이라는 분산파일 시스템, 'iLock'이라 이름 붙
인 분산 동기화 서비스, 그리고 새로운 검색엔진을 만들고 있습니다. 분산처
리, 데이터마이닝을 연구해 왔습니다. 대량의 자료를 다루는 것을 좋아합니
다. Data Scientist를 지향합니다.
파이썬으로 클라우드 하고 싶어요.
파이썬은 쉬운 구조와 빠른 작성 속도를 강점으로 하여 이미 주류언어로 대
중화 되었습니다. 과거에 비교적 간단한 작업에 많이 쓰였던 파이썬을 분산
처리, 병렬처리를 사용하여 큰 문제들을 풀어내는 데 활용하는 방법들을 알
아봅니다. 멀티코어를 이용하고, 수십 대의 컴퓨터로 병렬처리하고,
Hadoop과 아마존 클라우드를 사용하여 분산 처리하는 방법들까지 알아봅
니다.
29. 해답은
Md5 해쉬값을 구하고 싶어요?
그건 일도 아니죠.
파일을 압축하고 싶어요?
hashlib.md5(“python is so powerful").hexdigest()
import gzip
그건 일도 아니죠.
f = gzip.open('example.txt.gz', 'wb')
f.write('Contents of the example go here.n')
f.close()
웹페이지를 긁어오고 싶어요?
import urllib2
그건 일도 아니죠.
response = urllib2.urlopen('http://google.com/')
data = response.read()
print data
REST 웹서버를 만들고 싶어요?from flask import Flask
app = Flask(__name__)
그건 일도 아니죠. @app.route("/“, methods=[‘GET’])
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
31. 해답은
작성하는데 굉장히 어렵다.
작성 완전 쉬워요
관련되어 많은 라인을 써야 한다.
쉽게 가져다 쓸 라이브러리가 많아요
네트워크나 디스크가 병목점일 때가 많다.
계산이 느린 것은 상쇄됩니다.
의외로 반복 사용이 되지 않는다.
한번 쓸 코드 짜기 딱 좋죠
조금씩 고쳐야 되는 일은 많다.
인터프리터 좋다는 게 뭔가요^^
41. from threading import Thread
start부터
def do_work(start, end, result):
sum = 0 end까지
for i in range(start, end): 더해요
sum += i
result.append(sum)
return 쓰레드
if __name__ == "__main__":
2개를
START, END = 0, 20000000 써봅시다.
result = list()
th1 = Thread(target=do_work, args=(START, END/2, result))
th2 = Thread(target=do_work, args=(END/2, END, result))
th1.start()
th2.start()
th1.join()
th2.join()
print "Result : ", sum(result)
42. 쓰레드 1개 쓰레드 2개
$ time python 1thread.py $ time python 2thread.py
Result : 199999990000000 Result : 199999990000000
real 0m3.523s real 0m4.225s
응-_-?
61. CPU READ/WRITE
프로그램이 I/O를 많이쓰면 Python 쓰레드도 좋다!
C
P READ/WRITE
U
우리가 하는
일반 프로그래밍은
대부분 I/O bound!!
놀 C
아 P READ/WRITE
요 U
이득 봅니다~!
C
놀아요 P READ/WRITE
U
65. 프로세스
쓰레드 놀아요 쓰레드
놀아요 쓰레드 놀아요
multiprocessing 모듈은
쓰레드 대신 프로세스를 띄워줍니다.
프로세스
일합니다.
프로세스
일합니다.
66. from multiprocessing import Process, Queue
def do_work(start, end, result):
sum = 0
for i in range(start, end):
sum += i
result.put(sum)
return
if __name__ == "__main__":
START, END = 0, 20000000
result = Queue()
pr1 = Process(target=do_work, args=(START, END/2, result))
pr2 = Process(target=do_work, args=(END/2, END, result))
pr1.start()
pr2.start()
pr1.join()
pr2.join()
result.put('STOP')
sum = 0
while True:
tmp = result.get()
if tmp == 'STOP': break
else: sum += tmp
print "Result : ", sum
67. 쓰레드 2개 프로세스 2개
$ time python 2thread.py $ time python 2process.py
Result : 199999990000000 Result : 199999990000000
real 0m4.225s real 0m1.880s
성공!
수행시간(sec)
4.2
1.8
2 thread 2 process
68. Multiprocessing 은
쓰레드 쓰듯 프로세스를 쓸 수 있습니다.
th1 = Thread(target=do_work, args=(START, END, result))
th1.start()
th1.join()
pr1 = Process(target=do_work, args=(START, END, result))
pr1.start()
pr1.join()
69. Multiprocessing 은
동기화 도구들도 모두 지원합니다.
threading.Condition multiprocessing.Condition
threading.Event multiprocessing.Event
threading.Lock multiprocessing.Lock
threading.RLock multiprocessing.RLock
threading.Semaphore multiprocessing.Semaphore
코드 수정 없이 이름만 바꾸어줘도 동작합니다.
92. 애들을 풀어 일을 나눠 시킵니다.
map
KTH 1 많이 1 KTH 1 사장님 1 월급 1
멋있다 1 지원 1 많이 1 많이 1
하세요 1 멋있다 1 지원 1
93. 몇 명이 결과를 모아 계산합니다.
reduce
KTH 1 많이 1 KTH 1 사장님 1 월급 1
멋있다 1 지원 1 많이 1 많이 1
하세요 1 멋있다 1 지원 1
나는 A~Z를 모을께~ 난 ㄱ~ㅁ 난 ㅅ~끝까지
KTH 2 많이 3 사장님 1
멋있다 2 월급 1 지원 2
하세요 1
94. MapReduce
큰 작업을
잘게 나누기(map)
종류별로 모으기(reduce)
로 처리하는 방식을 말합니다.
106. 반장의 단어 세기 프로그램 : mrjob을 이용한 버전
from mrjob.job import MRJob 문장을 나누
고 (단어, 1)
class MRWordCounter(MRJob):
def mapper(self, key, line): 을 리턴해요
for word in line.split():
yield word, 1
def reducer(self, word, occurrences):
yield word, sum(occurrences)
if __name__ == '__main__': 들어온 단어
MRWordCounter.run() 를 세어요
107. 디버깅을 위해서, 굳이 Hadoop을 띄우지 않고 로컬로
$ python word_count.py data.txt --runner=local --output-dir=result
Hadoop으로 할때는 runner만 변경하면 됨
$ export HADOOP_HOME=~~~~~
$ python word_count.py data.txt --runner=hadoop --output-dir=result