반응형

1. 삼성전자 주식 정보를 파이썬으로 크롤링해 보자

네이버 주식에서 삼성전자 주가 정보를 크롤링 해보려 한다. 23년 8월 4일 금요일 종가 기준, 삼성전자의 주가는 68,300원이다. 
 
삼성전자라고 검색했을 때 나오는 종합 정보 가격 그러니까 전일/시가/고가/저가/거래량을 한번에 볼 수 있는 곳 말고, 아래 시세 정보를 통해 봐야 크롤링하기 더 편하다. 그 이유로는 아래 종합 정보 가격에서는 삼성전자 주가 정보 68,300원이 em 태그 아래 각각의 span 태그에 들어가 있는데 우리가 원하는 가격 68,300원이 아니라 6,8,3,0,0이 떨어져있다. 크롤링을 할수는 있겠지만 크롤링 하고 합치고 하는 과정이 번거롭기도 하고, 굳이 이렇게 번거롭게 크롤링 하지 않아도 된다. 그 이유는 시세 정보에서 크롤링을 쉽게할 수 있기 때문이다.
 

 
시세 정보 링크는 아래와 같다.

 

네이버 증권

국내 해외 증시 지수, 시장지표, 뉴스, 증권사 리서치 등 제공

finance.naver.com

네이버 증권 시세 정보를 들어가서 현재가 정보를 클릭하며 보면 반갑게 68,300원 가격 정보가 온전히 들어가 있는 것을 볼 수 있다. strong 태그 아래 class 정보는 tah p11 . 자 이제 크롤링을 위한 준비는 다 마쳤다. 삼성전자 주가 정보를 이제 크롤링 해 보자.
 

 
<파이썬 코드>

import requests
from bs4 import BeautifulSoup

url = requests.get('https://finance.naver.com/item/sise.naver?code=005930')
html = BeautifulSoup(url.text)
price = html.find('strong', class_='tah p11').text
print(price)
68,300

삼성전자 종목 하나만 크롤링 하는건 매우 간단하다. 필요한 라이브러리를 불러오고 URL을 읽어 낸 다음, 프라이스 정보에 tag 정보와 class정보만 올바르게 입력하면 된다. 주소 링크에서 code = 005930라고 써져 있는데 이는 삼성전자의 코드 정목을 뜻 한다. 만약 삼성전자 한개가 아니라 LG전자의 주가 정보도 함께 크롤링 하고 싶으면 이 코드 정보를 수정 하면 된다. 
 

2. 삼성전자를 포함한 다른 회사의 주식 정보도 함께 크롤링 해 보자

 
 아래는 크롤링 코드이다.

import requests
from bs4 import BeautifulSoup

codes = ['005930','066570']

for i in codes:
    url = requests.get(f'https://finance.naver.com/item/sise.naver?code={i}')
    html = BeautifulSoup(url.text)
    price = html.find('strong', class_='tah p11').text
    print(price)

몇가지 주의 사항으로는 기존 URL 주소에서 코드 넘버를 입력한 부분에 i를 입력해주고, https:// 앞 format의 f를 입력해주면 된다. 그리고 이 전체 코드를 for문에 적용해주면 쉽게 삼성전자와 LG전자의 주가 정보를 크롤링 할 수 있게 된다. 결과값은 아래와 같다.

68,300
103,600

 

참고로 f-string은 파이썬 3.6 이상 버전에서 도입된 문자열 포맷팅 방식 중 하나로, 문자열 안에서 변수나 표현식을 간단하게 포맷팅할 수 있는 방법이다. f-string은 문자열 앞에 f 또는 F를 붙여서 사용하며, 중괄호 {} 안에 변수나 표현식을 넣어서 사용한다. 아래는 f-string의 기본적인 사용법과 예시이다:

 

name = "Alice"
age = 30

# 변수를 f-string으로 포맷팅
formatted_string = f"My name is {name} and I am {age} years old."
print(formatted_string)

# 수식과 표현식을 f-string으로 포맷팅
x = 10
y = 20
result = f"The sum of {x} and {y} is {x + y}."
print(result)

f-string 내부의 중괄호 {} 안에 변수 이름이나 표현식을 넣으면 해당 부분이 실제 값으로 치환된다. 이렇게 하면 변수나 수식을 문자열에 쉽게 삽입할 수 있다.

 

크롤링 하고 나서 보니, 크롤링은 하였지만 결과에 대해서는 조금 하찮아보이기도 한다. 이 정보 자체로는 아무것도 할 수 없을테니. 다만 이런 기초 학습을 통해 네이버 주식 정보에서 대한민국에 상장된 모든 코스피 시세 정보도 크롤링 할 수 있으니, 조금씩 조금씩 공부하면서 실력이 늘도록 도움이 되었으면 한다. 나에게도 , 그리고 이 블로그 글을 읽을 누군가를 위해서도 조금씩 성장하는 즐거움을 주기 위해 크롤링 한 내용들을 기록으로 남기려 한다.

 

파이썬 공부를 하면서 느낀건데 매일 매일 하면 조금씩 는다. 그것도 아주 조금씩. 그런데 조금이라도 안 하면 금방 까먹는다. 하루에 한 보 전진하다가, 갑자기 2보 후퇴 하는 느낌이 든다. 파이썬 공부를 하면서 조금씩 성장하는 과정은 물론이고, 그 과정에서 느껴지는 즐거움은 큰 의미를 가진다. 작은 목표를 달성하거나 새로운 기술을 습득하는 등의 성장은 자기 성취감을 준다. 이러한 감정은 자신에게 긍정적인 자아 이미지를 형성하고 자신감을 높여줄 뿐만 아니라 작은 단계로 성장하면서 지속적인 동기 부여를 유지할 수 있다. 큰 목표를 이루기까지의 길은 멀고 힘들 수 있지만, 작은 성취들은 그 과정을 재미있고 가치있게 만들어준다. 성장하는 과정에서 새로운 경험과 지식을 얻게 된다. 새로운 것을 배우고 시도함으로써 세상을 더 풍부하게 느낄 수 있다.그리고  작은 도전과 과제들을 해결하면서 문제 해결 능력이 향상된다. 결국 엉덩이 무겁게 버티는 사람이 성장하는 느낌인데 이 능력은 삶의 다양한 상황에서 도움이 되며, 어려운 문제에 더 자신감 있게 접근할 수 있게 해준다. 결국 이러한 작은 성장들이 쌓이면서 지속적인 발전을 경험하게 된다. 이는 더 나은 방향으로 성장하기 위한 계획을 세우는 데 도움을 줄 수 있다.

 

작은 성장들은 큰 변화를 만들어낼 수 있는 첫 단계입니다. 제게 하는 말이기도 하지만 이 블로그를 읽는 모든 분들이 이러한 성장의 순간들을 즐기며 더 나은 미래를 향해 나아갈 수 있기를 바랍니다.

반응형
Posted by 마르띤
,
반응형

제목 그대로 R vs 파이썬, 무엇이 더 좋을까?

 

나도 파이썬을 배우기 전에는 R을 먼저 공부하였다. 2016년으로 기억한다. 당시는 방통대 통계학에 편입하여 공부하고 있었는데, 교재에서 많은 데이터들이 R을 다루기도 하였고, 인터넷으로 검색을 해보니 R 강의도 많았다.

 

파이썬이 없었던 것은 아니였지만, 처음 교재로 R을 접하다보니 자연스롭게 노출된 언어를 먼저 공부하게 되었다. 당시에도 R이냐 파이썬이냐를 두고 갑론을박을 했던 기억이 난다. 기억으로는 통계를 할거면 R, 통계를 넘어 개발까지 고민한다면 파이썬을 공부하라는 전문가의 말도 있었고, 어떤 프로그램 언어에 채용 공고가 많은지 보라는 의견도 있었다. 실제로 지금도 해당 내용은 인터넷 검색이 쉽게 되는데 당연하지만 파이썬의 채용공고가 더 많다. 그리고 캐글. 캐글은 데이터쟁이들의 놀이터인데 압도적인 비율로 파이썬을 사용한 결과값을 많이 제출하였고, R만 알던 나에게 파이썬도 해야겠구나...라고 생각하게 만들었던 생각이 난다. 

 

문득 챗 GPT는 뭐라고 말할지 궁금해졌다. 두 프로그램 언어 중 무엇이 좋은지 물어보았다.

둘 다 데이터 분석과 머신러닝 분야에서 매우 인기 있는 프로그래밍 언어이며, 각각의 장단점이 있습니다. 어떤 언어를 배울지 선택하는 것은 주로 개인의 용도, 선호도, 배우기 쉬운 언어 등을 고려해야 합니다. 아래는 각 언어의 특징과 강점을 설명해드리겠습니다:
R 언어:
  1. 통계 및 데이터 분석에 최적화: R은 통계 분석과 데이터 시각화를 위해 설계된 언어로, 데이터 분석가와 통계학자들에게 매우 인기가 있습니다.
  2. 풍부한 패키지와 라이브러리: R은 CRAN (Comprehensive R Archive Network)을 통해 수많은 패키지를 제공하여 데이터 분석에 필요한 다양한 기능을 지원합니다.
  3. 데이터 시각화: R은 ggplot2 등의 라이브러리를 통해 풍부하고 멋진 데이터 시각화를 제공합니다.
  4. 통계적 테스트 및 모델링: 통계적 가설 검정과 회귀 분석 등 다양한 통계적 기법을 지원합니다.
Python:
  1. 다목적 프로그래밍 언어: Python은 데이터 분석뿐만 아니라 웹 개발, 자연어 처리, 인공지능, 자동화 등 다양한 분야에서 사용되는 다목적 프로그래밍 언어입니다.
  2. 머신러닝 라이브러리: Python은 Scikit-learn, TensorFlow, PyTorch 등 머신러닝 및 딥러닝 라이브러리가 풍부하며, 머신러닝 프로젝트에 유용합니다.
  3. 데이터 처리 라이브러리: Pandas와 NumPy를 통해 데이터를 쉽게 처리하고 분석할 수 있습니다.
  4. 커뮤니티 지원: Python은 넓은 커뮤니티와 다양한 온라인 자료들이 있어 학습과 문제 해결에 유용합니다.
따라서, 데이터 분석과 통계에 초점을 맞추고 싶다면 R을 선택하는 것이 좋을 수 있습니다. 반면에, 데이터 분석 외에도 다른 영역에서도 활용하고 싶다면 Python을 선택하는 것이 유용할 수 있습니다. 또한, 두 언어를 모두 배우는 것도 가능하며, 상황에 따라 적절하게 선택하여 활용하는 것도 좋은 전략입니다.

 

R의 장점으로는 통게 및 데이터 분석에 최적화 되있다는 점이다. 통계적 가설 검정을 많이 했던 기억이 난다. 그리고 일본 저자가 쓴 교재를 통해 시각화 공부도 많이 했었다. 파이썬은 역시나 데이터 분석 외 이야기들이 많이 나온다. R만으로 머신러닝이 되지 않는건 아닌데, 파이썬은 R에서 제공하지 못하는 많은 분석 외적 영역을 제공해주곤 하였다. 그리고 이게 지금 내가 파이썬을 공부하는 가장 큰 이유인데 유저가 많다는 것이다. 당연히 구글 검색을 하면 관련된 결과가 더 많이 나와 공부하기 쉬운 환경이다.

 

물어보다 파이썬으로 했을 때 R 대비 장점을 한번 더 물어보았다.

파이썬은 다목적 프로그래밍 언어로 다양한 분야에서 사용되며, R에 비해 다음과 같은 장점들이 있어 파이썬만으로 해결하기 쉬운 것들이 있습니다:
  1. 웹 개발: Django, Flask 등의 웹 프레임워크를 사용하여 웹 애플리케이션을 개발할 수 있습니다.
  2. 자연어 처리(NLP): Natural Language Toolkit(NLTK) 등의 라이브러리를 통해 텍스트 데이터를 분석하고 처리할 수 있습니다.
  3. 컴퓨터 비전: OpenCV와 같은 라이브러리를 사용하여 이미지 및 비디오 처리, 객체 감지, 얼굴 인식 등을 수행할 수 있습니다.
  4. 자동화 및 스크립팅: 간단한 작업부터 복잡한 프로세스까지 자동화할 수 있는 강력한 스크립팅 언어입니다.
  5. 인공지능과 머신러닝: TensorFlow, PyTorch, Scikit-learn 등의 라이브러리를 통해 딥러닝 모델과 머신러닝 모델을 구축할 수 있습니다.
  6. 빅데이터 처리: PySpark를 사용하여 대규모 데이터를 처리하고 분석할 수 있습니다.
  7. 게임 개발: Pygame을 사용하여 2D 게임을 만들 수 있습니다.
  8. 네트워크 프로그래밍: 소켓 프로그래밍을 통해 네트워크 애플리케이션을 구축할 수 있습니다.
  9. 데이터베이스 연동: 다양한 데이터베이스와 연동하여 데이터를 읽고 쓸 수 있습니다.
물론 이러한 분야들 중에 일부는 R에서도 패키지를 통해 지원되기도 합니다. 하지만 파이썬은 다양한 분야에서 폭넓게 사용되기 때문에, 더 다양한 프로젝트와 활용 가능성이 있습니다. 따라서, 파이썬만으로도 R을 대체할 수 있는 경우가 많습니다. 다만, 특정 분석 기법이나 시각화에서 R이 더 편리할 수도 있으니 상황에 맞게 선택하는 것이 중요합니다.

 

반응형
Posted by 마르띤
,
반응형

파이썬 코딩 실력을 한 단계 늘려줄 함수를 고른다면 단연컨데 for문을 고를 것이다.

for문은 반복적으로 뭔가 반복적인 계산을 수행할 때 사용하면 된다. 이것만 기억하면 된다. 반복은 컴퓨터가 사람보다 잘 한다는 것을!

 

1. 파이썬으로 2단 구구단 만들어보기

number = [1,2,3,4,5,6,7,8,9]
for i in number:
    print(2*i)

첫번째 줄: 먼저 number에 1부터 9까지의 숫자를 리스트에 담아 number라는 변수에 담아 줍니다. 이제 for문을 조합해 2단을 출력해볼 순서이다.

두번째 줄: numbers의 각 숫자 값 하나하나를 변수 i에 입력

세번째 줄: 2 * i의 결과값을 출력. 주의할 것은 for문이 적용되는 것을 알리기 위해 들여쓰기를 한 것이다.

 

위 코드를 돌리면 아래와 같은 결과값을 얻을 수 있다.

2
4
6
8
10
12
14
16
18

 

2. 파이썬으로 1부터 10까지 더해보기

num = 0 
for i in range(1,11):
    num = num +i
    print(num)

첫번째 줄: num이라는 변수에 0이라고 저장을 해 준다.

두번째 줄: range를 사용, 숫자 1~10을 i에 넣어준다. range(1,11)은 1~11이 아닌 1~10임을 기억하자

세번째 줄: num=0에서 i 그러니까 1부터 10을 차례대로 더해준다. 처음 num은 0 이므로 0 + 첫번째  i 값인 0+1의 결과값인 1을 적용한다. 그리고 나서는 새롭게 저장된 num 1에 두 번째 i 값인 2를 더해주어 3이라는 결과값을 얻는다.

네번째 줄: num의 결과값을 출력한다.

 

그러면 아래와 같은 결과값을 얻을 수 있다.

1
3
6
10
15
21
28
36
45
55

 

range가 나왔는데 조금 부연설명을 하면 아래와 같다. for와 range문은 늘 자주 쓰이는 것을 보게 될 것이다. 그도 그럴 것이 for문을 통해 반복할 숫자를 range를 통해 지정할 수 있기 때문! range(10)은 1~10이 아닌 0~9임을 기억하면 된다. for문이 적용될 print 는 들여쓰기를 하였고, i값에 0~9가 반복적으로 등장함을 볼 수 있다.

 

for i in range(10):
    print("Hello, world", i)
Hello, world 0
Hello, world 1
Hello, world 2
Hello, world 3
Hello, world 4
Hello, world 5
Hello, world 6
Hello, world 7
Hello, world 8
Hello, world 9
 

 

3. 파이썬으로 2단 구구단을 표현하되, 그 과정도 함께 출력하자

for i in range(1,10):
    print(2, 'x',i, '=', 2*i )

첫번째 줄: 먼저 range(1,10)을 이용, 1~9의 값을 i에 넣어준다.

두번째 줄: for문이 적용되어 들여쓰기를 하였고, 2 x i 를 프린트 한 후 결과값엔 2*i를 적용해준다. 그러면 아래와 같은 결과값을 얻을 수 있다.

2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18

 

4. 파이썬으로 구구단 2단, 3단 구해보기. for문 반복적으로 사용하기

for i in range(2,4):
    for j in range(1,10):
        print(i,'x',j,'=',i*j)

첫번째 줄: range(2,4)를 통해 2,3 값을 변수 i에 저장

두번째 줄: 들여쓰기를 한 후 숫자 1~9의 값을 또 다른 변수 j에 저장

세번째 줄: 2 * 1~9 , 그리고 3*1~9값을 반복한 후 프린트. 그 결과값은 아래와 같다.

2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27

 

for문의 가장 기초 of  기초 내용이다. for문을 잘 쓰면 크롤링을 하거나 머신 러닝 시 매우 유용하다. 크롤링 할 때 긁어오는 여러 페이지 값을 입력하지 않아도 되고, 머신러닝을 할 때 최적의 이웃값을 구할 때 반복적으로 n 값을 넣어주면서 최적의 결과값을 얻을 수 있기도 하다.

 

숙제로 2,3단 뿐만 아니라 9단까지 해보는 건 어떨지? 

반응형
Posted by 마르띤
,