Package: coinsta
CoinstaA Python :snake: package for acquiring both historical and current data of crypto-currencies:moneybag:.Author:Bernard BrenyahProject StatusTable of ContentMotivationFrameworks UsedInstallationFeaturesPending FeaturesHow To UseRelease HistoryHow To ContributeCreditsLicenseMotivationWhycoinsta?
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 onlycyrptoCMDcame 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 ofpandaspackage. If I went with the original plan I would have to rewrite the whole code and implementation ideas forcryptoCMDproject. 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 UsedThis package leverages the power of the following packages:pandasrequestslxmlbeautifoulsoupInstallationThe easiest way to install Coinsta is to use the default python package installerpip:pipinstallcoinstaand for the few brave ones who like bleeding edge technology, the latest source can be installed via with this command:pipinstallgit+git://github.com/PyDataBlog/Coinsta.gitFeaturesCurrent 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 FeaturesMigrate the current class to the new CoinMarketCap API.Dropped support for Python 3.5.Added support for Python 3.8.Improve documentation and doc strings.Optimisation of code.Support for CoinMarketCap's historical snapshots.How To UseHistorical Data# import the Historical classfromcoinsta.coreimportHistoricalfromdatetimeimportdate# specify dates consideredstart=date(2018,3,1)end=date(2018,6,1)# get datacoin_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 aboveAlternative Constructors for Historical data from dates in the form of strings (YYYY-MM-DD) or (YYYY/MM/DD):fromcoinsta.coreimportHistorical# default alternative method for "-" formatted date stringsalt_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 stringsother_spec=Historical.from_strings('btc','2018/3/1','2018/6/1',hyphen=False)another_btc=other_spec.get_data()print(another_btc.head())Theget_data()method and thefrom_stringsmethod from the Historical class returns apandasDataFrame object with sorted in an ascending order indexed the dates specified by the user:OpenHighLowCloseVolumeMarket_cap
DateSo what was the top cryptocurrency (in terms of market capitalisation) on date XYZ?
Luckily, CoinMarketCap delivers periodic snapshots of the this type of rankings. TheHistoricalSnapshotclass 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:fromcoinsta.coreimportHistoricalSnapshotfromdatetimeimportdatesnap_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 and instantiate the current class object with specificationsfromcoinsta.coreimportCurrentcur=Current(api_key='YOUR-API-KEY-HERE',currency='eur')# Default is usd# get current market information on a specified cryptobtc_current=cur.get_current('btc')print(btc_current)# get the top 100 cryptos (in terms of market cap)current_100=cur.top_100(limit=100)# Default limit is 100 but can be increased as a user wishesprint(current_100.head())# get global overview of crypto marketsglo_info=cur.global_info()print(glo_info)Theget_current()method from the current class returns apandasDataFrame object with one column representing the following named rows of information on the cryptocurrency specified:dict_keys(['name','symbol','rank','circulating_supply','total_supply','max_supply','price','volume_24h','percent_change_1h','percent_change_24h','percent_change_7d','market_cap','last_updated'])Thetop_100method in the current class returns apandasDataFrame object of the top 100 cryptocurrencies in terms of market capitalization. The following are the columns returned:['id','name','symbol','slug','num_market_pairs','date_added','tags','max_supply','circulating_supply','total_supply','platform','cmc_rank','last_updated','*currency*.price','*currency*.volume_24h','*currency*.percent_change_1h','*currency*.percent_change_24h','*currency*.percent_change_7d','*currency*.market_cap','*currency*.last_updated']Finally, theglobal_info()method in Current class returns a dictionary with the following keys as an overview of cryptocurrency markets as a wholedict_keys(['active_cryptos','active_exchanges','btc_dominance','eth_dominance','total_market_cap','total_volume_24h','total_volume_24h_reported','altcoin_volume_24h','altcoin_volume_24h_reported','altcoin_market_cap','last_updated'])Release History0.1.8 - Relaxed checks on specified tickers since upstream only shows top 100 cryptos.0.1.7 - Trimmed code dependencies.0.1.6 - Fix compliance with upstream changes, added support for Python 3.8 and dropped support for Python 3.5.0.1.5 - Updated historical snapshot to suit the new upstream changes from CoinMarketCap0.1.4 - Re-wrote the Current classes to use the new CoinMarketCap API0.1.3  - Added Historical Snapshot feature0.1.2  - Added support for Python 3.5 and 3.70.1.1  - Added license info and improved documentation0.1.0  - Initial Public ReleaseHow to ContributeThis 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.CreditsShoutout toCoinMarketCap:heart: for the access to their API as well as allowing projects such as this plug into the datawarehouse.LicenseLicense:BSD-3Back to top