Numpy in Python
One Dimensional Numpy
안녕 친구! 이번에는 numpy라는 걸 배울 거야. numpy는 과학 계산을 도와주는 도구인데, 이걸 사용하면 많은 것을 할 수 있어. numpy를 사용하면 빠르게 계산할 수 있고, 컴퓨터 메모리도 적게 사용하게 돼. 그럼 이제 numpy를 이용해서 어떻게 쓰는지 몇 가지 예시를 보여줄게!
- numpy 배열 만들기: numpy 배열은 숫자들이 모여 있는 것이야. 파이썬 리스트처럼 생겼지만, 모든 요소가 같은 타입이어야 해. 그래서 numpy 배열을 만들 때는 이렇게 해볼게:
import numpy as np
my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
- 배열에서 숫자 바꾸기: numpy 배열에서 특정 위치의 숫자를 바꿀 수도 있어. 예를 들어, 첫 번째 숫자를 100으로 바꾸고 싶으면 이렇게 해볼게:
my_array[0] = 100
- 벡터 연산하기: 벡터는 방향과 크기가 있는 화살표 같은 거야. numpy를 이용하면 벡터끼리 더하거나 빼기도 쉬워. 예를 들어, 두 벡터 u와 v가 있으면 이렇게 더해볼 수 있어:
u = np.array([1, 2])
v = np.array([3, 4])
z = u + v
- 벡터에 숫자 곱하기: 벡터에 숫자를 곱할 수도 있어. 예를 들어, 벡터에 2를 곱하면 이렇게 해볼게:
y = np.array([1, 2])
y_times_2 = y * 2
- 배열에서 최대값 찾기: numpy 배열에서 가장 큰 숫자를 찾으려면 이렇게 해볼게:
my_array = np.array([1, 2, 3, 4, 5])
max_value = my_array.max()
이렇게 numpy를 이용하면 많은 일을 할 수 있어! 더 배우고 싶으면 numpy.org를 참고해보면 돼. 이걸로 numpy를 어떻게 사용하는지 알게 됐겠지? 수고했어!
Two Dimensional Numpy
넘파이를 이용해서 2차원 배열을 만들고 다룰 수 있어. 예를 들어, 길이가 같은 세 개의 리스트를 가지고 있는 리스트 a가 있다고 해봐. 이걸 넘파이 배열로 바꾸면, 이걸 직사각형 행렬처럼 생각할 수 있어.
행렬에서는 첫 번째 요소가 행, 두 번째 요소가 열이야.
넘파이 배열의 요소에 접근할 때는 대괄호를 사용해.
대괄호 안의 첫 번째 숫자는 행, 두 번째 숫자는 열이야. 예를 들면, [1, 2]는 두 번째 행과 세 번째 열에 있는 값을 의미해. 슬라이싱도 넘파이 배열에서 가능해.
넘파이에서 배열끼리 더하거나, 스칼라(숫자 하나)로 곱하거나, 두 배열끼리 곱할 수도 있어. 배열끼리 더하면, 같은 위치에 있는 요소끼리 더해지고, 스칼라로 곱하면 각 요소가 그 숫자로 곱해져.
배열끼리 곱하는 건 각 요소끼리 곱하는 거야.
예를 들어, 배열 X와 Y가 있다고 해봐.
X + Y는 같은 위치의 요소끼리 더한 새로운 배열이고,
Y * 2는 배열 Y의 각 요소를 2배한 새로운 배열이야.
그리고 X * Y는 같은 위치의 요소끼리 곱한 새로운 배열이 돼.
두 배열을 곱하면 Hadamard 곱셈이 수행되어 동일한 위치에 있는 요소끼리 곱해진 새로운 배열이 생성돼
넘파이로 행렬 곱셈도 할 수 있어. 행렬 곱셈은 조금 복잡한데,
행렬 A의 행과 행렬 B의 열끼리 곱해서 더하는 방식이야.
넘파이에서는 이렇게 행렬 곱셈을 할 수 있어: A @ B.
이런 거 말고도 넘파이로 많은 것들을 할 수 있어. 넘파이 홈페이지에서 더 많은 정보를 찾아볼 수 있어!
자세한 내용은 numpy.org를 참조해
Simple APIs
이 동영상에서는 API(애플리케이션 프로그래밍 인터페이스)에 대해 다룹니다. 특히, API의 개념, API 라이브러리, 그리고 REST API를 포함한 요청/응답 및 PyCoinGecko 예제를 설명합니다.
API는 두 소프트웨어 간에 상호작용을 가능하게 합니다. Pandas는 여러 소프트웨어 구성 요소로 이루어져 있으며, 데이터를 처리하기 위해 pandas API를 사용하여 다른 소프트웨어 구성 요소와 통신합니다. 예를 들어, dataframe을 사용하여 head 메서드를 호출하면 API가 데이터프레임의 처음 몇 행을 표시합니다. mean 메서드를 호출하면 API가 평균을 계산하여 반환합니다.
REST API는 인터넷을 통해 통신하는 인기 있는 API 유형으로, 스토리지, 데이터 액세스, 인공 지능 알고리즘 등의 자원을 활용할 수 있습니다. 클라이언트는 요청을 보내고 응답을 받습니다. 일반적으로 HTTP 메시지를 통해 요청이 전달되며, JSON 파일에 작업 지시가 포함됩니다. 웹 서비스는 작업을 수행한 후, HTTP 메시지를 통해 응답을 반환합니다.
예제로, PyCoinGecko를 사용하여 암호화폐 데이터를 수집하는 방법을 살펴봅니다. 라이브러리를 설치하고 가져온 후, 클라이언트 객체를 생성하고, 데이터를 요청하는 함수를 사용합니다. 이 함수는 지난 30일 동안의 비트코인 데이터를 미국 달러로 가져옵니다. 응답은 중첩 리스트를 포함한 파이썬 딕셔너리 형태의 JSON입니다.
우리는 가격만 관심사이기 때문에, 가격 키를 사용하여 선택합니다. 중첩 리스트를 데이터프레임으로 변환하여 작업을 단순화합니다.
PyCoinGecko를 사용하여 암호화폐 데이터를 수집하는 방법을 설명하겠습니다. 먼저 PyCoinGecko 라이브러리를 설치해야 합니다. 터미널이나 명령 프롬프트에서 다음 명령어를 실행하세요:
pip install pycoingecko
그런 다음 다음 코드를 사용하여 암호화폐 데이터를 수집할 수 있습니다:이 코드는 CoinGecko API를 사용하여 지난 30일 동안의 비트코인 가격 데이터를 수집하고, 이를 pandas DataFrame으로 변환하여 출력합니다. 타임스탬프는 읽기 쉬운 날짜 형식으로 변환됩니다. 이를 통해 다양한 암호화폐 데이터를 수집하고 분석할 수 있습니다.
from pycoingecko import CoinGeckoAPI
import pandas as pd
# CoinGecko API 클라이언트 객체 생성
cg = CoinGeckoAPI()
# Bitcoin 가격 데이터를 USD로 표시하고 지난 30일 동안의 데이터를 가져옵니다.
coin_data = cg.get_coin_market_chart_by_id(id='bitcoin', vs_currency='usd', days=30)
# 관심있는 데이터인 'prices'만 선택합니다.
prices = coin_data['prices']
# 데이터를 pandas DataFrame으로 변환합니다.
df = pd.DataFrame(prices, columns=['timestamp', 'price'])
# 타임스탬프를 읽기 쉬운 형식으로 변환합니다.
df['date'] = pd.to_datetime(df['timestamp'], unit='ms')
# 결과 DataFrame을 출력합니다.
print(df)
판다스의 to_datetime 함수를 사용하여 타임스탬프를 읽기 쉬운 형식으로 변환합니다. 이렇게 하여 읽기 쉬운 시간 데이터를 생성합니다. 그런 다음 새 열인 'date'에 출력을 추가합니다.
마지막으로, 캔들스틱 차트를 생성하려면 일별 데이터를 그룹화하여 각 날짜의 최소, 최대, 첫 번째, 마지막 가격을 찾습니다. 그 후 plotly를 사용하여 캔들스틱 차트를 생성하고 플롯합니다. 이제 HTML 파일을 열어서 이 캔들스틱 차트를 확인할 수 있습니다. 차트를 'candlestick_chart.html' 파일로 저장하고 자동으로 엽니다. 이제 웹 브라우저에서 캔들스틱 차트를 확인할 수 있습니다.
import plotly.graph_objects as go
# 일별 데이터를 그룹화합니다.
df['date'] = df['date'].dt.date
daily_data = df.groupby('date').agg({"price": ['min', 'max', 'first', 'last']})
# MultiIndex 컬럼을 단일 인덱스로 변환합니다.
daily_data.columns = daily_data.columns.to_flat_index().map('_'.join)
# 캔들스틱 차트를 생성합니다.
fig = go.Figure(data=[go.Candlestick(x=daily_data.index,
open=daily_data['price_first'],
high=daily_data['price_max'],
low=daily_data['price_min'],
close=daily_data['price_last'])])
# 차트의 레이아웃을 설정합니다.
fig.update_layout(title='Bitcoin Candlestick Chart',
xaxis_title='Date',
yaxis_title='Price (USD)')
# 차트를 저장하고 출력합니다.
fig.write_html('candlestick_chart.html', auto_open=True)
이 동영상을 통해 API, 특히 REST API의 개념과 기본 작동 원리에 대해 배웠습니다. 또한, PyCoinGecko를 사용하여 암호화폐 데이터를 수집하고 시각화하는 예제를 살펴보았습니다. 이러한 기술은 데이터 처리와 시각화를 위한 강력한 도구로 사용되며, 다양한 소프트웨어 구성 요소와 웹 서비스와 상호작용할 수 있는 높은 유연성을 제공합니다.
Webscraping
웹 스크레이핑을 정의하고, BeautifulSoup 객체의 역할을 이해하며, find_all 메소드를 적용하고, 웹사이트를 웹 스크레이핑하는 방법을 배울 수 있습니다.
웹 스크레이핑은 웹사이트에서 자동으로 정보를 추출하는 프로세스입니다. 이 작업을 수행하려면 Python 코드와 두 가지 모듈인 Requests와 Beautiful Soup가 필요합니다.
예를 들어, 다음 웹페이지에서 국가 농구 리그 선수들의 이름과 연봉을 찾으려고 합니다.
BeautifulSoup을 가져와서 웹페이지의 HTML을 문자열로 저장할 수 있습니다. BeautifulSoup 생성자에 문서를 전달하여 문서를 구문 분석할 수 있습니다. BeautifulSoup 객체를 사용하여 HTML을 트리 형태의 객체로 표현하고, 이를 구문 분석하는 데 사용되는 메소드를 가집니다.
예를 들어, 웹페이지에서 각 선수의 이름을 찾으려면 다음과 같이 할 수 있습니다.
from bs4 import BeautifulSoup
import requests
url = "your_webpage_url"
response = requests.get(url)
html_doc = response.text
soup = BeautifulSoup(html_doc, 'html.parser')
player_names = soup.find_all('h3')
for name in player_names:
print(name.text)
이 예에서는 웹페이지에서 'h3' 태그를 찾아 선수들의 이름을 출력합니다. 마찬가지로, 연봉 정보가 포함된 태그를 찾아 추출할 수 있습니다.
웹 스크레이핑을 사용하면 수동으로 데이터를 찾아서 복사하고 붙여 넣는 대신 몇 분 안에 웹사이트에서 원하는 정보를 추출할 수 있습니다. 이를 통해 다양한 웹페이지에서 유용한 데이터를 추출하는 방법을 적용할 수 있습니다.
.
.
Working with different file formats (csv, xml, json, xlsx)
- JSON (JavaScript Object Notation): 언어에 독립적인 데이터 형식으로, Python 딕셔너리와 유사합니다. JSON 라이브러리를 사용하여 파일을 열고 읽을 수 있습니다.
import json
with open('example.json', 'r') as file:
data = json.load(file)
print(data)
- XML (eXtensible Markup Language): 태그로 데이터를 구조화하는 마크업 언어입니다. XML 라이브러리를 사용하여 파싱하고 데이터를 추출할 수 있습니다.
import xml.etree.ElementTree as ET
import pandas as pd
tree = ET.parse('example.xml')
root = tree.getroot()
data = {'Header1': [], 'Header2': [], 'Header3': []}
for elem in root:
data['Header1'].append(elem.find('Header1').text)
data['Header2'].append(elem.find('Header2').text)
data['Header3'].append(elem.find('Header3').text)
df = pd.DataFrame(data)
print(df)
'Data Analysis > Data Engineering' 카테고리의 다른 글
IBM Data Engineer - Introduction to Relational Databases (RDBMS) (0) | 2023.04.19 |
---|---|
IBM Data Engineer - Extract, Transform, Load (ETL) (0) | 2023.04.18 |
IBM Data Engineer - Python for Data Science, AI & Development 3 (0) | 2023.04.18 |
IBM Data Engineer - Python for Data Science, AI & Development (0) | 2023.04.05 |
IBM Data Engineer - Introduction to Data Engineering (0) | 2023.04.04 |
댓글