no image
numpy 라이브러리
원래 파이썬은 데이터 분석에 유용한 언어가 아니었다. 과거에는 통계를 위한 언어인 R언어가 파이썬보다 기반이 더 좋았고, 현재도 통계적 분야에는 R언어가 조금 더 유용하다고 한다. 파이썬이 데이터분석 툴로 활약하게 된건 앞서 설명한 pandas와 지금부터 알아볼 numpy(numerical python) 라이브러리가 나오고 나서 부터라고 해도 과언이 아니다. 파이썬은 해당 라이브러리들로 인해 통계적 분석 뿐 아니라 범용적으로 사용이 가능해지면서 더욱 인기가 높아졌다. numpy는 무엇일까? 기존 파이썬 언어로 계산하기 복잡한 수치들을 계산하기 쉽도록 도와주는 라이브러리이다. 뿐만 아니라 list와 유사한 기능을 하는 numpy array를 사용하여 table을 다루는 것을 더 용이하게 해준다. numpy..
2021.03.23
no image
pandas 데이터 정제 (2)
pandas 두번 째 정리 진행하기 전에 공부했던 내용들을 잠시 복습하는 타임을 갖도록 하자. DataFrame은 열과 행을 갖춘 데이터타입이다. pd.DataFrame() 매서드를 사용해서 생성할 수 있으며 편집과 접근이 쉽고 표현방식도 좋기 때문에 애용한다. loc과 iloc은 각각 인덱스와 행 번호를 기준으로 데이터에 접근하는 매서드였다. 물론 다른 방법으로도 행과 열에 접근할 수 있지만 이 두가지 방법이 가장 보편적으로 잘 쓰이고 있다. DataFrame 다루기 심화 우린 DataFrame을 csv형태 파일로 받아서 사용을 할 수도 있고 우리가 직접 만들어서 사용할 수 있다. 이렇게 작성한 데이터의 양은 적을수도 있지만, 방대한 양일 수도 있다. 저번 시간에는 간단하게 이런게 있고 조작할 수 있다..
2020.06.27
no image
판다스를 이용한 데이터 정제
오늘은 판다스(pandas) 라이브러리를 이용한 데이터 정제를 반드시 정리할 것이다. 우선 판다스란?: 파이썬에서 사용하는 데이터 분석 라이브러리로 행과 열로 이루어진 데이터 객체를 만들어서 다룰 수 있으며 안정적으로 큰 용량의 데이터를 처리하는데 유용하게 쓰인다. 판다스는 처리 속도가 빠른 편은 아니지만 많은 사람들이 이용하고 있는 라이브러리이다. 속도가 느림에도 애용하는 이유는 다음과 같다. 1. 러닝커브가 낮다. 2. python universe에 속한다. 3. 디버깅하기 편하다. 4. 빠른 시각화가 가능하다. 판다스의 기본 개념으로는 Series와 DataFrame이 있는데 이는 위에서 말한 행과 열로 이루어진 데이터 객체들의 명칭이다. 판다스를 다루기 위해서는 이에 대한 이해가 불가결 하므로 설..
2020.06.17
no image
셀레니움을 이용한 웹크롤링(Web crawling)
오늘 배울것은 셀레니움(selenium)라이브러리를 이용한 웹 정보수집 (Web crawling)을 해볼것이다. 사용할 library로는 selenium과 beautiful soup 이 있다. 둘에 대해 간략하게 설명하자면, -selenium : 주로 웹앱을 테스트하는 프레임 워크다. 각 웹앱에 맞는 driver를 통해서 웹을 직접 조작하며 결과물을 불러올 수 있다. -bs4(Beautiful Soup) : html 구조를 파이썬이 이해할 수 있도록 변환하는 parsing을 맡고 있는 라이브러리. 의미가 있는 결과물을 불러낼 때 사용한다. 이것들을 이용해 두번의 예제에 걸쳐서 학습해보도록 하자. #에브리타임 게시판 글 가져오기. 우선 필요한 라이브러리들을 전부 호출해줬다 selenium과 bs4, csv..
2020.06.03
no image
엑셀 심화
오늘 공부해 볼 내용은 엑셀에 쓰이는 서체를 파이썬으로 다뤄보는 것을 해보겠다. 마찬가지로 openpyxl 라이브러리가 필요하므로 안깔려있다면 깔도록 하자. 사진에 보이는 것 처럼 오늘은 유틸들이 꽤나 많다. 크게는 한 범주 안에 속하는 것들이지만, 하나하나 불러줘야 한다니 꽤나 귀찮은 작업이다! (주의할 점은 colors와 Color구분, NamedStyle과 named_style을 구분해주는 것도 중요하다.) 본론으로 들어가기 전에 알아둬야할 개념이 조금 있다. 우선 cell style : 어느 특정한 셀에 스타일을 한번 적용을 시켜서, 외부적으로 셀을 건드려 스타일을 번경할 수 없게 만든다. Named style : 이름 그대로 스타일에 이름을 새겨서 내가 사용하고 싶을 때 사용하는 것이다. ~~체..
2020.06.02
no image
파이썬 csv 사용하여 엑셀파일 다루기
오늘은 파이썬 csv 사용하는 것에 대한 기본을 정리해보겠다. 우선 csv(comma-separated values)란? : 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일이다. 확장자는 . csv이며 MIME 형식은 text/csv이다.호환되지 않는 포맷을 사용하는 프로그램 끼리 자료를 전달할 때 사용하는데 쓰인다. 파이썬에선 이것으로 text 파일 뿐 아니라 xlsx 파일 같은 것도 건들이곤 한다. csv 파일 읽어오기 우선 csv 파일을 다루기 위해서는 import 라는 명령어를 통해 csv파일을 다룰 수 있는 모듈을 가지고 와야한다. 그 이후 open 이라는 명령어를 통해서 읽어올 파일을 정한다. 그 뒤 'r' 은 모드를 정하는 것인데 기본적으로 'r' : read mode, '..
2020.05.30
no image
파이썬 기초
파이썬은 개발시간단축에 초점을 두어 C언어 보다 효율성 면에서 떨어진다. 이럼에도 불구하고 우리가 파이썬을 하는 이유는 간단하다. "Life is short, you need python." 빠른 시간에 코드를 작성하고 결과물을 빨리 볼 수 있기 때문이다. 이것뿐 아니라 파이썬은 여러가지 장점을 지니고 있다. -대화형식의 인터프리터 언어 : 컴퓨터와 대화하듯이 프로그래밍을 한다. 이런 점에서 나는 파이썬을 할 때 덜 지루한 것 같다. -수많은 라이브러리 제공 : 헤더파일의 접근이 비교적 어려운 C언어 보다 파이썬은 더 많은 라이브러리를 제공한다. -무료 : 많은 사람들이 함께 파이썬을 유지하고 관리하며 이를 무료로 제공한다. 라이브러리가 많이 제공되는 것에 이것도 한 몫하는 것 같다. 위 사항 이외에도 ..
2020.05.30

원래 파이썬은 데이터 분석에 유용한 언어가 아니었다. 과거에는 통계를 위한 언어인 R언어가 파이썬보다 기반이 더 좋았고, 현재도 통계적 분야에는 R언어가 조금 더 유용하다고 한다.

 

파이썬이 데이터분석 툴로 활약하게 된건 앞서 설명한 pandas와 지금부터 알아볼 numpy(numerical python) 라이브러리가 나오고 나서 부터라고 해도 과언이 아니다. 파이썬은 해당 라이브러리들로 인해 통계적 분석 뿐 아니라 범용적으로 사용이 가능해지면서 더욱 인기가 높아졌다.

 

numpy는 무엇일까?

 

기존 파이썬 언어로 계산하기 복잡한 수치들을 계산하기 쉽도록 도와주는 라이브러리이다. 

뿐만 아니라 list와 유사한 기능을 하는 numpy array를 사용하여 table을 다루는 것을 더 용이하게 해준다.

 

numpy array

 

파이썬의 기본 자료형인 list와 다르게 numpy array는 사칙연산을 할 수 있도록 구성되었다.

또한 indexing과 slicing을 사용할 수 있어 데이터를 다루는데 매우 적합하다.

 

기본적인 형태는 list와 유사한 형태로 작성할 수 있다.

numpy array

 

또 full, arange, random 등의 메서드를 활용해서 좀 더 쉽게 array를 구성할 수 있다.

array 구성의 다양한 메서드

 

계속해서 언급했던 사칙연산은 어떻게 적용되고 있는지 한번 알아보도록 하자.

 

우선 list에 곱연산을 적용해서 list 원소 값이 변화하는지 살펴보면,

list 연산

우리가 기대했던 것과는 다르게 출력이 된다. 그럼 numpy array에는 어떻게 출력이 될까?

 

array 연산
array끼리 연산 또한 가능하다

우리가 기대했던 원소 값의 변화가 발생하였다. 

 

이러한 것들은 단순히 편하다는 것을 넘어서서 코드를 완성한 후 직관성을 올려주고 코딩을 잘 하지못하는 사람들에게도 이해하기 쉽도록 도와주는 역할을 한다.

 

또 편리한 기능으로 indexing과 slicing을 넘어 filtering도 가능하게 해주는데, 이는 where함수를 사용해서 구현할 수 있다.

array filtering

where함수 안에 조건문을 넣어 boolean값을 받은 후 indexing을 통해 filtering을 한 것으로 filtering 된 값을 출력하는 것 이외에도 원하는 값만 변경해주는 필터링하는 등 다양하게 활용할 수 있다.

 

 

numpy는 list에 비해 연산속도가 빠르고, 같은 자료형만 한 배열 안에 담아 side-effect를 방지할 수 있으며, 문법적으로도 직관성이 뛰어나 사랑받고 있다.

pandas 역시 numpy를 바탕으로 해서 만들어져, numpy가 중요한 내용을 담고 있음을 알 수 있다.

'데이터 분석 > 파이썬' 카테고리의 다른 글

파이썬 클래스  (0) 2021.11.14
데이터 시각화 그래프  (0) 2021.06.29
pandas 데이터 정제 (2)  (0) 2020.06.27
판다스를 이용한 데이터 정제  (0) 2020.06.17
셀레니움을 이용한 웹크롤링(Web crawling)  (0) 2020.06.03

pandas 두번 째 정리

 

진행하기 전에 공부했던 내용들을 잠시 복습하는 타임을 갖도록 하자.

 

DataFrame은 열과 행을 갖춘 데이터타입이다. pd.DataFrame() 매서드를 사용해서 생성할 수 있으며 편집과 접근이 쉽고 표현방식도 좋기 때문에 애용한다.

 

loc과 iloc은 각각 인덱스와 행 번호를 기준으로 데이터에 접근하는 매서드였다. 물론 다른 방법으로도 행과 열에 접근할 수 있지만 이 두가지 방법이 가장 보편적으로 잘 쓰이고 있다.

 

 


DataFrame 다루기 심화

 

우린 DataFrame을 csv형태 파일로 받아서 사용을 할 수도 있고 우리가 직접 만들어서 사용할 수 있다. 

 

이렇게 작성한 데이터의 양은 적을수도 있지만, 방대한 양일 수도 있다. 

 

저번 시간에는 간단하게 이런게 있고 조작할 수 있다~ 라고만 얘기 했으나, 그렇게 넘어가기에는 꽤나 중요한 내용이기 때문에 어떻게 다루는 지에 대해서 지금부터 공부를 해보자.

 

 

뭔가 좀 많아 보이기는 하지만, 사실 파이썬 기초에 올렸던 내용들을 응용한 내용들이기도 하다.

 

먼저 처음 나온

 

print(ages[ages > ages.mean()])
print(ages > ages.mean())

이 두 문장은 겉으로 보기에는 굉장히 닮아있으나 매우 다른 출력값을 내보내므로 구분하는게 좋을 것 같아서 넣어봤다.

 

기본적으로 부등식을 프로그래밍 상에서 사용하게 되면, bool값으로 출력하게 된다. (True or False)

 

따라서  1문장은 사실상 print(ages[True])인 age값을 DataFrame에서 추출해 출력하게 되는 것이고, 2문장은 모든 age에 대한 bool값을 출력하게 되는 것이다.

 

manual_bool_values는 위에서 말한 1문장을 내가 지정한 형태로 원하는 사람의 age값을 뽑아내기 위해 지정해준 것이다.

 

print(ages + ages)
print(ages * ages)
print(ages + pd.Series([1, 100]))

 

이 문장은 DataFrame 값에 사칙연산이 적용된다는 것을 보여주기 위해 작성을 했는데, 3번 문장은 조금 특이한 결과값을 낸다.

 

 

 

NaN이란 누락값을 의미한다. null, Not-a-Number의 약자이다.

 

이런 일이 왜 발생하는지 한번 뜯어보자면, 

 

내가 만들어 준 Series는 [1, 100] 두 칸 짜리 데이터이다.

 

이는 둘의 합산을 outer join 방식으로 하여, 두 데이터 모두 실존해야 값을 출력하기 때문에 NaN이 출력이 되었다.

 

 

그리고 마지막 두줄

 

print(scientists[scientists['Age'] > scientists['Age'].mean()])
scientists_dropped = scientists.drop(['Age'], axis=1)

 

사실 1번 문장은 위에서 설명한 것과 이미 같은 내용이다. scientist의 모든 데이터 값을 출력하되, Age의 값이 mean보다 높은 값의 데이터만 출력하겠다라는 의미이다.

 

drop은 내가 원하는 행열을 삭제시킬 수 있다. axis는 축의 방향으로 index와 column의 방향을 정해 지울 수 있다.

 

 

 


 해당 코드는 작성한 DataFrame이나 수정한 csv파일을 저장하는 코드이다.

 

윗 줄과 밑 줄의 차이점은, 밑에 줄은 index를 지정해주지 않았다. 나머지는 같다.

 

 

 

데이터 병합 (Concatenate, Merge)

 

데이터들을 합치는 방법에는 여러가지가 있는데, 그 중 merge와 concat의 방식을 한번 배워보도록 할 것이다.

 

 

 

1. Concat

 

먼저 concat은 가장 단순하게 데이터를 병합하는 방법으로, concat함수를 선언해주면 된다.

 

연결해주고 싶은 방향에 따라 axis를 설정해주면 된다.

 

하지만 이렇게 단순하게 연결을 하게 되면 하나의 문제점이 생기는데, 

 

 

 

어떤 문제점인지 알겠는가?

 

바로 index와 index번호가 수정되지 않고 그대로 연결하게 된다는 것이다.

 

이렇게 되면 iloc은 문제없이 작동될 수 있지만, loc의 경우에 문제가 생기는 것이다. 인덱스의 네이밍이 같기 때문에 작동은 될 지 언정, 내가 원하는 데이터 값을 뽑아내기는 힘들 수 있다.

 

따라서 우리는 다음 방법을 통해서 데이터 병합을 할 때 혼동을 줄이자.

 

 

 

이렇게 인덱스명을 수정해주면, 

 

 

loc을 사용할 수 있는 형태로 출력이 가능하다.

 

만약 내가 병합을 하는데 각각 column의 name이 다 다르면 어떻게 병합이 될까? 

 

각 위치에 데이터가 존재하면 데이터 값을 합쳐 병합을 했고, 그렇지 않은 부분은 NaN값으로 대체되어 출력이 되었다.

 

이걸로 concat 역시 outer join 방식임을 알 수 있다.

 

 

 

2. Merge

 

merge의 특징은 공통적인 데이터를 기준으로 합병이 진행된다는 것이다.

 

 

 

가령 이러한 데이터가 있다고 치자. 

 

이 데이터를 병합을 하게되면 어떤 결과가 추출이 될까?

 

결과는

 

 

 

이렇게 나온다.

 

우리가 지정해준 df1과 df2의 데이터에서 'name' column의 내용은 서로 다른데 어떻게 NaN의 값이 없이 데이터가 출력될 수 있었을까?

 

또, df1과 df2의 raws는 5줄인데 data_merged의 raws는 7줄이 모두 값이 존재하게 출력 된걸까?

 

이건 inner join 방식의 결과이기 때문이다.

 

outer join의 결과는 모든 출력값을 데이터의 존재 유무와는 상관없이 출력하게 되지만, inner join은 같은 name끼리의 값을 합쳐서 출력을 하게 된다.

 

 

 

쉽게 풀어서 설명하자면 이런 그림으로 설명이 가능하다.

 

하나의 input 값에 각각 대응하는 ways의 수만큼 출력이 되는 것이다.

 

merge는 기본적으로 이러한 방법을 채택하고 있지만, 우리가 지정을 해줌으로써 다른 방법으로도 병합이 가능하다.

 

방법은 outer, left, right 방식이 있다.

 

outer은 우리가 알고 있는 그 방법이 맞고, left는 병합할 때 기준으로 왼쪽에 있는 데이터를 모두 출력해주고, right는 오른쪽에 있는 데이터를 모두 나타내준다.

 

 

<left, right의 예시>

 

 

또 left, right는 내가 출력하고 싶은 column을 따로 설정해줄 수 있는데 이건 예제를 통해서 알아보도록 하자.

 

 

 

예제에서 실행한 것은 site 와 visited의 merge이다.

 

내가 알고싶은 것은 site에 방문한 visited의 날짜라고 했을 때, 방문한 장소의 name을 기준으로 병합을 진행하기 위해서 left와 right의 기준을 name과 site로 정했다. visited의 site는 site의 name에 해당하는 값이므로 병합을 진행해보면,

 

 

 

다음과 같은 결과가 나오게된다.


 

2. 누락값(NaN, nan) 처리

 

우리는 위의 예제들을 통해서 누락값을 발생을 경험해 보았고 이러한 데이터가 어떻게 발생하는지 알게되었다.

 

지금부터는 이 누락값들을 채우고 처리하는 방법을 알아보도록 하자.

 

 

결측값 분석하기

 

isnull 메서드를 사용하면, 데이터에 존재하는 누락값의 수를 알아낼 수 있다.

해당 데이터는 

 

사진에서 보이듯이 그냥 보기에도 데이터가 듬성듬성한게 nan 값이 참 많게 생겼다.

 

지금부터 nan 값을 세아려 볼 것이다.

 

 

오래간만에 보는 귀여운 값들이 톡 튀어나왔다.

 

결측값은 총 1214개이고, guinea column의 결측값은 29개이다.

 

 

 

Dropna method

 

isnull 이외에 dropna를 이용해서 결측값을 세아리는 방법도 있다.

 

value_count로 고유값의 개수를 세아려주고, dropna를 통해서 결측값의 개수도 세아려 준다.

원래 dropna의 본래 사용법은 결측값을 제거하는데 사용하는 것이다.

dropna매서드에 axis 값을 정해주면 원하는 방향으로 누락값 제거가 가능하다.

 

 

 

결측값 채우기

 

누락값 채우기를 할 때 사용하는 매서드는 fillna이다.

 

fillna를 사용해서 누락값을 채울 시에는 모든 값이 파라미터 값으로 바뀐다.

 

ex) df.fillna('A')이면 nan 값이 모두 A로 대체되게 된다.

 

혹은 ffill, bfill이라는 값을 사용해주게 되면, 각각 위의 값 복사, 아래의 값 복사를 해서 데이터를 채워넣는다.

2번째 출력값에서는 상위의 값이 존재하지 않기 때문에 NaN으로 출력이 된 것이다.

그리고 interpolate는 위아래의 평균값을 누락값에 채워넣어준다. 같은 이유로 NaN값이 출력된 것이다.


이상으로 pandas에 대한 정리를 마친다 ㅠㅠ

 

정말 배울 것이 많고 힘들지만 필수적이라는게 공부를 할 수록 느껴지는 것 같다......

 

20-6-27

'데이터 분석 > 파이썬' 카테고리의 다른 글

데이터 시각화 그래프  (0) 2021.06.29
numpy 라이브러리  (0) 2021.03.23
판다스를 이용한 데이터 정제  (0) 2020.06.17
셀레니움을 이용한 웹크롤링(Web crawling)  (0) 2020.06.03
엑셀 심화  (0) 2020.06.02

오늘은 판다스(pandas) 라이브러리를 이용한 데이터 정제를 반드시 정리할 것이다.

 

우선

 

판다스란?:

파이썬에서 사용하는 데이터 분석 라이브러리로 행과 열로 이루어진 데이터 객체를 만들어서 다룰 수 있으며 안정적으로 큰 용량의 데이터를 처리하는데 유용하게 쓰인다.

 

판다스는 처리 속도가 빠른 편은 아니지만 많은 사람들이 이용하고 있는 라이브러리이다. 속도가 느림에도 애용하는 이유는 다음과 같다.

 

1. 러닝커브가 낮다.

2. python universe에 속한다.

3. 디버깅하기 편하다.

4. 빠른 시각화가 가능하다.

 

판다스의 기본 개념으로는 Series와 DataFrame이 있는데 이는 위에서 말한 행과 열로 이루어진 데이터 객체들의 명칭이다. 판다스를 다루기 위해서는 이에 대한 이해가 불가결 하므로 설명을 하고 넘어가도록 하겠다.

 

-Series:

딕셔너리 같은 형태로 1:1 대응을 이루며 index와 values를 가진다.

 

 

출력시에 위와 같은 형태로 출력되고 지정해준 숫자가 아닌 앞에 나와있는 0-3의 숫자는 index에 해당된다.

index 값 역시 다음과 같이 선언해줌으로써 변경할 수 있다.

 

 

 

딕셔너리 처럼 1:1 대응을 이룰 수 있음을 알 수 있다. 단지 모양만 닮아있는 것이 아니라, 딕셔너리로 선언해 줄수도 있다.

 

ex) data = { 'A' : 4, 'B' : 5, 'C' : 6, 'D': 7}

     ser = pd.Series(data)

 

또 series에는 name과 index name을 붙여줄 수 있는데, 방법은 아주 간단하므로 적어놓고 넘어가겠다.

 

ex) ser.name = 'PhyJun'

     ser.index.name = 'Grade'

 

위를 출력하면 dtype에 series의 name이 출력되고 index 위에 Grade가 표시된다.

 

 

 

 

-DataFrame:

DataFrame은 Series보다 한 단계 높은 개념으로 이해하면 쉽다. 실제로 DataFrame의 사용빈도가 Series보다 높고 활용도도 높다.

 

Series와 마찬가지로 행과 열의 구조를 가지지만, 선언에서부터 Series보다 알아보기 쉬운 형태이다.

 

 

 

 

 

 

기본 데이터를 딕셔너리형으로 작성해준 후에 출력은 행렬으로 만들어준다.

 

Series와 마찬가지로 index와 name을 선언해줄 수 있으며, DataFrame 안에 존재하지 않는 값에 대해서는 누락값(NaN)으로 표시된다.

 

DataFrame에서는 각 열을 선택해서 조작할 수 있으며, 추가적으로 Series를 넣어줄 수 있다.

 

 

 

여기서 내가 해주고 싶은 말은, 위의 방법으로 indexing을 해주는 것은 pandas 내에 존재하는 수많은 방법중 하나이다. 

 

물론 위의 방법으로도 원하는 결과를 불러올 수 있지만, 내가 추천하는 방법은 아래의 방법이다.

 

.loc함수 / .iloc함수

 

기본적으로 같은 함수열에 속하지만, loc은  단위 번호를 기준으로, iloc은 index 단위 번호를 기준으로 추출할 때 사용된다.

 

 

 

 

(일일이 출력하고 찍기 귀찮아서 주피터 노트북을 썼다..)

 

loc을 사용해서 단일 열을 출력할 시에는 Series형태로 출력이 된다. 

 

iloc의 경우는 index번호를 사용해주면 된다.

 

ex) df.iloc[3:5, 0:2]

 

loc과 iloc은 기준이 되는 것이 뚜렷하고 출력을 할 때에 가독성이 좋기 때문에 애용하는 편이다.

 

loc과 iloc을 구분하기 쉽게 말하자면, loc은 이름을 기준으로 선택을 하고, iloc은 위치를 기준으로 선택을 한다고 생각하면 편하다.

 

 


자.. 기나긴 서론을 지나서 본론으로 들어가보자.

 

우리가 판다스를 하는 이유는 데이터를 정제하기 위해서다.

 

데이터정제란 또 무엇인가?

 

데이터를 다루다보면 의미없는 값이나 null(빈값)이 나오기도 한다. 데이터 정제는 이런 값들을 걸러내거나 의미있는 값으로 변환하기 위한 과정이다.

 


 

데이터를 확인하기 위한 매서드는 다음과 같다.

변수 = pd.read_csv('파일 위치')  
.head()   # 맨 앞의 자료 가져오기(기본적으로 상위 5개의 목록을 가져오지만 괄호 안의 숫자에 따라 정해진다.)
.tail() 
.sort_index() # 행과 열 이름을 정렬해서 나타낸다.
정렬은 axis를 이용한다. 
axis = 0 은 index 기준 ( = axis)
axis = 1 은 column 기준
.describe()  # 간단한 통계를 보여준다. 컬럼별로 count, mean, std, min, 25%, 50%, 75%, max들의 정보를 알 수 있다.

 

이외에도 .values .columns .index .dtype과 같은 속성들도 많다.

 


 

이제부터 데이터를 다루는 과정을 배우게 될 것이다.

 

이 과정을 하기 위해서는 준비된 파일이 tsv파일이 필요한데 이는 내가 공부할 때 파일을 제공받은 것을 기준으로 진행될 것이고 첨부도 해 놓겠다.

 

data.zip
0.10MB

 

우선 데이터를 추출하는 과정을 예시로 한번 보자.

 

 

gapminder라는 파일을 불러와서 country라는 이름을 가진 index를 country_df에 저장하고, head함수를 통해서 상위 country의 상위 5개 항목을 추출해 낼 것이다.

 

subset 변수에는 3개의 index를 가져와서 head를 적용해보겠다.

 

 

 

 

원하는 것 처럼 출력이 잘 된것을 볼 수 있다.

 

배운 것을 조금 써서 예시로 들면,

 

 

 

range가 헷갈릴 수 있으므로 살짝 설명을 하면, range(a, b, c) => a부터 c 숫자만큼의 간격으로 b-1까지의 정수를 반환한다.

따라서 range(0, 6, 2)는 2만큼의 간격을 두고 5까지 정수를 반환하니, 0, 2, 4를 반환한다.

 

=> iloc(mydf.iloc[10:20, [0, 2, 4]]) 와 같다고 볼 수 있는것이다.

 

출력결과는 사진에 담기 좀 많아서 직접해보는 것을 추천하고 넘어간다!

 


데이터를 분류하다보면, 비슷하지만 따로 구분되어 있는 데이터들이 있는데 이건 groupby 매서드를 통해서 묶어줄 수 있다.

 

 

 

groupby를 사용해서 year과 continent를 기준으로 데이터를 묶었다. 

 

출력을 원하는 값은 lifeExp와 gdpPercap 각각의 평균이다.

 

출력을 하게 된다면 아마 각 나라별 연도마다의 lE와 gPc을 구해줄 것이다.

 

 

 

데이터량이 많아서 짜르긴 했지만 위에서 언급한대로 잘 출력되었다. 

 

평균 이외의 것들도 구할 수 있는데 그건 아래의 표를 참고해서 작성해보도록 하자.

함수

설명

Sum()

합계

Count()

개수

Median()

중간값

Quantile([0.1, 0.9])

분위값

Min()

최소값

Max()

최대값

Mean()

평균

Var()

각 객체의 분산 값

Std()

각 객체의 표준편차

Nunique()

유니크의 개수


데이터 정제에 관한 내용은 상당히 많고 어렵기 때문에 한번에 정리하고자 했던건 내 욕심이라는 것을 깨달았다..

 

아직 정리해야할 내용이 많지만 한번에 너무 많이 정리하면 사실 정리의 의미를 잃으므로 이까지 정리하고 다음에 또 정리해서 올리도록 하겠다.

'데이터 분석 > 파이썬' 카테고리의 다른 글

numpy 라이브러리  (0) 2021.03.23
pandas 데이터 정제 (2)  (0) 2020.06.27
셀레니움을 이용한 웹크롤링(Web crawling)  (0) 2020.06.03
엑셀 심화  (0) 2020.06.02
파이썬 csv 사용하여 엑셀파일 다루기  (0) 2020.05.30

오늘 배울것은 셀레니움(selenium)라이브러리를 이용한 웹 정보수집 (Web crawling)을 해볼것이다.

 

사용할 library로는 selenium과 beautiful soup 이 있다.

 

둘에 대해 간략하게 설명하자면,

 

-selenium : 주로 웹앱을 테스트하는 프레임 워크다. 각 웹앱에 맞는 driver를 통해서 웹을 직접 조작하며 결과물을 불러올 수 있다.

 

-bs4(Beautiful Soup) : html 구조를 파이썬이 이해할 수 있도록 변환하는 parsing을 맡고 있는 라이브러리. 의미가 있는 결과물을 불러낼 때 사용한다.

 

이것들을 이용해 두번의 예제에 걸쳐서 학습해보도록 하자.


#에브리타임 게시판 글 가져오기.

 

 

우선 필요한 라이브러리들을 전부 호출해줬다 selenium과 bs4, csv는 앞서 설명을 진행하였다.

 

그렇다면 time sleep은 무엇일까?

 

쉬어가겠다는 의미이다. 그렇다면 우리는 왜 정보를 수집할 때 쉬어가야하는걸까?

 

우리가 인터넷 사이트에 직접적으로 접속할 때 일정시간이 소요된다. 하지만 셀레니움을 이용해 이에 접근할 때는 우리가 접속할 대 소모되는 시간을 무시하고 빠르게 진행이 된다. 이렇게 되면 웹 사이트에서 우리를 해킹툴로 인식해 차단할수도 있고, 웹에 과부하를 줄 수도있다. 그러므로 되도록이면 sleep을 사용해 쉬어들어가도록 하자.

 

csv파일을 사용하는데 wt+는 처음보는것 같..지만 사실은 알고있는 범위 내다.

 

w : 쓰기모드

t : 텍스트모드

+ : 업데이트를 위해 열기

 

세개를 조합해서 쓴 것이다. 우리는 웹에서 데이터를 따와서 csv파일에 저장할 것 이므로 이렇게 써줬다.

 

웹앱은 요즘 정말 많이 존재한다. (firefox, naverwhale, chrome, IE ...)

 

firefox 앱이 셀레니움에 최적화 되어있지만 우리는 보편적으로 깔려있는 chrome을 써서 웹을 수집할 것이므로 chromedriver를 이용해주도록하자.

 

크롬 드라이버는 밑에 주소에서 설치할 수 있다.

 

https://chromedriver.chromium.org/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

chromedriver.chromium.org

 

버전 정보는 크롬을 실행한뒤, 설정 -> chrome 정보에서 확인할 수 있다.

 

설치를 하면 이것을 불러와줘야하는데 이건 csv파일 호출할 때와 마찬가지로 같은 폴더 안에 집어넣어 놓으면 바로 불러올 수 있지만, 다른 폴더안에 저장해놓았으면 위의 코드와 같이 직접호출을 해줘야한다.

 

호출을 해준 뒤, get 매서드를 이용해서 원하는 홈페이지를 불러온다.

 

이 다음에 나오는 xpath에 대한 개념을 살짝 정리하고 들어가자면, 

 

xpath : 특정 요소(element)를 찾을 때 접근할 수 있게 해주는 언어로 이것을 이용해 각 요소로 접근을 할 수 있다.

 

그리고 get 다음에 나오는 implicity_wait은 sleep과 구분하기 위해서 집어넣어놨다. 

 

implicity_wait(10)의 의미는 웹이 응답할 때 까지 최대 10s만큼을 기다려주겠다는 의미이다.

 

sleep과의 차이점은 sleep은 반드시 지정한 초만큼 지연시키지만, implicity_wait는 웹이 응답할 때 까지만 기다리는 것이다.

 

그 다음부터는 본론이다. 

 

우선 로그인을 해서 권한을 얻어야 게시판에 접근할 수 있으므로 로그인을 먼저해보도록 하자.

 

위에서 설명한 xpath로 접근하기 위해서 우리는 개발자모드로 들어가야한다. (크롬은 f12를 누르면 들어갈 수 있다.)

 

 

 

개발자 모드의 모습이다.

 

우리는 xpath로 접근을 하기 위해서 위에 빨간색으로 동그라미 친 부분을 누르고 로그인 버튼을 누르면

 

 

 

 

사진과 같이 회색으로 클릭된 부분이 개발자 환경 화면에 나온다.

 

여기서 이 부분을 우클릭한 후 copy에 마우스를 얹으면 아래쪽에 copy xpath가 뜨는데 이것을 누르면 xpath가 복사된다.

 

이 후 로그인까지 모든 과정을 위와 같이 진행하면 된다. 

 

click과 sendkey는 무엇일까?

 

이건 그냥 말 그대로 그 버튼을 click 한다는 의미와 아이디 비밀번호 (혹은 그 이외의 정보를 입력해주어야하는 것)을 파이썬에서 입력시키게 하기 위해서 사용한 것이다.

 

로그인을 마친 후 우리가 원하는 게시판으로 이동하는 것 까지 xpath로 진행을 해주면 된다. (나는 자유게시판으로 갔다)

 

그 이후에는 bs4를 이용해서 html구문을 해석시켜준 후 데이터를 수집할 수 있게 해야한다.

 

그래서 보이는 페이지의 html을 그대로 가져오기 위해서 driver.page_source를 html이라는 변수에 저장해 현재 페이지를 분석할 수 있게 해준다.

 

이 후에 html을 bs4를 이용해 parsing해준다.

 

자유게시판에 올라와있는 글들은 제목과 내용으로 구분되어 있는데, 이를 각각 가져와줘야한다. ( 둘의 element가 다르기 때문에 한번에 가져올 수가 없다.)

 

이번에는 selector를 이용해서 정보를 가져올것이다.

 

css selector : 말 그대로 선택을 해주는 요소이다. 각 요소마다 스타일을 지정해줄 수 있다.

 

이것도 xpath 복사한것과 같은 경로로 들어간 후 copy seletor를 클릭해주면 된다.

 

하지만 우리는 게시판에 있는 한 요소만 가져오거나 접속할게 아니기 때문에 전체적인 부분을 써넣어줘야한다.

 

그냥 selector를 복사해서 붙여넣기만 하면 내가 가져온 글의 selector만 저장할 수 있으므로 조심하도록하자.

 

 

 

 

그냥 첫번째 글과 두번째 글의 selector를 가져와봤을 때 위에 사진처럼 나온다. 공통되는 구문도 있지만, nth-child(n) 이부분이 다르다.

 

그러므로 깔끔하게 저 부분을 지우면, 위에 써놓은 코드처럼 나오게 된다.

 

제목을 가져왔으니까 내용도 같은 원리로 가져와준 후, 반복문을 통해서 리스트형으로 csv파일에 덮어 씌워주면 끝이다!

 

결과물:

 

 

csv파일과 컴파일러에서 확인할 수 있다..! (나의 학교와 학우들을 위해서 블러처리했다..)

 


#인스타그램 사진 크롤링하기

 

 

 

들어가기 전에 urlib에 대해서 알아보자.

 

urllib은 url에 관련된 library를 가져오는데 사용된다. 그 중에서 우리는 request와 parse를 사용할 것이다.

 

request는 말 그대로 url을 요청(가져오기)위해 사용하는 모듈로, urlopen형태로 쉽게 가져올 수 있다.

 

parse는 url을 파싱, 다루기 위해 사용하는 모듈이다.

 

quote_plus는 url을 인용할 때 쓰는 함수인데 미리 기억해두도록하자.

 

baseurl에서 인스타그램 태그 검색을 기반으로 둔 채, plusurl에서 내가 검색할 태그를 input매서드를 통해서 입력받도록 한 후,

 

내가 원하는 검색결과를 가져오기 위해서 baseurl + quote_plus(plusurl)로 최종 url을 설정했다.

 

이후 과정은 앞서 말한 내용과 동일하므로 생략하고,

 

정보를 선택하기 위해서 html에서 가져올 element를 찾아보자.

 

 

 

개발자 모드에서 보면, 사진에 해당하는 element는 v1Nh3~~에 해당하는 구문임을 쉽게 알 수 있다. 

 

우리가 원하는 것은 사진에 해당하는 element만 있으면 되기 때문에 v1Nh3~를 가져오도록하자. 

 

여기서 주의해야할 점은, html구문 상에 존재하는 블랭크는 전부 .으로 채워주어야 한다는 것이다.

 

이 후 반복문을 통해서 이미지들을 가져올건데, 몇가지 설명해야할 것이 있다.

 

href : a라는 문서를 연결하는 태그의 href라는 방식이다. a태그의 연결할 주소를 지정해준다.

 

src : 태그의 미디어를 재생할 때 사용되는 속성이다. 

 

select : 내가 원하는 정보를 찾기 위한 매서드.

 

위의 정보들을 조합해서 반복문을 쑤셔보면,

 

내가 가져올 이미지의 태그의 url을 프린트 한 후, imgurl속에 내가 검색한 태그의 이미지의 정보를 저장한 뒤, 한번 더 반복문을 실행하여 img라는 폴더안에 그 내용을 저장하겠다는 의미를 담고있다.

 

이러나 저러나 실행을 시켜보면,,

 

 

 

이미지에 해당하는 url에 대해서 열심히 출력을 한 후 이미지를 저장한 모습까지 완벽하다!.

 


 

 

 

20.06.03

'데이터 분석 > 파이썬' 카테고리의 다른 글

pandas 데이터 정제 (2)  (0) 2020.06.27
판다스를 이용한 데이터 정제  (0) 2020.06.17
엑셀 심화  (0) 2020.06.02
파이썬 csv 사용하여 엑셀파일 다루기  (0) 2020.05.30
파이썬 기초  (0) 2020.05.30

엑셀 심화

pluralmajor
|2020. 6. 2. 01:12

오늘 공부해 볼 내용은 엑셀에 쓰이는 서체를 파이썬으로 다뤄보는 것을 해보겠다.

 

마찬가지로 openpyxl 라이브러리가 필요하므로 안깔려있다면 깔도록 하자.

 

 

 

 

사진에 보이는 것 처럼 오늘은 유틸들이 꽤나 많다.

 

크게는 한 범주 안에 속하는 것들이지만, 하나하나 불러줘야 한다니 꽤나 귀찮은 작업이다! (주의할 점은 colors와 Color구분, NamedStyle과 named_style을 구분해주는 것도 중요하다.)

본론으로 들어가기 전에 알아둬야할 개념이 조금 있다.

 

우선 

 

cell style : 어느 특정한 셀에 스타일을 한번 적용을 시켜서, 외부적으로 셀을 건드려 스타일을 번경할 수 없게 만든다.

 

Named style : 이름 그대로 스타일에 이름을 새겨서 내가 사용하고 싶을 때 사용하는 것이다. ~~체 같은게 해당한다.

 

그리고 위에 내가 openpyxl.styles 로 불러온 라이브러리들은 서체나 굵기 배열 배치 등에 해당하는 것이므로 영어를 안다면 알 수 있는 것들이다.

 


내가 원하는 셀에 적용하기.

 

위에서 말한 cell style에 해당하는 내용이다.

 

 

부디 어제 공부했던 내용을 숙지하고 있길 바라며 설명하면,

 

a1, b2 는 각각 셀을 담당하고 있는 변수로 지정해준 것이다.

 

이후 ft라는 변수를 어떤 폰트로 지정해 줄 것인지에 대해 정하고 (italic은 기울임이다)

 

각각의 셀에 적용을 시킨 모습이다.

 

 

이렇게 해주니 A1과 B2 셀에는 A2셀과 달리 레드 색상과 기울임이 적용된 형태로 글이 작성되었다. (내가 직접 바꾼거 아님 ㅠ)

 

color를 지정해 줄 때는 RGB계열 색상은 이름으로 적어도 되지만, 팔레트 상에 존재하는 넘버링을 입력해도 된다. (ex. #FF000000)

 

만약 내가 한 셀에만 지정을 해주고 싶을 때는 다음과 같이 한줄로 코딩을  해도 된다. 

 

a1.font = Font(color=colors.RED, italic = True)

 

연속된 셀에 적용할 때는 전에 배운 split 을 사용해서 할 수 있다.

 

w1 = ['A1':'D6']

w1.font = Font(color=colors.RED, italic = True)

 

참고로 italic = False 는 기울임 적용을 안한 것과 같기 때문에 선언을 안해주어도 된다. 

 

병합된 셀에 적용을 할 수 있는 방법도 있다.

 

 

 

 

 

 

 

merge_cells 함수를 이용해서 B2~F4까지의 셀을 통합한 후 스타일을 지정해주는 모양이다.

 

병합해준 셀을 호출하기 위해서 top_left_cell이라는 함수를 이용해서 B2를 지정해준다 (어디를 지정해줘도 상관 없으나, top left 라고 했으니 B2라고 해줬다.)

 

그 후 여러 작업을 거친 뒤 모습은..

 

 

 

 

이런 모습으로 나왔다. PatternFill과 Gradient를 적용해서 이러한 모습이 나온 것이다.

 

Cell Style에 대한 설명은 여기서 마치도록 하겠다.


Named_Style 내 스타일 만들기.

 

앞서 말했듯 내가 지정한 폰트를 만들 수 있다. 주의해야할 점은 이 폰트는 절대적인 값을 지니므로, 이름을 계속해서 새롭게 만들어주어야하는 번거로움이 있다는 것이다.

 

 

 

조금 길어보이지만 사실 별 다를 것 없는 내용이다.

 

새로운 서체를 만들어 A7에 적용했고 그 서체의 이름은 PFF이다.

 

여기서 주의해야할 점은 내가 방금 언급했던 폰트의 이름이다. PFF라고 지정해주면 이 폰트는 한번 사용될 때 PFF라는 이름을 지닌채 저장이 되므로, 다음 실행 때 내가 size를 변경해서 저장하면 PFF로 저장할 수 없다. 새로운 이름을 명명해주어야한다.

 

실행 결과는?

 

 

훌륭하게 적용되었다.

 

오늘 배운 것은 보면 알겠지만 사실 큰 내용은 없다. 필요할 때 숙지해서 사용하면 좋을듯한 내용이다.

 

다음 시간부터는 꽤나 어려운 내용을 다룰 예정이다.


오늘은 파이썬 csv 사용하는 것에 대한 기본을 정리해보겠다.

 

우선 csv(comma-separated values)란?

몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일이다.

확장자는 . csv이며 MIME 형식은 text/csv이다.호환되지 않는 포맷을 사용하는 프로그램 끼리 자료를 전달할 때 사용하는데 쓰인다.

파이썬에선 이것으로 text 파일 뿐 아니라 xlsx 파일 같은 것도 건들이곤 한다.

 


csv 파일 읽어오기

 

 

 

우선 csv 파일을 다루기 위해서는 import 라는 명령어를 통해 csv파일을 다룰 수 있는 모듈을 가지고 와야한다.

 

그 이후 open 이라는 명령어를 통해서 읽어올 파일을 정한다.

 

그 뒤 'r' 은 모드를 정하는 것인데 기본적으로 'r' : read mode, 'w' : write mode 를 사용한다.

 

기본적으로 read 모드로 가져올 경우에는 경로를 지정하거나 파이썬 폴더 안에 csv파일이 존재해야 읽어올 수 있다.

 

그 후 읽어온 파일을 출력해보기 위해, reader라는 객체를 사용하여야 한다. csv파일에 담겨있는 내용을 리스트 형식으로 한 줄씩 가져오겠다는 선언을 해주는 것이다.

 

그 후 반복문을 통해 한 줄씩 출력해서 가져온다.

 

 

csv 파일 쓰기

 

 

 

 

불러오는 방식은 read 모드와 똑같다. 다만 write모드는 파일을 새롭게 작성할 수 있으므로 반드시 그 파일이 존재할 필요는 없다.

 

그리고 뒤에 있는 newline은 파일 쓰기 형식과 관련된 얘기인데, write모드로 작성할 시 기본적으로 엔터가 들어가게 되어있다.

 

그러므로 writer 라는 객체를 사용할 때 한 줄씩 가져오는 것 + 엔터를 하게되면 두 줄씩 띄워서 글을 작성해버리게 되는 것이므로 띄우지 않겠다 라는 의미로 작은 따옴표 사이에 아무것도 넣지 않고 사용하는 것이다.

writerow 메서드는 새롭게 list 데이터를 한 줄 넣겠다는 의미이다. 따라서 이 메서드 뒤에 list로 작성을 하는 것이 기본이다. 

 

 

∴f.close는 열었던 파일을 닫아준다는 의미로 보통 프로그램이 종료되면 같이 종료되어 굳이 써주지 않아도 괜찮지만, write모드로 글을 작성할 때 파일이 열려있으면 오류가 발생하므로 닫아주는걸 습관화하는 것이 좋다.

 


엑셀 파일 다뤄보기

 

 

 

 

위에서 설명한 csv파일 읽기와 똑같은 형식으로 진행할 수 있다.

 

csv파일을 microsoft Excel로 연결을 해준 후 위와 같은 코드를 실행하게 되면,

 

 

짠~ 위와 같은 데이터가 쭉 나열되었다! 내가 실행한 data.csv 파일 안에는 첫번째 리스트에 있는 항목들로 총 1000개의 데이터가 존재하며, 1001개의 리스트로 구성되어 읽어올 수 있었다.

 

그러나 나는 읽기만 할려고 파이썬을 배우는 것이 아니라 읽고 쓰고 수정하기 위해 사용하므로 이에 대해서 알아보자.

 

 

다음 과정을 실행하기 위해서는 openpyxl이라는 라이브러리가 필요하므로 pip를 이용해 설치해주도록 하자.


 

∴엑셀 파일 쓰기를 설명하기 전에 openpyxl을 설치했다면, csv파일로 읽어오는 것 말고도  load_workbook('파일명.xlsx')를 사용해 읽어올 수 도 있다.

 

엑셀 파일 쓰기

 

 

 

 

 

wb = Workbook() 은 엑셀 파일의 시트를 하나 새로 만들겠다는 소리이다.

 

그 이후 active를 통해서 wb의 시트를 활성화 시켜 동작을 수행하겠다라는 행동을 취했다. 이건 open과 비슷한 의미로 받아들이면 될 것 같다.

 

활성화 된 시트의 A1열에 HELLO! 라는 글자를 새겨넣은 뒤, test라는 이름으로 파일을 저장해 보았다.

 

결과는..

 

 

 

 

잘 저장되어 무사히 실행하였다!

 

이것말고도 openpyxl 에 내장되어 있는 객체는 많다. 

 

wb.create_sheet를 통해 내가 원하는 새로운 시트를 만드는 것도 가능하고,

test['A1'].value를 통해 내가 원하는 열의 값을 가져오는 것도 가능하다.

 

이것까지 배웠으면 많이 배운 것 같지만, 왜 csv와 xlsx을 같이 가져왔겠는가..! 이것으로 무엇을 할 건지는 밑에서 차근차근 배워보자.

 

 


csv를 통해서 엑셀파일을 수정해보자.

 

 

 

한 줄씩 분석해보자!

 

먼저 csv파일 읽어오기 부분은 설명했으니 생략하고,

 

list = []는 비어있는 새로운 리스트를 하나 생성하겠다는 것이다.

 

그 후 reader 객체를 통해 오픈한 파일을 한 줄씩 읽어오면서 반복문을 통해 list에 한 줄씩 추가한다는 것이다. i[1]은 data.csv의 한 줄 중에서 두번째 리스트, [1, 2, 3]이 있으면 2를 가져오겠다는 소리이다.

 

다음은 data_n라는 새로운 파일을 개설하며 이것을 쓰기모드로 하여 가져온 리스트의 내용 덮어씌워 저장하려한다.

 

마찬가지로 writer 객체를 통해 비어있는 한 줄씩 가져오면서 반복문을 통해 리스트에 있는 내용을 써주겠다!

 

무사히 실행과정을 마치면,,

 

 

무사히 내가 원하는 내용을 가져왔음을 알 수 있다!

 

여기서 조금만 더 응용하면, 한 셀 내에서도 내가 원하는 내용만을 가져올 수 있다.

 

 

 

별 다를 것 없이 작성한 것 같지만, 어제 설명했던 split이라는 객체를 통해 이메일에서 @뒷부분인 도메인을 때고 내가 원하는 데이터를 저장하고자 위와 같은 코드를 작성한 것이다.

 

그 후 0번째를 불러온 것은 내가 찾고자하는 부분이 아이디 부분이므로 작성해준것이다. 만약 도메인을 조사하고 싶다면 1을 해주거나 -1을 해주면 된다.

(내가 해본 결과 도메인이 존재하지 않는 즉, 아이디만 있는 데이터가 있어 null값이 존재해 1은 출력되지 않았다. 내가 가지고 있는 데이터 상으로는 -1을 해주면 정상적으로 출력이 된다.)

 

 

결과:

 

 

 


 

 

 

2020.05.30

'데이터 분석 > 파이썬' 카테고리의 다른 글

pandas 데이터 정제 (2)  (0) 2020.06.27
판다스를 이용한 데이터 정제  (0) 2020.06.17
셀레니움을 이용한 웹크롤링(Web crawling)  (0) 2020.06.03
엑셀 심화  (0) 2020.06.02
파이썬 기초  (0) 2020.05.30

파이썬 기초

pluralmajor
|2020. 5. 30. 00:43

파이썬은 개발시간단축에 초점을 두어 C언어 보다 효율성 면에서 떨어진다.

 

이럼에도 불구하고 우리가 파이썬을 하는 이유는 간단하다.

"Life is short, you need python."

빠른 시간에 코드를 작성하고 결과물을 빨리 볼 수 있기 때문이다.

 

이것뿐 아니라 파이썬은 여러가지 장점을 지니고 있다.

 

-대화형식의 인터프리터  언어 : 컴퓨터와 대화하듯이 프로그래밍을 한다. 이런 점에서 나는 파이썬을 할 때 덜 지루한 것 같다.

-수많은 라이브러리 제공 : 헤더파일의 접근이 비교적 어려운 C언어 보다 파이썬은 더 많은 라이브러리를 제공한다.

-무료 : 많은 사람들이 함께 파이썬을 유지하고 관리하며 이를 무료로 제공한다. 라이브러리가 많이 제공되는 것에 이것도 한 몫하는 것 같다.

 

위 사항 이외에도 많은 장점들이 있으나 생략하고 배운 것들을 정리해보도록 하겠다.

 


파이썬 기초 문법


내 기준에서, 파이썬은 기본적으로 C언어와 굉장히 유사한 문법을 지니고 있다.

 

기본적으로 print 함수, if-while-for 문은 C언어와 매우매우 흡사한 형식으로 사용된다.

 

if문은 c의 else if 와 완전히 같고, 내가 이해하는 범위 이므로 작성을 생략하도록 하겠다.

 

-whlie문

 

<while문 사용>

 

위와 같은 형식으로 쓰인다. C와 몹시 흡사하지만 기본적으로 무한루프에 빠지기 쉬운 형태로 되어 있어, 보통 많이 사용하진 않는 편이다.

 

-for문

 

<for문 사용>

 

C와는 조금 다른듯한 모습이다. 리스트와 튜플은 조금 있다가 설명할 내용이다.

파이썬에서 사용하는 for문은 변수(i라고 지정하겠다)i가 리스트나 튜플 혹은 문자열에 해당하는 마지막 까지 명령을 반복한다.

 

*내가 아직 for문에 미흡하므로 나중에 더 잘하게 된다면 추가하겠다.

 


파이썬만의 특징인 리스트와 튜플, 딕셔너리에 대해 설명하겠다.

 

-리스트

 

<리스트의 형태>

 

보이는 것과 같이 대괄호 [ ] 안에 숫자 혹은, 작은 따옴표('char'), 큰 따옴표("string")을 사용한 문자열을 삽입한 자료형이다.

기본적으로 가장 많이 쓰이는 자료형이며, 개방적이어서 삽입, 삭제, 수정, 정렬, 뒤집기 같은 문법들이 모두 허용된다.

 

 

<예제>

 

위와 같이 리스트 속에 리스트도 사용할 수 있다.

 

-튜플

 

<튜플의 형태>

 

사진상에서 많은걸 설명하고 있다. 설명이 잘 되어있지만 헷갈리지 않기 위해 말을 덧붙이자면,

생성 수정 삭제등이 불가능하지만 슬라이싱이나 튜플끼리의 사칙연산은 가능하다.

 

 

-딕셔너리

 

<딕셔너리의 형태>

 

이름에서도 알 수 있다싶이, 딕셔너리형은 사전적 의미를 설명하는 형태로 쓰인다.

key와 value가 1:1로 상응하면서 서로의 의미를 지니게 된다.

딕셔너리는 요소의 추가, 삭제등이 가능하며 key 혹은 value 값만 추출이 가능하며 추출한 값으로 리스트를 새로 생성할 수 있다.

 

처음엔 어디서 사용하나 싶었지만 추후에 배울 판다스에서 DataFrame을 만들 때 쓰이게 된다.


자주 쓰는 문법에 대해 알아보자.

 

- 인덱싱(indexing)

 

<indexing>

 

인덱싱은 리스트, 튜플, 문자열 등에서 지정한 위치에 있는 값을 추출할 때 사용한다.

위에서 예제를 든 것은 너무 간단하므로 밑에 예제를 하나 더 들어보겠다.

 

 list = [1, 2, 3, 4]

 print(list[1])

>>> 2

 

나는 첫번째에 있는 친구를 호출했는데 왜 2번째에 있는 너가 나와? 라고 생각이 들 수 있다.

파이썬에서 기본적으로 제일 앞에 존재하는 친구의 숫자는 0으로 분류한다.

그러므로 내가 1을 추출해내고 싶다면  list[0]을 사용하면 된다. 

 

참고로 위에 리스트 속 리스트가 존재할 때 인덱싱을 하면 리스트가 뽑아져 나온다.

 

ex) list = [1, [2, 3, [11, 22, 33]], 10]

      print(list[1][2])

>>>[11, 22, 33]

 

 

-슬라이싱(slicing)

 

 

<slicing>

 

슬라이싱은 문자 그대로 잘라내는 것이다. 내가 원하는 부분을 끄집어 내는 것.

물론 중첩 리스트에서도 슬라이싱이 가능하다!

 

ex) a = [1, 2, [3, 4, 4, 5, 6, 7]]

       print(a[2][:3])

>>>[3, 4, 5, 6]

 

 

-요소 추가 (append)

 

<append>

 

말 그대로 요소를 추가하는 것이다. 리스트 외에 튜플, 딕셔너리 모두에 해당하는 명령어이다.

이후 공부할 csv파일 정제할 때 자주 쓰이므로 숙지해두면 유용하다.


파이썬을 배우고 공부하기 시작한 지 2~3주 밖에 되지 않았지만, 파이썬은 참 유익하고 재밌는 것 같다. 

페이지를 정리하기 시작하면서 나에게 좀 더 도움이 되는 시간이 많아졌으면 좋겠고, 앞으로 계속 수정해 나가면서 내가 모자랐던 점이나 고쳐나가야 할 점이 잘 보였으면 하는 바램이다.

 

2020. 5. 29