استفاده از ChatGPT و Python برای علم داده موثر با بیت کوین: داشبورد را با سرعت بسیار بالا توسعه دهید!
شکی نیست که یکی از مهمترین مراحل یک پروژه علم داده، تجسم داده است.
ایجاد تصاویری چشمگیر و زنده، به شما و پروژه شما یک شروع عالی می دهد.
البته، میتوانید با کدگذاری از A به Z یا با ابزارهای هوشمند مانند Tableau، Powerbi یا Google Data Studio، داشبورد ایجاد کنید. با این حال من امروز تنبل هستم، بنابراین نمی خواهم آنقدر کار دستی انجام دهم.
به هر حال، اگر می خواهید از ChatGPT برای ایجاد تصاویر چشمگیر استفاده کنید، فراموش نکنید که این دستورات را بررسی کنید.
پس بیایید یک بار دیگر از ChatGPT استفاده کنیم و به خصوص برای شما جذاب تر خواهد بود، زیرا بیت کوین را نیز شامل می شود!
من نمی خواهم زمان زیادی را صرف کنم و برای شما توضیح دهم که Data Visualization، Plotly یا dash چیست.
می توانید آنها را در گوگل جستجو کنید، یا امیدوارم با آنها آشنا باشید، اما اکنون لازم نیست.
زیرا مستقیماً وارد تمرین کدنویسی خواهیم شد.
بیایید با ChatGPT، همراه وفادارمان صحبت کنیم.
اما شما می خواهید داشبورد و کد را فورا ببینید، درست است؟
اجازه بدید ببینم.
در اینجا می توانید داده های 10.072 سکه مختلف را مشاهده کنید.
شما می توانید زمان را تنظیم کنید، من آن را 2100 روز تنظیم کردم، کد زیر را خواهید دید.
و همچنین، من 7 منطقه زمانی مختلف را در زیر بخش سکه اضافه کردم
- 1 ماه
- 2 ماه
- 3 ماه
- 6 ماه
- 1 سال
- 2 سال و تمام زمان (2100 روز)
همچنین اجازه دهید تب تجزیه و تحلیل معیارها را ببینیم.
در اینجا می توانید تغییر 24 ساعته ارزش بازار را مشاهده کنید که ممکن است شاخص خوبی باشد.
محدودیت واقعا بی پایان است، شما می توانید استفاده کنید.
- میانگین متحرک (7،14،30)
- نمودارهای مختلف
- شاخص های مختلف
من متخصص بیت کوین یا مالی نیستم، بنابراین میتوانید نمودارها و معیارهای مختلفی را که میخواهید اضافه کنید پیدا کنید و فقط با درخواست از ChatGPT برای بهروزرسانی کد آن، آنها را به نمودار اضافه کنید. (کد کامل در انتهای مقاله است.)
درخواست های مثال
- صفحه دیگری ایجاد کنید که معیارهای مختلف این سکه ها مانند ارزش بازار سرمایه و غیره را تجزیه و تحلیل کند.
- این نمودار را با رنگ های ساده اما موثر شیک و زیبا کنید.
- در بخش تجزیه و تحلیل قیمت، خطوط میانگین متحرک را روی نمودار، 7-14-30 با رنگ های مختلف اضافه کنید.
- آیا می توانید معیارهای بیشتری را به من ارائه دهید؟ من میخواهم که این معیارها یک پیشبینیکننده عالی برای سکهها باشد، مانند تغییر روزانه ارزش بازار سرمایه.
غذای آماده
من به شما پیشنهاد می کنم بخش اول کد را در محیط دیگری اجرا کنید (ممکن است Jupyter Notebook خوب باشد) تا بررسی کنید که آیا انواع داده ها صحیح هستند یا خیر. از آنجایی که کد خیلی طولانی است، بنابراین وقتی می خواهید از ChatGPT کد را به روز کند، ممکن است زمان بیشتری طول بکشد.
و همچنین، ممکن است انواع دادهها تغییر کند زیرا ChatGPT در سال 2021 بهروزرسانی شده است، بنابراین ممکن است کد قدیمی را به شما بدهد، بنابراین اگر خطایی در مورد نوع داده داشتید، بهتر است در جای دیگری (بعد از PyCharm) بررسی کنید.
فناوری هایی که برای شما برای تکرار کارهایی که انجام دادم استفاده کردم
- خط تیره
- توطئه
- coingeckoapi – دارای محدودیت در ردیف آزاد است
- ChatGPT (مثل همیشه)
- PyCharm – در واقع من سعی کردم ابتدا این کار را در Jupyter انجام دهم، اما PyCharm گزینه بهتری برای من خواهد بود.
- فراموش نکنید که این کتابخانه های پایتون را نصب کنید! dash-plotly-pandas-requests-json (من با یکی از آن کتابخانه ها در نوت بوک Jupyter مشکل داشتم به همین دلیل به PyCharm تغییر مکان دادم.)
کد کامل
import dash
from dash import dcc
from dash import html
from dash.dependencies import Input, Output
import plotly.graph_objects as go
import requests
import pandas as pd
import json# Get the initial list of coins
response = requests.get('https://api.coingecko.com/api/v3/coins/list')
coins_list = json.loads(response.text)
coins = [coin['id'] for coin in coins_list if isinstance(coin, dict) and 'id' in coin]
# Set up Dash app
app = dash.Dash(__name__)
app.layout = html.Div([
html.H1("Cryptocurrency Live Dashboard Empowered by ChatGPT", style={'text-align': 'center'}),
dcc.Tabs(id="tabs", value='tab-price', children=[
dcc.Tab(label='Price Analysis', value='tab-price', children=[
html.Div([
dcc.Dropdown(
id="slct_coin",
options=[{"label": coin, "value": coin} for coin in coins],
multi=False,
value=coins[0], # Select the first coin in the list by default
style={'width': "40%"}
)
], style={'width': '50%', 'margin': 'auto', 'padding': '10px'}),
html.Div([
html.Button("1M", id='btn-1m', n_clicks=0),
html.Button("2M", id='btn-2m', n_clicks=0),
html.Button("3M", id='btn-3m', n_clicks=0),
html.Button("6M", id='btn-6m', n_clicks=0),
html.Button("1Y", id='btn-1y', n_clicks=0),
html.Button("2Y", id='btn-2y', n_clicks=0),
html.Button("All", id='btn-all', n_clicks=0),
], style={'width': '50%', 'margin': 'auto', 'padding': '10px'}),
html.Div(id='output_container', children=[], style={'text-align': 'center'}),
dcc.Graph(id='coin_price_graph', style={'height': '500px'})
]),
dcc.Tab(label='Metrics Analysis', value='tab-metrics', children=[
html.Div([
html.H2('Metrics Analysis', style={'text-align': 'center'}),
html.Table(id='metrics_table', children=[
html.Thead(html.Tr([
html.Th('Metric'),
html.Th('Value')
])),
html.Tbody([
html.Tr([
html.Td('Market Cap'),
html.Td(id='metric-market-cap')
]),
html.Tr([
html.Td('Volume'),
html.Td(id='metric-volume')
]),
html.Tr([
html.Td('Price'),
html.Td(id='metric-price')
]),
html.Tr([
html.Td('24h Change'),
html.Td(id='metric-24h-change')
]),
])
])
], style={'width': '50%', 'margin': 'auto', 'padding': '10px'})
])
]),
dcc.Interval(
id='interval-component',
interval=60 * 60 * 1000, # in milliseconds (update every hour)
n_intervals=0
)
])
@app.callback(
[Output(component_id='output_container', component_property='children'),
Output(component_id='coin_price_graph', component_property='figure'),
Output(component_id='metrics_table', component_property='children')],
[Input(component_id='slct_coin', component_property='value'),
Input('btn-1m', 'n_clicks'),
Input('btn-2m', 'n_clicks'),
Input('btn-3m', 'n_clicks'),
Input('btn-6m', 'n_clicks'),
Input('btn-1y', 'n_clicks'),
Input('btn-2y', 'n_clicks'),
Input('btn-all', 'n_clicks'),
Input('interval-component', 'n_intervals')]
)
def update_graph(slct_coin, btn_1m, btn_2m, btn_3m, btn_6m, btn_1y, btn_2y, btn_all, n):
changed_id = [p['prop_id'] for p in dash.callback_context.triggered][0]
if 'btn-1m' in changed_id:
days = 30
elif 'btn-2m' in changed_id:
days = 60
elif 'btn-3m' in changed_id:
days = 90
elif 'btn-6m' in changed_id:
days = 180
elif 'btn-1y' in changed_id:
days = 365
elif 'btn-2y' in changed_id:
days = 730
elif 'btn-all' in changed_id:
days = 2100
else:
days = 2100 # Default time period (1 month)
if days is not None:
response = requests.get(f'https://api.coingecko.com/api/v3/coins/{slct_coin}/market_chart?vs_currency=usd&days={days}&interval=daily')
data = json.loads(response.text)
df = pd.DataFrame()
df['times'] = pd.to_datetime([x[0] for x in data['prices']], unit='ms')
df['prices'] = [x[1] for x in data['prices']]
fig = go.Figure()
fig.add_trace(go.Scatter(x=df['times'], y=df['prices'], mode='lines', name='Price'))
fig.update_layout(
title={
'text': "Price of " + slct_coin.capitalize() + " in USD",
'y': 0.95,
'x': 0.5,
'xanchor': 'center',
'yanchor': 'top'},
xaxis_title="Time",
yaxis_title="Price (USD)",
legend_title="Variables",
paper_bgcolor='rgba(240, 240, 240, 0.6)',
plot_bgcolor='rgba(240, 240, 240, 0.6)',
font=dict(color='black'),
showlegend=False,
yaxis=dict(gridcolor='lightgray'),
xaxis=dict(gridcolor='lightgray')
)
# Metrics analysis
response_metrics = requests.get(f'https://api.coingecko.com/api/v3/coins/{slct_coin}')
metrics_data = json.loads(response_metrics.text)
market_cap = metrics_data['market_data']['market_cap']['usd']
volume = metrics_data['market_data']['total_volume']['usd']
price = metrics_data['market_data']['current_price']['usd']
change_24h = metrics_data['market_data']['price_change_percentage_24h']
# Determine the arrow symbol and color based on the change_24h value
if change_24h < 0:
arrow_symbol = '▼'
arrow_color = 'red'
else:
arrow_symbol = '▲'
arrow_color = 'green'
# Create the metrics table
metrics_table = html.Table([
html.Thead(html.Tr([
html.Th('Metric'),
html.Th('Value')
])),
html.Tbody([
html.Tr([
html.Td('Market Cap'),
html.Td('${:,.2f}'.format(market_cap))
]),
html.Tr([
html.Td('Volume'),
html.Td('${:,.2f}'.format(volume))
]),
html.Tr([
html.Td('Price'),
html.Td('${:,.2f}'.format(price))
]),
html.Tr([
html.Td('24h Change'),
html.Td([
html.Span(arrow_symbol + ' ', style={'color': arrow_color, 'font-weight': 'bold'}),
html.Span('{:.2f}%'.format(change_24h), style={'display': 'inline-block'})
])
])
])
], style={'width': '100%', 'font-family': 'Arial, sans-serif', 'font-size': '16px', 'text-align': 'center'})
else:
fig = go.Figure()
metrics_table = html.Table([])
container = "The coin chosen by the user was: {}".format(slct_coin)
return container, fig, metrics_table
if __name__ == '__main__':
app.run_server(debug=True, port=8052)
اگر تا اینجا پیش رفتید، ممنونم! اگر هنوز عضو Medium نیستید و میخواهید دانش خود را از طریق مطالعه گسترش دهید، پیوند ارجاع من در اینجا است.
من به طور مداوم برگه های تقلب و کدهای منبع جدید را به نفع شما به روز می کنم و اضافه می کنم. اخیرا، من یک برگه تقلب ChatGPT ایجاد کردم، و صادقانه بگویم، نمی توانم روزی را به یاد بیاورم که از زمان انتشار ChatGPT از آن استفاده نکرده باشم.
همچنین، این کتاب الکترونیکی من است، توضیح می دهد که چگونه یادگیری ماشینی را می توان با استفاده از ChatGPT یاد گرفت.
می توانید یکی از برگه ها یا پروژه های تقلب را انتخاب کنید تا با تکمیل فرم های زیر برای شما ارسال کنم:
اینجا من است برگه تقلب NumPy.
در اینجا کد منبع “چگونه میلیاردر شویم” پروژه داده
در اینجا کد منبع “کار طبقه بندی با 6 الگوریتم مختلف با استفاده از پایتون” پروژه داده
در اینجا کد منبع “درخت تصمیم در تحلیل کارایی انرژی” پروژه داده
در اینجا کد منبع “تجزیه و تحلیل مقالات DataDrivenInvestor 2022” پروژه داده
“یادگیری ماشین آخرین اختراعی است که بشریت باید انجام دهد.” نیک بوستروم