본문 바로가기

2학년 2학기/데이터 사이언스 입문41

[Visualization] Matplotlib의 고급 기능(Subplots, annotate, Fommator, Locator) In [101]:import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltfrom matplotlib.gridspec import GridSpecfrom matplotlib.ticker import NullLocator, NullFormatter, MaxNLocator, FuncFormatterimport warningswarnings.filterwarnings(action='ignore')Subplot¶: 하나의 그림(캔버스)안에 여러 개의 plot을 넣는 것[plt.subplot]¶개별 subplot을 생성(행, 열, 위치)로 subplot 위치를 지정사용하기 간단하지만, plot간의 세부 설정.. 2024. 12. 2.
[Visualization] Colormap In [30]:import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltfrom matplotlib.colors import ListedColormapimport warningswarnings.filterwarnings(action='ignore')Qualitative (질적), Sequential (연속적), Diverging (분기적)¶Qualitative (질적): 각각의 구역이 구별 되어야함(독립적)Sequential (연속적): 데이터 값이 증가함에 따라 색상의 농도가 점진적으로 변합니다.Diverging (분기적): 강중심값을 기준으로 색상이 양쪽으로 분기됩니다.In [37]:# 데이터 .. 2024. 12. 2.
[Visualization] Regend In [7]:import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltimport warningswarnings.filterwarnings(action='ignore')Legend(범례)¶: 여러 plot이 한 축에 표현되어 있을 때, 해당 plot을 표시하는 것In [38]:x = np.linspace(0, 10, 1000)plt.plot(x, np.sin(x), '-g', label='sin(x)')plt.plot(x, np.cos(x), ':b', label='cos(x)')plt.axis('equal')plt.legend()Out[38]:In [ ]: Legend(범례) 생성관련¶label이.. 2024. 12. 2.
[Visualization] Contour Plot(등고선) In [4]:import numpy as npimport matplotlib.tri as triimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as plt In [5]:npts = 100x = np.random.uniform(-2, 2, npts)y = np.random.uniform(-2, 2, npts)z = x * np.exp(-x**2 - y**2)ngridx = 100ngridy = 100xi = np.linspace(-2.2, 2.2, ngridx)yi = np.linspace(-2.2, 2.2, ngridy)triang = tri.Triangulation(x, y)interpolator = tri.LinearTriInt.. 2024. 11. 26.
[Visualization] Error Bar In [1]:import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltError Bar¶평균과 표준편자를 표시하여 데이터의 전체적인 경향을 요약하여 표시할 때 사용한다.즉, 많은 라벨의 데이터 들이 있을 때 라벨마다의 데이터 분포를 표시할 때 사용한다.In [5]:x = np.linspace(0, 10, 50)dy = 0.8y = np.sin(x) + dy * np.random.randn(50)plt.errorbar(x, y, yerr=dy, fmt='.k')plt.xlabel("Label")plt.ylabel("Distribution of Label")Out[5]:Text(0, 0.5, 'Dist.. 2024. 11. 26.
[Visualization] Scatter Plot(산점도) In [1]:import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltScatter Plot¶위치에 대한 정보를 나타낼 때 사용¶기존 plot을 이용한 ScatterPlot¶In [3]:x = np.linspace(0, 10, 30)y = np.sin(x)plt.plot(x, y, 'o', color = 'black')Out[3]:[]Scatter 메소드를 사용한 ScatterPlot¶In [4]:plt.scatter(x, y, marker='o')Out[4]:In [6]:rng = np.random.RandomState(0)x = rng.randn(100)y = rng.randn(100)color.. 2024. 11. 26.
[Visualization] LinePlot In [11]:import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as plt기본적인 동작¶In [13]:x = np.linspace(0, 10, 100)In [19]:plt.plot(x, np.sin(x), '--');Matlb Style vs Object-oriented Style¶In [37]:plt.figure()plt.subplot(2, 1, 1) # 2행 1열로 나누어 1번에 그래프를 그린다.plt.plot(x, np.sin(x))plt.subplot(2, 1, 2)plt.plot(x, np.cos(x)) # 2행 1열로 나누어 2번에 그래프를 그린다.Out[37]:[]In [43]:fig, .. 2024. 11. 26.
.dt를 사용하는 이유 우선 dt의 사용이유를 알기 전에 to_datetime()의 입력 데이터 형태에 따라 반환되는 타입이 뭔지 알아야 한다. 그리고 그 반환 타입에 따라 .dt 사용여부를 확인해보자. to_datetime() - 입력데이터 타입에 따른 반환 타입1. 단일 String 입력반환 타입: Timestamp[코드]date = pd.to_datetime('2023-01-01')print(type(date)) #  .dt 사용 안함!   2. list 또는 array 입력반환 타입: DatetimeIndex[코드]dates = pd.to_datetime(['2023-01-01', '2023-02-01', '2023-03-01'])print(type(dates)) #  .dt 사용 안함!   3. series / d.. 2024. 11. 7.
10주차 - 실습 str 속성을 이용해서 address에서 도시와 구를 추출했다. 도시는 앞에서 2글자만 추출해서 뒤에 시를 붙였다. 구는 split()을 통해서 각 행의 첫번째 요소를 구로 설정했다.        1. 우선 date열의 타입을 to_datetime를 활용해서 datetime 타입으로 변경한다. 2. 명시적 인덱싱을 이용하기 위해서 타입을 변경한 date 열을 인덱스로 설정한다. 3. 1번은 슬라이싱, 2번은 인덱싱을 했다. 4. 중요한건 3번과 4번인데 timestamp(시점)를 만들고 timedelta(특정 기간)을 만들어서 더해준다. 특정 기간은 Hour기준, Day 기준, Week 기준, Year 기준 등을 토대로 만들수 있다.      이 부분은 .dt.strftime(지시자) 형식으로 컬럼을 생.. 2024. 11. 7.
[pandas] 고성능 Pandas: Eval & Query 넘파이와 판다스는 기본적으로 Vectorized를 지원하기 때문에 빠른 연산을 지원한다. 다만, 위의 사진과 같은 복합적인 연산이 존재하는 경우, 실제 동작은 연산 하나하나를 메모리에 할당한 후에 저장을 한다. 따라서, x와 y의 크기가 큰 경우 메모리를 많이 차치하여 오히려 연산이 더 느려질 수 있다. ❓그럼 어떻게 해야할까?연산을 한 번에 해주는 것이 아니라 부분적으로 나눠서 해줘야한다. 따라서 넘파이와 판다스에서는 큰 데이터에서도 효율적인 연산이 가능하도록 eval, query 함수를 제공한다. 1. eval 메소드의 사용[pandas.eval(문자열)형태로 사용]: 실행하고 싶은 연산을 문자열로 표현해서 사용할 수 있다. 결과 = pd.eval('연산') 이렇게 eval 메소드를 이용해도 동일한 .. 2024. 11. 5.
[pandas] 날짜 / 시간 데이터 다루기(Time stamp, Time interval, Time duration) ❓ 날짜/시간과 관련된 자료형이란?: 절대적인 시간(2024년 11월 2일 등)을 다룰 수 있는 자료형이다. 내부적인 동작에는 실수 혹은 정수형으로 동작한다 . 판다스에서 날짜/시간과 관련된 자료형에는 3가지가 있다.  1. Time stamp: 특정 시점(시각)을 나타낸다. 예를 들면 2024년 11월 2일 11시 32분 23초를 나타는 것과 같다. 2. Time interval(period): 시작과 종료 시점 사이의 구간을 나타낸다. 예를 들면 2015년(2015년 1월 1일 ~ 2015년 12월 31일까지), 2021년 8월 첫째 주(2021년 8월 1일  ~ 2021년 8월 7일)를 나타내는 것과 같다. 3. Time delta(duration): 두 시간 간격의 차이를 나타내며, 일정한 시간의.. 2024. 11. 5.
[pandas] 문자열 Vectorized 연산 기본적으로 Numpy와 pandas에서는 아래와 같은 Vectorized 연산을 지원한다. 이러한 Vectorized 연산을 문자열(String)에서도 적용하기 위해 str 속성을 지원하게된다. str 속성을 이용해서 Vectorized 연산을 하면 None, Null에 대한 경우도 오류를 발생시키지 않고 무시하고 처리하게 된다.    str에서는 아래와 같은 모든 Python 문자열 내장 메소드를 동일하게 지원한다.   1. "str" 속성을 이용한 문자열의 Vectorized 연산   2. 인덱싱monte.str.split()[0]  이렇게 스플릿을 한 것에서 인덱싱을 하면 columns에서 인덱스가 0인 것이 아니오는 것이 아니라 row에서 인덱스가 0인 것이 나오게 된다.    monte.str... 2024. 11. 5.
9주차 - split, apply, pivot table을 이용해서 실습해보기 초반에는 모든 사전 자료형을 열거해서 데이터 프레임을 만들었지만, 사전자료형의 하나의 키에 여러 값을 리스트로 추가해서 데이터 프레임을 만드면 추후 행을 추가할 때 각 리스트의 요소들만 추가하면 되기 때문에 아래의 방식이 더 개선된 방식이다.  9.1은 split을 통해 구분된 데이터들을 기반으로 apply로 연산을 하는 것이 주요 포인트이다.    내가 한 방식은 특정 열의 행 값에 따라서 값을 부여해주었다.  하지만, 교수님은 Product로 행을 만들어주고 groupby(category_mapping)에서 category_mapping을 전달하면 pandas는 인덱스의 각 값에 대해 category_mapping 딕셔너리를 참조하여 자동으로 새로운 카테고리 값으로 매핑을 수행합니다. 따라서 그렇게 .. 2024. 10. 31.
[pandas] Pivot Tables Pivot Tables: 특정 행과 열을 기준으로 우리가 원하는 연산을 하는 것이다. 자세하게 말하면, 데이터를 요약하고 집계하기 위해 특정 행과 열을 기준으로 그룹화해서 다양한 연산(합, 평균, 개수)을 수행하는 테이블이다. 데이터 프레임 명.pivot_table(연산할 컬럼, index=기준이 되는 행, columns=기준이 되는 열)  이렇게 pivot table을 이용하면, 간단하게 행과 열을 기준으로 특정 값에 대한 연산을 할 수 있다. pivot table의 기본 연산은 mean이기 때문에 아무 코드 추가 없이도 생존자 여부의 평균을 계산할 수 있다.  각각에 다른 연산 적용 또한 같은 기준에 각각의 값에 다른 연산을 적용할 수도 있다.  정한 기준에 대한 전체에 대한 연산 적용 이렇게 ma.. 2024. 10. 29.
[pandas] GroupBy: Apply 이전에 배웠던 기준에 따라 선택된 데이터들끼리 연산하는 것이 Apply이다.   Aggregation: sum, median, max, min 같이 값들을 하나로 요약하는 과정이다.   이런 식으로 aggregate와 함께 연산을 써주면, key로 분류된 데이터들 각각에 min, medianm, max 연산을 해주고 그 결과를 보여준다. 이렇게 모든 열(data1, data2)에 같은 연산을 한번에 할 수도 있지만, 각 열에 다른 연산도 가능하다.  이렇게 data1에는 min연산을하고, data2에는 max연산을 해줄 수도 있다.     Filter: 그룹을 기준으로 특정 조건에 맞는 데이터만 남기는 과정이다. 예들 들면 그룹 별 평균이 특정 값 이상인 데이터만 남기는 것 왜 groupby된 데이터 .. 2024. 10. 29.
[pandas] GroupBy: Split ❓ Split이란?: 데이터 중 내가 원하는 기준에 있는 일부 데이터를 선택하는 것이다.      기존 값을 기준으로 split이런 식의 데이터가 있을 때, key를 기준으로 split을 한다면 아래와 같이 같은 키를 가진 행끼리 나누어 진다.keydataA0A3 keydataB1B4 keydataC2C5    사용자가 정의한 값을 기준으로 split기존에는 열중 하나의 값으로 겹치는 행끼리 split을 했다. 하지만 사용자가 직접 정의한 값을 기준으로 split을 할 수 있다. 위의 데이터가 있을 때 직접 정의한 L을 기준으로 값을 나눌 수 있다.  0은 0끼리, 1은 1끼리, 2는 2끼리 나눌 수 있다. [0인 것들]keydata1data2A05C23C59[1인 것들]keydata1data2B10A3.. 2024. 10. 29.
데이터 프레임 필터링 방식 1. 기본적인 열 선택df[]는 기본적으로 열을 선택할 때 사용됩니다.# 하나의 열 선택df['column_name']# 여러 열 선택df[['column1', 'column2']]  2. loc[]: 명시적 인덱스 및 열 이름 사용 행 선택# 특정 인덱스(행) 선택df.loc[2012] # 2012년 데이터 선택 열 선택# 특정 열 선택df.loc[:, 'column_name'] # 모든 행에서 'column_name' 열만 선택 행과 열 동시 선택# 특정 인덱스와 열 동시 선택df.loc[2012, 'column_name'] # 2012년의 'column_name' 데이터를 선택 조건을 활용한 필터링# 조건을 활용하여 필터링df.loc[df['state/region'] == 'GA'] # 's.. 2024. 10. 17.
[pandas] Combining Datasets 데이터를 사용하다보면 최신화된 데이터를 추가하거나 다른 데이터를 기존 데이터와 합치는 일이 많다. 이런 경우 pandas에서는 데이터 추가하는 여러 연산 메서드를 지원한다.  concat과 merge를 사용할 수 있는데, concat은 주로 행 추가 또는 열 추가를 결합하는데 사용된다. 또한, merge는 두 데이터 프레임을 공통 열 또는 공통 인덱스를 기준으로 결합한다.  concat: 주로 행 추가 또는 열추가를 결합하는데 사용하는 연산 메소드이다. 기본 값은 행 추가이며, axis='col'(2.2.2에서는 axis=1)을 하면 열 추가도 가능하다.  행 추가  열 추가   만약 인덱스가 중복되는 경우라면? concat은 index 중복여부를 검사하지 않는다. 이런 경우 verify_integrit.. 2024. 10. 16.
[pandas] Hierarchical Indexing(계층적 인덱싱) Hierarchical Indexing(계층적 인덱싱)은 여러개의 인덱스 또는 열을 가질 수 있는 기능이다.  이런 식으로 상위 계층에 a, b가 있고 하위 계층에 1, 2가 있는 인덱싱을 말한다. 이런 계층이 있는 인덱스를 다중 인덱스 (MultiIndex)라고 한다.     다중 인덱스 (MultiIndex) 생성1. 생성자 기반 생성  2. array를 통한 생성  3. tuple를 통한 생성 4. product를 통한 생성 이렇게 다중 인덱스 (MultiIndex)를 만들 수 있고 이 값을 데이터 프레임 생성할 때 index 값으로 넣어주면 된다.   물론, columns에 값을 넣어도 된다.    여기서 names는 행과 열 각각의 상위 계층, 하위 계층의 이름을 붙여준 것이이다.(사진 참고) .. 2024. 10. 15.
개인_실습(DataFrame) 2024. 10. 10.
데이터 프레임 특정 열 삭제 하는 방법 df = df.drop('열 이름', axis=1) 2024. 10. 10.
[pandas] Missing value 다루기 Missing value란?: 다양한 원인으로 있는줄 알았지만 없는 데이터. 즉, NaN 또는 None Missing value 관련 내장 메소드  Missing value 탐지 Missing value가 존재하는지 - isnull()Missing value 가 없는지 - notnull()Missing value 삭제 Missing value가 있는 행을 삭제 - dropna() Missing value가 있는 열을 삭제 - dropna(aixs = 'columns') 행 또는 열이 모두 Missing value일 때, 삭제 - dropna(aixs = 'columns', how = 'all')행 또는 열의 Missing value 개수가 n개 미만일 때, 삭제 - dropna(aixs = 'column.. 2024. 10. 10.
데이터 프레임 인덱싱하는 방법 행과 열에 있는 데이터 접근데이터 프레임 명.loc[행 이름, 열 이름]조건에 해당하는 행의 데이터에 접근데이터 프레임 명.loc[조건] 조건에 해당하는 행의 데이터애서 특정한 열에 접근데이터 프레임 명.loc[조건, 열의 이름] 2024. 10. 10.
Week6 - 실습 문제 풀이) 랜덤 정수 값을 이용해서 데이터를 만들어야하기 때문에, 행의 이름들과 열의 이름들을 따로 만들어주고 데이터 프레임을 제작해야했다.따라서 반복문을 이용해서 rows, cols의 리스트를 생성하고, 아래의 생성 방식으로 데이터 프레임을 생성하였다. df = pd.DataFrame(데이터 프레임의 데이터, index = '행의 이름들', columns = '열의 이름들')    문제 풀이)  axis = 1은 열끼리의 연산을 진행하는 것이다. 즉, C1, C2 ... C10까지의 연산이다. 따라서 각 행의 열들의 값의 평균을 구하고 'mean'이름의 열에 평균들을 추가했다.     우선 pass 컬럼을 만들고 모두 Y로 초기화주었다.그리고 이중 반복문을 이용해서 각 행을 인덱싱하고, 해당 행의 각.. 2024. 10. 10.
[pandas] Series, DataFrame에서의 산술 연산 1. 기본적인 산술 연산 규칙 (Ufunc Rule)시리즈나 데이터프레임에서 산술 연산을 할 때, 기본적으로 **Ufunc (Universal Functions)**의 규칙이 적용됩니다. 즉, 같은 크기와 모양을 가진 두 데이터 구조가 있다면 각각 대응되는 값들끼리 연산이 수행됩니다.   2. 인덱스 정렬 (Index Alignment) 시리즈 간 또는 데이터프레임의 열 간 연산을 할 때, 인덱스 정렬이 먼저 수행됩니다. 두 데이터 구조의 인덱스 합집합을 구한 뒤, 각 인덱스에 대해 연산이 수행되며, 만약 한 쪽에만 존재하는 인덱스가 있다면 그 결과는 NaN (Not a Number)으로 표시됩니다.     3. 데이터프레임 간 연산: 브로드캐스팅 (Broadcasting)데이터프레임 간 연산에서도 기본.. 2024. 10. 8.