본문 바로가기
728x90

프로그래밍74

[Python] 일별 timestamp 만들기 시계열 데이터의 index를 날짜로 설정하고 싶을 때, 데이터 포인트가 n개 있으면 날짜도 n개가 필요합니다. 이때 n개의 날짜를 쉽게 만들 수 있는 함수 'rrule'을 소개드리겠습니다. rrule rrule은 dateutil에 포함된 함수로, 파이썬에 기본으로 설치돼있습니다. 간단하게 rrule 사용 코드를 보면, 아래와 같습니다. from datetime import datetime, timedelta from dateutil.rrule import rrule, DAILY list(rrule(DAILY, dtstart=datetime.now() - timedelta(days=100), until=datetime.now())) 'dtstart' 날짜부터 'until' 날짜까지 1일 주기(DAILY) .. 2024. 2. 15.
[Python] Pandas보다 빠른 Polars 일봉, 1시간봉 정도의 큰 timeframe을 다룰 땐 데이터 사이즈가 그렇게 크지 않습니다. 한 종목의 일봉은 10년동안 2500개만 생길테니까요. 이정도 데이터면 pandas도 충분합니다. 하지만, 수천 종목의 1분봉/틱 데이터를 pandas로 다루긴 힘듭니다. 이에 대한 해결책으로 polars라는 패키지가 있습니다.(polars 설명: https://medium.com/cuenex/pandas-2-0-vs-polars-the-ultimate-battle-a378eb75d6d1) 위 설명을 한 장의 그림으로 요약하면, 아래와 같습니다. 모든 면에서 Polars가 Pandas보다 빠르죠. 때문에, 저는 원래 pandas로 하던 작업을 모두 polars로 갈아타고 있습니다. 속도가 빠른 이유는, rust.. 2023. 7. 8.
[Solidity] 컨트랙트에 입금된 이더리움 출금하기 NFT 스마트 컨트랙트를 만들어 판매가 시작되면, 구매자들의 이더리움이 내 스마트 컨트랙트에 저장됩니다. 이 돈은 아직 내 지갑에 들어온 돈이 아니기에, 출금 신청을 해야만 합니다. 따라서 Solidity 코드 안에 출금 기능을 넣어봅시다. 아래 코드처럼 함수를 만들어주면 됩니다. contract MyContract is ERC721URIStorage, Ownable { function withdraw() external payable onlyOwner() { payable(owner()).transfer(address(this).balance); } } 예시에선 두 개의 클래스를 상속받고 있는데요, 이 중 필요한 클래스는 Ownable입니다. 컨트랙트 주인의 계좌에 송금하는 코드이므로 계좌 주인만 사용.. 2022. 2. 20.
Hardhat으로 Rinkeby 테스트넷에 스마트 컨트랙트 업로드하기 스마트 컨트랙트 개발이 완료됐다면, 이더리움 메인넷에 업로드하기 전, 먼저 제대로 작동하는지 테스트를 해볼겁니다. 기존처럼 단순히 로컬 hardhat 네트워크에서 테스트하는게 아니라, 실제 내 지갑과 연결하고 스마트 컨트랙트가 작동하는 모습을 확인하고 싶다면, Rinkeby라는 테스트넷을 사용해야 합니다. Rinkeby외에도 여러 테스트넷이 있지만, 개인적으로 가장 편리하다고 생각하는 네트워크기 때문에, 이를 기준으로 설명해보겠습니다. Rinkeby 계정 만들기 이 포스트를 보시는 분들은 모두 Solidity 개발을 해보신 분들일테니, 아마 Metamask 계정은 이미 있으실겁니다. Metamask를 켜면 아래처럼 내 계좌가 뜨는데요, 맨 위에 'Rinkeby 테스트 네트워크'라고 뜨는게 보이시나요? 지.. 2022. 1. 14.
Hashlips_art_engine 사용해 NFT metadata 만들기 오늘은 여러 layer로 이뤄진 NFT 컬렉션을 만들어 보겠습니다. 사용할 패키지는 Hashlips_art_engine입니다. 자체 유튜브에서도 자세히 설명이 나와있으니, 영상으로 보고싶으신 분은 링크를 따라 가주세요. 유튜브에선 여러 기능을 소개하다보니 내용이 헤깔리기도 해, 여기선 간단히 내용 정리하는 정도로 진행하겠습니다. 1. Github에서 패키지 받아오기 여긴 Github를 사용할 줄 아는 분이라면 쉬울거에요 터미널로 본인이 원하는 폴더에 들어간 후, 아래 코드를 입력해 패키지를 다운로드해 주세요 git clone https://github.com/HashLips/hashlips_art_engine.git 2. Dependencies 설치 1번이 끝났다면 아래와 같이 폴더가 하나 생겼을텐데요,.. 2022. 1. 5.
Hardhat에서 컨트랙트로 이더리움 송금하기 이번엔 Hardhat에서 테스트할 때, 내 월렛에서 컨트랙트로 이더리움을 보내는 방법을 알려드리겠습니다. 보내는 방법은 엄청 간단한데, 바로 코드부터 보시죠 const {ethers} = require("hardhat"); const mc = await ethers.getContractFactory("MyContract"); newContract = await mc.deploy(); const create1 = await newContract.doSomething({value: ethers.utils.parseEther("0.06")}); 먼저 Solidity로 만든 MyContract를 불러와 deploy합니다. 이렇게 만든 컨트랙트를 newContract라 부르도록 하겠습니다. 그 다음, myCont.. 2021. 12. 23.
Hardhat에서 테스트용 월렛 정보 받아오기 Hardhat은 Remix처럼 버튼 클릭으로 데이터를 받아오는 방식이 아니기에, 테스트용 월렛 정보를 받아오기 위해선 javascript를 사용해야 합니다. 바로 코드부터 확인하겠습니다. const {ethers, waffle} = require("hardhat") const provider = waffle.provider; const [ad1, ad2, ad3] = await ethers.getSigners(); console.log(ad1.address); console.log(ad2.address); const balance1 = await provider.getBalance(ad1.address); bal1 = ethers.utils.formatEther(balance1); console.log(.. 2021. 12. 23.
VSCode에서 Hardhat 사용 시 초기 세팅 npx hardhat compile로 솔리디티 프로젝트 생성 후 VSCode에서 해당 프로젝트를 수정할 경우, File not Found: 라는 에러와 함께 모듈 연결이 제대로 되지 않는 현상이 발생합니다. 이 문제를 해결하는 방법은 다음과 같습니다. VSCode에서 해당 프로젝트 폴더를 살펴보면, 아래처럼 .vscode폴더에 settings.json이란 파일이 있는데, 이 settings.json이 처음엔 빈 내용으로 되어있는 것을 확인할 수 있습니다. 여기를 아래 코드처럼 바꿔주세요 { "solidity.packageDefaultDependenciesContractsDirectory": "", "solidity.packageDefaultDependenciesDirectory": "node_module.. 2021. 11. 21.
[Python] 백그라운드에서 파이썬 코드 실행하기 트레이딩 알고리즘, 혹은 자동 메일링 기능과 같이 멈춤 없이 24시간 실행해야 하는 코드를 만들어 보셨나요? 아마 프로그램 매매를 하시려는 분들은 한번쯤은 시도해보셨을 겁니다ㅎㅎ 그냥 주피터에서 파이썬 코드를 실행시켜두면 되는거 아닌가요? 그렇다면 지금 실행중인 주피터를 종료하자마자 프로그램이 죽어버린다는 큰 문제를 마주하실 겁니다. 유튜브르 보다가 실수로 같은 탭에 켜져있는 주피터를 종료하게 된다면 너무 슬픈 일이겠죠... 그렇기 때문에, 오늘은 nohup을 사용해, 주피터를 꺼도 백그라운드에서 파이썬 코드가 계속 돌아가도록 만들어 보겠습니다. 아, 참고로 nohup은 리눅스 환경에서 지원됩니다. 1. 파이썬 파일 준비 파이썬 코드를 백그라운드에서 돌리려면 가장 중요한게 뭘까요? 네 그렇습니다. 파이썬.. 2021. 8. 29.
[Python]파이썬으로 네이버 메일 보내기 오늘은 파이썬으로 메일 보내는 방법을 알아보겠습니다. 기본 파이썬 패키지를 사용하기 때문에, 엄청나게 간단합니다. 이메일 보내는 기능은 뭔가 서버랑 통신해야할 것 같고~ 꾸미기도 어려울 것 같고~ (꾸미기는 어려운 것 같습니다. 제가 미술 실력이 부족해서) 하는 느낌적인 느낌이 들지만, 이렇게 쉬운거였어? 생각이 들 정도로 금방 끝나니, 잘 따라해보세요. 참고로, 이미지 첨부나 html 다루기 등은 다음에 따로 다루고, 이 포스트에선 딱 메일을 어떻게 보내요? 라는 질문에 대한 대답만 하겠습니다. 1. 먼저, 필요한 패키지를 import합니다. import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import .. 2021. 8. 23.
[Python] 파이썬으로 웹페이지 크롤링하기 이번엔 파이썬의 requests와 beautifulsoup4 패키지를 활용해 웹페이지의 html을 불러와봅시다. requests 패키지는 웹페이지와 파이썬을 연결해주는 역할을 하고, beautifulsoup4는 requests가 불러온 html을 손쉽게 수정/보완 가능하도록 만들어주는 패키지입니다. 구글 홈페이지 크롤링하기 먼저, pip으로 두 패키지를 설치해줍니다. pip install requests beautifulsoup4 이제 파이썬을 실행시킨 후, 두 패키지를 import해옵니다. import requests from bs4 import BeautifulSoup as bs 구글의 홈페이지를 불러와, 그 페이지에 있는 내용들을 정리해봅시다. requests로 구글 페이지를 긁어온 다음, beau.. 2021. 8. 15.
[Python] YYYYMMDD 형태의 데이터를 날짜 데이터로 변환시키기 from datetime import datetime date = '20190521' newDate = datetime.strptime(date,'%Y%m%d') 위 코드로 string 혹은 int 형식의 변수를 날짜 변수로 변환 가능합니다. 이렇게 변환시켜야 해당 값을 matplotlib의 X축으로 설정할 때 날짜로 인식할 수 있습니다. string 형식 역시 matplotlib에서 날짜처럼 보이긴 하지만, 위 코드처럼 strptime을 써야만 matplotlib가 이를 날짜 데이터로 인식해, 일정 기간마다 한 개의 index만 선택해 표시함으로(ex: 8월1일, 9월1일, 10월1일 .....) 가시성을 높일 수 있습니다. 2021. 8. 10.
[Android] Image Url로부터 Bitmap 받아오기 private static Bitmap getBitmapFromURL(String src) { try { URL url = new URL(src); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); return myBitmap; } catch (IOException e) { e.printStackTrace(); return null; } } 2019. 9. 29.
[Android] 앱 내에서 언어 설정 변경하는 창 띄우기 startActivity(new Intent(android.provider.Settings.ACTION_LOCALE_SETTINGS)); https://gist.github.com/gunhansancar/45648176dc47d50b1940 혹은 현재 앱 하나 언어만 바꾸는 코드 git. 2019. 9. 29.
[Android] Geocoder의 Address 리턴값 String s1 = address.get(0).getCountryName(); // 국가명 String s2 = address.get(0).getAdminArea(); // 시 String s3 = address.get(0).getLocality(); // 구 메인, "성남시 중원구" 인 경우 "성남시"가 들어감 String s4 = address.get(0).getSubLocality(); // 구 서브데이터 "성남시 중원구" 인 경우 "중원구"가 들어감 String s5 = address.get(0).getThoroughfare(); // 동 String s6 = address.get(0).getSubThoroughfare()); // 번지 String s7 = address.get(0).getFe.. 2019. 9. 29.
[Android] 구글맵에서 화면에 보이는 부분 범위 구하는 방법 public static void getMapStartEndPoint(int centerLatE6, int centerLngE6, int latSpan, int lngSpan){ // Screen 시작 좌표 int slat = centerLatE6 + (latSpan/2); int slng = centerLngE6 - (lngSpan/2); // Screen 끝 좌표 int elat = centerLatE6 - (latSpan/2); int elng = centerLngE6 + (lngSpan/2); } centerLatE6 : 지도중심의 LatitudeE6 centerLngE6 : 지도중심의 LongitudeE6 latSpan : 지도의 LatitudeSpan lngSpan : 지도의 Longitude.. 2019. 9. 29.
[Android] EditText 완료 버튼 리스너 달기 editText.setOnEditorActionListener((textView, i, keyEvent) -> { if(i == EditorInfo.IME_ACTION_DONE) { search(searchEditText.getText().toString()); } return true; }); 2019. 9. 29.
[Android] Bitmap을 Drawable로 바꾸는 방법 Drawable drawable = new BitmapDrawable(getResources(),bitmap); 2019. 9. 29.
728x90