
বিটকয়েনের দাম কীভাবে কাজ করছে? ডিজিটাল মুদ্রার দাম বৃদ্ধি এবং পতনের কারণ কী? বিভিন্ন altcoins-এর বাজার মূল্য কি অবিচ্ছেদ্যভাবে যুক্ত বা তারা কি মূলত স্বাধীন? আমরা কীভাবে ভবিষ্যদ্বাণী করতে পারি যে পরবর্তী কী ঘটবে?
বিটকয়েন এবং ইথেরিয়ামের মতো ডিজিটাল মুদ্রার প্রবন্ধগুলি এখন জল্পনা-কল্পনায় ভরা, শত শত স্ব-ঘোষিত বিশেষজ্ঞরা যে প্রবণতাগুলি উত্থানের আশা করছেন তার পক্ষে সমর্থন করছেন৷ এই বিশ্লেষণগুলির অনেকগুলি থেকে যা অনুপস্থিত তা হল অন্তর্নিহিত ডেটা এবং পরিসংখ্যানগত মডেলগুলির একটি শক্ত ভিত্তি।
এই প্রবন্ধের লক্ষ্য হল পাইথন ব্যবহার করে ক্রিপ্টোকারেন্সি বিশ্লেষণের একটি সহজ ভূমিকা প্রদান করা। আমরা বিভিন্ন ক্রিপ্টোকারেন্সির ডেটা পুনরুদ্ধার, বিশ্লেষণ এবং কল্পনা করার জন্য একটি সহজ পাইথন স্ক্রিপ্টের মধ্য দিয়ে যাব। পথিমধ্যে, আমরা এই অস্থির বাজারগুলির আচরণ এবং তাদের বিকাশের আকর্ষণীয় প্রবণতাগুলি আবিষ্কার করব।

এটি ডিজিটাল মুদ্রার ব্যাখ্যা করে এমন একটি নিবন্ধ নয়, কোন নির্দিষ্ট মুদ্রার উত্থান হবে এবং কোনটি পতন হবে সে সম্পর্কে এটি কোনও মতামত নয়। পরিবর্তে, এই টিউটোরিয়ালে আমরা যা নিয়ে উদ্বিগ্ন তা হল কাঁচা ডেটা পাওয়া এবং সংখ্যার মধ্যে লুকিয়ে থাকা গল্পগুলি আবিষ্কার করা।
এই টিউটোরিয়ালটি সমস্ত দক্ষতার স্তরের উত্সাহী, প্রকৌশলী এবং ডেটা বিজ্ঞানীদের দ্বারা ব্যবহার করার জন্য ডিজাইন করা হয়েছে, আপনি একজন শিল্প বিশেষজ্ঞ বা একজন প্রোগ্রামিং নবাগত, আপনার প্রয়োজন একমাত্র দক্ষতা হল পাইথন প্রোগ্রামিং ভাষার একটি প্রাথমিক বোঝা এবং কমান্ড লাইনের পর্যাপ্ত জ্ঞান। অপারেশন (এটি একটি ডেটা বিজ্ঞান প্রকল্প সেট আপ করতে সক্ষম হওয়া যথেষ্ট)।
প্রধান মূলধারার এক্সচেঞ্জগুলি থেকে উচ্চ-মানের ডেটা উত্স সরবরাহ করার পাশাপাশি, FMZ.COM, উদ্ভাবকের পরিমাণগত প্ল্যাটফর্ম, ডেটা বিশ্লেষণ সম্পূর্ণ করার পরে আমাদের স্বয়ংক্রিয় ট্রেডিং পরিচালনা করতে সহায়তা করার জন্য API ইন্টারফেসের একটি সমৃদ্ধ সেট সরবরাহ করে। ইন্টারফেসের এই সেটটিতে ব্যবহারিক টুল রয়েছে যেমন অ্যাকাউন্টের তথ্য অনুসন্ধান করা, উচ্চ, খোলার, কম, বন্ধের মূল্য, ট্রেডিং ভলিউম, বিভিন্ন মূলধারার এক্সচেঞ্জের বিভিন্ন সাধারণ প্রযুক্তিগত বিশ্লেষণের সূচক, বিশেষ করে যারা প্রকৃত ট্রেডিংয়ের সময় প্রধান মূলধারার এক্সচেঞ্জের সাথে সংযোগ করেন তাদের জন্য। প্রক্রিয়া পাবলিক API ইন্টারফেস শক্তিশালী প্রযুক্তিগত সহায়তা প্রদান করে।
উপরে উল্লিখিত সমস্ত ফাংশনগুলি ডকারের মতো একটি সিস্টেমে এনক্যাপসুলেট করা হয়েছে আমাদের যা করতে হবে তা হল আমাদের নিজস্ব ক্লাউড কম্পিউটিং পরিষেবা ক্রয় করা এবং তারপরে ডকার সিস্টেম স্থাপন করা।
উদ্ভাবক কোয়ান্টিফিকেশন প্ল্যাটফর্মের অফিসিয়াল নামে, এই ডকার সিস্টেমটিকে হোস্ট সিস্টেম বলা হয়।
কিভাবে হোস্ট এবং রোবট স্থাপন করতে হয়, অনুগ্রহ করে আমার আগের নিবন্ধটি পড়ুন: https://www.fmz.com/bbs-topic/4140
যে পাঠকরা তাদের নিজস্ব ক্লাউড কম্পিউটিং সার্ভার স্থাপনার হোস্টার কিনতে চান তারা এই নিবন্ধটি উল্লেখ করতে পারেন: https://www.fmz.com/bbs-topic/2848
ক্লাউড কম্পিউটিং পরিষেবা এবং হোস্ট সিস্টেম সফলভাবে স্থাপন করার পরে, পরবর্তী, আমাদের পাইথনের বৃহত্তম শিল্পকর্মটি ইনস্টল করতে হবে: অ্যানাকোন্ডা
এই নিবন্ধটির জন্য প্রয়োজনীয় সমস্ত প্রাসঙ্গিক প্রোগ্রামিং পরিবেশ বাস্তবায়নের জন্য (নির্ভরতা লাইব্রেরি, সংস্করণ ব্যবস্থাপনা, ইত্যাদি), সবচেয়ে সহজ উপায় হল Anaconda ব্যবহার করা। এটি একটি প্যাকেজড পাইথন ডেটা সায়েন্স ইকোসিস্টেম এবং নির্ভরতা লাইব্রেরি ম্যানেজার।
যেহেতু আমরা ক্লাউড সার্ভিসে অ্যানাকোন্ডা ইনস্টল করছি, তাই আমরা সুপারিশ করছি যে ক্লাউড সার্ভারটি Linux সিস্টেম এবং Anaconda-এর কমান্ড লাইন সংস্করণ ইনস্টল করে।
অ্যানাকোন্ডার ইনস্টলেশন পদ্ধতির জন্য, অনুগ্রহ করে অ্যানাকোন্ডার অফিসিয়াল গাইডটি দেখুন: https://www.anaconda.com/distribution/
আপনি যদি একজন অভিজ্ঞ পাইথন প্রোগ্রামার হন এবং মনে করেন না যে আপনার অ্যানাকোন্ডা ব্যবহার করার দরকার আছে, তাহলে এটি সম্পূর্ণ ঠিক আছে। আমি অনুমান করতে যাচ্ছি যে প্রয়োজনীয় নির্ভরতা ইনস্টল করার জন্য আপনার সাহায্যের প্রয়োজন নেই এবং আপনি সরাসরি অংশ 2 এ যেতে পারেন।
Anaconda ইনস্টল করার পরে, আমাদের নির্ভরতা প্যাকেজগুলি পরিচালনা করার জন্য আমাদের একটি নতুন পরিবেশ তৈরি করতে হবে। লিনাক্স কমান্ড লাইন ইন্টারফেসে, আমরা লিখি:
conda create --name cryptocurrency-analysis python=3
আসুন আমাদের প্রকল্পের জন্য একটি নতুন অ্যানাকোন্ডা পরিবেশ তৈরি করি।
এরপর, লিখুন
source activate cryptocurrency-analysis (linux/MacOS操作)
或者
activate cryptocurrency-analysis (windows操作系统)
এই পরিবেশ সক্রিয় করতে
পরবর্তী, লিখুন:
conda install numpy pandas nb_conda jupyter plotly
এই প্রকল্পের জন্য প্রয়োজনীয় বিভিন্ন নির্ভরতা প্যাকেজ ইনস্টল করতে।
দ্রষ্টব্য: কেন অ্যানাকোন্ডা পরিবেশ ব্যবহার করবেন? আপনি যদি আপনার কম্পিউটারে অনেকগুলি পাইথন প্রকল্প চালানোর পরিকল্পনা করেন, তবে দ্বন্দ্ব এড়াতে বিভিন্ন প্রকল্পের নির্ভরতা (লাইব্রেরি এবং প্যাকেজ) আলাদা করা সহায়ক। Ananconda প্রতিটি প্রকল্পের নির্ভরশীল প্যাকেজের জন্য একটি বিশেষ পরিবেশ ডিরেক্টরি তৈরি করবে যাতে সমস্ত প্যাকেজ সঠিকভাবে পরিচালনা করা যায় এবং আলাদা করা যায়।
পরিবেশ এবং নির্ভরতা প্যাকেজ ইনস্টল করার পরে, চালান
jupyter notebook
iPython কার্নেল শুরু করতে, তারপর আপনার ব্রাউজার ব্যবহার করে http://localhost:8888/ ভিজিট করুন, একটি নতুন পাইথন নোটবুক তৈরি করুন এবং নিশ্চিত করুন যে এটি ব্যবহার করে:
Python [conda env:cryptocurrency-analysis]
কার্নেল

একটি নতুন খালি জুপিটার নোটবুক তৈরি করুন, এবং আমাদের প্রথমে যা করতে হবে তা হল প্রয়োজনীয় নির্ভরতা প্যাকেজগুলি আমদানি করা।
import os
import numpy as np
import pandas as pd
import pickle
from datetime import datetime
আমাদের প্লটলি আমদানি করতে হবে এবং অফলাইন মোড সক্ষম করতে হবে
import plotly.offline as py
import plotly.graph_objs as go
import plotly.figure_factory as ff
py.init_notebook_mode(connected=True)
প্রস্তুতি সম্পূর্ণ হয়েছে, এখন আমরা বিশ্লেষণ করার জন্য ডেটা পেতে শুরু করতে পারি। প্রথমত, বিটকয়েনের দামের ডেটা পেতে আমাদের উদ্ভাবক কোয়ান্টিফিকেশন প্ল্যাটফর্মের API ইন্টারফেস ব্যবহার করতে হবে।
এটি GetTicker ফাংশন ব্যবহার করবে এই দুটি ফাংশনের ব্যবহারের জন্য, অনুগ্রহ করে দেখুন: https://www.fmz.com/api
ডেটা অধিগ্রহণের সুবিধার্থে, আমাদের Quandl (quandl.com) থেকে ডেটা ডাউনলোড এবং সিঙ্ক্রোনাইজ করার জন্য একটি ফাংশন লিখতে হবে। এটি একটি বিনামূল্যের আর্থিক ডেটা ইন্টারফেস যার বিদেশে উচ্চ খ্যাতি রয়েছে। ইনভেনটর কোয়ান্টিফিকেশন প্ল্যাটফর্ম একটি অনুরূপ ডেটা ইন্টারফেস প্রদান করে, যা মূলত প্রকৃত ট্রেডিংয়ের জন্য ব্যবহৃত হয় যেহেতু এই নিবন্ধটি মূলত ডেটা বিশ্লেষণের জন্য, আমরা এখনও এখানে Quandl ডেটা ব্যবহার করি।
আসল ট্রেডিংয়ের সময়, আপনি পাইথনে GetTicker এবং GetRecords ফাংশনগুলিকে তাদের ব্যবহারের জন্য সরাসরি কল করতে পারেন, অনুগ্রহ করে দেখুন: https://www.fmz.com/api
def get_quandl_data(quandl_id):
# 下载和缓冲来自Quandl的数据列
cache_path = '{}.pkl'.format(quandl_id).replace('/','-')
try:
f = open(cache_path, 'rb')
df = pickle.load(f)
print('Loaded {} from cache'.format(quandl_id))
except (OSError, IOError) as e:
print('Downloading {} from Quandl'.format(quandl_id))
df = quandl.get(quandl_id, returns="pandas")
df.to_pickle(cache_path)
print('Cached {} at {}'.format(quandl_id, cache_path))
return df
পিকেল লাইব্রেরিটি এখানে ডেটা সিরিয়ালাইজ করতে এবং ডাউনলোড করা ডেটা ফাইল হিসাবে সংরক্ষণ করতে ব্যবহার করা হয়, যাতে প্রতিবার চালানোর সময় প্রোগ্রামটি একই ডেটা পুনরায় ডাউনলোড না করে। এই ফাংশনটি পান্ডাস ডেটাফ্রেম ফরম্যাটে ডেটা ফেরত দেবে। আপনি যদি ডেটা ফ্রেমের ধারণার সাথে পরিচিত না হন তবে এটিকে একটি শক্তিশালী এক্সেল স্প্রেডশীট হিসাবে ভাবুন।
আসুন একটি উদাহরণ হিসাবে ক্র্যাকেন বিটকয়েন এক্সচেঞ্জ ব্যবহার করি এবং এটির বিটকয়েন মূল্য পেয়ে শুরু করি।
# 获取Kraken比特币交易所的价格
btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')
ডেটা ফ্রেমের প্রথম পাঁচটি সারি দেখতে head() পদ্ধতি ব্যবহার করুন।
btc_usd_price_kraken.head()
ফলাফল হল:
| BTC | Open | High | Low | Close | Volume (BTC) | Volume (Currency) | Weighted Price |
|---|---|---|---|---|---|---|---|
| 2014-01-07 | 874.67040 | 892.06753 | 810.00000 | 810.00000 | 15.622378 | 13151.472844 | 841.835522 |
| 2014-01-08 | 810.00000 | 899.84281 | 788.00000 | 824.98287 | 19.182756 | 16097.329584 | 839.156269 |
| 2014-01-09 | 825.56345 | 870.00000 | 807.42084 | 841.86934 | 8.158335 | 6784.249982 | 831.572913 |
| 2014-01-10 | 839.99000 | 857.34056 | 817.00000 | 857.33056 | 8.024510 | 6780.220188 | 844.938794 |
| 2014-01-11 | 858.20000 | 918.05471 | 857.16554 | 899.84105 | 18.748285 | 16698.566929 | 890.671709 |
এর পরে, আমরা একটি ভিজ্যুয়াল পদ্ধতির মাধ্যমে ডেটার সঠিকতা যাচাই করার জন্য একটি সাধারণ টেবিল তৈরি করব।
# 做出BTC价格的表格
btc_trace = go.Scatter(x=btc_usd_price_kraken.index, y=btc_usd_price_kraken['Weighted Price'])
py.iplot([btc_trace])

এখানে, আমরা ভিজ্যুয়ালাইজেশন অংশটি সম্পূর্ণ করতে Plotly ব্যবহার করি। Matplotlib-এর মতো আরও পরিপক্ক Python ডেটা ভিজ্যুয়ালাইজেশন লাইব্রেরি ব্যবহারের তুলনায় Plotly কম সাধারণ পছন্দ, তবে এটি একটি ভালো পছন্দ কারণ এটি সম্পূর্ণ ইন্টারেক্টিভ চার্টের জন্য D3.js-এর সাহায্য নিতে পারে। চার্টগুলিতে খুব সুন্দর ডিফল্ট সেটিংস রয়েছে, অন্বেষণ করা সহজ এবং ওয়েব পৃষ্ঠাগুলিতে এম্বেড করা খুব সুবিধাজনক।
টিপ: ডাউনলোড করা ডেটা সাধারণভাবে সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করার জন্য দ্রুত স্যানিটেশন চেক হিসাবে আপনি প্রধান এক্সচেঞ্জে (যেমন OKEX, Binance বা Huobi) বিটকয়েনের মূল্য চার্টের সাথে জেনারেট করা চার্টের তুলনা করতে পারেন।
সতর্ক পাঠকরা লক্ষ্য করেছেন যে উপরের ডেটাতে অনুপস্থিত ডেটা রয়েছে, বিশেষ করে 2014 সালের শেষের দিকে এবং 2016 এর শুরুতে। তথ্যের এই অভাব ক্রাকেন এক্সচেঞ্জে বিশেষভাবে স্পষ্ট। আমরা অবশ্যই চাই না যে এই অনুপস্থিত ডেটা দামের বিশ্লেষণকে প্রভাবিত করুক।
ডিজিটাল কারেন্সি এক্সচেঞ্জের বৈশিষ্ট্য হলো চাহিদা ও সরবরাহের মধ্যে সম্পর্ক মুদ্রার মূল্য নির্ধারণ করে। অতএব, কোন লেনদেনের মূল্য বাজারের “মূলধারার মূল্য” হতে পারে না। এই সমস্যাটি সমাধান করার জন্য, সেইসাথে অনুপস্থিত ডেটা সমস্যাটি শুধুমাত্র উল্লেখ করা হয়েছে (সম্ভবত প্রযুক্তিগত পাওয়ার বিভ্রাট এবং ডেটা ত্রুটির কারণে), আমরা বিশ্বের তিনটি প্রধান বিটকয়েন এক্সচেঞ্জ থেকে ডেটা ডাউনলোড করব এবং গড় বিটকয়েনের মূল্য গণনা করব।
চলুন শুরু করা যাক প্রতিটি এক্সচেঞ্জের ডাটা ডাউনলোড করে একটি ডাটা ফ্রেমে ডিকশনারি প্রকারের সমন্বয়ে গঠিত।
# 下载COINBASE,BITSTAMP和ITBIT的价格数据
exchanges = ['COINBASE','BITSTAMP','ITBIT']
exchange_data = {}
exchange_data['KRAKEN'] = btc_usd_price_kraken
for exchange in exchanges:
exchange_code = 'BCHARTS/{}USD'.format(exchange)
btc_exchange_df = get_quandl_data(exchange_code)
exchange_data[exchange] = btc_exchange_df
পরবর্তী, আমরা প্রতিটি ডেটা ফ্রেমের সাধারণ কলামগুলিকে একটি নতুন ডেটা ফ্রেমে মার্জ করার জন্য একটি বিশেষ ফাংশন সংজ্ঞায়িত করব। এর একে বলা যাক merge_dfs_on_column ফাংশন
def merge_dfs_on_column(dataframes, labels, col):
'''Merge a single column of each dataframe into a new combined dataframe'''
series_dict = {}
for index in range(len(dataframes)):
series_dict[labels[index]] = dataframes[index][col]
return pd.DataFrame(series_dict)
এখন, প্রতিটি ডেটা সেটের “ওয়েটেড প্রাইস” কলামের উপর ভিত্তি করে সমস্ত ডেটা ফ্রেম একসাথে একত্রিত করুন।
# 整合所有数据帧
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')
পরিশেষে, আমরা “tail()” পদ্ধতি ব্যবহার করে একত্রিত করা ডেটার শেষ পাঁচটি সারি দেখতে পাই যাতে ডেটা সঠিক এবং সম্পূর্ণ হয়।
btc_usd_datasets.tail()
ফলাফল হিসাবে দেখানো হয়:
| BTC | BITSTAMP | COINBASE | ITBIT | KRAKEN |
|---|---|---|---|---|
| 2017-08-14 | 4210.154943 | 4213.332106 | 4207.366696 | 4213.257519 |
| 2017-08-15 | 4101.447155 | 4131.606897 | 4127.036871 | 4149.146996 |
| 2017-08-16 | 4193.426713 | 4193.469553 | 4190.104520 | 4187.399662 |
| 2017-08-17 | 4338.694675 | 4334.115210 | 4334.449440 | 4346.508031 |
| 2017-08-18 | 4182.166174 | 4169.555948 | 4175.440768 | 4198.277722 |
উপরের টেবিল থেকে আপনি দেখতে পাচ্ছেন, এই তথ্যগুলি আমাদের প্রত্যাশার সাথে সঙ্গতিপূর্ণ। তথ্য পরিসর প্রায় একই, তবে প্রতিটি এক্সচেঞ্জের বিলম্ব বা বৈশিষ্ট্যের উপর ভিত্তি করে সামান্য পার্থক্য রয়েছে।
যৌক্তিকভাবে বলতে গেলে, পরবর্তী পদক্ষেপটি ভিজ্যুয়ালাইজেশনের মাধ্যমে এই ডেটা তুলনা করা। এটি করার জন্য, আমাদের প্রথমে একটি হেল্পার ফাংশন সংজ্ঞায়িত করতে হবে যা একটি একক-লাইন কমান্ড প্রদান করে একটি চার্ট তৈরি করতে ডেটা ব্যবহার করে এটিকে df_scatter ফাংশন বলা যাক।
def df_scatter(df, title, seperate_y_axis=False, y_axis_label='', scale='linear', initial_hide=False):
'''Generate a scatter plot of the entire dataframe'''
label_arr = list(df)
series_arr = list(map(lambda col: df[col], label_arr))
layout = go.Layout(
title=title,
legend=dict(orientation="h"),
xaxis=dict(type='date'),
yaxis=dict(
title=y_axis_label,
showticklabels= not seperate_y_axis,
type=scale
)
)
y_axis_config = dict(
overlaying='y',
showticklabels=False,
type=scale )
visibility = 'visible'
if initial_hide:
visibility = 'legendonly'
# 每个系列的表格跟踪
trace_arr = []
for index, series in enumerate(series_arr):
trace = go.Scatter(
x=series.index,
y=series,
name=label_arr[index],
visible=visibility
)
# 为系列添加单独的轴
if seperate_y_axis:
trace['yaxis'] = 'y{}'.format(index + 1)
layout['yaxis{}'.format(index + 1)] = y_axis_config
trace_arr.append(trace)
fig = go.Figure(data=trace_arr, layout=layout)
py.iplot(fig)
যাতে সবাই সহজে বুঝতে পারে, এই নিবন্ধটি এই সহায়ক ফাংশনের যৌক্তিক নীতি নিয়ে খুব বেশি আলোচনা করবে না। আপনি যদি আরও জানতে চান, পান্ডাস এবং প্লটলির জন্য অফিসিয়াল ডকুমেন্টেশন দেখুন।
এখন আমরা সহজেই বিটকয়েনের দামের ডেটা গ্রাফ করতে পারি!
# 绘制所有BTC交易价格
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

আপনি উপরের গ্রাফ থেকে দেখতে পাচ্ছেন, যদিও ডেটার চারটি সিরিজ মোটামুটি একই পথ অনুসরণ করে, কিছু অনিয়মিত পরিবর্তন রয়েছে, যা আমরা পরিষ্কার করার চেষ্টা করব।
2012-2017 সময়কালে, আমরা জানি যে বিটকয়েনের মূল্য কখনই শূন্যের সমান ছিল না, তাই আমরা প্রথমে ডেটা ফ্রেমের সমস্ত শূন্য মান সরিয়ে ফেলি।
# 清除"0"值
btc_usd_datasets.replace(0, np.nan, inplace=True)
ডেটাফ্রেম পুনর্নির্মাণের পর, আমরা কোনও অনুপস্থিত ডেটা ছাড়াই আরও স্পষ্ট গ্রাফ দেখতে পাচ্ছি।
# 绘制修订后的数据框
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')

আমরা এখন একটি নতুন কলাম গণনা করতে পারি: সমস্ত এক্সচেঞ্জ জুড়ে বিটকয়েনের গড় দৈনিক মূল্য।
# 将平均BTC价格计算为新列
btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)
নতুন কলাম হল বিটকয়েনের মূল্য সূচক! ডেটাতে কিছু ভুল আছে কিনা তা পরীক্ষা করার জন্য এর আবার প্লট করা যাক।
# 绘制平均BTC价格
btc_trace = go.Scatter(x=btc_usd_datasets.index, y=btc_usd_datasets['avg_btc_price_usd'])
py.iplot([btc_trace])

মনে হচ্ছে আসলেই কোন সমস্যা নেই, আমরা অন্যান্য ডিজিটাল মুদ্রা এবং মার্কিন ডলারের মধ্যে বিনিময় হার নির্ধারণ করতে এই সমষ্টিগত মূল্য সিরিজ ডেটা ব্যবহার করতে থাকব।
এখন পর্যন্ত, আমাদের কাছে বিটকয়েনের দামের জন্য টাইম সিরিজ ডেটা আছে। এর পরে, আসুন নন-বিটকয়েন ডিজিটাল মুদ্রার কিছু ডেটা দেখে নেওয়া যাক, অর্থাৎ, সেই অল্টকয়েনগুলির পরিস্থিতি অবশ্যই, অল্টকয়েন শব্দটি কিছুটা শক্তিশালী হতে পারে, তবে ডিজিটাল মুদ্রার বর্তমান বিকাশের ক্ষেত্রে। , বাজার মূল্য র্যাঙ্কিং ছাড়াও শীর্ষ দশের অধিকাংশকে (যেমন Bitcoin, Ethereum, EOS, USDT, ইত্যাদি) কোনো সমস্যা ছাড়াই altcoins বলা যেতে পারে কারণ সেগুলিও ট্রেড করার সময় এই মুদ্রাগুলি থেকে দূরে থাকার চেষ্টা করা উচিত৷ বিভ্রান্তিকর এবং উচ্চ প্রতারক।
প্রথমত, আমরা ডিজিটাল মুদ্রা লেনদেনের ডেটা তথ্য পেতে Poloniex এক্সচেঞ্জের API ব্যবহার করি। আমরা altcoin-সম্পর্কিত ডেটা পেতে দুটি সহায়ক ফাংশন সংজ্ঞায়িত করেছি এই দুটি ফাংশন প্রধানত API এর মাধ্যমে JSON ডেটা ডাউনলোড এবং ক্যাশে করে।
প্রথমে, আমরা get_json_data ফাংশনটি সংজ্ঞায়িত করি, যা প্রদত্ত URL থেকে JSON ডেটা ডাউনলোড এবং ক্যাশে করবে।
def get_json_data(json_url, cache_path):
'''Download and cache JSON data, return as a dataframe.'''
try:
f = open(cache_path, 'rb')
df = pickle.load(f)
print('Loaded {} from cache'.format(json_url))
except (OSError, IOError) as e:
print('Downloading {}'.format(json_url))
df = pd.read_json(json_url)
df.to_pickle(cache_path)
print('Cached {} at {}'.format(json_url, cache_path))
return df
এরপর, আমরা একটি নতুন ফাংশন সংজ্ঞায়িত করব যা Poloniex API-তে একটি HTTP অনুরোধ করবে এবং কলের ফলাফল সংরক্ষণ করার জন্য আমরা যে get_json_data ফাংশনটি সংজ্ঞায়িত করেছি তা কল করবে।
base_polo_url = 'https://poloniex.com/public?command=returnChartData¤cyPair={}&start={}&end={}&period={}'
start_date = datetime.strptime('2015-01-01', '%Y-%m-%d') # 从2015年开始获取数据
end_date = datetime.now() # 直到今天
pediod = 86400 # pull daily data (86,400 seconds per day)
def get_crypto_data(poloniex_pair):
'''Retrieve cryptocurrency data from poloniex'''
json_url = base_polo_url.format(poloniex_pair, start_date.timestamp(), end_date.timestamp(), pediod)
data_df = get_json_data(json_url, poloniex_pair)
data_df = data_df.set_index('date')
return data_df
উপরের ফাংশনটি ডিজিটাল কারেন্সি পেয়ারিং ক্যারেক্টার কোড (যেমন “BTC_ETH”) বের করবে এবং দুটি মুদ্রার ঐতিহাসিক মূল্য সম্বলিত একটি ডেটা ফ্রেম ফেরত দেবে।
বেশীরভাগ altcoins সরাসরি ইউ.এস. ডলার দিয়ে কেনা যায় না, যদি একজন ব্যক্তি এই ডিজিটাল মুদ্রা পেতে চায়, তাহলে তাদের সাধারণত প্রথমে বিটকয়েন কিনতে হবে এবং তারপর তাদের মধ্যে মূল্য অনুপাতের উপর ভিত্তি করে তাদের বিনিময় করতে হবে। অতএব, আমাদের প্রতিটি ডিজিটাল মুদ্রার বিনিময় হার বিটকয়েনে ডাউনলোড করতে হবে এবং তারপরে মার্কিন ডলারে রূপান্তর করতে বিদ্যমান বিটকয়েনের মূল্য ডেটা ব্যবহার করতে হবে। আমরা 9টি শীর্ষ-র্যাঙ্কযুক্ত ডিজিটাল মুদ্রার জন্য লেনদেন ডেটা ডাউনলোড করি: ইথেরিয়াম, লিটকয়েন, রিপল, ইথেরিয়াম ক্লাসিক, স্টেলার, ড্যাশ, সিয়াকয়েন, মনরো এবং NEM।
altcoins = ['ETH','LTC','XRP','ETC','STR','DASH','SC','XMR','XEM']
altcoin_data = {}
for altcoin in altcoins:
coinpair = 'BTC_{}'.format(altcoin)
crypto_price_df = get_crypto_data(coinpair)
altcoin_data[altcoin] = crypto_price_df
আমাদের কাছে এখন 9টি ডেটাফ্রেম সম্বলিত একটি অভিধান রয়েছে, প্রতিটিতে altcoins এবং Bitcoin এর মধ্যে ঐতিহাসিক দৈনিক গড় মূল্যের ডেটা রয়েছে।
আমরা Ethereum মূল্য টেবিলের শেষ কয়েকটি সারি দেখে ডেটা সঠিক কিনা তা নির্ধারণ করতে পারি।
altcoin_data['ETH'].tail()
| ETH | Open | High | Low | Close | Volume (BTC) | Volume (Currency) | Weighted Price |
|---|---|---|---|---|---|---|---|
| 2017-08-18 | 0.070510 | 0.071000 | 0.070170 | 0.070887 | 17364.271529 | 1224.762684 | 0.070533 |
| 2017-08-18 | 0.071595 | 0.072096 | 0.070004 | 0.070510 | 26644.018123 | 1893.136154 | 0.071053 |
| 2017-08-18 | 0.071321 | 0.072906 | 0.070482 | 0.071600 | 39655.127825 | 2841.549065 | 0.071657 |
| 2017-08-19 | 0.071447 | 0.071855 | 0.070868 | 0.071321 | 16116.922869 | 1150.361419 | 0.071376 |
| 2017-08-19 | 0.072323 | 0.072550 | 0.071292 | 0.071447 | 14425.571894 | 1039.596030 | 0.072066 |
আমরা এখন প্রতিটি altcoin এর ঐতিহাসিক মূল্য (USD-এ) সরাসরি গণনা করতে আমাদের বিটকয়েন মূল্য সূচকের সাথে altcoin বিনিময় হারের ডেটা BTC-কে একত্রিত করতে পারি।
# 将USD Price计算为每个altcoin数据帧中的新列
for altcoin in altcoin_data.keys():
altcoin_data[altcoin]['price_usd'] = altcoin_data[altcoin]['weightedAverage'] * btc_usd_datasets['avg_btc_price_usd']
এখানে, আমরা প্রতিটি altcoin-এর ডেটা ফ্রেমে একটি নতুন কলাম যুক্ত করি যাতে তার সংশ্লিষ্ট USD মূল্য সংরক্ষণ করা যায়।
এর পরে, আমরা প্রতিটি ডিজিটাল মুদ্রার USD মূল্য একত্রিত করে একটি মার্জড ডেটা ফ্রেম তৈরি করতে পূর্বে সংজ্ঞায়িত ফাংশন merge_dfs_on_column পুনরায় ব্যবহার করতে পারি।
# 将每个山寨币的美元价格合并为单个数据帧
combined_df = merge_dfs_on_column(list(altcoin_data.values()), list(altcoin_data.keys()), 'price_usd')
সম্পন্ন !
এখন মার্জ করা ডেটাফ্রেমে শেষ কলাম হিসেবে বিটকয়েনের দাম যোগ করা যাক।
# 将BTC价格添加到数据帧
combined_df['BTC'] = btc_usd_datasets['avg_btc_price_usd']
এখন আমাদের কাছে একটি অনন্য ডেটাফ্রেম রয়েছে যাতে আমরা যে দশটি ডিজিটাল মুদ্রা যাচাই করছি তার জন্য দৈনিক USD মূল্য রয়েছে।
চার্ট আকারে সমস্ত altcoin এর সংশ্লিষ্ট মূল্য প্রদর্শন করতে আমরা পূর্ববর্তী ফাংশন df_scatter পুনরায় কল করি।

চার্টটি সূক্ষ্ম দেখায়, এবং এটি আমাদেরকে একটি সম্পূর্ণ চিত্র দেয় যে কীভাবে প্রতিটি ডিজিটাল মুদ্রা বিনিময় মূল্য গত কয়েক বছরে পরিবর্তিত হয়েছে।
দ্রষ্টব্য: এখানে আমরা একই গ্রাফে সমস্ত ক্রিপ্টোকারেন্সি তুলনা করতে লগারিদমিক y-অক্ষ ব্যবহার করি। আপনি বিভিন্ন দৃষ্টিকোণ থেকে ডেটা বোঝার জন্য বিভিন্ন প্যারামিটার মান (যেমন স্কেল=‘লিনিয়ার’) চেষ্টা করতে পারেন।
সতর্ক পাঠকরা লক্ষ্য করেছেন যে ডিজিটাল মুদ্রার মূল্যগুলি তাদের ব্যাপকভাবে পরিবর্তিত আর্থিক মূল্য এবং উচ্চ অস্থিরতা সত্ত্বেও পারস্পরিক সম্পর্কযুক্ত বলে মনে হচ্ছে। বিশেষ করে এপ্রিল 2017 এর দ্রুত বৃদ্ধি থেকে শুরু করে, এমনকি অনেক ছোট ওঠানামা পুরো বাজারের ওঠানামার সাথে একই সাথে ঘটতে দেখা গেছে।
অবশ্যই, তথ্য দ্বারা সমর্থিত সিদ্ধান্তগুলি চিত্রের উপর ভিত্তি করে অন্তর্দৃষ্টির চেয়ে বেশি বিশ্বাসযোগ্য।
উপরের পারস্পরিক সম্পর্ক অনুমান যাচাই করার জন্য আমরা পান্ডাস কর() ফাংশন ব্যবহার করতে পারি। এই পরীক্ষাটি অন্যান্য কলামের সাপেক্ষে ডেটা ফ্রেমের প্রতিটি কলামের জন্য পিয়ারসন পারস্পরিক সম্পর্ক সহগ গণনা করে।
2017.8.22 রিভিশন দ্রষ্টব্য: পারস্পরিক সম্পর্ক সহগ গণনা করার সময় মূল্যের পরম মানের পরিবর্তে দৈনিক রিটার্ন রেট ব্যবহার করার জন্য এই অংশটি পরিবর্তন করা হয়েছে।
একটি অ-সলিড টাইম সিরিজের উপর ভিত্তি করে সরাসরি গণনা (যেমন কাঁচা দামের ডেটা) পক্ষপাতদুষ্ট পারস্পরিক সম্পর্ক সহগ হতে পারে। এই সমস্যার আমাদের সমাধান হল pct_change() পদ্ধতি ব্যবহার করে ডেটা ফ্রেমের প্রতিটির পরম মূল্য মানকে সংশ্লিষ্ট দৈনিক রিটার্নে রূপান্তর করা।
উদাহরণস্বরূপ, আসুন 2016 এর জন্য পারস্পরিক সম্পর্ক সহগ গণনা করা যাক।
# 计算2016年数字货币的皮尔森相关系数
combined_df_2016 = combined_df[combined_df.index.year == 2016]
combined_df_2016.pct_change().corr(method='pearson')
| Name | DASH | ETC | ETH | LTC | SC | STR | XEM | XMR | XRP | BTC |
|---|---|---|---|---|---|---|---|---|---|---|
| DASH | 1.000000 | 0.003992 | 0.122695 | -0.012194 | 0.026602 | 0.058083 | 0.014571 | 0.121537 | 0.088657 | -0.014040 |
| ETC | 0.003992 | 1.000000 | -0.181991 | -0.131079 | -0.008066 | -0.102654 | -0.080938 | -0.105898 | -0.054095 | -0.170538 |
| ETH | 0.122695 | -0.181991 | 1.000000 | -0.064652 | 0.169642 | 0.035093 | 0.043205 | 0.087216 | 0.085630 | -0.006502 |
| LTC | -0.012194 | -0.131079 | -0.064652 | 1.000000 | 0.012253 | 0.113523 | 0.160667 | 0.129475 | 0.053712 | 0.750174 |
| SC | 0.026602 | -0.008066 | 0.169642 | 0.012253 | 1.000000 | 0.143252 | 0.106153 | 0.047910 | 0.021098 | 0.035116 |
| STR | 0.058083 | -0.102654 | 0.035093 | 0.113523 | 0.143252 | 1.000000 | 0.225132 | 0.027998 | 0.320116 | 0.079075 |
| XEM | 0.014571 | -0.080938 | 0.043205 | 0.160667 | 0.106153 | 0.225132 | 1.000000 | 0.016438 | 0.101326 | 0.227674 |
| XMR | 0.121537 | -0.105898 | 0.087216 | 0.129475 | 0.047910 | 0.027998 | 0.016438 | 1.000000 | 0.027649 | 0.127520 |
| XRP | 0.088657 | -0.054095 | 0.085630 | 0.053712 | 0.021098 | 0.320116 | 0.101326 | 0.027649 | 1.000000 | 0.044161 |
| BTC | -0.014040 | -0.170538 | -0.006502 | 0.750174 | 0.035116 | 0.079075 | 0.227674 | 0.127520 | 0.044161 | 1.000000 |
উপরের ছবিটি পারস্পরিক সম্পর্ক সহগ দেখায়। 1 বা -1 এর কাছাকাছি একটি সহগ মানে হল যে ক্রমটি যথাক্রমে ধনাত্মকভাবে সম্পর্কযুক্ত বা বিপরীতভাবে 0 এর কাছাকাছি আসার মানে হল যে সংশ্লিষ্ট বস্তুগুলি সম্পর্কিত নয় এবং তাদের ওঠানামা একে অপরের থেকে স্বাধীন।
ফলাফলগুলিকে আরও ভালভাবে কল্পনা করার জন্য, আমরা একটি নতুন ভিজ্যুয়াল সহায়ক ফাংশন তৈরি করি।
def correlation_heatmap(df, title, absolute_bounds=True):
'''Plot a correlation heatmap for the entire dataframe'''
heatmap = go.Heatmap(
z=df.corr(method='pearson').as_matrix(),
x=df.columns,
y=df.columns,
colorbar=dict(title='Pearson Coefficient'),
)
layout = go.Layout(title=title)
if absolute_bounds:
heatmap['zmax'] = 1.0
heatmap['zmin'] = -1.0
fig = go.Figure(data=[heatmap], layout=layout)
py.iplot(fig)
correlation_heatmap(combined_df_2016.pct_change(), "Cryptocurrency Correlations in 2016")

এখানে, গাঢ় লাল মানগুলি শক্তিশালী পারস্পরিক সম্পর্ককে প্রতিনিধিত্ব করে (প্রত্যেক মুদ্রা স্পষ্টতই নিজের সাথে অত্যন্ত সম্পর্কযুক্ত), এবং গাঢ় নীল মানগুলি বিপরীত পারস্পরিক সম্পর্ককে প্রতিনিধিত্ব করে। মধ্যবর্তী সমস্ত রঙ - হালকা নীল/কমলা/ধূসর/ট্যান - এর মান রয়েছে যা বিভিন্ন মাত্রার দুর্বল বা কোন সম্পর্ক নেই।
এই ছবি আমাদের কি বলে? একটি মৌলিক স্তরে, এটি ব্যাখ্যা করে কিভাবে বিভিন্ন ডিজিটাল মুদ্রার দাম 2016 এর মধ্যে ওঠানামা করেছে, কিছু পরিসংখ্যানগতভাবে উল্লেখযোগ্য পারস্পরিক সম্পর্ক রয়েছে।
এখন, আমাদের অনুমান পরীক্ষা করার জন্য যে “সাম্প্রতিক মাসগুলিতে ক্রিপ্টোকারেন্সিগুলি আরও সম্পর্কযুক্ত হয়ে উঠেছে,” আমরা 2017 থেকে ডেটা ব্যবহার করে একই পরীক্ষাটি পুনরাবৃত্তি করব।
combined_df_2017 = combined_df[combined_df.index.year == 2017]
combined_df_2017.pct_change().corr(method='pearson')
| Name | DASH | ETC | ETH | LTC | SC | STR | XEM | XMR | XRP | BTC |
|---|---|---|---|---|---|---|---|---|---|---|
| DASH | 1.000000 | 0.384109 | 0.480453 | 0.259616 | 0.191801 | 0.159330 | 0.299948 | 0.503832 | 0.066408 | 0.357970 |
| ETC | 0.384109 | 1.000000 | 0.602151 | 0.420945 | 0.255343 | 0.146065 | 0.303492 | 0.465322 | 0.053955 | 0.469618 |
| ETH | 0.480453 | 0.602151 | 1.000000 | 0.286121 | 0.323716 | 0.228648 | 0.343530 | 0.604572 | 0.120227 | 0.421786 |
| LTC | 0.259616 | 0.420945 | 0.286121 | 1.000000 | 0.296244 | 0.333143 | 0.250566 | 0.439261 | 0.321340 | 0.352713 |
| SC | 0.191801 | 0.255343 | 0.323716 | 0.296244 | 1.000000 | 0.417106 | 0.287986 | 0.374707 | 0.248389 | 0.377045 |
| STR | 0.159330 | 0.146065 | 0.228648 | 0.333143 | 0.417106 | 1.000000 | 0.396520 | 0.341805 | 0.621547 | 0.178706 |
| XEM | 0.299948 | 0.303492 | 0.343530 | 0.250566 | 0.287986 | 0.396520 | 1.000000 | 0.397130 | 0.270390 | 0.366707 |
| XMR | 0.503832 | 0.465322 | 0.604572 | 0.439261 | 0.374707 | 0.341805 | 0.397130 | 1.000000 | 0.213608 | 0.510163 |
| XRP | 0.066408 | 0.053955 | 0.120227 | 0.321340 | 0.248389 | 0.621547 | 0.270390 | 0.213608 | 1.000000 | 0.170070 |
| BTC | 0.357970 | 0.469618 | 0.421786 | 0.352713 | 0.377045 | 0.178706 | 0.36 |