AmirTrader commited on
Commit
f416ea7
·
verified ·
1 Parent(s): 0d06f89

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -35
app.py CHANGED
@@ -1,58 +1,122 @@
1
  import pandas as pd
 
 
 
2
  import panel as pn
3
  import hvplot as hv
4
- from datetime import datetime
5
- from datetime import date,timedelta
6
- pn.extension('bokeh', template='bootstrap')
7
  import hvplot.pandas
 
 
 
 
8
  from DescriptionDict import DescriptionDict
9
 
10
- @pn.cache
11
- def get_df(todaydate):
12
- todaydate2 = datetime.today().strftime("%Y-%m-%d")
13
- # todaydate2 =todaydate.strftime("%Y-%m-%d")
14
- url = f"https://raw.githubusercontent.com/alirezax2/GurusFocusCrawl/main/gurufocus/GuruFocus_merged_{todaydate2}.csv"
15
- df = pd.read_csv(url)
16
-
17
- return df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
  todaydate = pn.widgets.DatePicker(
20
- name ="End Date",# value=datetime(2000, 1, 1),
21
- description='Select a Date',
22
- end= date.today() #date(2023, 9, 1)
 
 
 
 
 
 
 
 
 
 
 
 
23
  )
24
 
25
- todaydate2 = datetime.today().strftime("%Y-%m-%d")
26
- df = get_df(todaydate2)
27
- selectedcol = pn.widgets.Select(name='Select Ratio', value = 'PEG Ratio', options=list(df.columns))
28
- selecteditem = pn.widgets.Select(name='Select Item', value='Sector' , options=['Industry' , 'Sector'])
29
- selectedmethod = pn.widgets.Select(name='Select Method', value= 'Mean' , options=['Mean', 'Min' , 'Max'])
30
 
31
- ticker = pn.widgets.AutocompleteInput(name='Ticker', options=list(df.Ticker) , placeholder='Write Ticker here همین جا')
32
  ticker.value = "AAPL"
33
 
34
- selectedhover = 'Ticker'
35
- hv.extension('bokeh')
 
36
 
37
- def create_plot(selectedcol,selecteditem,todaydate,selectedmethod,ticker):
38
- df = get_df(todaydate)
39
- if selectedmethod=='Mean':
40
  group_them = df.groupby(selecteditem)[selectedcol].mean()
41
- if selectedmethod=='Min':
42
  group_them = df.groupby(selecteditem)[selectedcol].min()
43
- if selectedmethod=='Max':
44
  group_them = df.groupby(selecteditem)[selectedcol].max()
45
- df2 = df.merge(group_them, left_on=selecteditem, right_index=True, suffixes=('', f'_{selecteditem}_{selectedmethod}'))
46
- df3 = df.query('Ticker == @ticker')
47
- return df2.hvplot.bar(x=selecteditem, y=f'{selectedcol}_{selecteditem}_{selectedmethod}', hover_cols=selectedhover, height=800, width=1800).opts(xrotation=90, fontsize={'xticks': 10}).opts(show_grid=True) * df3.hvplot.bar(x=selecteditem, y=f'{selectedcol}',hover_cols=selectedhover,)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
  def create_alert(selectedcol):
50
  text = f"### {selectedcol} \n {DescriptionDict[selectedcol]}"
51
  return pn.pane.Alert(text, alert_type="warning")
52
-
53
-
54
- bound_plot = pn.bind(create_plot, selectedcol=selectedcol , selecteditem=selecteditem, todaydate=todaydate, selectedmethod=selectedmethod,ticker=ticker)
55
- bound_alert = pn.bind(create_alert,selectedcol=selectedcol)
56
- pn.Column(pn.Row(selectedcol, selecteditem, todaydate,selectedmethod,ticker), bound_plot, bound_alert).servable(title="Financial Sector Ratios Navigator")
57
 
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import pandas as pd
2
+
3
+ import os
4
+
5
  import panel as pn
6
  import hvplot as hv
7
+
8
+ pn.extension("bokeh", template="bootstrap")
 
9
  import hvplot.pandas
10
+
11
+ from datetime import datetime
12
+ from datetime import date, timedelta
13
+
14
  from DescriptionDict import DescriptionDict
15
 
16
+ # from dotenv import load_dotenv
17
+
18
+ # from datasets import load_dataset
19
+ from utils import load_hf_dataset # ,upload_to_hf_dataset, download_from_hf_dataset
20
+
21
+ # Load environment variables from .env file
22
+ # load_dotenv()
23
+
24
+ # Get the Hugging Face API token from the environment; either set in .env file or in the environment directly in GitHub
25
+ HF_TOKEN = os.getenv("HF_TOKEN")
26
+
27
+ # Get the name of the dataset for TradingView, GuruFocus to read from
28
+ dataset_name_TradingView_input = os.getenv("dataset_name_TradingView_input")
29
+ dataset_name_GuruFocus_input = os.getenv("dataset_name_GuruFocus_input")
30
+
31
+
32
+ @pn.cache()
33
+ def get_tradingview(current_datetime):
34
+ # Load lastest TradingView DataSet from HuggingFace Dataset which is always america.csv
35
+ # download_from_hf_dataset("america.csv", dataset_name_TradingView_input, HF_TOKEN)
36
+ return load_hf_dataset("america.csv", HF_TOKEN, dataset_name_TradingView_input)
37
+
38
+
39
+ @pn.cache()
40
+ def get_gurufocus(current_datetime):
41
+ # Load lastest GuruFocus DataSet from HuggingFace Dataset which is always GuruFocus_merged.csv
42
+ # daily_gurufocus_DF = load_dataset(dataset_name_GuruFocus_output , data_files="GuruFocus_merged.csv", split="train" , token=HF_TOKEN ).to_pandas()
43
+ return load_hf_dataset(
44
+ "GuruFocus_merged.csv", HF_TOKEN, dataset_name_GuruFocus_input
45
+ )
46
+
47
 
48
  todaydate = pn.widgets.DatePicker(
49
+ name="End Date", # value=datetime(2000, 1, 1),
50
+ description="Select a Date",
51
+ end=date.today(), # date(2023, 9, 1)
52
+ )
53
+
54
+ todaydate2 = datetime.today().strftime("%Y-%m-%d")
55
+ df = get_gurufocus(todaydate2)
56
+ selectedcol = pn.widgets.Select(
57
+ name="Select Ratio", value="PEG Ratio", options=list(df.columns)
58
+ )
59
+ selecteditem = pn.widgets.Select(
60
+ name="Select Item", value="Sector", options=["Industry", "Sector"]
61
+ )
62
+ selectedmethod = pn.widgets.Select(
63
+ name="Select Method", value="Mean", options=["Mean", "Min", "Max"]
64
  )
65
 
66
+ ticker = pn.widgets.AutocompleteInput(
67
+ name="Ticker", options=list(df.Ticker), placeholder="Write Ticker here همین جا"
68
+ )
 
 
69
 
 
70
  ticker.value = "AAPL"
71
 
72
+ selectedhover = "Ticker"
73
+ hv.extension("bokeh")
74
+
75
 
76
+ def create_plot(selectedcol, selecteditem, todaydate, selectedmethod, ticker):
77
+ df = get_gurufocus(todaydate)
78
+ if selectedmethod == "Mean":
79
  group_them = df.groupby(selecteditem)[selectedcol].mean()
80
+ if selectedmethod == "Min":
81
  group_them = df.groupby(selecteditem)[selectedcol].min()
82
+ if selectedmethod == "Max":
83
  group_them = df.groupby(selecteditem)[selectedcol].max()
84
+ df2 = df.merge(
85
+ group_them,
86
+ left_on=selecteditem,
87
+ right_index=True,
88
+ suffixes=("", f"_{selecteditem}_{selectedmethod}"),
89
+ )
90
+ df3 = df.query("Ticker == @ticker")
91
+ return df2.hvplot.bar(
92
+ x=selecteditem,
93
+ y=f"{selectedcol}_{selecteditem}_{selectedmethod}",
94
+ hover_cols=selectedhover,
95
+ height=800,
96
+ width=1800,
97
+ ).opts(xrotation=90, fontsize={"xticks": 10}).opts(show_grid=True) * df3.hvplot.bar(
98
+ x=selecteditem,
99
+ y=f"{selectedcol}",
100
+ hover_cols=selectedhover,
101
+ )
102
+
103
 
104
  def create_alert(selectedcol):
105
  text = f"### {selectedcol} \n {DescriptionDict[selectedcol]}"
106
  return pn.pane.Alert(text, alert_type="warning")
 
 
 
 
 
107
 
108
 
109
+ bound_plot = pn.bind(
110
+ create_plot,
111
+ selectedcol=selectedcol,
112
+ selecteditem=selecteditem,
113
+ todaydate=todaydate,
114
+ selectedmethod=selectedmethod,
115
+ ticker=ticker,
116
+ )
117
+ bound_alert = pn.bind(create_alert, selectedcol=selectedcol)
118
+ pn.Column(
119
+ pn.Row(selectedcol, selecteditem, todaydate, selectedmethod, ticker),
120
+ bound_plot,
121
+ bound_alert,
122
+ ).servable(title="Financial Sector Ratios Navigator")