Code Monkey home page Code Monkey logo

coinsta's Introduction

Coinsta

A Python 🐍 package for acquiring both historical and current data of cryptocurrencies💰.


Author: Bernard Brenyah

Project Status

Latest Version Build Status Maintenance FOSSA Status License Supported Python Version Binder

Table of Content

  1. Motivation
  2. Frameworks Used
  3. Installation
  4. Features
  5. How To Use
  6. Release History
  7. How To Contribute
  8. Credits
  9. License

Motivation

Why coinsta? I spent the past couple of months on a graduate dissertation which required the use of both historical and current data on cryptocurrencies. After browsing the Python Packaging Index (PYPI), I was frustrated by the lack of a Python package that catered for such needs. As far as I know only cyrptoCMD came close to meeting my needs. The only drawback is the that package only delivers historical data. OK so "why not edit that project and make a pull request with your suggestions?"

That was the original plan until I realised that the scraping code could relatively be done quickly with the help of pandas package. If I went with the original plan I would have to rewrite the whole code and implementation ideas for cryptoCMD project. The only logical conclusion was starting a new project that I wish I had during my data collection process. A project inspired by scripts I generated for my dissertation project.

As a result, this project is the first Python project that supplies both historical and current data on cryptocurrency markets and assets in one coherent package.


Frameworks Used

This package leverages the power of the following packages:

  • pandas
  • requests
  • lxml

Installation

The easiest way to install Coinsta is to use the default python package installer pip:

pip install coinsta

and for the few brave ones who like bleeding edge technology, the latest source can be installed via with this command:

pip install git+git://github.com/PyDataBlog/Coinsta.git

Features

  • Current global information on cryptocurrency markets
  • Current market information on the top 100 cryptocurrencies
  • Current data on a specified cryptocurrency
  • Historical data on all active cryptocurrencies
  • Get historical snapshots of cryptocurrencies
Pending Features
  • Support for Python 3.5
  • Miscellaneous Functions
  • Contribution guidelines
  • test compliance with Python 3.7
  • Improve documentation and doc strings
  • Optimisation of code
  • Support for CoinMarketCap's historical snapshots
  • Support for market index comparisons

How To Use

Historical Data:

# import the Historical class
from coinsta.core import Historical
from datetime import date

# specify dates considered
start = date(2018, 3, 1)
end = date(2018, 6,1)

# get data
coin_spec = Historical('btc', start=start, end=end)
btc_data = coin_spec.get_data()
print(btc_data.head())

'''
by default the end date is set to use the "today's" date
 of the user unless otherwise specified like above
'''

Alternative Constructors for Historical data from dates in the form of strings (YYYY-MM-DD) or (YYYY/MM/DD):

from coinsta.core import Historical

# default alternative method for "-" formatted date strings
alt_spec = Historical.from_strings('btc', '2018-3-1','2018-6-1', hyphen=True)

alt_btc = alt_spec.get_data()
print(alt_btc.head())

# another alternative method for "/" formated date strings
other_spec = Historical.from_strings('btc', '2018/3/1','2018/6/1', hyphen=False)

another_btc = other_spec.get_data()
print(another_btc.head())

The get_data() method and the from_strings method from the Historical class returns a pandas DataFrame object with sorted in an ascending order indexed the dates specified by the user:

    Open     High      Low    Close      Volume    Market_cap
Date

So what was the top cryptocurrency (in terms of market capitalisation) on date XYZ? Luckily, CoinMarketCap delivers periodic snapshots of the this type of rankings. The HistoricalSnapshot class taps into data to supply users with such information.

The Historical Snapshot feature returns a Pandas DataFrame object with the following self describing columns:

Index(['Rank', 'Name', 'Symbol', 'Market Cap', 'Price', 'Circulating Supply',
       'Volume (24h)', '% 1h', '% 24h', '% 7d'],
      dtype='object')

Historical Snapshots:

from coinsta.core import HistoricalSnapshot
from datetime import date
snap_date = date(2018, 7, 29)
july_2018 = HistoricalSnapshot(snap_date)
july_2018_snapshot = july_2018.get_snapshot()
print(july_2018_snapshot.info())

Current Data:

# import the Current class 
from coinsta.core import Current

# get current market information on a specified crypto
btc_current = Current.get_current('btc')
print(btc_current)

# get the top 100 cryptos (in terms of market cap)
current_100 = Current.top_100()
print(current_100.head())

# get global overview of crypto markets
glo_info = Current.global_info()
print(glo_info)

The get_current() method from the current class returns a pandas DataFrame object with one column representing the following named rows of information on the cryptocurrency specified:

name                    
symbol               
rank                 
circulating_supply 
total_supply        
max_supply              
price                   
volume_24h          
market_cap          
percent_change_1h          
percent_change_24h         
percent_change_7d    

The top_100 method in the current class returns a pandas DataFrame object of the top 100 cryptocurrencies in terms of market capitalization. The following are the columns returned:

['name', 'symbol', 'rank', 'price', 'volume_24h', 'market_cap', 'percent_change_1h', 'percent_change_24h', 'percent_change_7d']

Finally, the global_info() method in Current class returns a dictionary with the following keys as an overview of cryptocurrency markets as a whole

dict_keys(['active_cryptos', 'active_markets', 'btc_dominance', 'total_market_cap', 'total_volume_24h'])

Release History

  • 0.1.3 - Added Historical Snapshot feature
  • 0.1.2 - Added support for Python 3.5 and 3.7
  • 0.1.1 - Added license info and improved documentation
  • 0.1.0 - Initial Public Release

How to Contribute

This project welcomes contributions from anyone interested in this project. Guidelines for contribution is being drafted but for now a pull request with explanation of the contributions will suffice.


Credits

Shoutout to CoinMarketCap ❤️ for the access to their API as well as allowing projects such as this plug into the datawarehouse.


License

License: BSD-3

FOSSA Status


Back to top

coinsta's People

Contributors

pydatablog avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.