backend/데이터분석

파이썬 데이터 라이브러리 - 수찬님 강의 1일차 복습 (1/2), 파이썬 기초

seul chan 2016. 11. 8. 00:09

11월 7일(월)부터 3일간 tacademy로 파이썬 강좌를 들으러 간다.

대단한 실력자라고 귀에 못이 박히게 들은 수찬님의 강좌를 듣게 되서 매우 영광이다. 


첫 날 배운 내용 중 의미있는 내용들을 간단히 정리해 보았다.

아직 정확히 모르는 부분은 다음에 더 찾아 넣고 두고두고 복습해야 할 듯 하다.



- 외부 파일 오픈, 자동 닫기

-----------------------------------------

with open("hello.txt", "r") as fp:

    data = fp.read()

    print(data)

----------------------------------------



-students.csv 파일 불러와서 편집하기: 동 경로에 있는 csv 파일을 불러와 dic 방식으로 정리하는 함수를 만들어보았다


이미 id, name, email값이 지정된 것을 알고 있었기 때문에 for문에 이들을 dict 형태로 추가하였다.


--------------------------------------------

def read_csv(filepath):

    with open(filepath, "r") as fp:

        data = fp.read()

        rows = data.split("\n")

        

    elements = []

    

    for row in rows:

        field = row.split(",")

        element = {

            "id":field[0],

            "name":field[1],

            "email":field[2]

        }

        elements.append(element)

    return elements

---------------------------------------------------


-특정 csv에 어떤 헤더(칼럼)이 있는 지 모르는 경우에 csv 파일 불러와서 dict 형태로 만들어주는 함수


*이해가 될 때까지 반복 학습 필요

--------------------------------------------------

def read_csv_any(filepath):

    with open(filepath, "r") as fp:

        data = fp.read()

        rows = data.split("\n")

        subjects = rows[0].split(",")

        elements = []

        for row in rows[1:]:

            fields = row.split(",")

            element = {}

            for subjectindex in range(len(subjects)):

                subject = subjects[subjectindex]

                field = fields[subjectindex]

                element[subject] = field


            elements.append(element)

    return (elements)

   ----------------------------------------------------


-**너무너무 중요한 "lambda" 함수


# 1. 리스트 | 1~10 자연수의 제곱수 ( 1, 4, 9, ... 100)


----------------------------------------

def get_square(numbers):

    element = []

    for number in numbers:

        result = number ** 2

        element.append(result)

    return element

-------------------------------------------

# 함수 안에 함수 집어넣기

-----------------------------------------------------

def get_square(number):

    return number ** 2

def get_square_list(numbers):

    element = []

    for number in numbers:

        element.append(get_square(number))

    return element

----------------------------------------------------


#이를 lambda 함수로 변환하면?


# Map : 각각의 element func apply

# fliter - element func apply, filtering when True (filtering Mask가 생김... )


------------------------------------

a = map(

get_square, [1, 2, 3, 4, 5]

)

for i in a:

    print(i)

--------------------------------------

list(map(

    lambda x: x ** 2, [1, 2, 3, 4, 5]

    ))

-------------------------------------

def get_square_list(numbers):

    return list(map(lambda x : x ** 2, numbers))

--------------------------------------------------



# 2. 함수: 리스트를 받아서, 양수인 element만 새로운 리스트
# input: [-1, -2, 3, 4] => [3, 4]

--------------------------------------------
def get_surplus(numbers):
    return list(filter(
        lambda x : x > 0, numbers
        ))
--------------------------------------------


# 1. 리스트를 받아서 리스트 숫자들의 곱 | [1, 2, 3, 4] => 24

# 2. 리스트를 받아서, 리스트 중에서 제일 큰 수 | [-1, 0, 2, 4, 3] 


# from functools import reduce


reduce: 특정 값이 나올 때까지 lambda 함수 시행


------------------------------------------

def get_bigger(a, b):

    return a if a > b else b


reduce(

get_bigger, [3, -1, 5, 6]

)

----------------------------------------

def get_max(numbers):

    return reduce(

    lambda x, y : x if x > y else y, numbers

    )

---------------------------------------





#예제


#list를 받아서 히스토그램을 그리는 함수... 

#["dog", "dog", "dog", "dog", "cat", "cat", "bird", "bird", "bird"]

"""

dog    ====

cat      ==

bird    ===

"""

이런 형태로 animals 리스트를 히스토그램화 시키는 예제이다. 


* 이해 될 때까지 풀어보고 완전히 이해한 다음에 답을 올리겠다. 

---------------------------------------------------

---------------------------------------------------


#예제, decorator, list comprehension 부분은 추후에 더 복습 후 업로드 하겠다!