ML / DS 공부를 시작하게 되면 누구나 겪는(?) 자연스러운 스터디 순서,

   - Numpy → Pandas → Matplotlib

 

 

솔직히 전형적인 코더(키보드 워리어) 생활을 하던 사람으로써

이런 Visualization 영역에 대해서는 왠지 모를 거부감가 함께 두려움(?)이 있다.

하지만, 해야하는 것이니 해야겠지만.... 😥

 

지금까지의 공부과정은 다음과 같다.

  - [파이썬 데이터 분석가 되기] 00 - 공부 시작

  - [파이썬 데이터 분석가 되기] 01 - NumPy

  - [파이썬 데이터 분석가 되기] 02 - Pandas

 

 

오늘 공부할 것은 다음과 같다.

 

03장. 데이터 시각화 라이브러리, 맷플롯립

 

① Matplotlib 시작하기

② 그래프 꾸미기

③ 다양한 그래프 그려보기 ⑴

④ 다양한 그래프 그려보기 ⑵

⑤ 그래프 한꺼번에 그려보기

⑥ 그래프 저장하기

 

 

 

① Matplotlib 시작하기

Matplotlib은 이름 그대로 파이썬 환경에서 데이터 시각화를 위한 라이브러리이다.

- https://matplotlib.org/

 

 

 

▷ 일단 한 번 그려보기

- plt.plot()으로 그래프를 그린다고 해서 바로 출력되지 않는다.

- plt.show()를 실행하면 앞에서 그린 그래프를 그려준다.

- [1, 3], [2, 4] 데이터가 어떻게 그래프에 그려졌는지 잘 살펴보기 바란다.

  . [1, 3] 데이터는 X축의 좌표이고, [2, 4] 는 Y출의 좌표이다.

  . (1, 2), (3, 4) 데이터가 출력된 것이다.

  . plt.plot(x, y) 구성이므로, x 부분에 [ ] 형식으로 들어간 것이라고 생각하면 될 것 같다.

 

 

 

② 그래프 꾸미기

▷ 축 레이블 (label) / 범례 (legend) / 제목 (title) - 기본1

간단하게 표시하는 것을 우선 살펴보겠다.

 

 

 

▷ 축 레이블 (label) / 범례 (legend) / 제목 (title) - 기본2

그래프 실습을 위해 데이터들을 샘플로 생성해보자.

 

 

np.linspace(start, stop, num) : Linearly Spaced

  - num 값은 생성할 값의 개수를 의미한다.

 

 

plt.show() 하기 전에는 그래프에 표현하고 싶은 것들을 계속 적어주면 된다.

plt.legend(loc=location, ncol=number of column)

 

 

▷ 축 범위 (limit)

일단 기본적으로 축 범위는 입력 데이터를 기준으로 자동 설정이 된다.

 

 

plt.xlim() / plt.ylim() 을 통해서 표현할 축 범위를 강제할 수 있다.

 

 

▷ 축 스케일 (scale)

⒜ 선형 스케일 (linear scale)

  - 일반적으로 사용되는 스케일

  - 값이 일정 간격으로 증가/감소 하는 경우

 

⒝ 로그 스케일 (logarithmic scale)

  - 값의 크기 차이가 큰 경우

  - 지수적으로 증가하는 데이터나 큰 범위의 데이터

 

⒞ 로그-선형 스케일 (log-linear scale)

  - x축을 로그 스케일, y축을 선형 스케일

  - x축이 시간 또는 크기인 경우 사용

 

⒟ 선형-로그 스케일(linear-logarithmic scale)

   - x축을 선형 스케일, y축을 로그 스케일

  - y축의 값 범위가 큰 경우, 대부분 작은 값 범위이고 일부 값이 매우 큰 경우

 

데이터를 먼저 준비하자. Exponential

 

 

여러 그래프를 묶어서 표시할 때 사용할 수 있는 것이 바로 plt.subplot()이다.

서브 그래프의 간격을 좁게 조절하기 위해서는 plt.tight_layout()을 사용할 수 있다.

 

 

실행 결과는 다음과 같다.

 

 

 

▷ 선 종류 (linestyle)

선 종류도 다양하게 할 수 있다.

 

 

 

▷ 마커 (marker)

그래프의 선 색깔을 정해줄 수도 있고,

값을 표시하는 marker도 다양하게 정해줄 수 있다.

 

 

참고로

교재에서는 plt.plot([3, 4, 5], "ro")로 제시했지만 그렇게 하면 선(line)은 표시가 안된다.

본래 "색깔-선-마커"의 순서대로 모두 정해줘야 하는데, 선 부분을 생략해서 나오지 않는 것이다.

 

값 위치를 표현할 여러 표식들은 다음 링크를 통해 확인할 수 있다.

  - https://matplotlib.org/stable/api/markers_api.html

 

 

 

▷ 선 색 (color)

선의 색상을 설정하는 방법도 여러가지로 제공해준다.

 

⑴ 이름 (예: 'violet')

⑵ 약자 (예: 'g')

⑶ RGB (예: (0.1, 0.2, 0.3))

⑷ 16진수 (예: '#FF0000')

 

 

색상으로 사용할 수 있는 값들은 다음 링크를 통해 확인할 수 있다.

  - https://matplotlib.org/stable/gallery/color/named_colors.html

 

 

 

▷ 제목 (title)

결국은 문자열(string)이기 때문에, 이와 관련한 설정들을 제공해준다.

 

 

다른 설정들은 익숙할 수 있는데, 조금 특이한 옵션이 바로 pad 이다.

그래프와 제목 사이의 거리인데, 이걸 잘 조절하면 예쁜 배치를 할 수 있을 것이다.

 

 

▷ 대제목 (super-title)

여러 개의 그래프를 묶어서 출력하는 경우,

전체를 대표하는 제목을 추가로 붙여줄 수 있다.

 

 

 

▷ 눈금 (ticks)

plot() 형식이 아니라 bar() 형식이 새롭게 등장했지만, 찬찬히 살펴보면 어렵지 않을 것이다.

xticks(눈금이 표시될 좌표, 표시할 텍스트 레이블) 형식이다.

 

 

 

▷ 그리드 (grid)

격자 모양의 선도 예쁘게 표시할 수 있다.

 

 

★ Helper

그런데, 지금 계속 간단하게 이런 것이 있다라는 것만 집어주고,

세부 옵션들에 대해서는 너무 안 살펴봐서 당황할 수도 있다.

 

이러한 옵션은 직접 보면서 필요에 따라 공부하면 충분하다.

 

함수 이름을 타이핑하고 "Shift + Tab" 키를 눌러주면 친절한 Docstring을 확인할 수 있다.

 

 

 

▷ 텍스트 (text)

굳이 이 정도까지 해야하나?! 할 수도 있지만... 그래프의 원하는 곳에 텍스트를 찍어줄 수도 있다.

 

 

옵션 중에 ha / va 부분이 낯설 수 있는데,

horizontal axis / vertical axis 즉, 수평 / 수직 정렬을 위한 옵션이라고 생각하면 된다.

 

 

 

③ 다양한 그래프 그려보기 ⑴

▷ 타이타닉 데이터셋 (titanic dataset)

MachineLearning 특히 Kaggle 공부를 하게 되면

누구나 만나는 아주 친숙한 타이타닉 데이터셋~!!

 

 

 

Pclass 기준으로 그룹화 해서 Survived 의 평균을 계산하고,

그룹화로 인해 제거된 기존 index를 대체해서 새롭게 index를 생성까지 해보자.

 

 

이 데이터들을 가지고 그래프를 그려보자.

 

 

이번에는 생존자들이 어느 항구에서 승선을 했는지를 살펴보자

 

 

이런 저런 내역들을 포함해서 그래프를 그려보자.

 

 

 

비슷한 방식인데, 이번에는 성별을 기준으로 데이터를 정리해보자.

 

 

이번에는 수평 막대 그래프로 그려보자.

 

그려보면 다음과 같다.

 

 

 

▷ 산점도 그래프

여러모로 자주 사용하는 산점도 그래프에 대해서 알아보자.

우선 가볍게 결측치 데이터를 살짝 걷어낸 데이터를 준비해보자.

 

 

scatter 그래프를 그려보자.

 

 

못보던 것들이 많이 보일텐데, 찬찬히 살펴보면 이해할 수 있을 것이다.

 

plt.figure(figsize=(12, 8)) : 12인치, 8인치 정도의 크기의 그래프로 셋팅

plt.scatter() : 산점도 그래프를 그린다.

  . c : 각 데이터 포인트의 색상을 지정

  . cmap : 컬러맵 지정

plt.legend() : 범례를 추가한다.

  . handles : 범례 핸들을 설정하는 것인데, 

                     scatter.legend_elements() 는 산점도 그래프에서 사용된 생상에 대한 핸들을 반환해준다.

 

 

 

▷ 파이 차트 (Pie Chart)

생존 여부를 가지고 간단하게 파이 차트를 그려보자.

 

 

 

 

 

▷ 히스토그램 (Histogram)

연속된 데이터를 구간으로 나누어 각 구간에 속하는 데이터의 빈도를 표현하는 그래프를 그려보자.

 

 

plt.hist() : 히스토그램을 그려준다.

  . bins : 구간 개수, 현재는 20개로 설정

  . edgecolor : 테두리 색상

 

 

 

 

④ 다양한 그래프 그려보기 ⑵

▷ 히트맵 (Heatmap)

히트맵은 2차원 데이터를 색상으로 표현하는 그래프인데, 2가지 방식의 그래프가 존재한다.

- matshow() : 정보를 명확하게 표시하고, 행/열 레이블을 추가하여 표시

- imshow() : 이미지만 표시, 행/열도 추가하지 않으며 색상도 표시하지 않음

 

 

plt.colorbar() : 오른쪽에 색상 참고를 위한 bar 표시

 

 

 

▷ 영역 채우기 그래프 (fill between)

데이터셋 간의 데이터 분포와 차이를 명확하게 시각화하는 데 유용하다.

 

일단 데이터를 준비해보자.

cut() : 연속형 변수를 구간별로 나누어 범주형 변수로 변환

(observed=False) : 데이터가 없더라도 모든 가능한 조합을 결과에 포함

.size() : 각 그룹의 빈도(크기)

.unstack() : 그룹화된 결과를 피벗 테이블 형태로 변환하여 index를 열로 포함

 

 

(0, 5] : 0 초과 5 이하

 

 

잘 활용하기 위해서는 alpha 값 등에 신경을 써야 겹치는 부분들에 대한 표현을 잘 할 수 있을 것 같다.

 

 

 

▷ 박스 플롯 (Box Plot)

그래프를 그리기 보다는 그냥 계산으로 사분위수를 계산하는 경우가 더 많지 않나 싶긴 하지만...

 

 

2등급/3등급 승객들은 이상치들이 보인다.

 

 

 

▷ 바이올린 플롯 (Violin Plot)

각 데이터 포인트의 밀도를 시각적으로 보여주는 특징

 

 

 

 

 

▷ 에러 바 (Error Bar)

개인적으로 처음 본 그래프 형태이다.

평균과 표준 편차를 구해서 이를 그래프로 표현하는 것이다.

 

 

 

Parch가 4일 때 평균 요금이 가장 높고, 길이가 긴 것으로 보아 해당 그룹의 요금이 크게 퍼져 있음을 표현한다.

Parch가 3일 때 평균 요금이 높지 않고, 에러바의 길이도 비교적 짧다.

 

 

 

⑤ 그래프 한꺼번에 그려보기

그래프를 표현한 결과물을 figure라고 한다.

1개의 그래프일 수도 있고, 여러 그래프일 수도 있다.

 

이미 앞에서 subplot()을 살짝 맛을 보긴 했는데,

실제로 여러 그래프를 한꺼번에 그리는 방법은 2가지가 있다.

 

⑴ .subplot()

  : 개별 서브플롯을 하나씩 추가하기

 

 

 

⑵ .subplots()

  : 개별 서브플롯을 동시에 생성하기

 

 

 

▷ 하나의 서브플롯에 여러 그래프 그리기 (twinx)

2개의 그래프를 그리기 위해 2개의 데이터를 준비했다.

 

 

.twinx() : X 축을 공유하는 새로운 axes 객체 생성

 

 

 

 

 

⑥ 그래프 저장하기

plt.savefig()를 사용해서 그림파일로 저장을 할 수 있다.

별도로 plt.show()를 실행하지 않아도 그래프가 출력된다.

 

 

그림 파일이 잘 생성되었음을 볼 수 있다.

 

 

와우... 힘들다.

반응형

데이터 분석 공부를 하게 되면

필수로 공부하게 되는 파이썬 라이브러리 코스 "Numpy → Pandas"

 

 

Numpy는 지난 번에 다음과 같이 살펴봤다.

- [파이썬 데이터 분석가 되기] 01 - NumPy

 

이번에 살펴볼 것은 "Pandas"

 

① 판다스 시작하기

② 데이터 내용 확인하기

③ 특정 열 선택하기

④ 데이터 필터링 하기

⑤ 결측치 처리하기

⑥ 데이터 통계 처리하기

⑦ 데이터프레임에 행/열 추가하거나 삭제하기

 

지난 포스팅에서도 말했지만 처음 공부하는 것은 아니기 때문에

기본적인 것들은 생략하고 기억하면 좋을 것들 중심으로 정리해보겠다.

 

책에서 언급하지 않는 내용들도 조금 더 포함했고,

설명 방법도 조금 다르게 정리한 내역도 있으니 참고하기 바란다.

 

실습은 local 환경에 mini-conda 설치해서

직접 Jupyter Notebook 띄워서 진행했다(당연히 Colab 환경과 별 차이는 없을 것이다).

 

 

 

① 판다스 시작하기

예전에는(예전이라고 해도 사실 그렇게 오래된 것은 아닐텐데, 요즘 AI 세상은 너무 빨리 변해서)

Numpy와 Pandas가 서로 상호보완적으로 많이 사용되었었던 것 같은데,

최근에는 사실 Pandas만으로도 대부분 처리할 수 있어서

굳이 Numpy 공부 후 Pandas를 공부할 필요 없이 바로 Pandas로 공부를 해도 괜찮은 것 같다.

다만, Pandas도 Numpy를 기반으로 한다고 할 수도 있기에... 뭐 같이 공부한다고 손해볼 것은 없다.

 

Pandas에서 제공하는 데이터 타입

- Series: 1차원 배열과 같은 형태. index와 value로 구성.

- DataFrame: 2차원 배열 형태. index와 column으로 구성. 하나의 column은 Series.

 

 

▷ List to Series

pd.Series() 함수에 List를 넣어주면 된다.

 

index와 value로 잘 생성된 것을 볼 수 있을 것이다.

value에 여러 형식의 데이터 타입이 포함되어 있기에 'object'로 분류 된다.

 

 

▷ Dict to DataFrame

pd.DataFrame()에 Dictionary 데이터를 넣어주면 된다.

 

 

print()로 출력을 하면 안예쁘게 나오는데,

Jupyter Notebook 환경인 점을 이용해서 그냥 해당 변수를 찍어주면 나름 예쁘게 내용을 살펴볼 수 있다.

 

 

 

▷ DataFrame to CSV File

Pandas DataFrame은 다양한 형태로 저장할 수도 있다.

일반적으로 많이 사용하는 CSV 파일로 저장을 하고 싶으면 .to_csv() 를 사용하면 된다.

 

 

"index=False" 파라미터를 주지 않으면 행 이름까지 저장하는 것을 막기 위한 코드이다.

왼쪽 파일 목록에 생성한 CSV 파일이 보일 것이다.

 

 

CSV File to DataFrame

반대로 CSV 파일을 읽어와서 DataFrame을 만드는 것은 어떻게 할 수 있을까?

정답은 ".read_csv()"

 

 

local에 있는 파일뿐만 아니라 웹에 있는 파일도 불러올 수 있다.

 

 

 

▷ DataType in Pandas

"int / float / object" 3종 밖에 없는 줄 알았는데, 의외로 다양한 데이터타입을 지원하고 있다.

하지만, 중요한 것은 결국 "object"

 

 

 

 

② 데이터 내용 확인하기

▷ columns

앞에서 생성한 내역을 이용해서 column 내용부터 확인해보자.

 

 

column은 기본적으로는 Index 형식이고, list 데이터 타입으로 변환해서 살펴볼 수도 있다.

 

 

▷ index

column과 마찬가지로 index에 대해서도 살펴보자.

 

 

여기에서 나오는 index는 실제 데이터 안에 포함된 정보가 아니라

일련번호로 설정되어 있다.

 

index 값을 명시적으로 정해주면 어떻게 될까?

 

 

내가 원하는 형태로 설정할 수가 있다.

 

임의로 정해준 값이 아니라, 명시적인 값이 있는 Index 형태의 데이터로 되었다는 것을 확인할 수 있다.

 

 

 

▷ loc[ ]

이렇게 정해진 index 값을 이용해서 특정 행을 지칭할 수도 있다.

앞서 살펴본 Numpy에서의 indexing / slicing 모두 적용 가능하다.

 

 

 

▷ head() / tail() / sample()

데이터의 일부 내용을 살펴보는 방법들을 알아보자.

 

데이터 앞부분의 내역을 살펴보는 것은 head()를 사용하면 된다.

 

 

기본적으로는 5개의 데이터를 보여주지만, 원하는 양만큼 보고 싶으면 파라미터로 전달하면 된다.

데이터의 뒷 부분을 살펴보는 것은 tail()을 살펴보면 된다.

 

 

임의의 데이터를 뽑아서 보여주는 것은 sample()이 있는데,

기본적으로 1개의 데이터를 보여주지만 원하는 양이 있으면 파라미터로 전달해주면 된다.

 

 

 

▷ shape

데이터의 전체 크기를 살펴보고 싶으면 shape을 찍어보면 된다.

정말 자주 사용하는 것인데, 함수 형태가 아님을 주의깊게 살펴보기 바란다.

 

 

▷ info()

DataFrame 데이터의 전체적인 내용을 살펴보고 싶으면 info()를 사용해보자.

 

 

정말 많은 정보를 깔끔하게 잘 보여주고 있다.

 

index 및 column 정보들을 상세하게 보여주고 있으며,

각 column의 Non-Null 정보, DataType 정보들을 모두 보여주고 있다.

심지어 차지하고 있는 메모리 크기까지도 알려준다.

 

모두 중요한 정보이지만, 가장 중요하게 살펴봐야 할 것은 Non-Null Count 부분이지 싶다.

결측치가 얼마나 있는지에 따라 후속으로 진행해야 할 일들이 정해지기 때문이다.

 

 

 

③ 특정 열 선택하기

▷ 단일 column = Series

DataFrame의 column 하나는 Series로 볼 수도 있다.

이것을 어떻게 추출할 수 있는지를 살펴보자.

 

 

"DataFrame['column_name']" 형식으로 column을 추출할 수 있다.

이렇게 추출했을 때, index 정보까지 같이 따라오는 것도 확인할 수 있다.

 

 

"DataFrame.column_name" 형식으로도 column을 추출할 수 있다.

 

 

▷ 복수 column = DataFrame

원하는 column의 조합으로 추출하고자 할 때에는

"DataFrame[['column1', 'column2', 'column#'] ]" 형식으로 수행할 수 있다.

 

 

여기에서 주의깊게 살펴봐야할 것은 "이중 대괄호"로 표기해야하는 것이다.

복수 column을 표기하려면 대괄호로 묶어서 넣어줘야 하는 것이다.

 

앞에서 하나의 column을 추출하면 Series라고 했는데,

1개 열로 구성된 DataFrame으로 추출할 수도 있다.

 

 

"DataFrame['column_name']" 형식으로 했을 때 Series로 추출되었음을 확인할 수 있다.

그런데, "DataFrame[['column_name']]" 형식으로 추출하면 DataFrame으로 추출할 수 있다.

 

 

이 부분은 잘 기억해둬야겠다.

 

 

▷ Boolean Indexing

특정 조건에 맞는 행을 선택하는 방법으로 'Boolean Indexing'이라는 방법이 있다.

 

 

이것을 활용해서 원하는 열들의 특정 조건에 맞는 행 데이터들을 추출하는 방법은 다음과 같다.

 

 

행의 조건을 앞에 정의하고 원하는 column을 뒤에 명시한다고 생각하면 될 것 같다.

 

 

 

④ 데이터 필터링 하기

여기부터는 정신 똑바로 차리고 잘 살펴봐야 한다. (빤짝!)

앞서 잠깐 살펴본 "Boolean Indexing"의 심화과정이라고 생각할 수 있을 것 같다.

 

 

DataFrame에 대해서 '비교 연산자'를 사용하면 전체 행에 대한 boolean 결과가 나온다.

이것을 DataFrame Column에 넣어주면 True 행만 추출이 되는 것이다.

 

 

 

▷ Operators

단순한 비교 연산자 외에 다른 연산자들을 더 알아보자.

 

먼저 살펴볼 것은 '부정 연산자(~, Not Operator)'이다.

 

 

다음 알아볼 것은 and(&) / or(|) 연산자를 알아보자.

 

 

조건문을 변수로 받을 수도 있다.

 

 

▷ loc[ ] / iloc[ ]

앞에서 "loc[ ]"에 대해서 간단히 맛을 봤다.

index를 명시적으로 지정해서 특정 행을 추출했었던 것인데, 이번에 좀 더 일반적인 사용법을 알아보겠다.

 

DataFrame.loc[ row, column ]

 

너무나 간단해보이지만, 정말 다양한 변형 활용이 가능하다.

 

DataFrame.loc[ :, [column1, column2] ]

DataFrame.loc[ [row1, row2], [column1, column2] ]

 

 

행 부분을 조금 더 알아보자.

 

 

index 값을 명시적으로 기재한 경우에는 잘 동작했으나,

slicing과 같은 방법으로는 제대로 실행이 되지 않는다.

 

 

index 숫자로 지정하고 싶은 경우에는 "iloc[]"를 사용하면 된다.

명칭 자체가 그렇다 ^^ "iloc(Integer Location)"

 

name을 사용하고 싶으면 loc[],

index를 사용하고 싶으면 iloc[]

 

 

▷ isin()

띄어쓰기가 생략된 문법이다 ^^

is in ()

 

 

isin() 함수 역시 결과가 Boolean 행렬로 나온다.

그렇기에 Boolean Indexing과 같은 방식으로 사용하면 된다.

 

여기에서 주의할 것은 파라미터로 넘길 때 하나의 요소만 사용하더라도

list 형태로(대괄호) 넘겨줘야 한다는 점이다 !!!

 

 

 

⑤ 결측치 처리하기

머신러닝, 데이터 분석 등을 할 때 가장 중요한 것 중 하나가 바로 결측치에 대한 관리다.

 

▷ NA, NaN, None

결측치라는 것은 값이 비었다는 것인데, 이것을 어떻게 표기할 것인지에 대한 문제가 있다.

Pandas에서는 "NA (Not Available)", "NaN (Not a Number)", "None" 두 가지 방식으로 표기하고 있다.

 

 

DataFrame 데이터 내역을 보다보면 "NaN"으로 되어있는 결측치를 볼 수 있다.

보다 일반적인 것은 Numpy의 "NaN" 개념이고, 실제로도 "np.nan"으로 지칭하는 것이 일반적이다.

 

NaN은 Numpy에서 사용하는 것이고, None은 Python 자체에서 사용하는 것이다.

NA 정도가 Pandas에 특화된 것인데, 나름의 추가적인 특성도 갖고 있다.

 

 

세가지 모두 NaN 처리가 되었지만, 조금 다른 특성들이 있긴 하다.

 

여러 상황을 고려하기 싫으면 np.nan을 사용하길 권장하고,

굳이 numpy 라이브러리를 import하기 싫을 때(pandas만 import 했을 때)에만 pd.NA를 사용하면 되지 않을까 한다.

 

 

이런 결측치 값을 어떻게 할 것인지에 대해서 다음의 4단계로 알아보자.

 

⒜ 확인하기

⒝ 대체하기

⒞ 제거하기

⒟ 추출하기/저장하기

 

 

⒜ 확인하기 - .isna() /  .isna().sum() / .info()

각 값의 NaN 여부를 확인해볼 수 있다.

 

 

사실 알고 싶은 것은 각 column의 결측치 개수가 궁금하기에 .sum() 함수까지 붙여주는 것이 더 일반적이다.

한눈에 확 들어온다!

 

 

사실 .info() 만으로도 충분히 알 수는 있다.

 

 

비율을 확인해볼 수도 있다.

 

 

⒝ 대체하기 - .fillna() / .replace()

nan 값을 정해준 값으로 fill 해주는 함수이다.

 

 

셀레나 쌤(저자)이 말한 것처럼 원본을 그대로 작업하는 것이 명확하고 좋다. 또한 메모리도 보다 효율적이다.

 

하지만, 이것 저것 테스트해보고 공부할 때에는 원본을 그대로 놔둔채로

장난감(?)을 하나 만들어서 마음껏 뜯고 맛보고 즐기고(^^),

필요하면 다시 또 원본에서 장난감을 만들고... 하는 방식이 편해서 나는 위와 같이 해봤다.

 

말이 길어질 수도 있어서... 책에서도 뒤에 언급할 것으로 예상되지만,

Python의 특성상 그냥 변수에 할당하면 원본과 연결 고리가 생기므로

.copy()로 확실하게 명시적으로 연결고리가 끊긴 복사본을 만들어서 변수 할당해줘야 한다.

 

이번에는 .replace()를 이용해서 결측치 값을 대체해보자.

 

 

 

앞의 .fillna()도 그렇고, .replace()도 그렇고 자기 자신의 값을 실제 변경하지는 않는다.

변경한 결과값을 되돌려 줄 뿐이다.

그렇기에 앞에 원본에 그 결과를 반영하라고 변수 할당해줘야 변경한 값을 저장한다.

 

 

⒞ 제거하기 - .dropna(axis=#)

일단 현재까지 진행된 데이터프레임 데이터들의 상황을 확인해보자.

 

 

앞서 결측치의 값 대체를 통해서 대부분 처리를 했고, 하나의 column이 남아있다.

 

 

꼭 하나의 column에 대해서만 적용되는 것은 아니고,

결측치가 있는 column을 삭제해버리고 싶을 때 사용하는 것이 바로 .dropna(axis=1) 이다.

 

 

파라미터로 있는 axis=1 부분을 보면 알겠지만, column이 아닌 row에 대해서도 적용할 수 있다.

 

 

결측치 값이 하나라도 있는 row에 대해서는 모두 삭제를 해버렸기 때문에, 하나의 row만 남았다.

그러면, 내가 지정한 column을 기준으로만 결측치 row를 삭제하고 싶으면 어떻게 해야할까?

 

 

subset 파라미터로 column 목록을 지정해주면 된다.

 

※ inplace=True

앞에서 잠깐 언급했는데, pandas의 상당히 많은 함수들의 경우에 원본 값을 직접 수정하지 않는다.

그래서 지금까지처럼 함수 실행 결과를 변수에 할당하도록 작성을 했다.

하지만, pandas에서는 그냥 바로 원본에 그 결과를 반영하도록 할 수 있는 파라미터가 있다.

 

 

뭔가 편해보이지만, 사실 권장하는 방법은 아니다.

앞서서 말했지만, 원본을 수정하는 것 자체를 그다지 권장하지 않기 때문이다.

그냥 이런 방법도 있구나~ 하고 참고하기 바란다.

 

 

⒟ 추출하기/저장하기 - .to_csv()

이렇게 정제 작업을 거친 결과를 다음을 위해 파일로 저장을 해보자.

 

 

예쁘게 잘 저장된 것을 확인할 수 있다.

다음에는 정제 작업을 다시 할 필요 없이 해당 파일을 바로 불러오면 된다.

 

 

⑥ 데이터 통계 처리하기

데이터들이 모여 있으니 이에 대한 통계 정보를 확인하는 것은 당연한 수순일 것이다.

 

▷ 평균값(mean) / 중앙값(median) / 합계(sum) / 최댓값(max) / 최솟값(min)

가장 기본적인 통계값들을 구해보자.

 

 

너무 편하다!!

 

▷ 표준편차(std) / 분산(var)

표준편차와 분산도 그냥 쓰면 된다.

 

 

▷ count() / value_counts()

count()는 결측치를 제외한 row의 개수를 알려준다.

value_counts()는 값 각자가 몇 개가 있는지를 알려준다.

 

 

▷ describe()

지금까지 살펴본 통계값들을 포함해서 기본적인 통계치를 한 번에 확인할 수 있다.

 

 

앞에서 살펴보지 않은 것은 사분위수 정도 밖에 없을 것 같다.

사분위수는 나중에 이상치(outlier) 처리할 때 심도있게 살펴보지 않을까 한다.

 

 

▷ 집계(aggregate) - agg()

원하는 column의 원하는 통계치만 보고 싶을 때 agg()을 활용할 수 있다.

 

 

지정하지 않은 부분은 NaN으로 나온다.

 

 

▷ groupby()

공부해보면 사실 별것도 아닌데,

개인적으로 머리에 잘 들어오지 않는 이상한 아이라서 신경이 많이 쓰인다 ㅠㅠ

 

 

type 값이 "TV Show"인 row들에 대해서 "release_year" 값의 평균, "duration" 값의 합계를 구하려고 할 때

"groupby()"를 사용하면 손쉽게 할 수 있다.

 

 

'type'으로 그룹핑해서 'duration'의 평균을 각각 구하라는 의미이다.

좀 더 복합적인 상황을 살펴보자.

 

 

type 값이 'Movie'이고 country 값이 'United States'인 데이터의

'duration' 평균값만 추출하고 싶으면 어떻게 해야할까?!

 

 

row를 지칭하는 부분을 주의깊게 살펴보기 바란다.

list 형식이 아니라, 튜플(tuple) 형식으로 사용한다.

 

 

 

⑦ 데이터프레임에 행/열 추가하거나 삭제하기

▷ 행/열 추가

새로운 row를 하나 추가하는 것을 살펴보자.

일단 Dict 타입으로 추가할 row 데이터를 하나 준비하자.

 

 

새로 추가할 index(row) 값을 지정해서 값을 넣어주면 끝이다.

 

 

index 값을 가지고 새로운 row를 추가하는 것인데, iloc[]가 아닌 loc[]를 사용하고 있는 것을 조심해야 한다.

iloc[]의 경우에는 기존의 데이터 범주에 대해서만 사용할 수 있기 때문에

새로운 row를 추가하는 것에는 사용할 수 없다.

 

column을 추가하는 것은 변수값 지정하듯이 사용하면 된다.

 

 

 

▷ 행/열 삭제 - drop()

drop()에서 axis 파라미터 값을 이용해 행/열 모두 삭제할 수 있다.

 

 

np.arange(2, 5)를 통해서 2부터 4까지의 값을 얻어낼 수 있기 때문에,

2, 3, 4 행이 삭제되었음을 알 수 있다. (axis=0)

 

이번에는 열(column)을 삭제해보자.

 

 

Column 이름을 지정해주고 axis=1 파라미터를 전달해서 column을 삭제했다.

 

 

우와 엄청 많은 내용이었다.

힘들다.

 

그래서 스터디 제출 기간을 살짝 오버했다 (사실 중간에 여행가느라... ㅋㅋㅋ)

 

반응형

사실 개인적으로 NumPy 공부가 처음이 아니기에,

너무 기본적인 부분은 skip 하고 계속 기억하면 좋을만한 것들만 추려서 포스팅하겠다.

 

 

1. Environment

 

뭔가 차별점을 두기 위해 실습 환경을 다음과 같이 정해서 진행해보겠다.

  - Ubuntu 20.04

  - Miniconda + conda-forge

  - Jupyter Notebook

 

혹시 모를 저와 같은 삐딱한 마음을 먹으신 분들이 계시면, 아래 링크를 참고하세요 ^^

- 회사에서 Anaconda 사용하기 (Miniconda + conda-forge)

 

conda를 이용하여 가상환경을 생성하고,

 

 

Jupyter Notebook 패키지들을 설치하고,

 

 

Jupyter Notebook을 실행하면 된다.

 

 

그러면 아래와 같이 예쁜 웹 페이지가 짜잔~

 

 

실제 잘 동작하는지까지만 조금 더 살펴보자.

 

 

Local 환경에서는 기본적으로 numpy 라이브러리도 설치가 안되어 있기에 필요하다면 설치를 해줘야 한다.

이런 불편함(?)이 앞으로 종종 발생하겠지만, 바로 이런 부분이 know-how 이자, 역량이라고 믿는다! 😁

 

 

 

2. Axis

매번 방향이 헷갈려서 일단 값 넣어보고, 결과 확인 후 '어? 이게 아닌가?'하는 ... 그 악명 높은 axis !!!

 

 

왜 axis 위치가 자꾸 변하는걸까?

아래 코드를 잘 살펴보자.

 

 

shape에서 나오는 순서대로 번호가 매겨진다고 생각하면 될 것 같다.

책에서는 다음과 같이 설명해주고 있다.

 

 

같은 이야기를 하고 있으니 각자 편한 방법으로 기억하면 되겠다.

 

 

 

3. Data Type

사실 그리 신경을 쓰지 않았던 부분이긴 한데,

이번에 데이터 타입 코드에 대해 새롭게 알게 되어서 좋았다! (비트와 바이트를 넘나드는 표기법 왠지 싫다!)

 

 

코드를 이용해서 확인해보면 다음과 같다.

 

 

기본값으로 64비트 = 8바이트나 사용하다니! 이런 부르주아 같은 넘파이 !!!

 

 

 

4. Make ndarray

리스트나 튜플로부터 넘파이 배열을 만드는 것은 아래 내용 참고해보면 된다.

 

 

일련의 데이터 생성과 함께 차원을 변경하는 것까지 살펴보면 다음과 같다.

 

 

이번에는 0부터 100까지의 임의의 숫자로 3차원 넘파이 배열을 만드는 것을 살펴보자.

 

 

수학의 기본은 0과 1이다 😁

원하는 차원만 입력해주면 된다.

 

 

 

 

5. Operations

이제 본격적으로 연산에 대해서 알아보자.

 

 

행렬에서의 사칙연산은 같은 위치끼리의 연산으로 이루어진다.

위의 예시를 꼼꼼하게 살펴보기 바란다.

 

하지만, 행렬 연산의 꽃은 사칙 연산이 아니라 "행렬 곱셈"이다.

영어로는 'Matrix Multiply"이지만, 약자인 "matmul"로 더 많이 불리운다.

연산 기호로는 "@"가 쓰인다.

 

 

우리의 colorful한 책에서는 다음과 같이 친절하게 연산 과정을 설명해준다!

이 그림 하나면 끝이다!!! 😍

 

 

의외로 종종 사용하게 되는 비교 연산도 할 수 있다.

 

 

 

 

6. Functions

넘파이가 기본적으로 제공해주는 다양한 함수들이 있다.

 

 

넘파이 함수에 배열을 넣어주는 방법 말고,

넘파이 배열에서 바로 함수를 호출하는 방법도 있다.

 

 

그런데, 모든 함수가 이렇게 되는 것은 아닌 것 같다.

조심해서 사용해야 할 것 같다.

 

 

많이 사용하는 집계 함수들에 대해서도 알아보자.

 

 

함수의 파라미터로 axis를 넣으면 원하는 방향으로의 값을 계산할 수도 있다.

 

 

 

 

7. Indexing and Slicing

넘파이 배열의 특정 위치에 있는 값을 확인하고 싶다면? 인덱싱을 이용하면 된다!

 

 

처음에 이런 사용법을 봤을 때 깜짝 놀랐다. ","를 사용하다니????

자고로 배열이라면 "[ ]"을 이용해야지 !!!

 

 

그렇다! 배열처럼 사용할 수도 있다.

 

하지만, 넘파이에서 다루는 데이터 타입을 배열이라 생각하지 말고,

"행렬"이라고 생각을 하면서 ","를 사용하는 것을 기준으로 삼아야 할 것이다 😎

 

이번에는 slicing에 대해서 살펴보자.

 

 

"asi[0, 0:2]"에 대해서 말로 설명을 해보면,

"0 행에 있는 0부터 2 이전까지(1까지)의 컬럼에 있는 값으로 이루어진 행렬(배열)"이다.

 

"맨 처음부터" 또는 "맨 끝까지"와 같은 표현도 가능하다.

 

 

아무것도 명시하지 않으면 all의 의미를 갖는다.

 

 

 

8. Boolean Indexing

넘파이 행렬에 특정 조건에 맞는지 여부를 확인하려면 다음과 같이 할 수 있다.

 

 

행렬 크기는 유지하면서 Boolen 값으로 채워지게 된다.

이것을 이용하면 다음과 같이 할 수 있다.

 

 

특정 조건에 맞는 값만 채워져있는 새로운 행렬(배열)이 만들어진다.

당연한 이야기이지만, 조건을 굳이 변수에 담지 않고 바로 사용할 수도 있다.

 

단순히 출력에만 이용할 것이 아니라 값 변경에도 활용할 수 있다.

 

 

 

 

9. Integer Array Indexing

특정 행렬(배열)에 있는 값들을 이용해서 다른 행렬을 만들고자 할 때 사용할 수 있는 방법이다.

 

 

다차원 형태로 만들 수도 있다.

 

 

 

 

10. reshape

ML이나 DS에서도 많으 쓰이지만, 특히 DL에서 많이 사용되는 reshape 😍 행렬(배열)의 형태 바꾸기 !!!

 

 

당연한 것이지만, 요소 개수가 맞아 떨어져야 한다.

만약 안맞으면?

 

 

에러를 밷어낸다 😅

 

특이한 파라미터 "-1"은 일종의 "auto"라고 보면 될 것 같다.

 

 

정해진 값을 기준으로 알아서 값을 맞춰준다.

 

reshape() 함수의 사촌인 resize() 함수도 있다.

 

 

reshape()은 원본을 직접 수정하지 않고, resize()는 원본 자체를 변경한다.

 

DL 공부할 때 많이 사용하는 평탄화(flatten)를 해보자.

 

 

실제로는 reshape(-1)을 많이 사용하는 것 같다.

 

 

 

11. Transpose

행과 열을 바꾸는 전치(transpose)에 대해서 살펴보자.

 

 

두 행렬을 행렬곱 하면 어떻게 될까?

 

 

첫번째 행렬의 행의 개수와 두번째 행렬의 열의 개수가 맞지 않아 행렬곱을 할 수가 없다.

앞 또는 뒤에 있는 행렬을 전치해줘야 한다.

 

 

원본 값을 수정하지는 않는다. 원본 자체를 바꾸고 싶으면 "bt = bt.T" 와 같이 사용해야 한다.

 

 

 

12. stack / split

행렬을 합치는 것이 stack, 분할하는 것이 split이다.

 

행렬을 합칠 때에는 수평(horizontal) 방향으로 합칠 것인지,

수직(vertical) 방향으로 합칠 것인지 정해서 해야 한다.

 

 

분할도 방식은 똑같은데, 몇 조각으로 쪼갤 것인지만 추가해주면 된다.

 

 

*stack 계열과 마찬가지로 사용할 수 있는 것이 conatenate() 함수도 있다.

 

 

axis 값을 이용해서 방향을 지정할 수가 있다.

그런데, 아래와 같은 에러를 만날 수 있다.

 

 

어!? 아까 vstack()은 잘 되었는데!? 왜 에러가!?

 

 

css 행렬을 경우 1차원이기 때문이다.

같은 차원끼리만 concatenate()를 할 수가 있다.

그래서 같은 차원으로 만들어서 진행하면 된다.

 

*split() 함수의 경우 행렬을 나눠주는 것인데,

마지막 2개의 행만 뽑아오고 싶거나 하면 어떻게 해야할까?

 

그런 경우에는 slicing을 이용하면 될 것 같다.

 

 

우와아아.... 정말 길다.

연습문제까지 포함하면 총 88페이지까지의 분량이다.

 

연습문제는 나중을 위해 아껴 두겠다. (절대 퓌곤해서가 아니다! 정말! 정말이라구!)

반응형

대학원 연합 모임을 같이 하는 분이 책을 냈다고 하여 바로 책을 구매했는데,

마침 또 이 책을 가지고 스터디를 한다고 하여 이렇게 기록을 위한 포스팅도 남겨 본다.

 

책 표지

 

처음엔 그냥 아는 분이 쓴 책이라 하여 별 생각없이 구매한건데,

유튜브 강의, 오픈카톡방, 핸드북 ... 그리고 이렇게 스터디 모임까지 직접 ... 와우! 정성이 가득 !!!!

 

표지의 저 우주인 캐릭터도 귀염뽀짝 😍

 

 

책 표지에서도 언급한 "데이터 분석 로드맵"

 

데이터 분석을 위해 어떤 공부를 해야하는지

전체적인 그림을 보면서 공부를 할 수 있어서 너무 좋을 것 같다.

 

데이터 분석 로드맵

 

개인적으로도 공부할 때,

전체적인 큰 흐름을 보면서 지금 어떤 부분을 하고 있는 것인지 확인하면서 공부하는 것을 너무 좋아한다!!!

 

 

이 책에서는 기본적인 개발 환경을 Google Colab으로 하고 있다.

 

"처음 공부하는 사람을 배려"했다는 저자의 말을 생각해보면,

가장 무난하고 개인 차이도 없을 것이라 괜찮긴 한데...

 

우리 회사같은 내부망 구성인 경우 Local 환경을 갖춰야 하는 경우도 있기에,

Mini-Conda 환경 구성 등을 소개해줬으면 더욱 더 좋았을거라 생각해본다 😎

 

 

실습에 필요한 CSV 파일 등은 아래와 같이 구글드라이브로 제공해준다.

GitHub Repository로 제공해주는 것이 더 편한데.... 🙄 (개인 취향)

 

데이터 파일

 

Notebook(Colab) 파일도 구글 드라이브로 제공해준다.

역시나, 개인적인 취향은 GitHub-Repository 인데.... 😥

 

Notebook 파일

 

Colab 파일 안에는 강의 슬라이드로 사용할 이미지도 들어가 있다.

 

강의 슬라이드

 

거기에다가 셀레나쌤의 직강 강의가 등록되어있는 유튜브 채널도 있다 !!!

- https://www.youtube.com/@SELENASSAM

 

youtube

 

셀레나쌤과 함께 스터디도 할 수 있고

질의 응답도 할 수 있는 카카오톡 오픈 채팅방도 있다.

 

 

 

그리고 파이썬 초보자를 위한 '파이썬 핸드북'도 PDF 파일로 제공해준다.

 

HANDBOOK

 

우와~

책 한 권 샀을 뿐인데, 뭔가 선물을 몽창 더 많이 받은 기분이다 😍 😍 😍

 

뭔가 몽창 받았으니, 열쒸미 공부해봐야겠다.

반응형

Pandas가 너무 유명하다보니

수 많은 alternative 라이브러리들이 쏟아지고 있으며 특히, 속도를 개선한 유형이 많다.

 

그러다가 Pandas 보다 100배 더 빠르다는 불오리를 발견하게 되었다.

- https://hwisnu.bearblog.dev/fireducks-pandas-but-100x-faster

 

 

응?! FireDocks가 대체 뭔데, 이런 성능을 보여준다는거지?!

- https://fireducks-dev.github.io/

 

 

성능이 너무 잘 나와서인지 최근 엄청난 뉴스들이 쏟아지고 있다.

성능도 성능이지만, 기존에 Pandas로 작성한 코드를 그대로 사용할 수 있다는 점도 또 하나의 매력이다.

 

실제 측정한 성능은 어떻게 될까?

- https://fireducks-dev.github.io/docs/benchmarks/

 

 

자기들이 측정한 것이라 믿지 못할 수도 있겠지만,

실험한 환경 및 코드를 모두 공개하고 있으니 거짓말은 아닐 것이다 ^^

 

직접 코드를 한 번 돌려봤다.

테스트 환경은 Google Colab을 사용했다.

 

 

현재 최신 버전은 v1.1.5 이다.

 

테스트를 하기 위한 데이터를 생성하고,

실제 groupby 및 mean 실행을 통해 연산을 하는 소요 시간 측정 코드를 작성했다.

 

 

Pandas로 실행을 했을 때엔 3초의 시간이 소요되었는데,

FireDucks는 눈 깜짝 할 사이에 실행이 되어버리는 것을 볼 수 있다.

 

 

라이브러리 호출 부분만 변경했을 뿐인데, 성능이 좋아진다면 사용하지 않을 이유가 없을 것 같다.

 

라이선스는 "the 3-Clause BSD License (the Modified BSD License)"이다.

- https://github.com/fireducks-dev/fireducks

 

 

이렇게 훌륭한 라이브러리를 누가 만들었을까!?

- https://www.nec.com/en/press/202310/global_20231019_01.html

 

 

응?! 여기에서 갑자기 NEC ?!

어쩐지 공식 홈페이지에서 지원하는 언어가 English 외에 Japanese가 있더라니...

 

한 때는 가전제품도 생산을 해서 가끔 눈에 띄이곤 했는데,

요즘은 B2B 사업이나 통신 설비 등에 주력해서인지 주변에서 잘 보이진 않는다.

하지만, 11만명 이상의 임직원이 있는 글로벌한 기업이다.

 

 AI 및 클라우드 사업도 한다고 하던데,

이런 훌륭한 라이브러리도 만들어서 공개하고.... 괜찮은데!?

반응형

안드레 카파시(Andrej Karpathy)와 더불어

초보 병아리들을 위한 강의에 정말 진심인 또 한 명의 명장, 앤드류 응(Andrew Ng) 아저씨 !!!

 

이번에는 파이썬 그것도 그냥 파이썬이 아니라 AI 파이썬 강의를 가지고 찾아오셨다.

- https://www.deeplearning.ai/short-courses/ai-python-for-beginners/

 

 

살짝 아쉬운 점은 한국어 더빙 또는 한글 자막이 있으면 좋았겠지만,

영어 자막 정도로 만족해야 한다. (훌륭한 무료 강의인데, 이것만으로도 감지덕지!)

 

 

출석부 도장 쾅!

 

 

동영상 녹화 강의 단점을 해소하기 위한 AI Chatbot을 제공해준다.

아쉽게도 한글은 안되고 영어로만 된단다.

 

Python 공부와 영어 공부를 한 번에 해결할 수 있다! (원영적 사고!)

 

 

강의를 꾸준하게 듣게 하기 위해 여러가지 수단을 동원하는 듯~ ^^

 

 

가장 멋진 부분 !!!

실습을 하는 환경도 하나의 화면에 같이 제공을 해준다 !!!

 

 

그냥 일반적은 그런 Python 초보 강의가 아니다.

"AI Python" 제목을 달고 있는 강의이다.

 

어떤 차이가 있냐고?

실습 프로젝트 자체가 다르다.

 

Custom Recipe Generator(맞춤형 레시피 생성기): Create an AI-powered tool that generates unique recipes based on available ingredients. You’ll use variables, f-strings, and AI prompts to craft personalized culinary creations.

 

- Smart To-Do List(스마트 할 일 목록): Build an intelligent task manager that not only stores your to-do items but also prioritizes them using AI. You’ll apply your knowledge of lists, dictionaries, and decision-making code to enhance productivity.

 

- Travel Blog Analyzer(여행 블로그 분석기): Develop a program that reads travel blog entries and uses AI to extract key information like restaurant names and popular dishes. This exercise showcases your ability to work with files and leverage AI for text analysis.

 

- Dream Vacation Planner(꿈의 여행 일정 설계자): Create a sophisticated itinerary generator that takes a multi-city trip plan and uses AI to suggest daily activities, including restaurant recommendations. You’ll work with CSV files, dictionaries, and AI prompts to build this comprehensive travel tool.

 

- Data Visualization Project(데이터 시각화 프로젝트): Using popular Python libraries like matplotlib, you’ll create visual representations of data. This could involve plotting price trends of used cars or visualizing travel statistics from your vacation planner.

 

- Web Data Extraction(웹 데이터 추출): Use the BeautifulSoup library to scrape web pages and extract useful information, opening up a world of data for your projects.

 

- Real-time Data Application(실시간 데이터 응용 프로그램): Build a program that interacts with web APIs to fetch and process real-time data, such as current weather information or live currency exchange rates.

 

 

AI와 Python에 관심이 있는 초보자들을 대상으로 하고 있는 훌륭한 강의이다.

이 모든 것이 무료로 제공되는데도 공부를 하지 않는 다면 .... 반성해야 한다!!!

 

반응형

요즘 저녁에 러닝을 하기 위해 격일로 조금 일찍 퇴근을 하는데.

비 예보가 있다는 것을 미처 인지하지 못해서 일도 못하고 러닝도 못하는 그런 사태가...

 

이런 핑계(?)로 갑자기 날씨 정보를 API로 얻어오는 것을 한 번 해보고 싶어졌다.

갑자기? 갑자기!

 

날씨 정보를 어디에서 얻어와야 할까!?

당연히 기상청 !!!

https://www.data.go.kr/data/15084084/openapi.do

 

무료인데다가 심지어 샘플 코드까지 제공해주고 있다.

샘플코드 - Python

 

사용을 위해서는 오른쪽 상단에 위치한 "활용신청"을 클릭하면 된다.

활용신청

 

적절한 내용으로 작성하여 신청하면, 즉시 승인이 된다.

신청 결과

 

상세 내용을 보면 다음과 같이 인증키 정보를 확인할 수 있다.

상세 내용

 

이제 잘 동작하는지 검증을 해보자.

 

1. Python 환경을 맞춰야 한다.

- requests 모듈을 사용하기 위해 설치가 필요하다.

 

2. 지역 위경도값을 확인하자.

- 공공데이터 포털에서 제공하는 참고문서를 다운로드 받아야 한다.

  . 기상청41_단기예보 조회서비스_오픈API활용가이드_(240715).zip

 

- 압축을 풀면 문서 파일이 2개 나오는데, 위경도 정보가 있는 엑셀 파일을 확인하면 된다.

 

- 내가 확인하고자 하는 지역의 X, Y 값을 확인하면 된다.

 

3. 코드 작성

- 다음과 같이 간단한 코드를 작성해보자.

  . API 키는 일반 인증키(Decoding )으로 사용했다.

 

- 실행 결과는 다음과 같이 나온다.

 

 

각 값들의 의미나 활용 관련하여서는 다운로드 받은 참고 자료 中 워드 파일을 살펴보면 된다.

sample

 

일단 기본적인 확인을 해봤으니,

아침에 자동으로 알람 오도록 만들어봐야겠다! ^^

반응형

[문제] Python으로 "Hello world!"를 가장 간단하게 출력하는 방법은?

[정답] 다음과 같은 방법을 생각해낸 사람은 파이썬 고수!!!

Hello world!

 

 

[문제] "python -m antigravity"를 실행하면 어떤 결과가 나올까?

[정답] 'antigravity'의 뜻은 반중력이며, 모든 것을 밀어내는 성질을 의미한다.

antigravity

 

응?! 아무것도 출력되는 것 없이 그냥 끝난다. 그런데... 갑자기 웹 브라우져가 실행되는데...

https://xkcd.com/353/

 

설마 XKCD를 처음보는 분이 계실리가.....?!

 

계실 수도 있으니 ^^ 설명을 해보자면,

 

랜들 먼로(Randall Munroe)가 일주일에 3번 연재하는 Web-Comic으로

공대 개그, Geek스러운 개그가 주된 유머 코드이다.

 

XKCD

 

웹사이트 메뉴 中 WHAT IF? 컨텐츠를 기반으로 책도 출간했다. 번역본도 있다.

아주 위험한 과학책

 

재밌지 않나!?

python CLI 가지고 별 이상한 일이 다 생긴다 ^^

 

 

[문제] python 으로 그래픽 UI를 어떻게 표현할 수 있는지 쉽게 설명할 수 있는 방법은?

[정답] python 에는 오랜 역사(?)를 갖고 있는 거북이(turtle) 모듈이 있다.

turtle demo

 

응!? turtle demo도 지원해준다고!?

turtle example

 

신기한(?) 윈도우가 하나 실행된다.

examples

 

하나 골라 보자.

clock example

 

turtle 모듈을 이용한 예제 코드도 볼 수 있고,

윈도우 하단의 "START"를 클릭하면 실행 결과도 확인할 수 있다.

 

"python -m turtledemo" 실행 하나만으로 이런 어플이 뜬다니,

대체 이런 것들은 어디에 숨어있었던 것인지...

 

그동안 Python을 몇 년 동안 만져왔는데, 지금까지 이런 것들을 전혀 몰랐다니!

 

 

생각보다 재미있어서 이런 것들 찾아서 몇 번 더 포스팅해보겠다 ^^

 

 

반응형

+ Recent posts