반응형

 

tab(탭) 키를 눌렀을때 입력되는 내용을 바꾸는 방법 (탭 또는 스페이스)

python code 작성 시 들여쓰기(Indentation)를 탭(\t) 이나 스페이스(공백 ' ')으로 할 수 있는데 이를 설정 메뉴에서 변경/설정할 수 있다.

방법은 아래 이미지와 같이 메뉴-> Code -> 기본설정 -> 설정 을 클릭하면 오른쪽에 설정 메뉴와 내용을 볼 수 있다.

텍스트 편집기를 클릭하면 오른쪽에 내용중에 Detect Indentation 항목이 있고 이를 선택했는지 아닌지에 따라서 탭을 눌렀을때 탭이 입력되거나 스페이스가 입력된다. 스페이스가 입력되게 하고 싶은경우 Uncheck(체크하지 않으면) 된다. 

참고로 입력되는 스페이스 갯수를 좆ㅇ하기 위해서는 화면에 보이는 Editor: Tab Size를 클릭하거나 메뉴의 텍스트편집기를 클릭하고 항목에서 Editor: Tab Size를 찾아 설정하면된다.

 

반응형
반응형

프로그램을 실행시켜 놓고 오랜 시간 기다리거나 자리를 비워야하는 경우가 있다.

이럴때 덮개를 열어 놓고 있으면 먼지도 쌓이고 불필요한 모니터 화면 보호기를 실행시키는 등 낭비(?)가 생긴다.

그래서 덥개를 닫아도 안닫은 것처럼 프로그램이 계속 실행되게 해보자.

방법은 간단하다

1. 터미널을 열고

2. sudo pmset -c disablesleep 1 을 입력한다.

3. 관리자 비밀번호를 입력한다. 끝.

설정을 해제하려면 마지막 숫자를 0으로 입력하면 된다.

 

반응형
반응형

Python Sorting 방법-list, dict, class 정렬

프로그램을 짜다보면 데이터를 정렬해야하는 경우가 자주 있다.
간단한 데이터 구조에서는 쉽게 해결되지만 복잡한 구조일때는 어려움을 느낀다.
이럴때 파이썬이 제공하는 정렬관련 내용을 잘 알고 있으면 많은 개발 시간을 절약할 수 있다.
간단한 것 부터 살펴 보자

단순 리스트를 정렬하는 방법:

list의 sort() 메소드를 이용하면 된다. 실제 해당 리스트의 순서가 변경된다.

dect 사전을 정렬하는 방법:

sorted 함수를 이용한다.
sorted는 파이썬 내장함수이다. 따라서, 별도 패키지 설치 없이 바로 이용할 수 있다.
사실 sorted 함수는 모든 형태의 정렬에 사용 할 수 있는 함수이다. (상기의 sort() 메소드는 리스트 객체에서만 이용가능하다)
sorted()를 좀더 자세히 말하면 반복 가능한 객체를 입력 받아서 key 값에 따라 정렬하고 정렬된 리스트를 반환하는 함수이다.
아래와 같이 단순 리스트는 (value)값으로 정렬되고 사전은 key 값이 정렬된다.

그런데 사전의 정렬 결과를 보면 키만 정렬되어 반환한다.
원하는 것이 사전 그대로의 내용이 키 순서대로 정렬되기를 바라는 경우가 많이 있다.
이러한 경우에 lambda 함수를 이용해서 해결 할 수 있다. (lambda함수란 메모리 절약을 위해 임시성으로만든 함수로 이름 없는 함수로 생성-사용-소멸이 자동으로 이루어지는 함수이다. 어찌보면 간단하게 동작하는 함수로써 당연하고 불편한 부분은 제외한 함수이다. 자세한 내용은 다른 포스트에서...)
여기서 item은 반복가능한 객체 중 하나를 의미한다. 따라서 첫번째 객체로 (key1': 'value3') 이 된다.
아래 예시와 같이 item의 인덱스를 0으로하면 key를 기준으로 정렬되고 1로하면 value를 기준으로 정렬된다.
입력데이터와 동일한 사전 형식을 유지하기 위해 반환되는 값을 dict()를 이용하여 사전으로 변경해 준다.


dict()로 변경해주지 않으면 다음과 같이 튜플 값이 리스트로 나온다.

>>> sorted(a_dict.items(), key=lambda item: item[0])
[('1', 'c'), ('2', 'b'), ('3', 'a')]


복잡한 구조에 대한 정렬이 필요한 경우

아래의 스튜던트 튜플처럼 이름, 등급, 나이 등의 정보를 포함하는 복잡한 구조의 데이터를 정렬하는 방법이다.
바로 위에서 사용한 방법인 lambda함수를 이용해서 정렬 가능하다.

1 student_tuples = [
2     ('john', 'A', 15),
3     ('jane', 'B', 12),
4     ('dave', 'B', 10),
5 ]
6 sorted(student_tuples, key=lambda student: student[2])   # sort by age
7 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

<코드 출처: https://docs.python.org/3/howto/sorting.html>
그러나 이러한 방법의 단점은 데이터 구조의 변환 시 매우 주의해서 코드를 작성해야한다. 왜냐하면 6라인의 끝부분에 student[2] 처럼 상수(2)가 코드에 포함됨으로써 나이 앞에 새로운 항목 하나가 추가될 경우 동일한 작동을 위해서는 (3으로) 변경해 주어야 한다.

리스트 안에 들어있는 사전을 정렬하는 방법

json 포맷을 사용할 경우 리스트 안에 사전이 들어있는 형태의 데이터 구조가 된다.
이런 형태의 정렬은 바로 위의 내용을 살짝 바꾸어서 사용가능하다.
lambda 함수에서 받게되는 하나의 객체가 사전인 경우 이므로 keys() 메소드를 이용하면 된다.
아래 예시에서는 항목의 key가 하나이므로 .keys() 메소드를 통해 반환되는 값을 리스트로 바꾸고 첫번째[0]를 선택하면 모든 객체의 키값이 반환되게되고 이를 기준으로 정렬하게 된다.

그렇다면 value를 기준으로 정렬하려면 어떻게 해야할까???
앞선 예제에서 처럼 0을 1로 바꾸면 되지 않을까? 라고 생각할 수 있지만 의미가 다르기 때문에 에러가 난다. 여기서의 0은 keys()로 반환받은 키값들 중에 첫번째([0])라는 의미 이기 때문에, 1로 바꿀 경우 두번째 키값이라는 의미가되고 이것을 찾으려하지만 첫번째 항목 데이터({'key1': 'value3'})에서 보다시피 key 값은 하나('key1')밖에 없기 때문에 에러가 발생한다. 따라서 key가 아니라 value를 기준으로 정렬하기 위해서 value를 나타내는 형식을 작성해야한다. 다소 복잡하지만 그 내용은 item[list(item.keys())[0]] 이다.


복잡한 구조에 대한 정렬이 필요한 경우 2

위의 '복잡한 구조에 대한 정렬이 필요한 경우' 에서 처럼 하면 위에서도 말했지만 단점이 있다. 데이터 구조에 따라 코딩 내용을 바꿔줘야 할 경우가 있다. 치명적일 수 있다.
그래서 아래의 내용 처럼 클래스로 만들어서 관리하면 데이터 구조의 추가 삭제에 따른 순서 걱정 없이 정렬을 할 수 있다.

>>> class Student:
    def __init__(self, name, grade, age):
        self.name = name
        self.grade = grade
        self.age = age
    def __repr__(self):
        return repr((self.name, self.grade, self.age))
>>> student_objects = [
    Student('john', 'A', 15),
    Student('jane', 'B', 12),
    Student('dave', 'B', 10),
]
>>> sorted(student_objects, key=lambda student: student.age)   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

출처: https://docs.python.org/3/howto/sorting.html

반응형
반응형

데이터 분석을 통한 고객 경험(UX) 관점의 고객 프로파일링

지난 포스팅에서 고객 프로파일링 프레임웍에 대해서 이야기한 적이 있습니다.

이번에는 고객 경험 관점에서 데이터 분석을 하고 이를 고객 프로파일링에 활용하는 방법에 대해서 이야기하고자 합니다.

고객 프로파일링의 목적은 결국 회사의 매출/이익 증대를 위해 진행됩니다. 고객 감동, 고객 혁신 모두 결국 매출과 이익 증대를 위한 것입니다. 아, 회사의 존속에 대한 부분이라고 할 수도 있겠네요.

그래서 결국 고객과 상품을 잘 연결하기 위한 프로파일링 프레임웍이 중요하다고 말씀 드렸습니다.

아래의 지난 포스팅을 참고하세요

https://bigdatamaster.tistory.com/10

 

4 - 고객 프로파일링(Customer Profiling) - 데이터 분석 프레임 관점

4 - 고객 프로파일링(Customer Profiling) - 데이터 분석 프레임 관점 안녕하세요, 꾸벅 !!! 고객 프로파일링 관련 네번째 포스팅입니다. 이번에는 고객 프로파일링의 핵심(?)이라고 할 수 있는 분석 프

bigdatamaster.tistory.com

이렇게 연계를 할때 상품이 아니라 고객 경험 차원에서 데이터를 분석할 수 있습니다.

https://bigdatamaster.tistory.com/101

 

경험 디자인 (Design for Experience) 잡스, 철학자 듀이를 만나다 - 김진우지음, 안그라픽스

[책]경영/비즈 통계본문 기타 기능 스티브 잡스가 하늘나라에 가서 하느님과 대화하는 가상의 내용으로 이책은 시작합니다. (줄여서 말하면 아래와 같은 내용의 대화입니다.) 살아서 사용자 경

bigdatamaster.tistory.com

아주 간단히 말씀드리면

고객 경험 3차원 모형의 3가지 기준에 따라 데이터를 분석하여 고객 개별로 각각의 수준을 산출해내고 고객이 모형 기준별 어떤 방향으로 움직이는지(선호하는지)를 분석하는 것입니다.

이를 통해 고객 경험 모형을 기준으로 어떠한 성향의 고객들이 분포되어 있는지

그리고 어떠한 방향으로 고객 경험을 혁신하기 위한 아이디어나 제품을 만들어야 하는지 알 수 있습니다.

예를 들어보겠습니다.

서울에 거준하는 23세, 남자, 대학생이 한명 있습니다.

회사 내부/외부 데이터를 통합 분석하여 경험조절요인(실제감, 기인력, 응집도)에 대한 지표 값을 산출합니다.

그리고 과거의 지표값과 비교하여 이 고객의 경험조절요인에 대한 변화 방향을 찾아 냅니다.

단순히 이러한 변화 방향을 기준으로(증가, 감소) 고객 수를 카운트해보면

우리고객의 변화 방향을 알 수 있게 되는 겁니다.

이를 기본적인 Demographic Data를 가지고 Segment하게 되면 Segment별 특징을 찾아 낼 수도 있습니다.

조금 더 자세하게 분석하면 개인별로 변화방향에 상응하는 제품이나 서비스를 Offer 할 수도 있겠습니다.

이렇게 적용하려면 많은 데이터 분석과 학습이 필요하므로 당연히 인공지능/머신러닝 기법이 적용되고 시스템으로 구현되야 하겠습니다.(Deep Learning, Machine Learning 등)

고객 프로파일링 프레임웍에서 말씀드린 바와 같이

같은 개념으로 제품/서비스에도 적용을 하여 각 지표값을 만들고 이에 해당하는 고객 Seg에 Offer를 할 수도 있습니다.

사실 경험 설계의 방향은 명확한 것 같습니다.

즉, 조금이라도 귀찮은 부분은 해소해주고(더 쉽게 더 편하게), 더 효과적으로(더 파워플하게, 수퍼맨처럼...) 느끼고 실행하는데 도움을 주는 상품이나 서비스를 만들면 될 것 같습니다.

(그런데 이게 말이 쉬운 이유는 반대의 경우에도 훌륭한 서비스가 된다는 것이지요.

즉, 위에서 말씀드린 것처럼 방향이 역으로 느리고, 약하게 제공하여 서비스하는 상품/서비스도 고객군에 따라 가능합니다. 그래서 경험 설계가 어려운 것 같습니다. )

반응형

+ Recent posts