<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">

<channel>

<title>Блог об аналитике, визуализации данных, data science и BI, заметки с тегом: coingecko</title>
<link>http://test.leftjoin.ru/tags/coingecko/</link>
<description></description>
<generator>E2 (v3365; Aegea)</generator>

<item>
<title>Изучаем динамику основных криптовалют и определяем валюты с взрывным ростом</title>
<guid isPermaLink="false">132</guid>
<link>http://test.leftjoin.ru/all/coingecko-api-parsing/</link>
<comments>http://test.leftjoin.ru/all/coingecko-api-parsing/</comments>
<description>
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/tech-daily-ztYmIQecyH4-unsplash.jpg" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;На финансовых рынках стало крайне нестабильно. Сейчас специалисты по финансам и инвестициям серьезно затрудняются в ответе на вопрос “Куда лучше инвестировать?”. И правда, акции российских компаний (даже “голубые фишки”) больше не внушают доверия. Ответы с точки зрения инвесторов мы вам не дадим, конечно, мы все-таки аналитики. Однако, если вы хотите стать счастливым и успешным обладателем криптовалют, то сегодняшняя статья о том, как проанализировать динамику криптовалют, будет очень кстати.&lt;br /&gt;
Сегодня мы разберемся в том, как:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;найти Tоп-5 криптовалют по объему их капитализации и построить графики динамики стоимости&lt;/li&gt;
&lt;li&gt;сравним изменение цены валюты и капитализации криптовалюты за год&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Скрипт для обработки данных&lt;/h2&gt;
&lt;p class="note"&gt;Если вы все же решите парсить отдельно биржу Binance, то помните, что на самой бирже в архивных данных лежат не все периоды и валюты.&lt;/p&gt;
&lt;p&gt;Наш скрипт выполнен с помощью &lt;a href="https://www.coingecko.com/ru/api/documentation"&gt;CoinGecko API&lt;/a&gt;. Этот API усредняет собранные данные с 596 бирж, что помогает избавиться от незначительных колебаний и прочего статистического шума.&lt;br /&gt;
Мы проверили несколько вариантов получения данных (в т.ч. и парсинг биржи Binance), но именно этот клиент отдает больше всего информации (например, по капитализации криптовалют).&lt;/p&gt;
&lt;h3&gt;Подготовка&lt;/h3&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;# импорт библиотек
import requests
from bs4 import BeautifulSoup as bs
import time
import pandas as pd
import urllib.request
import matplotlib.pyplot as plt&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;Получаем Топ-5 криптовалют по капитализации&lt;/h3&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;# получаем капитализацию валют через coingecko
r = requests.get(&amp;quot;https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&amp;amp;order=market_cap_desc&amp;amp;per_page=5&amp;amp;page=1&amp;quot;, headers = {'User-Agent':'Mozilla/5.0'})
 
if r.status_code == 200:
  
 d = {
     'crypto name':   [i['id'] for i in r.json()],
     'symbol': [i['symbol'].upper() for i in r.json()],
     'capitalization': [i['market_cap'] for i in r.json()]     
   }
      
 df_coingecko = pd.DataFrame(d)

df_coingecko.head()&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/image3.png" border="0" width="50%" height="50%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Динамика изменения стоимости валюты&lt;/h3&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;# получаем динамику стоимости валюты bitcoin в usd за 7 дней
r = requests.get(&amp;quot;https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&amp;amp;days=7&amp;quot;, headers = {'User-Agent':'Mozilla/5.0'})
 
if r.status_code == 200:
 d = {
     'datetime':   [i[0] for i in r.json()['prices']],
     'price': [i[1] for i in r.json()['prices']]   
   }
      
 df_change = pd.DataFrame(d)&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;Визуализируем результаты&lt;/h3&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;df_change['datetime'] = pd.to_datetime(df_change['datetime'],unit='ms')
df_change.set_index('datetime', inplace=True)
df_change['price'].plot(title=&amp;quot;Bitcoin price changes&amp;quot;, ylabel=&amp;quot;Price, $&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/image2-1.png" width="401" height="284" alt="" /&gt;
&lt;/div&gt;
&lt;h3&gt;Анализ роста криптовалют за месяц&lt;/h3&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;# получаем данные по 100 монетам с самой большой капитализацией
r = requests.get(&amp;quot;https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&amp;amp;order=market_cap_desc&amp;amp;per_page=100&amp;amp;page=1&amp;amp;price_change_percentage=30d&amp;quot;, headers = {'User-Agent':'Mozilla/5.0'})

if r.status_code == 200:
 d = {
     'crypto name':   [i['id'] for i in r.json()],
     'symbol': [i['symbol'].upper() for i in r.json()],
     'price_change_percentage_30d_in_currency': [i['price_change_percentage_30d_in_currency'] for i in r.json()]     
   }
 df_change = pd.DataFrame(d)

# сортируем
df_change.sort_values('price_change_percentage_30d_in_currency', ascending=False, inplace=True)

# находим 5 валют с максимальным ростом за месяц
df_change.head()

# находим 5 валют с максимальным падением за месяц
df_change.tail()
Анализ роста валют за год (включая изменение капитализации)
# получаем данные по 100 монетам с самой большой капитализацией за год
r = requests.get(&amp;quot;https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&amp;amp;order=market_cap_desc&amp;amp;per_page=100&amp;amp;page=1&amp;amp;price_change_percentage=1y&amp;quot;, headers = {'User-Agent':'Mozilla/5.0'})

if r.status_code == 200:
 d = {
     'crypto name':   [i['id'] for i in r.json()],
     'symbol': [i['symbol'].upper() for i in r.json()],
     'price_change_percentage_1y_in_currency': [i['price_change_percentage_1y_in_currency'] for i in r.json()]     
   }
 df_year_change = pd.DataFrame(d)
 df_year_change.sort_values('price_change_percentage_1y_in_currency', ascending=False, inplace=True)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Наибольший рост цены за год у валюты Shiba-inu — более 24000 %&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;plt.rcParams[&amp;quot;figure.figsize&amp;quot;] = (20, 5)

# получаем данные по изменению за год
def get_year_charts(name):
 r = requests.get(f&amp;quot;https://api.coingecko.com/api/v3/coins/{name}/market_chart?vs_currency=usd&amp;amp;days=365&amp;quot;, headers = {'User-Agent':'Mozilla/5.0'})
 
 if r.status_code == 200:
   d = {
       'datetime': [i[0] for i in r.json()['market_caps']],
       'market_cap':   [i[1] for i in r.json()['market_caps']],
       'price': [i[1] for i in r.json()['prices']]
       #'volume': [i[1] for i in r.json()['total_volumes']]     
     }
   df_ydynamic = pd.DataFrame(d)
 
   df_ydynamic['datetime'] = pd.to_datetime(df_ydynamic['datetime'],unit='ms')
   df_ydynamic.set_index('datetime', inplace=True)
 
   # Рисуем оси - рыночная капитализация (синий цвет по умолчанию) и цена (красный)
   plt.figure()
   ax = df_ydynamic['market_cap'].plot()
   ax.set_ylabel('market_cap')
   ax1 = df_ydynamic['price'].plot(secondary_y=True, style='r')
   ax1.set_ylabel('price')
 
    ax.set_title(f&amp;quot;{name.capitalize()} market cap and price changes&amp;quot;)
    h1, l1 = ax.get_legend_handles_labels()
    h2, l2 = ax1.get_legend_handles_labels()
    ax.legend(h1+h2, l1+l2)&lt;/code&gt;&lt;/pre&gt;&lt;p class="note"&gt;Обратите внимание на данные по самой быстро выросшей валюте — shiba-inu (SHIB) Есть интересный момент, когда в мае 2021 года цена дала резкий скачок и затем падение, а капитализация практически стояла на одном уровне. И только с середины мая, когда цена уменьшилась после взлета, капитализация стала расти. Возможно, это было связано с &lt;a href="https://www.rbc.ru/crypto/news/60a7915f9a79478469074cc5"&gt;историей с Бутериным&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;get_year_charts('shiba-inu')&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/image1-2.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<pubDate>Tue, 05 Apr 2022 17:06:23 +0300</pubDate>
</item>


</channel>
</rss>