달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
728x90
반응형

[파이썬을 활용한 데이터 전처리 Level UP- 8 회차 미션 시작]

* 복습

 - 마스킹 검색, 문자열 검색, matplotlib 에 대한 기초 이론 등에 대해서 배웠었다. 특히, matplotlib 은 기초 이론만 습득을 했어고 아마도 오늘 실습을 통해서 자세히 알아 나갈 것 같다.

 


 

[01. Part 1) 데이터 핸들링 Chapter 06. 데이터 이쁘게 보기 - 데이터 시각화 - 02. 꺽은선 그래프 그리기]

// 산점도는 분포를 확인하기 용이한 그래프이다.

 

* matplotlib을 이용한 꺽은선 그래프 그리기

 - pyplot.plot 함수를 사용하면 꺽은선 그래프를 그릴 수 있음
 - 주요 입력
  . x, y : x, y 축에 들어갈 값 (iterable 한 객체여야 하며, x[ i ] , y[ i ] 가 하나의 점이 되므로 길이가 같아야 한다.)

// series 등 점의 길이가 같아야 된다.
  . linewidth : 선 두께
  . marker : 마커 종류
  . markersize : 마커 크기
  . color : 선 색상
  . linestyle : 선 스타일
  . label : 범례

 

* Pandas 객체의 method를 이용한 꺽은선 그래프 그리기

 - DataFrame.plot( ) 함수를 사용하면 DataFrame 을 사용한 그래프를 그릴 수 있다.
 - 주요 입력
  . kind : 그래프 종류 (‘line' 이면 선 그래프를 그림)
  . x : x 축에 들어갈 컬럼명 (입력하지 않으면, index 가 x 축에 들어간다.)
  . y :  y 축에 들어갈 칼럼명 (목록)
  . xticks, yticks 등도 설정이 가능함 (단, pyplot을 사용해서도 설정이 가능하다.)

 

* 실습

// 기본 환경 설정

// numpy 도 같이 불어옴

// magic keyword %matplotblib inline 을 통해서 cell 에서 그래프 표시

// Malgun Gothic => 보통은 윈도우 환경이다.

 

// cumsum 누적합이다.

// plt.xticks(xtick_range, df['날짜'].loc[xtick_range] x 축을 정의한다.

 

// DataFrame으로 직접 그래프 그리기는.. df.plot(kind='line', x='날짜', y = ['상품1, '상품2', '상품3'] 으로 설정하여 그릴 수가 있다.

// DafatFrame의 경우에는 훨씬 더 편하지만, 환경 설정등은 기본 환경을 이용해서 설정해줘야 한다.

 

// groupby 으로 그래프 그리기

// groupby , pivot 은 그래프를 그리기 위해서 많이 쓰이고 있다.

 

* matplotlib 을 이용한 산점도 그리기

 - pyplot.scatter 함수를 사용하면 산점도를 그릴 수 있다.

 - 주요 입력

  . x, y: x, y 축에 들어갈 값 (iterable한 객체여야 하며, x[ i ], y[ i ] 가 하나의 점이 되므로 두 입력의 길이가 같아야 한다.

  . marker : 마커 종류

  . markersize : 마커 크기

  . color : 마커 색상

  . label : 범례

 

// 솔직히 matplotlib 함수에 대서는 자료가 굉장히 많이 있다.

// 아래는 matplotlib documentation 을 검색했을 때 나오는 공식 사이트

matplotlib.org/

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

// 기본적인 parameter 도 많이 있고.

Parameters:

x, yarray-like or scalar

The horizontal / vertical coordinates of the data points. x values are optional and default to range(len(y)).

Commonly, these parameters are 1D arrays.

They can also be scalars, or two-dimensional (in that case, the columns represent separate data sets).

These arguments cannot be passed as keywords.

fmtstr, optional

A format string, e.g. 'ro' for red circles. See the Notes section for a full description of the format strings.

Format strings are just an abbreviation for quickly setting basic line properties. All of these and more can also be controlled by keyword arguments.

This argument cannot be passed as keyword.

dataindexable object, optional

An object with labelled data. If given, provide the label names to plot in x and y.

Note

Technically there's a slight ambiguity in calls where the second label is a valid fmt. plot('n', 'o', data=obj) could be plt(x, y) or plt(y, fmt). In such cases, the former interpretation is chosen, but a warning is issued. You may suppress the warning by adding an empty format string plot('n', 'o', '', data=obj).

// 이외에도 다양한 paramter 값 들이 있다.

Other Parameters:

scalex, scaleybool, default: True

These parameters determine if the view limits are adapted to the data limits. The values are passed on to autoscale_view.

**kwargsLine2D properties, optional

kwargs are used to specify properties like a line label (for auto legends), linewidth, antialiasing, marker face color. Example:

 

If you make multiple lines with one plot call, the kwargs apply to all those lines.

Here is a list of available Line2D properties:

PropertyDescription

agg_filter a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array
alpha float or None
animated bool
antialiased or aa bool
clip_box Bbox
clip_on bool
clip_path Patch or (Path, Transform) or None
color or c color
contains unknown
dash_capstyle {'butt', 'round', 'projecting'}
dash_joinstyle {'miter', 'round', 'bevel'}
dashes sequence of floats (on/off ink in points) or (None, None)
data (2, N) array or two 1D arrays
drawstyle or ds {'default', 'steps', 'steps-pre', 'steps-mid', 'steps-post'}, default: 'default'
figure Figure
fillstyle {'full', 'left', 'right', 'bottom', 'top', 'none'}
gid str
in_layout bool
label object
linestyle or ls {'-', '--', '-.', ':', '', (offset, on-off-seq), ...}
linewidth or lw float
marker marker style string, Path or MarkerStyle
markeredgecolor or mec color
markeredgewidth or mew float
markerfacecolor or mfc color
markerfacecoloralt or mfcalt color
markersize or ms float
markevery None or int or (int, int) or slice or List[int] or float or (float, float) or List[bool]
path_effects AbstractPathEffect
picker unknown
pickradius float
rasterized bool or None
sketch_params (scale: float, length: float, randomness: float)
snap bool or None
solid_capstyle {'butt', 'round', 'projecting'}
solid_joinstyle {'miter', 'round', 'bevel'}
transform matplotlib.transforms.Transform
url str
visible bool
xdata 1D array
ydata 1D array
zorder float

// 상기와 같은 많은 기능들을 다 사용할 수는 없었지만, matplotlib 을 이용해서는 stock chart 를 나타내는 것에는 한계가 다분히 존재한다. 그래서 다른 candle stick 을 그릴 수 있는 plot 이 더 좋았고, 요즘에는 active chart 인 plotly 를 더욱 많이 사용하는 것 같다.

 

// mpl_finance

github.com/matplotlib/mplfinance

// candlestcik chart 그리기 좋은 라이브러리. pip install 을 통해서 설치 하면된다.

// 난 개인적으로 요즘 plotly 가 더 좋지만. ^^;;


[01. Part 1) 데이터 핸들링 Chapter 06. 데이터 이쁘게 보기 - 데이터 시각화 - 03. 산점도 그리기]

 

* Pandas 객체의 method 를 이용한 산점도 그리기

 - DataFrame.plot( ) 함수를 사용하면 DataFrame을 사용한 그래프를 손쉽게 그릴 수 있으며, 산점도 역시 그릴 수 있다.

 - 주요 입력

  . kind : 그래프 종류 ( 'scatter'면 산점도를 그린다.)

  . x : x 축에 들어갈 컬럼명 (입력하지 않으면, index 가 x 축에 들어간다.)

  . y: y 축에 들어갈 컬럼명

  . xticks. yticks 등도 설정이 가능하다. (단, pyplot 을 사용해서도 설정이 가능하다)

 

* 실습

// 그래프를 그리는 것은 쉬운편이나, 그래프를 그리기 위해서 데이터를 어떤식으로 정제를 해야 하는지를 잘 알아야 한다.

// string access 를 통해서 하는가, 글씨 두개를 날리던가 하는 식으로 원하는 형태의 string을 얻을 수 있다.

// multiindex 는 . groupby 에서 list 형태 일때는 as_index 를 True로 두면된다. 약간 까다롭기 때문에 일반적으로 False로 두고 작업을 하는 것이 좋다.

// .unique( ) 를 통해서 각각의 리스트를 돌면서.. scatter 를 찍게 된다.

 

// Datafrme 을 이용해서 그리기

// .add_suffix 모든 것에 대해서 접미사를 붙이는 것이다.

// unique 한 갯수를 가지는 list 형태이다.

// df.plot 형태로 기본적인 plot의 형태를 찍어줬다.

 

// 산점도는 그래프를 그리는 것도 보다도 그래프를 그리기 위해서 데이터를 정리하는 시간이 더 오래 걸린다.

 


 

[01. Part 1) 데이터 핸들링 Chapter 06. 데이터 이쁘게 보기 - 데이터 시각화 - 04. 막대 차트 그리기]

* matplotlib 을 이용한 막대 차트 그리기

 - pyplot.bar 함수를 사용하면 막대 차트를 그릴 수 있다.

 - 주요 입력

  . x : 막대의 위치

  . height : 막대의 높이

  . width : 막대의 너비

// 추후에는 width를 넓히는 것이 더 중요하는 것을 의미한다.

  . align : 막대 정렬

 

* Pandas 객체의 method 를 이용한 막대 차트 그리기

 - DataFrame.plot( ) 함수를 사용하면 DataFrame을 사용한 그래프를 손쉽게 그릴 수 있으며, 막대 차트 역시 그릴 수 있다.

 - 주요입력

  . kind: 그래프 종류 ('bar'면 막대 그래프를 그린다.)

  . x: x축에 들어갈 컬럼명 (입력하지 않으면, index가 x축에 들어감)

  . y : y 축에 들어갈 컬럼명 (목록)

  . xticks, yticks 등도 설정이 가능하다. (단, pyplot 을 사용해서도 설정이 가능하다.)

 

*  실습

// x 에 문자를 넣게 되면 위치는 자동으로 0, 1, 2, 3, ~~~ 이런식으로 자동으로 잡히게 된다.

 

* 다중 막대 그래프 그리기

 - 다중 막대그래프는 pandas의 groupby 혹은 set_index, 그리고 unstack, 혹은 pivot_table을 사용하면 쉽게 그릴 수 있다.

// 오른쪽과 같은 그래프가 다중 막대 그래프를 그리기 좋은 구조이다.

// pivot table 을 이용해서 만들면 되고, 만약에 안된다고 하면 groupby 를 사용해서 작업을 하면 된다.

 

* 실습

// groupby 이후에 unstack 을 하게 되면 pivot 형태를 가지게 되고 이를 그래프로 나타내면 된다.

 

[파이썬을 활용한 데이터 전처리 Level UP-Comment]
- matplotlib 을 이용한 그래프 그리그에 대해서 배워 볼 수 있었다. bar, line, scatter 등에서 배울 수 있었고 각각 DataFrame 을 사용해서 어떻게 작업을 해서 plot 을 그려야 할지에 대해서 알아봤다.

 

 

https://bit.ly/3m7bW22

 

파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online. | 패스트캠퍼스

데이터 분석에 필요한 기초 전처리부터, 데이터의 품질 및 머신러닝 성능 향상을 위한 고급 스킬까지 완전 정복하는 데이터 전처리 트레이닝 온라인 강의입니다.

www.fastcampus.co.kr

 

728x90
반응형
:
Posted by 패치#노트
728x90
반응형

[파이썬을 활용한 데이터 전처리 Level UP- 7 회차 미션 시작]

* 복습

 - groupby 함수를 사용하여 pandas 의 데이터 group 한다.

  . 순서가 중요하다. 함수를 사용하는 순서.. 어떤 것을 기준으로 해야 하는지 명확하게 정의해야 한다.

 - 데이터 정렬하는 방법.. sort_values 등 방법과 index를 활용한 정렬과 인덱싱에 대해서 다시 한번 강조했다.

 

[01. Part 1) 데이터 핸들링 Chapter 05. 보고 싶은 데이터 찾아보기 - 데이터 정렬과 인덱싱 - 03. 마스킹 검색]

 

 

 

* 비교 연산

 - Series와 DataFrame의 data가 모두 ndarray 이므로, 비교 연산 및 브로드 캐스팅이 적용될 수 있다.

// 둘다 ndarray 를 기반으로 하기 때문에 적용될 수 있는 것이다.

// isin 은 속하느냐 안 속하느냐 따라서 나타내는 것이다.

// 변형될 위험이 없기 때문에 loc 나 iloc 는 쓸 필요가 없다. 하지만 값을 변경할 때는 반드시 인덱서를 써야 한다.

 

* 부울 리스트 연산

 - ndarray 타입의 부울 리스트에 대해, AND 연산(&)과 OR 연산( | ) 이 가능함

// | 는 enter 위에 있는 키보드 자판

// .values series를 ndarray 로 변환 한 다음에 사용해야 한다.

 

* 마스킹 검색

 - df.loc[부울 리스트] : True 인 요소의 위치에 대응되는 행만 가져옴

// loc  는 어느 상황에서나 사용할 수 있기 때문에 loc를 사용한다.

 

* 실습

// 인덱서로 사용해서 bool 인덱서로 사용해서 찾을 수가 있다.

// & | 로 연산할 때는 반드시 소괄호로 묶어줘야 한다. 안그러면 논리 연산을 어디서 행해야 할지 몰라서 에러가 날때가 많다.

 

[01. Part 1) 데이터 핸들링 Chapter 05. 보고 싶은 데이터 찾아보기 - 데이터 정렬과 인덱싱 - 04. 문자열 검색]

* Series.str

 - 문자열로 구성된 Series에 대해서는 str accesoor를 사용할 수 있으며, 이를 사용하면 string 관련 내장 함수를 자유 자재로 사용할 수 있다.

// split 등 각종 string 과련 method 를 사용할 수 있다는 것이다.

 - 예시

  . Series.str.strip( ) : 앞 뒤 공백 제거

  . Series.str.contains(s) : 문자열 s 를 포함하고 있는지 여부를 반환

  . Series.str.split(sep, expand) : sep 을 기준으로 Series를 분할

  .. expand = True : 새로운 열 생성

  .. expand = False: 새로운 열을 생성하지 않고 리스트를 반환

 

// pandas.Series.str 의 documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.html

Series.str()

Vectorized string functions for Series and Index.

NAs stay NA unless handled otherwise by a particular method. Patterned after Python’s string methods, with some inspiration from R’s stringr package.

 

예시)

s = pd.Series(["A_Str_Series"])
s
0    A_Str_Series
dtype: object
s.str.split("_")
0    [A, Str, Series]
dtype: object
s.str.replace("_", "")
0    AStrSeries
dtype: object

* Series.astype

 - Series의 자료형을 변환하는데 사용하는 함수

 - (예시) Seires.astype(str) : 숫자 자료형에 str accesor를 사용하기 위해 적용함

// 숫자는 int 나 float 으로 인식되는데.. string으로 인식시켜주기 위해서 대비하기 위해서 쓰는 것이다.

 

* 실습

// 시리얼 번호 = 공정, 제품, 식별자

// value_counts( ) 를 통해서 양품과 불량을 개략적으로 알아 본다.

// 'S'  공정인것을 찾을수가 있다. str.

 

// expand = True 는 새로운 컬럼이 만들어지게 되고, 각 column 으로 들어가게 된다.  그 구분은 split - 으로 대체되게 된다.

// concat 을 통해서.. 각각의 결과를 합치다. 열단위로 붙일때는 axis = 1 로 설정한 다음에 붙이는 것이다.

// 모든 컬럼을 바꿀때는 .columns = 로 통해서 바꾸면 되지만, 특정 컬럼만 이름을 바꿀때는 .rename 으로 바꾸는 것이 좋다.

 

// pandas.Series.astype 의 documentation

pandas.pydata.org/docs/reference/api/pandas.Series.astype.html

Series.astype(dtype, copy=True, errors='raise')

Parameters

dtypedata type, or dict of column name -> data type

Use a numpy.dtype or Python type to cast entire pandas object to the same type. Alternatively, use {col: dtype, …}, where col is a column label and dtype is a numpy.dtype or Python type to cast one or more of the DataFrame’s columns to column-specific types.

copybool, default True

Return a copy when copy=True (be very careful setting copy=False as changes to values then may propagate to other pandas objects).

errors{‘raise’, ‘ignore’}, default ‘raise’

Control raising of exceptions on invalid data for provided dtype.

  • raise : allow exceptions to be raised

  • ignore : suppress exceptions. On error return original object.

[01. Part 1) 데이터 핸들링 Chapter 06. 데이터 이쁘게 보기 - 데이터 시각화 - 01. matplotlib 기초]

// python 에서 대중적으로 쓰는 시각화 모듈이다.

 

* matplotlib 이란

 - 파이썬에서 차트나 플롯으로 데이터를 시각화하기 위한 모듈로 사용이 간편하고 다양한 그래프를 제공해서 많이 사용된다.

// seaborn, boat ??? 그런 프로그램이 있다.

 

 - matplotlib을 이용해서 그릴 수 있는 대표적인 그래프는 다음과 같다.

  . 꺽은선 그래프 -> line plot

  . 산점도 -> scatter plot

  . 막대 그래프 -> bar chart

  . 히스토그램 -> histogram

  . 박스 플롯 -> box plot

 - pandas 의 객체에서도 메서드로 matplotlib의 함수를 사용할 수 있다.

// pandas 에서도 사용할 수 있다. 그 의미는 굳이 matplotlib 을 import 하지 않고, pandas에서 불러와서 쓸수 있다는 것이다.

 

* 기초 환경 설정

 - pyplot.rcParams 를 이용한 폰트 설정 및 그래프 크기 설정

// 기본적인 환경을 셋팅하는 함수라고 보면된다.

  . rcParams['font.family'] : 폰트 설정 (특히, 한글을 쓰는 경우에 반드시 설정 필요)

// matplotlib 에서는 한글을 지원하지 않기 때문에 네모박스처럼 알아 볼 수 없는 것으로 나온다.

  . rcParams['font.size'] : 글씨 크기 설정

  . rcParams['figure.figsize'] : (x, y) 꼴의 튜플로 그래프의 크기를 설정

// 10, 5 정도로 하면 적당한 그림의 크기기 나온다고 보면 된다.

 

* 쥬피터에서 그래프 그리기

 - 쥬피터의 매직 키워드인 %matplotlib inline을 이용하면 셀에 그래프를 직접 출력할 수 있다.

 - 쥬피터를 사용하지 않는 경우에는 plt.figure( ) 를 사용해서 그래프 객체를 일일이 생성하고 저장해야 하지만, 쥬피터에서는 한 셀에서 그래패를 그릴 떄마다 하나의 객체가 생성된다.

// 이 강의에서는 jupyter notebook을 기초로 하기 때문에 failed show 등에 대해서는 다루지 않는다.

  . 한 셀에서 plt의 함수를 사용하여 그래프를 그리면 하나의 객체에 누적해서 그래프가 생성된다.

// 중첩을 하지 않기 위해서는 각 셀을 나눠서 plt 를 작업을 해야 한다.

  . 그래프를 다 그린 후에는 plt.savefig(file, dpi) 를 사용하여 그래프를 저장할 수 있다.

// dpi 는 보통 300 으로 설정한다.

 

* 자주 사용되는 색상 설정

 - 다양한 그래프에서 색상을 설정해야 하며, 자주 사용되는 색상 및 입력은 다음과 같다.

// 직관적으로 결과를 보기 때문에 색상에는 크게 신경쓰지는 않는다.

 

 

* 자주 사용되는 마커 및 선 스타일 설정

 - 마커란 하나의 데이터 포인트 (샘플)을 나타내는 기호를 나타낸다.

 - 선 스타일은 꺽은선 그래프의 선 스타일을 의미한다.

// 별, 더하기, 다이아몬드 등을 주로 쓴다.

 

* label 및 title 설정

 - label 이란 축의 이름을 의미하며, plt.xlabel과 plt.ylael을 사용하여 정의할 수 있다.

  . plt.xlabel(label, **kwargs) : label (str) 로 xlabel을 설정

  . plt.ylabel(label, **kwargs) : label (str) 로 ylabel을 설정

  . **kwargs : 텍스트의 특성을 설정하는 키워드 (예: fontproperties, fontsize, fontstyle 등)

// 앞서봤던 기초 환경에서 쓰는 rcParams와 달리 keyword로 의한 텍스트 특성은 라벨을 적용할 때 쓰이는 것이다.

 

 - title 이란 그래프의 이름으로, plt.title 을 사용하여 정의 할 수 있다.

  . plt.title(label, loc) : label (str) 로 title 을 설정 (loc : 위치 {'center', 'left', 'right'})

// loc 은 잘 설정하지 않는다. 주로 center

 

* tick 설정

 - tick이란 그래프에서 나타내는 눈금을 의미하며, plt.xticks와 plt.yticks을 이용하여 설정할 수 있다.

  . plt.xticks(ticks, lables) : ticks (위치)에 labels를 입력 (x축)

  . plt.yticks(ticks, lables) : ticks (위치)에 labels를 입력 (y축)

 - 사용 예시 : plt.xticks([1,2,3,4,5], ['a', 'b', 'c', 'd', 'e'])

* legend 설정

 - legend (범례)를 표시하려면 plt.legend(loc)을 사용하여 범례를 표시할 수 있다.

  . loc : 범례 위치 {'upper right' (1), 'upper left' (2), ....}

 - 단, 범례를 표시하려면 그래프를 그릴 때 label 키워드를 사용하여 범례를 정의해야 한다.

 

* 축 범위 설정

 - plt.xlim(left, right) : x축의 범위를 (left, right) 로 설정

 - plt.ylim(bottom, top) : y 축의 범위를 (bottom, top) 로 설정

 

 

[파이썬을 활용한 데이터 전처리 Level UP-Comment]
마스킹 검색과, 문자열 검색 기본적인 문법에 대해서 배워 볼 수 있었다. matplotlib 에 대해서는 기초적인 이론을 배웠고 추후 강의시간에 실습을 통해서 적용해 볼 수 있을 것이다.

 

https://bit.ly/3m7bW22

 

파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online. | 패스트캠퍼스

데이터 분석에 필요한 기초 전처리부터, 데이터의 품질 및 머신러닝 성능 향상을 위한 고급 스킬까지 완전 정복하는 데이터 전처리 트레이닝 온라인 강의입니다.

www.fastcampus.co.kr



728x90
반응형
:
Posted by 패치#노트
728x90
반응형

[파이썬을 활용한 데이터 전처리 Level UP- 6 회차 미션 시작]

* 복습

 - concat 으로 데이터 합치기

 - 기초 통계함수와 pivot table 의 기능에 대해서 알아봤었다.

 


 

[01. Part 1) 데이터 핸들링 Chapter 04. 한 눈에 데이터 보기 - 데이터 통합 및 집계 - 05. groupby를 이용한 데이터 집계]

 

* groupby: 분할, 적용, 결합

// 적용.. 특정한 집계 함수를 사용한다고 생각하면 된다.

 - groupby 는 조건부 통계량을 계산하기 위한 방법으로 크게 분할, 적용, 결합의 세 단계로 구성된다.

 

* DataFrame.gropuby

 - DataFrame을 분할 기준 컬럼을 기준으로 나누는 함수

 - 사용 구조: df.groupby(분할기준 칼럼)[적용 기준 칼럼].집계함수

// 사용구조가 상당히 중요하다. -> 기준으로 나누는 함수일 뿐이고, 구조를 통해서 데이터를 봐야 한다.

 - 주요 입력

  . by: 분할 기준 컬럼 (목록)

  . as_index : 분할 기준 컬럼들을 인덱스로 사용할 것인지 여부 (default: True)

// as _ index 하나의 새로운 컬럼으로 설정할 것인지, 분할 기준 컬럼들을 볼때.. replace 등을 쓸수도 있다. -> 상황에 맞게 사용하면 된다.

 - 여러 개의 집계 함수나 사용자 정의 함수를 쓰고 싶다면 agg 함수를 사용해야 한다.

 

* pivot_table 과 groupby 의 차이점

// 내용상으로는 차이가 없다.

// 하지만, 출력물에는 차이가 있다.

 - pivot_table 과 groupby 모두 조건부 통계량을 기준으로 데이터를 집계한다는 점에서 완전히 동일하다.

 - 하지만 출력물 구조의 차이가 있으므로, 상황에 맞는 함수 선택이 필요하다.

 - 보통은 출력 결과 자체가 결과물인 경우에는 pivot_table 을, 중간 산출물인 경우에는 groupby 를 사용한다.

 

* 실습

// 해석하는 것이 중요하다. 쇼핑몰 유형에 따른 수량의 평균이다라는 것을 생각하고 진행하면 된다.

// False 는 dataframe 으로 반환하고, True 일 경우에는 index 를 가지는 Series 형태로 return 된다.

 

// 간단하게 함수를 만들어서 사용할 수도 있다. agg 에 넣을 수 있다.

// multiindex 이다.

 

// pandas.DataFrame.groupby 의 documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=<object object>, observed=False, dropna=True)

Parameters

bymapping, function, label, or list of labels

Used to determine the groups for the groupby. If by is a function, it’s called on each value of the object’s index. If a dict or Series is passed, the Series or dict VALUES will be used to determine the groups (the Series’ values are first aligned; see .align() method). If an ndarray is passed, the values are used as-is determine the groups. A label or list of labels may be passed to group by the columns in self. Notice that a tuple is interpreted as a (single) key.

axis{0 or ‘index’, 1 or ‘columns’}, default 0

Split along rows (0) or columns (1).

levelint, level name, or sequence of such, default None

If the axis is a MultiIndex (hierarchical), group by a particular level or levels.

as_indexbool, default True

For aggregated output, return object with group labels as the index. Only relevant for DataFrame input. as_index=False is effectively “SQL-style” grouped output.

sortbool, default True

Sort group keys. Get better performance by turning this off. Note this does not influence the order of observations within each group. Groupby preserves the order of rows within each group.

group_keysbool, default True

When calling apply, add group keys to index to identify pieces.

squeezebool, default False

Reduce the dimensionality of the return type if possible, otherwise return a consistent type.

Deprecated since version 1.1.0.

observedbool, default False

This only applies if any of the groupers are Categoricals. If True: only show observed values for categorical groupers. If False: show all values for categorical groupers.

New in version 0.23.0.

dropnabool, default True

If True, and if group keys contain NA values, NA values together with row/column will be dropped. If False, NA values will also be treated as the key in groups

New in version 1.1.0.

 

// groupby 의 parameter 또한 다양하게 존재한다. dropna 의 경우에도 자주 사용하는 것 중에 하나이다.

 


 

[01. Part 1) 데이터 핸들링 Chapter 05. 보고 싶은 데이터 찾아보기 - 데이터 정렬과 인덱싱 - 01. 데이터 정렬]

 

* 리스트 및 튜플 정렬

 - sort: 리스트 및 튜플 자체를 정렬 (return 값이 없음)

  . reverse : 내림차순으로 정렬할 것인지 여부를 결정하는 매개 변수

  . Pandas 에서 inplace = True 로 설정한 것과 같다고 볼 수 있다.

 

 - sorted: 정렬된 리스트 및 튜플을 반환

  . reverse : 내림차순으로 정렬할 것인지 여부를 결정하는 매개 변수

  . key : 정렬 기준 함수 (주로 lambda 함수를 사용)

// lambda 는 길이가 길지 않기 때문에 lambda 를 사용한다.

 

* 실습

// L.sort( ) 한다고 해서 출력이 안된다.

// L 을 별도로 찍어줘야 한다.

 

// lambda 를 이용해서 어떤 요소를 기준으로 정렬할 수가 있다.

// lambda 를 abs(절대값) 을 기준으로 정렬하는 것이다. 3에 가까울수록 앞쪽으로 정렬된다.

// reverse = True 을 줘서 길이를 기준으로 내림차순 정렬하는 것이다.

 

* Series 정렬

 - sort_values 를 사용하면 Series를 손쉽게 정렬할 수 있다.

 - 주요 입력

  . ascending: 오름차순으로 정렬할 것인지 여부

// True: 오름 차순, False: 내림 차순

  . key : 정렬 기준 함수 (주로 lambda 함수를 사용)

  . na_position -> 결측이 있는 경우 어디에 배치할 것인지 결정 {first, last}

 

* 실습

// default 값들은 ascending = True 내림차순, key = None, na_postion = last

// na_position = last 라는 것은 결측들은 맨 뒤로 가게 된다.

// na_postion = first 로 바꾸면 결측들이 위에서 부터 나오게 된다.

 

* Series 요약 함수

 - value_counts : Series의 구성 요소의 빈도를 순서대로 출력하는 것이다.

  . ascending : 오름차순으로 정렬할 것인지 여부

  . normalize: 빈도 대시 비율을 출력할 것인지 여부

 - unique : Seried에 포함된 유니크한 값을 출력

  . 출력 결과의 데이터 타입: ndarray

  . 범주형 변수와 연속형 변수를 판단하는데 사용 가능하다.

// set 함수와 굉장히 유사하게 작동된다.

// unique 에는 데이터가 많다면 연속형, 적으면 범주형이라고 볼 수 있다.

 

* 실습

// index 는 value 이고, 뒤에는 count를 나타내는 것이다.

// value_count( ) 는 범주형 데이터에서 쓰는 것이 더 좋다.

 

// value count 를 더하고 전체를 나눠서.. normalize

// value_count 에서는 결측치가 포함이 안되는데, unique에서는 NaN 이 포함된다.

// len -> 로 작으면 범주형.. 많으면 연속형이라고 이해하면 된다.

 

// pandas.Series.value_counts 에 대한 Dcoumnetation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.value_counts.html

Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)

Parameters

normalizebool, default False

If True then the object returned will contain the relative frequencies of the unique values.

sortbool, default True

Sort by frequencies.

ascendingbool, default False

Sort in ascending order.

binsint, optional

Rather than count values, group them into half-open bins, a convenience for pd.cut, only works with numeric data.

dropnabool, default True

Don’t include counts of NaN.

 

 

* DataFrame 정렬

 - sort_values 를 사용하면 DataFrame도 손쉽게 정렬할 수 있다.

 - 주요입력

  . by  : 정렬 기준 컬럼 (목록)

// DataFrame은 여러개의 데이터가 모여있기 때문에 by로 정해줘야 한다.

  . ascending : 오름차순으로 정렬할 것인지 여부

  . key: 정렬 기준 함수 (주로 lambda 함수를 사용)

  . na_position : 결측이 있는 경우 어디에 배치할 것인지 결정 {first, last}

 

 

* 실습

// by = 'A' 를 기준으로 정렬한다는 것이다... A가 작은순서대로 정렬이 된다.

// [c b] C를 먼저 기준으로 정렬하고 난뒤에 B를 기준으로 정렬한다.

 

// pandas.DataFrame.sort_values 에 대한 Documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

Parameters

bystr or list of str

Name or list of names to sort by.

  • if axis is 0 or ‘index’ then by may contain index levels and/or column labels.

  • if axis is 1 or ‘columns’ then by may contain column levels and/or index labels.

Changed in version 0.23.0: Allow specifying index or column level names.

axis{0 or ‘index’, 1 or ‘columns’}, default 0

Axis to be sorted.

ascendingbool or list of bool, default True

Sort ascending vs. descending. Specify list for multiple sort orders. If this is a list of bools, must match the length of the by.

inplacebool, default False

If True, perform operation in-place.

kind{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’

Choice of sorting algorithm. See also ndarray.np.sort for more information. mergesort is the only stable algorithm. For DataFrames, this option is only applied when sorting on a single column or label.

na_position{‘first’, ‘last’}, default ‘last’

Puts NaNs at the beginning if first; last puts NaNs at the end.

ignore_indexbool, default False

If True, the resulting axis will be labeled 0, 1, …, n - 1.

New in version 1.0.0.

keycallable, optional

Apply the key function to the values before sorting. This is similar to the key argument in the builtin sorted() function, with the notable difference that this key function should be vectorized. It should expect a Series and return a Series with the same shape as the input. It will be applied to each column in by independently.

New in version 1.1.0.

 

 

* DataFrame 중복 제거

 - drop_duplicates 함수를 사용하면 중복이 있는 행을 제거할 수 있다.

 - 주요 입력

  . subset: 중복 기준을 판단하는 컬럼 (목록)

  . keep: 중복이 있는 어느 부분을 남길 것인지 결정 {'first', 'last', 'false'}

  .. first : 첫 번째 행을 남김

  .. last : 마지막 행을 남김

  .. false : 중복 행을 모두 제거

 

* 실습

// A를 기준으로 중복된 값 제거 A를 기준으로 unique 한 값에 따라서 남는다. Default 가 first 이므로 첫행이 살아 있는 것이다.

 

// pandas.DataFrame.drop_duplicates 의 documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)

Parameters

subsetcolumn label or sequence of labels, optional

Only consider certain columns for identifying duplicates, by default use all of the columns.

keep{‘first’, ‘last’, False}, default ‘first’

Determines which duplicates (if any) to keep. - first : Drop duplicates except for the first occurrence. - last : Drop duplicates except for the last occurrence. - False : Drop all duplicates.

inplacebool, default False

Whether to drop duplicates in place or to return a copy.

ignore_indexbool, default False

If True, the resulting axis will be labeled 0, 1, …, n - 1.

New in version 1.0.0.

 

// Sorting HOW TO 의 Documentation

docs.python.org/3/howto/sorting.html

 

 

[01. Part 1) 데이터 핸들링 Chapter 05. 보고 싶은 데이터 찾아보기 - 데이터 정렬과 인덱싱 - 02. 인덱서를 활용한 인덱싱]

// 데이터 시리즈를 할때 한번 했었지만 다시 리마인드 한다는 생각으로, 하지만, 중요한 내용이기때문에. 다시 한번 상기

 

* 인덱싱과 슬라이싱 (remind)

 - 판다스의 객체는 암묵적인 인덱스(위치 인덱스)와 명시적인 인덱스라는 두 종류의 인덱스가 있어, 명시적인 인덱스를 참조하는 loc 인덱서와 암묵적인 인덱스를 참조하는 iloc 인덱서가 존재한다.

// 암묵적..인덱스는 사용자가 설정한 것이 아니고, 명시적 인덱스는 사용자가 직접 설정한 것이라고 이해하면 된다.

 

// 데이터프레임일때는 리스트나 컬럼으로 접근

 

* 값 변경하기 (remind)

 - 인덱서를 사용하여 조회한 값을 직접 변경할 수 있다.

// 판다스에 있는 자료를 바꿀 때는 반드시 인덱서를 사용해야 한다.

// 이 외에도 방법은 있지만, 반드시 사용해야 한다고 기억해야 한다.

// loc[c, col2] 으로도 동일한 기대값을 가질 수 있다.

 

* 인덱서를 사용해야 하는 이유

 - DataFrame의 값을 바꾸는 경우에는 가장 자주 흔히 보는 경고로 SettingWithCopyWarning이 있다.

// warning 은 많이 보아왔다.

 - df['A'] 는 view를 반환하고, df.loc['A'] 는 copy된 값을 반환한다.

// loc[a] 에 저장하면 df 자체가 바뀔 수 없고, 값을 바꾸게 되면 df 자체가 바뀐다.

  . view 를 반환한 결과를 바꾸는 경우에는 원본 자체도 변경이 일어날 수 있다.

  . copy를 반환한 결과를 바꾸더라도 원본에는 변경이 없다.

 - 따라서 view를 반환하지 않도록 가능하면 인덱서를 사용해야만, 사용자의 의도대로 DataFrame을 변경할 수 있다.

 


 

[파이썬을 활용한 데이터 전처리 Level UP-Comment]
groupb_by 함수의 경우에는 데이터 처리에 있어서 굉장히 많이 사용하는 것을 보아왔다. 어떤식으로 묶어서 보는냐에 따라서 다양한 insight 가 나오게 된다. 그래서 더욱더 어렵다. 그 모든것의 판단은..역시 경험? 하.. 어렵구만...

 

https://bit.ly/3m7bW22

 

파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online. | 패스트캠퍼스

데이터 분석에 필요한 기초 전처리부터, 데이터의 품질 및 머신러닝 성능 향상을 위한 고급 스킬까지 완전 정복하는 데이터 전처리 트레이닝 온라인 강의입니다.

www.fastcampus.co.kr

 

728x90
반응형
:
Posted by 패치#노트
728x90
반응형

[파이썬을 활용한 데이터 전처리 Level UP- 5 회차 미션 시작]

* 복습

 - read_csv, read_excel, to_csv, merge에 대해서 pandas의 간략한 기능들을 엿 볼 수 있었다.

 


 

[Chapter 04. 한 눈에 데이터 보기 - 데이터 통합 및 집계 - 02. concat을 이용한 데이터 통합]

* concat이 필요한 상황

 - 센서, 로그, 거래 데이터 등과 같이 크기가 매우 큰 데이터는 시간과 ID 등에 따라 분할되어 저장된다.

 - pandas.concat 함수를 사용하면 손쉽게 해결 할 수가 있다.

// 다시 말해서, 분할된 concat을 이용해서 손쉽게 정리 할 수 있다.

 - 통합해야 하는 데이터가 많은 경우에는 빈 데이터프레임을 생성한 뒤, 이 데이터 프레임과 for문을 사용하여 불러온 데이터를 concat 함수를 이용하여 효율적으로 통합할 수 있다.

// concat 은 list 형태로 입력받아서 동시에 여러개를 입력 받을 수 있다는 것이 특징이다.

 

 

* pandas.concat

 - 둘 이상으 데이터 프레임을 이어 붙이는데 사용하는 함수이다.

 - 주요 입력 사항

  . objs -> DataFrame 을 요소로 하는 list (입력 예시: [df1, df2]) 로 입력 순서대로 병합이 된다.

  . ignore_index -> True 면 기존 인덱스를 무시하고 새로운 인덱스를 부여하며, False 면 기존 인덱스를 사용한다는 것이다.

// ignore 는 행단위

  . axis -> 0 이면 row 단위로 병합을 수행하며, 1 이면 column 단위로 병합을 수행한다.

 

 

* os.listdir

 - os.listdir(path) -> path 상에 있는 모든 파일명을 리스트 형태로 반환한다.

// 다시 말해서, 파일명 들을 순회 하면서 list 형태로..

 

* xlrd를 이용한 엑셀 시트 목록 가져오기

 - xlrd 는 엑셀 데이터를 다루기 위한 모듈로, 엑셀 내의 반복 작업을 하기 위해 주로 사용한다.

// 데이터 분석을 위해서는 잘 사용되지 않는 함수이다.

// wb.sheet. 시트 목록을 불러와서 반환해주기 때문에 이름을 효율적으로 사용할 수 있다.

 

* 실습

// column 의 경우에는 날리면서 0, 1, 2 가 자동으로 들어가기 때문에... column 형태 일때는 False로...

// 현재 dataframe.의 모양은 df.shape 으로 확인 가능

// for 문을 이용한 데이터 병합 (코드가 김, 상대적으로 비효율적임, 메모리 문제가 생길 가능성이 적음)

// 다시 말해서 상대적으로 쉬운 방법이라고 할 수 있다.

 

// list comprehension을 이용한 데이터 통합, 코드가 짧고, 효율적이지만, 메모리 문제가 생길 수 있음

// 하나의 리스트로 입력을 한다음에 concat으로 합치면 된다.

// 리스트상에 모든 데이터 프레임이 저장되어 있어야 되므로 메모리상에 문제가 된다.

// for 문은 하나가 돌고, 기존에 있던것은 삭제가 될 것이다. 하지만 list comprehension 은 계속해서 남아있어서 메모리 문제가 된다. 그래서 짧은 data는 list comprehension 으로 하는 것이 더 좋다.

 

// 엑셀에서 시트를 불러 오는 것은 sheetnames = wb.sheet_names( ) 을 통해서 리스트로 저장한다.

 

// pandas.concat 에 대한 documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html

pandas.concat(objs: Union[Iterable[‘DataFrame’], Mapping[Label, ‘DataFrame’]], axis='0', join: str = "'outer'", ignore_index: bool = 'False', keys='None', levels='None', names='None', verify_integrity: bool = 'False', sort: bool = 'False', copy: bool = 'True')

-> DataFrame

pandas.concat(objs: Union[Iterable[FrameOrSeries], Mapping[Label, FrameOrSeries]], axis='0', join: str = "'outer'", ignore_index: bool = 'False', keys='None', levels='None', names='None', verify_integrity: bool = 'False', sort: bool = 'False', copy: bool = 'True')

-> FrameOrSeriesUnion

 

//솔직히 위는 둘다 동일한 것 같다.

Parameters

objs a sequence or mapping of Series or DataFrame objects

If a mapping is passed, the sorted keys will be used as the keys argument, unless it is passed, in which case the values will be selected (see below). Any None objects will be dropped silently unless they are all None in which case a ValueError will be raised.

 

axis {0/’index’, 1/’columns’}, default 0

The axis to concatenate along.

// axis 는 default가 0 이다. 굳이 작성하지 않으면 row 형태로 밑으로 붙는 것이다.

 


 

[Chapter 04. 한 눈에 데이터 보기 - 데이터 통합 및 집계 - 03. 기초 통계 함수를 활용한 데이터 집계]

* 다양한 기초 통계 함수

 - 기초 통계 함수는 DataFrame와 Series에 대해 모두 정의되어 있다.

  . sum -> 합계 계산

  . mean -> 평균 계산

  . std -> 표준편차 계산

// std, standard devation

  . var -> 분산 계산

  . quantile -> 사분위수 계산

  . min -> 최소값 계산

  . max -> 최대값 계산

// dataframe, series 의 method 로 활용 할 수 있다.

 

* Tip. Axis 키워드

 - axis 키워드는 numpy 및 pandas의 많은 함수에 사용되는 키워드로, 연산 등을 수행할 때 축의 방향을 결정하는 역할을 한다.

 - axis 가 0 이면 row 을, 1 이면 column 을 나타내지만 이렇게만 기억하면 논리적으로 이상한 점이 존재한다.

// 대부분의 열 기준 합이라는 것은 row 끼리, column 끼리

 

// concat 함수가 대표적인 함수이다.

 

* describe 함수

 - 열별로 대표적인 기초 통계를 반환 (count, mean, std, min 25%, 50%, 75%, max)

// count 는 결측치를 제외한 결과를 보여준다.

 

// quantile(0.1) 상위 10% 값을 나타내는 것이다. 상위 10%라는 것은 작은 값 기준 10%라는 것이다.

 

// 데이터분석을 할때 어느정도로 분포가 되어있는지를 확인할 때 describe( ) 를 사용한다.

 

// pandas.DataFrame.describe 에 대한 documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html

DataFrame.describe(percentiles=None, include=None, exclude=None, datetime_is_numeric=False)

Generate descriptive statistics.

Descriptive statistics include those that summarize the central tendency, dispersion and shape of a dataset’s distribution, excluding NaN values.

Analyzes both numeric and object series, as well as DataFrame column sets of mixed data types. The output will vary depending on what is provided. Refer to the notes below for more detail.

// 결측치는 제외하고 값들을 보여 준다...

 

Parameters

percentileslist-like of numbers, optional

The percentiles to include in the output. All should fall between 0 and 1. The default is [.25, .5, .75], which returns the 25th, 50th, and 75th percentiles.

// 몇 번째에 해당하는지에 대한 사분위를 보여주는 것이다.

 

include‘all’, list-like of dtypes or None (default), optional

A white list of data types to include in the result. Ignored for Series. Here are the options:

  • ‘all’ : All columns of the input will be included in the output.

  • A list-like of dtypes : Limits the results to the provided data types. To limit the result to numeric types submit numpy.number. To limit it instead to object columns submit the numpy.object data type. Strings can also be used in the style of select_dtypes (e.g. df.describe(include=['O'])). To select pandas categorical columns, use 'category'

  • None (default) : The result will include all numeric columns.

excludelist-like of dtypes or None (default), optional,

A black list of data types to omit from the result. Ignored for Series. Here are the options:

  • A list-like of dtypes : Excludes the provided data types from the result. To exclude numeric types submit numpy.number. To exclude object columns submit the data type numpy.object. Strings can also be used in the style of select_dtypes (e.g. df.describe(include=['O'])). To exclude pandas categorical columns, use 'category'

  • None (default) : The result will exclude nothing.

datetime_is_numericbool, default False

Whether to treat datetime dtypes as numeric. This affects statistics calculated for the column. For DataFrame input, this also controls whether datetime columns are included by default.

New in version 1.1.0.

 



[Chapter 04. 한 눈에 데이터 보기 - 데이터 통합 및 집계 - 04. pivot 을 이용한 데이터 집계]

* 피벗 테이블

 - pivot table 은 데이터를 조건에 따른 변수들의 통계량을 요약한 테이블이다.

// 큰 데이터를 한 테이블로 나타낸다.

 

* pandas.pivot_table

 - 주요 입력

  . data -> 데이터 프레임

  . index -> 행에 들어갈 조건

  . columns -> 열에 들어갈 조건

  . values -> 집계 대상 컬럼 목록

  . aggfunc -> 집계 함수

 

* 실습

// index 제품, cloumns = , vlaues = , afffunc = 으로 ..하면 제품에 따른 것을 구하는 것이다.

// values 는 두개를 넣을 수도 있다. list 형태로 넣어야 된다.

 

// pandas.pivot_table 의 documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html

pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

// 각각의 parameter 들이 받을 수 있는 type 은 아래와 같다.

index column, Grouper, array, or list of the previous

columnscolumn, Grouper, array, or list of the previous

aggfuncfunction, list of functions, dict, default numpy.mean

 

// 몇 개의 Example

table = pd.pivot_table(df, values='D', index=['A', 'B'],
                    columns=['C'], aggfunc=np.sum)
table = pd.pivot_table(df, values='D', index=['A', 'B'],
                    columns=['C'], aggfunc=np.sum, fill_value=0)
table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],
                    aggfunc={'D': np.mean,
                             'E': np.mean})
table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],
                    aggfunc={'D': np.mean,
                             'E': [min, max, np.mean]})

 


[파이썬을 활용한 데이터 전처리 Level UP-Comment]
pivot table 도 전처리에서 많이 사용하는 것 같다. aggregation 의 다양한 형태들...

 

https://bit.ly/3m7bW22

 

파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online. | 패스트캠퍼스

데이터 분석에 필요한 기초 전처리부터, 데이터의 품질 및 머신러닝 성능 향상을 위한 고급 스킬까지 완전 정복하는 데이터 전처리 트레이닝 온라인 강의입니다.

www.fastcampus.co.kr

 

728x90
반응형
:
Posted by 패치#노트
728x90
반응형

[파이썬을 활용한 데이터 전처리 Level UP- 4 회차 미션 시작]

* 복습

 - pandas 에서는 dataframe 및 series 에 대해서 배울 수 있었다. 간단한 head( ), 등 데이터를 둘러 보는 것도 함께 둘러 볼 수 있었다.

 - 데이터불러오기는 말 그대로 데이터를 어떻게 불러오는가에 대한 내용이었으며, os 를 이용한 path, 그리고 with 함수 등을 이용하는 것에 대해서 배울 수 있었다.

 



[Chapter 03. 재료 준비하기 - 데이터 불러오기 - 02. read_csv와 to_csv를 사용한 데이터 불러오기 및 내보내기]

 

* read_csv 함수를 이용한 데이터 불러오기

 - pandas의 read_csv 함수는 테이블 형태의 데이터를 불러오는데 효과적인 함수임

#pd.read_csv(filepath, sep, header, index_col, usecols, parse_dates, nrows)

 - filepath : 파일 경로 및 이름을 지정할 수 있다.

 - sep: 구분자(default : ' , ')

// csv 는 comma 를 기본적으로 구분자로 가진다. 만약 바꾸고 싶으면 sep 를 바꿔주면 될 것이다.

 - header : 헤더의 위치로 None을 입력하면 컬럼명이 0, 1, 2, .... 로 자동 부여됨 (default: 'infer')

 - index_col : 인덱스의 위치 (default : None)

 - usecols : 사용할 컬럼 목록 및 위치 목록 (데이터가 큰 경우에 주로 사용)

// 데이터가 너무 커서 column 별로 데이터를 처리 할 때 많이 사용한다.

 - nrows : 불러올 행의 개수 ( 데이터가 큰 경우에 주로 사용)

// 이것 역시 데이터가 큰 경우에 주로 사용하게 된다.

 

* 실습

 - 파일 이름만 해도 default로 데이터가 들어간다.

 - 첫번째 값들이 header 로 입력되어 있다.

 - tsv 데이터 불러오기

 - read_csv 로도 .txt 파일을 불러 올 수 있다. 구분자 sep 을 \t 으로 지정해준다.

 - header 가 없는 csv 파일도 불러 올수가 있다. 만약에 header 가 없다면 header keyword 를 header = None 으로 설정해주면 된다.

import pandas as pd

df = pd.read_csv('file.csv', header = None)

 - 만약에 header = None 으로 설정하지 않으면 첫행이 무조건 header 를 입력한다.

만약에 header 가 3번째 부터 시작하면 header=3 으로 입력하면된다.

 

 - df.columns = [이름] 을 통해서 컬럼 이름을 바꿀 수 있다.

 - usecols 를 이용해서 큰 데이터를 불러 올 수 있다. usecols=[0, 1, 5, 10] 등 으로 column index 를 입력하거나 이름을 입력해서 불러 올 수 있다.

 - index_col 는 반드시 설정해줘야 한다.

 

// read_csv 도 pandas method 중 하나이고, 아래에 documentation 이 있다.

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

// Read a comma-separated values (csv) file into DataFrame. -> comma-separated values (CSV) 의 약자

// encoding 도 많이 사용을 하느데, utf-8, cpc949, euc_kr 등 많이 사용한다.

// 읽을 때도 그렇지만 저장할때는 encoding 이 더 중요하다. 크롤링 등을 통해서 얻어온 자료를 자동으로 저장하다가 낭패를 본 경험도 많이 있다.

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal='.', lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)

 

encoding : str, optional

Encoding to use for UTF when reading/writing (ex. ‘utf-8’). List of Python standard encodings .

docs.python.org/3/library/codecs.html#standard-encodings

// encoding list 에는 korean 에 해당하는 것들이 아래와 같다.

Codec

Aliases

Languages

cp949

949, ms949, uhc

Korean

euc_kr

euckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001

Korean

iso2022_jp_2

iso2022jp-2, iso-2022-jp-2

Japanese, Korean, Simplified Chinese, Western Europe, Greek

iso2022_kr

csiso2022kr, iso2022kr, iso-2022-kr

Korean

johab

cp1361, ms1361

Korean

utf_8

U8, UTF, utf8, cp65001

all languages

utf_8_sig

 

all languages

* to_csv 함수를 이용한 데이터 저장하기

 - pandas의 to_csv 함수는 테이블 형태의 데이터를 저장하는데 효과적인 함수임

# df.to_csv(filepath, sep, index)

 - filepath -> 파일의 경로 및 이름을 저장한다. 확장자를 포함해줘야 하다.

 - sep -> 구분자는 default 값으로 ' , ' 가 자동으로 지정되어 있다.

 - index -> index 를 저장할지에 대한 여부를 묻는 것이다.

 

* 실습

 - df.to_csv 를 통해서 저장한다. 확장자는 어떤것이든 상관없이 저장은 가능하나 반드시 설정해야 한다.

 - index = False 함수를 통해서 인덱스를 포함하지 않는 것으로 설정할 수 있다.

 - 인덱스를 포함하게 되면 cell이 비어 있어서 추후에 불러와서 분석하기가 어렵다. 그래서 컬럼으로 인식시켜서 진행 할때가 많다.

 

// 아래 documentation 참조

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html

 

DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal='.', errors='strict')

 


[Chapter 03. 재료 준비하기 - 데이터 불러오기 - 03. excel 데이터 불러오기 및 내보내기]

 

* read_excel 함수를 이용한 데이터 불러오기

 - pandas의 read_excel 함수는 .xlsx 포맷의 데이터를 불러오는데 효과적인 함수이다.

# pd.read_excel(filepath, sheet_name, header, index_col, usecols, parse_dates, nrows)

 - filepath -> 파일 경로 및 이름을 불러 온다.

 - shee_name -> 불러오고자 하는 sheet 의 이름 및 위치

// sheet_name 을 설정하지 않으면 보통 맨 앞에 sheet를 불러오게 된다.

 - header -> 헤더의 위치로 None을 입력하면 컬럼명이 0~~~ 로 숫자.. 자동 부여된다. (default : 'infer')

 - index_col -> 인덱스의 위치 (default: Noen)

 - usecols -> 사용할 컬럼 목록 및 우치 목록 (데이터가 큰 경우에 주로 사용하게 된다.)

 - nrows -> 불러올 행의 개수( 데이터가 큰 경우)

 - skiprows -> 불러오지 않을 행의 위치 (리스트)

// skiprows .. 엑셀을 데이터를 저장한 경우가 많아서 그래서 꾸며진 cell 등을 피할려고 할 때 사용한다.

 

* 실습

 - 보통 첫번째 sheet 는 요약 정보를 보여 주기 때문에 target sheet 를 정해주는 것이 좋다.

 - skiprows 는 리스트 형태로 저장해야 한다. 그래서 range(6) 으로 저장해줘야 한다.

 - use_col 을 이용해서 할 수 도 있다.

 

// 아래는 documentation 참조

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html

pandas.read_excel(*args, **kwargs)

 

engine str, default None

If io is not a buffer or path, this must be set to identify io. Supported engines: “xlrd”, “openpyxl”, “odf”, “pyxlsb”, default “xlrd”. Engine compatibility : - “xlrd” supports most old/new Excel file formats. - “openpyxl” supports newer Excel file formats. - “odf” supports OpenDocument file formats (.odf, .ods, .odt). - “pyxlsb” supports Binary Excel files.

// engine 의 경우에는 openpyxl 을 자주 사용했었는데.. 정확히 어떠한 것이 더 유리한지를 모르겠다. memory 등 time loose 가 너무 심한건 아닌지.. 중복 코드도 의심해봐야 한다.

 

date_parserfunction, optional

Function to use for converting a sequence of string columns to an array of datetime instances. The default uses dateutil.parser.parser to do the conversion. Pandas will try to call date_parser in three different ways, advancing to the next if an exception occurs: 1) Pass one or more arrays (as defined by parse_dates) as arguments; 2) concatenate (row-wise) the string values from the columns defined by parse_dates into a single array and pass that; and 3) call date_parser once for each row using one or more strings (corresponding to the columns defined by parse_dates) as arguments.

// date_parser 도 은근히 많이 사용하는 option 중에 하나 인것 같은데..

 

* to_excel 함수

 - pandas의 to_excel 함수는 테이블 형태의 데이터를 저장하는데 효과적인 함수이다.

# df.to_excel(filepath, index, shee_name, mode)

 - filepath -> 파일 경로, 이름

 - index -> 인덱스를 저장할지 여부, True, False

 - sheet_name -> 시트 명 지정

// csv와 유사히지만 sheet 를 여러개를 저장할 수 있다는 것이 장점임

 

 - 여러 시트를 생성해야 하는 경우에는 excelwriter를 사용함.

// filepath 위치 대신해서 써주면 된다.

# writer = pd.ExcelWriter(xlsx file)

# df1.to_excel(writer, sheet_name = 'sheet1')

# df2.to_excel(writer, sheet_name = 'sheet2')

 

* 실습

// 여기서도 with 함수를 쓸 수 있다. open 함수랑 동일 한 기능을 사용한다고 보면 된다.

 

// to_excel documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_excel.html

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)

// 여기에 있느 to_excel의 parmeters 들은 많이 사용하는 것 같다...

 

[Chapter 04. 한 눈에 데이터 보기 - 데이터 통합 및 집계 - 01. merge를 이용한 데이터 통합]

 

* merge가 필요한 상황

 - 효율적인 데이터 베이스 관리를 위해서, 잘 정제된 데이터일지라도 데이터가 key 변수를 기준으로 나뉘어 저장되는 경우가 매우 흔하다.

// 공유하고 있는 key를 바탕으로 merge를 사용할 수가 있다.

 

* pandas.merge

// SQL로 치면 JOIN을 이용하는 것과 동일하다.

 - key 변수를 기준으로 두 개의 데이터 프레임을 병함(join) 하는 함수이다.

 - 주요 입력

  . left -> 통합 대상 데이터 프레임1

  . right -> 통합 대상 데이터 프레임2

  . on -> 통합 기준 key 변수 및 변수 리스트 (입력을 하지 않으면, 이름이 같은 변수를 key 로 식별함)

// on 을 반드시 써주는 것이 좋다.

  . left_on -> 데이터 프레임 1의 key 변수 및 변수 리스트

  . right_on -> 데이터 프레임2의 key 변수 및 벼수 리스트

  . left_index -> 데이터 프레임1의 인덱스를 key 변수로 사용할 지 여부

  . right_index -> 데이터 프레임2의 인덱스를 key 변수로 사용할 지 여부

 

* 실습

 - Tip.. engine = 'python' 은 OSError 를 피하기 위해서 사용하는 것인데. 느려진다는 단점이 있다. 하지만 그걸 예방하기 위해서 사용한다.

 - 칼럼명이 같아서 key를 employee 로 인식함.

 - on 을 사용해서 각각의 데이터 프레임을 사용할 수도 있고, list 형태로도 만들 수 있다.

 - employee 와 name 이 colmun name 만 다르고 내용은 동일하다. 그래서 left_on, right_on 을 사용해서, merge를 할 수가 있다. 하지만, 이런 경우에는 각각의 key column 이 살아 있기 때문에... 지워져야 한다.

 - dataframe 에서 컬럼은 axis =1 을 지정해줘야 한다.

 - 불러 올때 index_col = 으로 설정해서 인덱스로 불러 올 수 있다.

 - 이렇게 되면 right_index = True 값으로 정해줘야지 동일한 key 를 가지는 merge를 사용할수가 있다. 이런 경우에는 위에서 처럼 index 를 사용하지 않을 때 각각 생겨났던 column 이 생겨 나지 않는다. 이건 당연한 것이다. 왜냐하면 index 는 어떤 column 이 아니기 때문이다.

 

// pandas merge documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes='_x', '_y', copy=True, indicator=False, validate=None)

// Merge DataFrame or named Series objects with a database-style join. -> DB 스타일의 join.

 

how{‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘inner’

Type of merge to be performed.

  • left: use only keys from left frame, similar to a SQL left outer join; preserve key order.

  • right: use only keys from right frame, similar to a SQL right outer join; preserve key order.

  • outer: use union of keys from both frames, similar to a SQL full outer join; sort keys lexicographically.

  • inner: use intersection of keys from both frames, similar to a SQL inner join; preserve the order of the left keys.

// how 도 굉장히 많이 쓰는 merge parameter의 한 종류

 

[파이썬을 활용한 데이터 전처리 Level UP-Comment]

지난 시간에 이어서 데이터를 읽어오는 read_csv, read_excel 등과 각각 저장하는 것에 대해서 배워보았다. merge 함수도 pandas에서 굉장히 사용 빈도가 높은 함수이므로 사용방법에 대해서 좀 더 알아두면 좋을 것 같다.

 

https://bit.ly/3m7bW22

 

파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online. | 패스트캠퍼스

데이터 분석에 필요한 기초 전처리부터, 데이터의 품질 및 머신러닝 성능 향상을 위한 고급 스킬까지 완전 정복하는 데이터 전처리 트레이닝 온라인 강의입니다.

www.fastcampus.co.kr

 

728x90
반응형
:
Posted by 패치#노트
728x90
반응형

[파이썬을 활용한 데이터 전처리 Level UP- 3 회차 미션 시작]

* 복습

 - dictionary 데이터 구조는 어찌보면 데이터 처리를 하기 위한 기본적으로 알아야 하는 도구이다.

 - iteration 하는 for 문 itertools 에 대해서도 새롭게 배울 수 있었다. itertools 에 대한 것은 좀 더 많이 사용해서 활용의 빈도를 높여 봐야 할 것 같다.

 - comprehension 은 처리 속도 등은 참 좋은데.... 막상 잘 사용하는 것이 아직까지는 낯설다...

 - numpy. 는 pandas와는 뗄레야 뗄 수 없는 관계라고 생각한다. 자주 자주 사용하는 것만이... 최대한 익숙해지는 것 만이 방법이겠지..

 

Chapter 02. 데이터를 어떻게 표현할 것인가 - 파이썬 주요 데이터 구조 - 05. Pandas의 데이터 구조

* 자료형 1. Series

 - Series는 1차원 배열 자료형으로 인덱스와 값의 쌍으로 구성되어 있다.

 - 키를 인덱스로, value를 데이터로 .. 사전을 이용한 정의

 - 리스트를 이용한 정의를 할 수 있다.

 => 데이터 자체가 ndarray 형태로 이뤄져 있다.

 - Series는 ndarray에 인덱스가 부여된 형태의 데이터

 - Series에도 유니버설 함수와 브로드캐스팅 등이 적용됨

 

* 실습

 

import pandas as pd

 - pandas 로 import 해야 한다. pd는 약속된 정의이다.

 - 만약 인덱스를 설정하지 않으면 index는 0, 1, 2, 3... 등으로 자동으로 정의 된다.

 - series는 values라는 attributerk 이걸로 각각의 데이터가 값을 알 수가 있다.

 - series의 index 를 통해서 인덱스를 확인 할 수가 있다.

 - 유니버셜 함수와 브로드캐스팅이 적용되어 있다.

 

// 실습에서는 간략한 내용들에 대해서 알아봤고, 구글링을 통해서 아래와 같이 Data Cheat Sheet 를 얻을 수 있었다.

pandas.pydata.org/Pandas_Cheat_Sheet.pdf

=> pandas 의 전반적인 기능에 대해서 간략하게 설명해주는 좋은 sheet 이다.

// pandas의 series에 대한 documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html

=> 여기에 보면 굉장히 많은 series class 에 대한 내용들이 나와있다.

One-dimensional ndarray with axis labels (including time series). => 딱보면 강사님이 말한데로 ndarray 를 기본 바탕으로 하고 있다고 보면 된다. 

class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
더보기

Parameters

dataarray-like, Iterable, dict, or scalar value

Contains data stored in Series.

Changed in version 0.23.0: If data is a dict, argument order is maintained for Python 3.6 and later.

 

indexarray-like or Index (1d)

Values must be hashable and have the same length as data. Non-unique index values are allowed. Will default to RangeIndex (0, 1, 2, …, n) if not provided. If both a dict and index sequence are used, the index will override the keys found in the dict.

dtypestr, numpy.dtype, or ExtensionDtype, optional

Data type for the output Series. If not specified, this will be inferred from data. See the user guide for more usages.

namestr, optional

The name to give to the Series.

copybool, default False

Copy input data.

=> 링크에 들어가서 살펴보면 상당히 많은 Attributes 들이 있는 것을 볼수 있다. 그중에서 자수 사용하는 것들은 몇 가지 정도가 아닐까 본다. 나도 아직 초보지만..ㅠ.ㅠ

T

Return the transpose, which is by definition self.

shape

Return a tuple of the shape of the underlying data.

size

Return the number of elements in the underlying data.

values

Return Series as ndarray or ndarray-like depending on the dtype.

 

* 자료형 2. DataFrame

 - DataFrame은 2차원 배열 자료형으로 값, 행 인덱스, 열 인덱스로 구성

 - series와 마찬가지로 사전을 이용한 정의 할 수 있고.

 - 데이터, 컬럼, 인덱스 따로 정의 할 수가 있다.

 - 각 행 단위로 정의 할수도 있다.

 

 - ndarrayd의 row index 와 columns index가 함께 부여된 형태라고 봐도 된다.

 - DataFrame은 ndarray에 행과 열 인덱스가 부여된 형태의 데이터

 - DataFrame은 하나 이상의 Series의 집합이라도 볼 수 있다.

 - series 의 집합이라고 보는 것이 일반적인 해석이다.

 

* 실습

 - pd.DataFrame 으로 만든다.

 - series와 마찬가지로, index 는 생략이 가능하다.

 - values도 따로 찍어 볼수가 있고, array 형태로 output 값을 낼 수가 있다.

 - index 는 행 인덱스를 출려해준다.

 - columns 는 Dataframe에 포함된 columns 을 보여준다.

 - 보통은 인덱스보다는 columns을 출력을 많이 한다.

 - dataframe의 type ( ) 을 확인해 보면 series의 자료형으로 볼수 있다.

 

// DataFrame에 대한 Documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
더보기

Two-dimensional, size-mutable, potentially heterogeneous tabular data.

Data structure also contains labeled axes (rows and columns). Arithmetic operations align on both row and column labels. Can be thought of as a dict-like container for Series objects. The primary pandas data structure.

 

Parameters

datandarray (structured or homogeneous), Iterable, dict, or DataFrame

Dict can contain Series, arrays, constants, or list-like objects.

Changed in version 0.23.0: If data is a dict, column order follows insertion-order for Python 3.6 and later.

Changed in version 0.25.0: If data is a list of dicts, column order follows insertion-order for Python 3.6 and later.

indexIndex or array-like

Index to use for resulting frame. Will default to RangeIndex if no indexing information part of input data and no index provided.

columnsIndex or array-like

Column labels to use for resulting frame. Will default to RangeIndex (0, 1, 2, …, n) if no column labels are provided.

dtypedtype, default None

Data type to force. Only a single dtype is allowed. If None, infer.

copybool, default False

Copy data from inputs. Only affects DataFrame / 2d ndarray input.

// 솔직히 pandas에서 dataframe을 빼면 속빈 강정아닌가? 어마무시하게 많이 쓰이는 데이터분석에서는 빠질수가 없다.

// attributes 및 method는 너무 많다... 패스

 

* 인덱싱과 슬라이싱

 - 판다스의 객체는 암묵적인 인덱스(위치 인덱스)와 명시적인 인덱스라는 두 종류의 인덱스가 있어, 명시적인 인덱스를 참조하는 loc 인덱서와 암묵적인 인덱스를 참조하는 iloc 인덱서가 존재한다는 것이다.

 - 암묵적인 인덱스는 자동으로 입혀진 인덱스라는 것이다.

 - loc를 이용해서 슬라이싱에서는 맨 뒤 값을 포함한다..  하지만, iloc의 경우에는 슬라이싱에서는 맨 뒤 값을 포함하지 않는 다는 것이다.

 - 데이터 프레임의 컬럼 선택은 array 를 선택하는 것과 같다는 의미이다.

df[col_name] or df[col_name_list]

- 위치를 알고 싶을 때는 iloc indexer를 많이 쓴다.

 

* 실습

 - loc => 사전에서 key를 가지고 value를 찾는 것과 완벽히 동일하다고 보면된다.

 - loc 슬라이싱은 앞위 모두 포함..명시적인 값

 - iloc 는 index number를 입력해준다. 맨뒤는 제외

 - column name으로만 접근하면 => series로만 알려준다. df['a']

 - column name list 로 접그하면 => dataFrame으로 알려준다. df[['a']]

 

* pandas의 값을 조회하기 (1/2)

 - 쥬피터 환경에서는 데이터 프레임 혹은 시리즈 자료를 갖는 변수를 출력할 수 있다.

 - Tip 1. pd.set_option('display.max_rows', None)을 사용하여, 모든 행을 보이게 할수 이 있음.

 (None 자리에 숫자가 들어가면, 출력되는 행의 개수가 설정된다.)

 - Tip 2. pd.set_option('display.max_columns', None) -> 모든 컬럼을 보이게 할 수 있음.

 

// 아래에는 이 옵션에 관한 documentation

pandas.pydata.org/pandas-docs/stable/reference/api/pandas.set_option.html

// 위 코드도 데이터분석할때 데이터를 더 넓게 보기 위해서 사용은 해봤는데. 주피터 노트북에서 잘 안 먹힐때도 많았다.

# Row, None 대신 숫자 가능
pd.set_option('display.max_rows', None)
# columns, None 대신 숫자 가능
pd.set_option('display.max_columns', None)

 

* 실습

 - 모든 정보를 보는 것은 memory의 낭비가 심하기 때문에 잘 사용하지 않는다. 비효율적이다... 절대로 이렇게 보는 것은 비추천방법이다.

 

* 값 조회하기 (2/2)

 - 데이터 크기 때문에, 아래 함수를 사용하여 데이터 일부만 확인하거나 요약 정보를 확인하는 것이 바람직하다.

 - DataFrame.head( n ) -> DataFrame 의 맨 앞 n개 행을 보여줌 (default: 5)

 - DataFrame.tail( n ) -> DataFrame 의 맨 뒤 n개 행을 보여줌 (default: 5)

// 위의 head( ) , tail( ) 은 엄청나게 자주 사용한다.

 

* 실습

 - df.head(10) 을 쓰면 10개의 행을 볼 수 있다.

 - columns

  . 기본적으로 보는 정보중 하나이다. DataFrame을 구성하는 컬럼명 집합을 보여준다.

 - dtypes

  . 어떤 자료형인지를 판단할 때 자주 쓴다.

 - 그룹별 통계, 시각화 등을 통해서도 값 등을 조회할 수가 있다.

// 난 dtypes 들 보다는 describe( ) , info( ) 등을 더 많이 사용하는 것 같기도 하다.

 

* 값 변경하기

 - 인덱서를 사용하여 조회한 값을 직접 변경할 수 있다.

 

* 실습

 - object 라는 값은 string으로 이해하면된다.

 - 보통 series 는 ndarrary의 특성을 그대로 가져 간다.

 

 

Chapter 03. 재료 준비하기 - 데이터 불러오기 - 01. 개요

 

* 경로 확인하기 및 설정하기

 - 파이썬에서 데이터를 불러오려면 반드시 경로와 확장자까지 포함시켜서 불러와야 함.

 - os module을 통해서 설정할 수 있다.

 - 경로를 설정함으로써 파일을 불러올 때마다 경로를 포함시키는 번거로움을 해결함

 - os module에 속한 함수를 사용하면 경로를 확인하고 설정할 수 있다.

  . os.getcwd( ) -> 현재 경로를 반환한다.

  . os.chdir(path) -> 현재 경로를 path로 설정할 수 있다.

 

* 경로 설정 Tip

 - 데이터 속성 - 위치 혹은 주소창에 있는 경로를 복사해서 붙여 넣어 손쉽게 경로를 설정할 수 있다.

 - \n 줄바꿈, \t tab

 - 이걸 인식이 안되게 하기 위해서는 아래와 같이 입력해야 한다.

 

* 실습

import os

 

 - os.getcwd( ) 현재 경로를 확인하는 코딩

 - 일반적으로는 주소창을 복사하는 것이 일반적이다.

 - 만약, 바탕화면. 처럼 이상하게 나오면 오른쪽 우클릭으로 위치를 찾아서 작성해줘야 한다.

 - r 을 포함해서 string으로 인식해줘야 한다.

 - getcwd( ) 으로 확인해보면 역 슬러쉬가 두개로 입력이 되어 있다.

// 아래는 참고 사이트

python101.pythonlibrary.org/chapter16_os.html

 

 

Chapter 03. 재료 준비하기 - 데이터 불러오기 - 02. open을 사용한 데이터 불러오기 및 내보내기

* open 함수를 이용한 파일 불러오기

 - 파이썬의 내장 함수인 open 함수를 사용하면 파일을 손쉽게 불러올 수 있다.

 - 정제되지 않는 형태의 데이터를 불러오는 경우에 주로 사용한다.

 - 보통 잘 정제되지 않은 경우이고, 잘 정제된 경우에는 csv 로 정리가 되어 있다.

 - 모드에서 크게 r (default), w, a가 있음

  . r: 읽기 (기존 파일을 읽어옴)

  . w: 쓰기 (새로운 파일을 

 - 파일 객체는 사용 후에 close 함수를 사용하여 닫아 줘야 한다.

 - 만약에 close를 사용하지 않으면 with를 사용한다.

 

* read / readline을 이용하여 데이터 불러오기

 - f.read( ) : 파일 f에 있는 모든 내용을 불러온다.

  . f 는 반드시 'r' 이나 'rb'로 불러와야 한다.

 // b 는 binary 의 약자이다.

 - 특정 문자로 기준으로 split을 할 수 있다.

 - str 을 모두 int로 바꾸거나 한꺼번에 바꿀때 많이 쓰인다.

 

* 실습

 - 불러온다음에는 반드시 닫아줘야 한다.

 - 파일이 정제되지 않고 읽혀져서 온다.

 - list comprehension 을 이용해서 데이터르 정제해야 한다.

 - 숫자로 바꿀 수 있는 것은 바꾸기 위한 함수이다. 첫줄에는 문자이다.

 - readline을 이용해서 데이터 불러오기

  . 한번 읽고 나면 그 line은 불러 올 수가 없다. 새로운 line은 새롭게 다시 불러와야 한다.

 - line 이 빈 문자열이 될 때는 None, False 등의 값으로 되돌아오게 된다.

 - 첫번째 라인 \n이 있는데, 다른 라인에 없는 내용은 float으로 map을 실행했기 때문에 없다.

 

* Write 함수를 사용하여 내용 쓰기

 - f.write(string) : string을 파일 f에 씀 (f는 반드시 'w'이나 'a'로 불러와야 함)

 - 리스트 등을 string으로 변환하는 join 함수를 활용하면 효율적으로 파일을 쓸 수 있음

  . sep.join 등으로 합 칠 수 있다.

 

* 실습

- as 뒤에 f 는 그 with 구문까지만 f 를 사용하는 것이고, 그 블록이 끝나게 되면 f 는 존재하지 않는다.

- with 함수는 사실상 

- f = open('wrtten_data.cvs', 'w')

- f.colose()

와 동일 한데 한줄로 작성 할 수 있다는 것이다. 단 한줄로 with 함수를 써서 사용할 수 있다는 것이다.

 

 

[파이썬을 활용한 데이터 전처리 Level UP-Comment]
솔직히 pandas는 따로 강의를 해도 될 만큼 방대한 양이긴 하지만 오늘은 정말 간략하게 설명을 하고 추후에 데이터 분석 실습을 통해서 좀 더 알아 본다고 하였다. 다음에 이어질 강의도 기대를 해본다.

오늘 공부 끝!^^!

 

https://bit.ly/3m7bW22

 

파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online. | 패스트캠퍼스

데이터 분석에 필요한 기초 전처리부터, 데이터의 품질 및 머신러닝 성능 향상을 위한 고급 스킬까지 완전 정복하는 데이터 전처리 트레이닝 온라인 강의입니다.

www.fastcampus.co.kr

 

728x90
반응형
:
Posted by 패치#노트
728x90
반응형

[파이썬을 활용한 데이터 전처리 Level UP- 2 회차 미션 시작]

* 복습

어제 데이터 전처리에 대한 대략적인 중요성 및 개요에 대해서 들었으며 리스트와 튜플에 대해서 배워보았다.

리스트와 튜플의 가장 큰 차이점은 튜플은 수정을 할 수 없다는 것이다. 그 외에는 리스트와 튜플의 공통점은 Iteration이 된다는 것 등등 많은 부분이 있었다.


Chapter 02. 데이터를 어떻게 표현할 것인가 - 파이썬 주요 데이터 구조 - 02. 사전

 

* 개요

- 사전(dictionary)이란 키(key)와 값(value) 쌍으로 이루어진 해시 테이블(hash table)임

 

- key는 불변의 값을 사용하며, value는 불변 혹은 가변에 상관없이 사용 가능함

 

- 사전은 다음과 같이 정의할 수 있음

dic = {key 1: value 1, key 2: value 2, key 3: value 3}

 

// Dictionary에 대한 Documention을 찾아봤다. Data Structures안에 내용들이 함께 들어있었다.

docs.python.org/3/tutorial/datastructures.html#dictionaries

 

* 사전 요소에 접근하기 및 바꾸기

- 사전 요소에 접근하기: dict[key]

- 사전 요소 변경 및 추가: dict[key] = new value

- 사전 요소 삭제: del(dict[key])

 

* 사전 관련 함수: 요소 확인하기

- 키 리스트 받기 : .keys( )

- 값 리스트 받기 : .values( )

- key, value 쌍 얻기 : .items( )

=> 위 함수들은 주로 값을 효율적으로 순회하거나 변경할 때 주로 사용된다고 한다.

ex_dict = {"a": "anteater", "b": "bumblebee", "c": "cheetah"}

ex_dict.keys()
# ["a","b","c"]

ex_dict.values()
# ["anteater", "bumblebee", "cheetah"]

ex_dict.items()
# [("a","anteater"),("b","bumblebee"),("c","cheetah")]

 

// 상기와 같은 내용 이외에도 인터넷으로 공부하다가 알게된 get( ) method

Python provides a .get() method to access a dictionary value if it exists. This method takes the key as the first argument and an optional default value as the second argument, and it returns the value for the specified key if key is in the dictionary. If the second argument is not specified and key is not found then None is returned.

# without default
{"name": "Victor"}.get("name")
# returns "Victor"

{"name": "Victor"}.get("nickname")
# returns None

# with default
{"name": "Victor"}.get("nickname", "nickname is not a key")
# returns "nickname is not a key"

// get 메소드를 가끔은 사용할수도 있을 것 같다. 굳이 조건문을 통하지 않더라도 어떠한 dictionary 에 적당한 값이 있는지 없는지를 알기에도 적당할 듯한다.

 

// 전에 배운 list 형태에서 사용한 pop method 도 사용할 수 있다.

Python dictionaries can remove key-value pairs with the .pop() method. The method takes a key as an argument and removes it from the dictionary. At the same time, it also returns the value that it removes from the dictionary.

famous_museums = {'Washington': 'Smithsonian Institution', 'Paris': 'Le Louvre', 'Athens': 'The Acropolis Museum'}
famous_museums.pop('Athens')
print(famous_museums) # {'Washington': 'Smithsonian Institution', 'Paris': 'Le Louvre'}

 

Chapter 02. 데이터를 어떻게 표현할 것인가 - 파이썬 주요 데이터 구조 - 03. 반복문과 comprehension

 

* 반복문 기초

- for문 기초 문법

. 순회 가능한 자료형(리스트, 튜플 등)의 요소를 순서대로 element에 저장하여 특정 구문을 반복함

 

- break: 현재 속한 반복문을 중지시키며, 보통 if문과 같이 사용

 

// 사실상 for문법과 함께 while 구문에 대해서 같이 원래 언급을 했는데. 기본적인 문법에 대해서 간략히 하니 확실히 차별성은 느껴진다.

 

* 대표적인 이터레이터 객체 생성 함수

- 이터레이터 객체는 값을 차례대로 꺼낼 수 있는 객체를 의미 (리스트, 튜플)

- range, itertools 모듈에 있는 주요 함수 등을 통해서도 이터레이터를 생성할 수 있음.

. 단, 이러한 이터레이터는 리스트나 튜플 등이 아니라 순회만 가능한 객체임

 

* 대표적인 이터레이터 객체 생성 함수 : range

- range(start, end, step)

. start 인데스부터 end 인덱스까지 step으로 건너 뛴 부분 이터레이터 객체를 반환

. 값을 하나만 넣으면 end로 인식됨 : range(end) = ragne(0, end, 1)

. 값을 두 개를 넣으면 start와 end로 인식됨 : range(start, end) = range(start, end, 1)

 

* 대표적인 이터레이터 객체 생성 함수 : itertools 모듈 함수

- itertools 모듈은 다양한 종류의 이터레이터 객체를 생성하는 함수로 구성됨

- itertools.prouect(*L)

. 순회 가능한 여러 개의 객체를 순서대로 순회하는 이터레이터를 생성

- itertools 모듈 실습

 

// itertools는 생소해서 구글링을 통해서 좀 알아봤다.

docs.python.org/3/library/itertools.html?highlight=loop

Infinite iterators:

IteratorArgumentsResultsExample

count()

start, [step]

start, start+step, start+2*step, …

count(10) --> 10 11 12 13 14 ...

cycle()

p

p0, p1, … plast, p0, p1, …

cycle('ABCD') --> A B C D A B C D ...

repeat()

elem [,n]

elem, elem, elem, … endlessly or up to n times

repeat(10, 3) --> 10 10 10

Iterators terminating on the shortest input sequence:

IteratorArgumentsResultsExample

accumulate()

p [,func]

p0, p0+p1, p0+p1+p2, …

accumulate([1,2,3,4,5]) --> 1 3 6 10 15

chain()

p, q, …

p0, p1, … plast, q0, q1, …

chain('ABC', 'DEF') --> A B C D E F

chain.from_iterable()

iterable

p0, p1, … plast, q0, q1, …

chain.from_iterable(['ABC', 'DEF']) --> A B C D E F

compress()

data, selectors

(d[0] if s[0]), (d[1] if s[1]), …

compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F

dropwhile()

pred, seq

seq[n], seq[n+1], starting when pred fails

dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1

filterfalse()

pred, seq

elements of seq where pred(elem) is false

filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8

groupby()

iterable[, key]

sub-iterators grouped by value of key(v)

islice()

seq, [start,] stop [, step]

elements from seq[start:stop:step]

islice('ABCDEFG', 2, None) --> C D E F G

starmap()

func, seq

func(*seq[0]), func(*seq[1]), …

starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000

takewhile()

pred, seq

seq[0], seq[1], until pred fails

takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4

tee()

it, n

it1, it2, … itn splits one iterator into n

zip_longest()

p, q, …

(p[0], q[0]), (p[1], q[1]), …

zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-

Combinatoric iterators:

IteratorArgumentsResults

product()

p, q, … [repeat=1]

cartesian product, equivalent to a nested for-loop

permutations()

p[, r]

r-length tuples, all possible orderings, no repeated elements

combinations()

p, r

r-length tuples, in sorted order, no repeated elements

combinations_with_replacement()

p, r

r-length tuples, in sorted order, with repeated elements

ExamplesResults

product('ABCD', repeat=2)

AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD

permutations('ABCD', 2)

AB AC AD BA BC BD CA CB CD DA DB DC

combinations('ABCD', 2)

AB AC AD BC BD CD

combinations_with_replacement('ABCD', 2)

AA AB AC AD BB BC BD CC CD DD

 

 

- itertools.combinations(p, r)

. 이터레이터 객체 p에서 크기 r의 가능한 모든 조합을 갖는 이터레이터를 생성

 

Return r length subsequences of elements from the input iterable.

The combination tuples are emitted in lexicographic ordering according to the order of the input iterable. So, if the input iterable is sorted, the combination tuples will be produced in sorted order.

Elements are treated as unique based on their position, not on their value. So if the input elements are unique, there will be no repeat values in each combination.

Roughly equivalent to:

def combinations(iterable, r):
    # combinations('ABCD', 2) --> AB AC AD BC BD CD
    # combinations(range(4), 3) --> 012 013 023 123
    pool = tuple(iterable)
    n = len(pool)
    if r > n:
        return
    indices = list(range(r))
    yield tuple(pool[i] for i in indices)
    while True:
        for i in reversed(range(r)):
            if indices[i] != i + n - r:
                break
        else:
            return
        indices[i] += 1
        for j in range(i+1, r):
            indices[j] = indices[j-1] + 1
        yield tuple(pool[i] for i in indices)

// 각 요소들을 조합해서 경우의 수에 대해서 모두 보여 주는 것이다. 이것 또한 잘 만 이용하면 좋을 것 같은데...

 

The code for combinations() can be also expressed as a subsequence of permutations() after filtering entries where the elements are not in sorted order (according to their position in the input pool):

def combinations(iterable, r):
    pool = tuple(iterable)
    n = len(pool)
    for indices in permutations(range(n), r):
        if sorted(indices) == list(indices):
            yield tuple(pool[i] for i in indices)

The number of items returned is n! / r! / (n-r)! when 0 <= r <= n or zero when r > n.

 

- itertools.permutations(p, r)

. 이터레이터 객체 p에서 크기 r의 가능한 모든 순열을 갖는 이터레이터를 생성

The code for permutations() can be also expressed as a subsequence of product(), filtered to exclude entries with repeated elements (those from the same position in the input pool):

def permutations(iterable, r=None):
    pool = tuple(iterable)
    n = len(pool)
    r = n if r is None else r
    for indices in product(range(n), repeat=r):
        if len(set(indices)) == r:
            yield tuple(pool[i] for i in indices)

// permutations function 안에서도 for 문과, if 문을 이용해서 tuple 형태로 반환해주고 있다.

 

 

 

* list comprehension

- list comprehension은 for문을 사용하여 한 줄로 리스트를 효과적으로 생성하는 방법임

- 예시

- 조건문은 생략 가능함.

 

* dictionary comprehension

- dictionary comprehension은 for문을 사용하여 한 줄로 사전을 효과적으로 생성하는 방법임

 

 

Chapter 02. 데이터를 어떻게 표현할 것인가 - 파이썬 주요 데이터 구조 - 02. Numpy의 데이터 구조

* 개요

- Numpy의 자료형은 ndarray로 효율적인 배열 연산을 하기 위해 개발되었음

- 리스트와 ndarray는 유연성과 효율성을 기준으로 비교할 수 있음

 

- list는 float, str 등 모든 요소를 저장할 수 있음

- ndarray 는 float, str 등을 정의해줘야 한다.

- ndarray 는 C로 구현된 내부 반복문을 사용하여 속도가 매우 빠른 편이다.

 

* 배열 만들기: np.array 함수

- np.array 함수를 사용하여 ndarray를 생성할 수 있음

// 사용하기 전에는 numpy 를 import 해줘야 한다.

import numpy as np

- np 로 as하는 것은 가장 많이 쓰는 약속 같은 것이다.

// numpy 에 대해서 cheat sheet 를 보는 것이 좋을 것 같아서 검색해보면 죄다. 어디로 연결되거나 길다....

// 공식 홈페이지

numpy.org/doc/

// 이곳에서 설명하는 numpy 에 대한 자료는 수백페이지..ㅠ.ㅠ

 

* 배열 만들기: 다양한 함수

- 관련 함수를 사용해서 특정 패턴을 갖는 ndarray를 생성할 수 있음

. np.zeros(shape)

.. shape(튜플) 모양을 갖는 영벡터/영행렬 생성

.. np.zeros((10,2)) : (10, 2) 크기의 영행렬 생성

// zeros 에 대한 정의는 한번 찾아봤다.

더보기

numpy.zeros(shape, dtype=float, order='C')

Return a new array of given shape and type, filled with zeros.

Parametersshapeint or tuple of ints

Shape of the new array, e.g., (2, 3) or 2.

dtypedata-type, optional

The desired data-type for the array, e.g., numpy.int8. Default is numpy.float64.

order{‘C’, ‘F’}, optional, default: ‘C’

Whether to store multi-dimensional data in row-major (C-style) or column-major (Fortran-style) order in memory.

Returnsoutndarray

Array of zeros with the given shape, dtype, and order.

s = (2,2)
np.zeros(s)
# array([[ 0.,  0.],
#       [ 0.,  0.]])

. np.arange(start, stop, step)

.. start부터 sotp까지 step만큼 건너뛴 ndarray를 반환 (단, start와 stpe은 생략 가능)

.. np.arrange(1, 5, 0.1) : ndarray([1, 1.1, 1.2, ..., 4.9])

 

. np.linspace(start, stop, num)

.. start부터 stop까지 num 개수의 요소를 가지는 동간격의 1차원 배열을 반환

.. np.linspace(0, 1, 9) : ndarray([0., 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0])

 

* 인덱싱과 슬라이싱

- 기본적인 인덱싱과 슬라이싱은 리스트 자료형과 완전히 동일함

- 2차원 배열인 경ㅇ, X[i, j]는 i행 j열에 있는 요소를 나타냄. (c.f. X가 리스트라면, X[i][j]로 접근함.)

- 부울 리스트도 인덱스로 사용할 수 있으며, True인 요소와 대응되는 요소만 가져옴

- 여러 개의 인덱스를 리스트 형태로 입력 받을 수도 있음

 

* 유니버셜 함수

- 유니버셜 함수는 ndarray의 개별 요소에 반복된 연산을 빠르게 수행하는 것을 주 목적으로 하는 함수

- ndarray x와 y에 대해, 덧셈, 뺄셈, 곱셈, 제곱 등 다양한 배열 간 이항 연산을 지원함.

- 유니버셜 함수는 단순 반복문에 비해, 매우 빠름

 

* 브로드캐스팅

- 다른 크기의 배열에 유니버셜 함수를 적용하는 규칙 집합으로, 큰 차원의 배열에 맞게 작은 배열이 확장됨.

- 첫번째 케이스와 두번째 케이스가 가장 많이 쓰인다.

- 첫번째 케이스에서 복제를 해서 각각 더한다.

 

- 브로드캐스팅 예시: z-normalization

 

* 비교 연산자

- 비교 연산자의 결과는 항상 부울 타입의 배열임

- 따라서 비교 연산자의 결과를 바탕으로 조건에 맞는 요소 탐색에 활용할 수 있음

 

sum(cond) - True는 1이고, False 0이기 때문에 더해도 개수가 나오게 된다.

 

[파이썬을 활용한 데이터 전처리 Level UP-Comment]
오늘 강의에서는 새로운 itertools 라는 구문에 대해서 배울 수 있었다. combination 기능을 잘만 이용하면 좀 더 빠른 연산을 할 수 있을 것 같기도 한데.. 불필요한 for 문이나 if 문 등 반복문과 조건문을 줄이기 위해서는 comprehension 문을 잘 사용하여야 하지만, 아직까지 그렇게 손에 있지 않는다.
for 문 내에서도 다양한 조건 등을 걸어서 coding을 하다 보니 코딩만 더러워지고 있다. 거기에 time loose만 들어나고.. 

좀 더 가다듬을 필요성은 느낀다.

 

https://bit.ly/3m7bW22

 

 

파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online. | 패스트캠퍼스

데이터 분석에 필요한 기초 전처리부터, 데이터의 품질 및 머신러닝 성능 향상을 위한 고급 스킬까지 완전 정복하는 데이터 전처리 트레이닝 온라인 강의입니다.

www.fastcampus.co.kr

 

728x90
반응형
:
Posted by 패치#노트
728x90
반응형

오늘부터 패캠에서 수강과목에 대한 환급챌린지를 시작하게되었네요.

어차피 데이터분석에 대해서 공부를 하고 있는 요즘이라..

이런 기회를 통해서 미션을 완료하게 되면 강의도 공짜로 듣고.

그 걸 통해서 공부도 더 열심히하게 되니깐 일거양득....

아자아자!! 화이팅!!!!

 

Part1. 데이터핸들링

 

[Chapter 01. 시작에 앞서 데이터 전처리는 왜 중요할까 - 01. 데이터 전처리의 중요성 및 개요]

- 현실데이터는 분석 목적에 맞게 정리되어 있지않아, 데이터 분석 기법을 그대로 적용하기 어려움

 

* 현실 데이터 사례

- P 밸브사 - 수요 예측의 주문서 데이터가 파일명, 폴더 등이 정리되어 있지 않음.

- 포맷이 다른 주문서: 통일되지 않은 셀 위치와 제목 셀 이름이 정확하지 않음.

- 이런 경우에는 효과적으로 정리하는 방법이 필요함

 

- M공업사 - 설비 비가동 시점 예측

- 시간으로 정리되어 있으나 시간순서가 비정상적인 시간순서로 정리되어 있음- 기록되지 않은 알람이 포함되어 있음- 결측치 등이 다수 존재- 특수한 형태의 16진수로 구성된 리스트가 있음

 

- K홈쇼핑 - 매출 예측을 통한 방송 편성 최적화- 기존 홈쇼핑 방송 기록을 바탕으로 상품별 매출을 예측하고, 매출을 최대화하는 방향으로 방송을 편성하는 프로젝트- 불필요한 값이 너무 많아 데이터가 매우크고, 프로젝트 목표에 부합하지 않는 구조의 데이터임- 이와 같은 경우에는 잘 정리된것 처럼 보이지만 초심자의 경우에는 더 어려움을 느낄 수 있음

- 데이터 분석에 소요되는 시간- 모든 데이터 분석 프로젝트에서 데이터 전처리는 필수적인 과정이며, 많은 분석가들이 데이터 전처리에 가장 많은 시간을 투입함

. Cleaning and organizing data: 60%

. Collecting data sets: 19%

=> 이러한 결과를 바탕으로 전체 분석 시간의 79%를 사용한다고 한다. 전처리 역량이 분석 시간을 줄이는데 가장 중요하다는 의미이다.

// 하기사 코드를 짤때도 디버그야말로...진정한..시간잡아먹기.ㅠ.ㅠ

 

- 데이터 전처리의 주요 효과- 효율적인 분석을 가능하게 해준다.- 불필요한 정보를 제거함으로써 인사이트를 얻는데 도움이 된다.- 머신러닝 모델의 성능을 향상시킨다.

 

[Chapter 01. 시작에 앞서 데이터 전처리는 왜 중요할까 - 02. 데이터 전처리를 잘하는 방법]

* 경험을 쌓아라

- 데이터 전처리 역량을 쌓는 가장 확실한 방법은 좋은 경험을 많이 쌓는 것이다.

- 대다수의 경험은 "이런 방법을 쓰니까 시간만 날리더라. 다른 방법이 제일 좋았다"라는 레퍼런스가 됨

- 크롤링한 뉴스에서 단어 추철 및 변환하기 사례.. 데이터 추출하는 과제였는데.. 각각의 중요단어를 추출했어야 하지만.. 간단하게 띄워쓰기 등을 기준으로 했었다.

=> 형태소 분석 등등을 이용했어야 했다.

=> 실수를 통해서 지속적인 경험을 쌓아야지만 효과적인 방법으로 전처리를 할 수가 있다.

 

* 결과를 생각하라.

- 전처리의 결과인 전처리된 데이터의 구조를 미리 생각해야 불필요한 피드백 루프를 막을 수 있음

- 피드백 루프.. 처리된 데이터가 다시 돌아간다는 의미

 

* 처리 과정을 생각하라.

- 원 데이터를 결과 데이터로 바꾸기 위한 과정을 단계별로 정의해야 함

- 결과에 대해서 계획을 세워야 한다.

 

* 검색능력을 쌓아라.

- 데이터 전처리에 대한 기초적인 역량을 십분 발휘하기 위해서는, 필요한 전처리를 수행하는 방법을 검색하는 역량을 쌓아야 한다... 구글링을 많이 해라.

// 개인적으로도 네이버나 국내 검색엔진보다는 구글을 사용하는 것이 좋았다. 되도록이면 한글보다는 영어를 사용해서 전처리를 하는 것이 더 좋다.

- 검색쿼리 Tip: pytho, 모듈, how, 내용을 포함.

 

 

[Chapter 02. 데이터를 어떻게 표현할 것인가 - 파이썬 주요 데이터 구조 - 01. 리스트와 튜플]

* 데이터를 어떻게 표현할 것인가: 파이썬 주요 데이터 구조

* 개요

- 리스트(list)와 튜플(tuple) 모두 여러 데이터를 담는 컨테이너형 변수임

- 리스트의 정의: [Data 1, Data 2, ..., Data n]

. 다양한 요소 형태가 가능

ex1) L1 = [1, 2, 3, 4, 5]

ex2) L2 = ['a', 'b', 'c', 1, 2]

ex3) L3 = [1, 2, [3, 4]]

 

- 튜플의 정의: (Data 1, Data 2, ..., Data n)

ex1) T1 = (1, 2, 3, 4, 5)

ex2) T2 = ('a', 'b', 'c', 1, 2)

ex3) T3 = (1, 2, [3, 4])

 

* 공통점1. 인덱싱과 슬라이싱

- 리스트와 튜플 모두 인덱싱과 슬라이싱이 가능함

 

- 인덱싱 방법

. List[i], Tuple[i]: 앞에서 i번째 요소까지 (0부터 시작함)

. List[-i], Tuple[-i]: 뒤에서 i번째 요소(-1부터 시작함)

 

- 슬라이싱 방법: List[start:end:step], Tuple[start:end:step]

. start인덱스부터 end 인덱스까지 step으로 건너 뛴 부분 리스트 혹은 튜플을 반환

. step은 default가 1로 입력하지 않아도 무방함. List[start:end]

. start와 end도 입력하지 않아도 되나, 콜론( : )은 넣어야 함.

// 콜론을 넣지 않으면 그냥 인덱싱값으로 나온다.

 

- 연습

List1 = [10, 9, 8, 6]
List1[2]
List1[0:3]
List1[2:]
List1[0:4:2]

=> List1[2] = 8

=> List1[0:3] = [10, 9, 8]

=> List1[2: ] = [8, 6]

=> List1[0:4:2] = [10, 8]

위와 같이 인덱싱 및 슬라이싱을 할 수 있다.

슬라이싱 = > 다시 리스트 형태로 반환함

 

* 공통점2. 순회 가능(interable)

- 리스트와 튜플 모두 for문을 이용하여 순회를 할 수 있음

- 따라서 max, min 등의 순회 가능한 요소를 입력 받는 함수의 입력으로 사용할 수 있음

 

* 차이점1. 가변과 불변

- 리스트의 요소는 바꿀 수 있으나, 튜플의 요소는 바꿀 수 없음

- 튜플의 요소 변경시에는 Type error가 발생함

 

- 따라서 리스트는 사전의 key로 사용할 수 없지만, 튜플은 사전의 key로 사용 가능함.

. Tip1. 불변의 자료형(int, float, str 등)만 사전의 key로 사용할 수 있다.

. Tip2. 조건 등을 입력으로, 해당 조건에 대응되는 값들을 출력으로 하는 사전 구축은 의로 많이 데이터 전처리에서 사용된다.

 

* 차이점2. 순회 속도

- 순회 속도는 리스트보다 튜플이 약간 더 빠름

- 따라서 요소를 변경할 필요가 없고, 요소에 대한 연산 결과만 필요한 경우에는 리스트보다 튜플이 적합함.

- 데이터가 큰 경우에 한해서, 리스트로 작업후, 튜플로 자료형을 바꾼 후 순회를 하게 시간을 조금이라도 줄 일 수 있게 된다.

- 바꾸는 방법

. 리스트 -> 튜플: tuple(리스트)

. 튜플 -> 리스트: list(튜플)

 

- time 함수를 사용해서 측정함

// %timeit 을 사용할 수는 없을까?

 

* 리스트 관련 함수: 요소 추가

- List.append(x): 새로운 요소 x를 맨 뒤에 추가

 

- List.inser(a, x): 새로운 요소 x를 a위치에 추가 (기존에 있던 요소는 뒤로 한 칸씩 밀림)

 

- List.remove(x): 기존 요소 x를 제거 (단, x가 여러 개면 맨 앞 하마나 지워지고, 없으면 오류 발생)

 

- List.pop( ): 맨 마지막 요소를 출력하면서 그 요소를 삭제(stack 구조)

 

- List.index(x): x의 위치를 반환(단, x가 여러 개면 맨 앞 인덱스를 반환하고, 없으면 오류 발생)

 

* 리스트 관련 함수: 확장하기

- List1 + List2: 두 리스트를 그대로 이어 붙임(튜플도 가능)

 

- List1. extend(List2): 함수도 있지만 실제는 더하기 함수를 더 많이 사용한다.

 

* 튜플 관련 함수

- 튜플은 요소 변경이 불가능하므로, 추가 및 제거 관련 함수를 지원하지 않음.

- 튜플은 사실 소괄호를 쓰지 않아도 된다는 특징 덕분에 SWAP(값을 서로 변경), 함수의 가변인자 및 여러개의 출력을 받는데 많이 사용함.

# 여러개의 요소 일때는 별도의 소괄호를 하지 않아도 인식이 된다.
T = 1, 2, 3, 4
print(T)

# 하나의 요소 일때는 ,를 삽입해줘야 한다.
T = 1,
print(T)

=> Result : (1, 2, 3, 4)

자동으로 인식. 여러개의 요소를 가지고 있을 때는 별도 소괄호를 진행하지 않아도 인식이 된다.

 

=> Result : (1,)만약에 하나의 요소만 튜플로 만들고 싶으면 반드시 ,(쉼표)를 찍어줘야 인식이 된다.

 

[파이썬을 활용한 데이터 전처리 Level UP-Comment]

현재 데이터는 열심히 모으고 있지만 이것을 어떤식으로 활용할지 또 모은 자료를 어떤식으로 효율적으로 전처리할지에 대해서는 늘 고민이 많았었는데.. 이 기회를 통해서 습득하자!! 열심히~^^

오늘 부터 미션을 위해서 정리하면서 공부해보지만, 다른 여타의 강의와 다르게 기본적인 파이썬 문법을 바로 강의하지 않고 리스트, 튜플에 대해서 먼저 배우기 시작했다. 간략한 문법 설명과 실습을 통해서 빠르게 배울 수 있었다.

앞으로의 강의도 재미있을 것 같다.

 

 

 

https://bit.ly/3m7bW22

 

파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online. | 패스트캠퍼스

데이터 분석에 필요한 기초 전처리부터, 데이터의 품질 및 머신러닝 성능 향상을 위한 고급 스킬까지 완전 정복하는 데이터 전처리 트레이닝 온라인 강의입니다.

www.fastcampus.co.kr

 

728x90
반응형
:
Posted by 패치#노트