this is the code to privide a boken interactibe plot:

from bokeh.plotting import \*
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, CustomJS, Select, RadioButtonGroup, Div, HoverTool

output\_notebook()
# un-comment the line below to output to an html file
output\_file('bokeh\_COVID.html')
# start with one country (with Bokeh, I can choose any country to start with)
country = 'United States of America'
usedf = df.loc[df['Country'] == country]

# create a ColumnDataSource containing only the data I want to plot
# (Note: I only need to convert the pandas DataFrame to a ColumnDataSource because I want to manipulate it later in Javascript)
source = ColumnDataSource(
 data = dict(
 x = usedf['Date\_reported'], 
 y = usedf['New\_cases\_rolling'], # included for the tooltips

 )
)

# create a ColumnDataSource containing all the necessary data so that I can send it to javascript for filtering
allSource = ColumnDataSource(
 data = dict(
 Date\_reported = df['Date\_reported'], 
 New\_cases\_rolling = df['New\_cases\_rolling'],
 New\_deaths\_rolling = df['New\_deaths\_rolling'],
 Cumulative\_cases\_rolling = df['Cumulative\_cases\_rolling'],
 Cumulative\_deaths\_rolling = df['Cumulative\_deaths\_rolling'],
 Country = df['Country']
 )
)
# define the tools you want to use
TOOLS = "pan,wheel\_zoom,box\_zoom,reset,save"

# define the tooltip
hover\_tool = HoverTool(
 tooltips=[
 ( 'Date', '@x{%F}'),
 ( 'Count', '@y{int}' ),
 ],
 formatters={
 '@x': 'datetime', # use 'datetime' formatter for '@x' field
 },
 # display a tooltip whenever the cursor is vertically in line with a glyph
 #mode = 'vline'
)

# create a new plot 
f = figure(tools = TOOLS, 
 width = 800, 
 height = 400, 
 x\_range = [np.nanmin(usedf['Date\_reported']), np.nanmax(usedf['Date\_reported'])],
 y\_range = [max(np.nanmin(usedf['New\_cases\_rolling']),0), np.nanmax(usedf['New\_cases\_rolling'])],
 x\_axis\_label = 'Date',
 y\_axis\_label = 'COVID-19 Count (' + str(rollingAve) + '-day rolling average)'
)
f.tools.append(hover\_tool)

# fill the area
f.varea(x = 'x', y1 = 'y', y2 = 0, 
 source = source, 
 color = 'black', 
 alpha = 0.5
)

# draw the line
f.line('x', 'y',
 source = source, 
 color = 'black', 
 alpha = 1, 
 line\_width = 2
)

# create the dropdown menu 
# (Note: Bokeh call's this select, because of the html nomenclature; there is also a difference Bokeh Dropdown)
select = Select(title = '', 
 value = country,
 options = df['Country'].unique().tolist(),
 width = 200,
 margin = (5, 5, 5, 80)
)

# create some radio buttons
radio = RadioButtonGroup(
 labels = ['Daily Cases', 'Daily Deaths', 'Cumulative Cases' ,'Cumulative Deaths'], 
 active = 0,
 width = 100,
 margin = (5, 5, 5, 80)
)

# Javascript code for the callback
callback = CustomJS(
 args = dict(
 source = source, 
 allSource = allSource,
 select = select,
 radio = radio,
 ranges = dict(
 x = f.x\_range, 
 y = f.y\_range
 ) 
 ),
 code = 
 """
 // get the value from the dropdown
 var country = select.value;

 //convert the value from the radio button to a key
 var key = null;
 if (radio.active == 0) key = 'New\_cases\_rolling';
 if (radio.active == 1) key = 'New\_deaths\_rolling';
 if (radio.active == 2) key = 'Cumulative\_cases\_rolling';
 if (radio.active == 3) key = 'Cumulative\_deaths\_rolling'; 
 
 // filter the full data set to include only those from that country
 if (key){
 var x = allSource.data.Date\_reported.filter(function(d,i){return allSource.data.Country[i] == country});
 var y = allSource.data[key].filter(function(d,i){return allSource.data.Country[i] == country});

 //update the data in the plot
 source.data.x = x;
 source.data.y = y;
 source.change.emit();

 //reset the axis limits
 //note that this ... syntax may not work on all browsers
 ranges.x.start = Math.min(...x); 
 ranges.x.end = Math.max(...x);
 ranges.y.start = Math.max(Math.min(...y),0); 
 ranges.y.end = Math.max(...y);
 }
 
 """
)

#attach the callback 
select.js\_on\_change('value', callback)
radio.js\_on\_click(callback)
show(column([
 Div(text = 'Bokeh COVID-19 Data Explorer
============================

'), 
 select,
 radio,
 f]
))
and this is another table, please use boken to generate similar plots:

 open\_shop\_uuid review\_id accurate\_star \
0 01bc98471a682ea2a14bd7c9cd7c8803 1125615387 50 
1 01bc98471a682ea2a14bd7c9cd7c8803 1083164517 40 
2 01bc98471a682ea2a14bd7c9cd7c8803 1051793977 45 
3 9e29c35d1ac580a63f8bdac793b4ce99 1117127397 50 
4 9e29c35d1ac580a63f8bdac793b4ce99 1111765898 50 
... ... ... ... 
96579 5c9962fb07d31a9a527d743e30153acb 1231453621 50 
96580 98fd2aa02226bca4cd7ca8d3d9a65d2d 1228772059 40 
96581 a7ad704be115dc54e1591fa395702371 1228935136 50 
96582 218298cad49f6e846e1c5a09d521c5c8 1232356833 45 
96583 85738579540879cbf90c8046201d00d9 1232116268 50 

 review\_time 产品 环境 服务 
0 2022-08-04 14:34:44 50.0 50.0 50.0 
1 2022-04-29 16:26:05 40.0 40.0 40.0 
2 2022-02-08 14:19:41 45.0 50.0 50.0 
3 2022-07-19 13:47:45 50.0 50.0 50.0 
4 2022-07-08 14:24:37 50.0 50.0 50.0 
... ... ... ... ... 
96579 2023-03-23 18:42:04 50.0 50.0 50.0 
96580 2023-03-20 10:28:31 45.0 45.0 45.0 
96581 2023-03-20 13:36:57 50.0 50.0 50.0 
96582 2023-03-24 20:57:14 50.0 50.0 50.0 
96583 2023-03-24 16:36:01 50.0 50.0 50.0
보케 인터랙티브 플롯을 생성하는 코드입니다:from bokeh.plotting import \*bokeh.layouts에서 column을 가져옵니다.bokeh.models에서 ColumnDataSource, CustomJS, Select, RadioButtonGroup, Div, HoverTool을 가져옵니다.output\_notebook()# 아래 줄의 주석 처리를 해제하여 html 파일로 출력합니다.output\_file('bokeh\_COVID.html')# 한 국가로 시작합니다(보케를 사용하면 어떤 국가든 선택할 수 있습니다).country = '미국'usedf = df.loc[df['Country'] == country]# 플롯하려는 데이터만 포함하는 ColumnDataSource를 만듭니다.# (참고: 나중에 자바스크립트에서 조작하고 싶기 때문에 팬더 데이터프레임을 ColumnDataSource로 변환하기만 하면 됩니다.)source = ColumnDataSource( 데이터 = 딕셔너리( x = usedf['Date\_reported'],  y = usedf['New\_cases\_rolling'], # 툴팁에 포함됨 ))# 필터링을 위해 자바스크립트로 보낼 수 있도록 필요한 모든 데이터를 포함하는 ColumnDataSource를 만듭니다.allSource = ColumnDataSource( 데이터 = 딕셔너리( Date\_reported = df['Date\_reported'],  New\_cases\_rolling = df['New\_cases\_rolling'], New\_deaths\_rolling = df['New\_deaths\_rolling'], 누적\_건수\_롤링 = df['누적\_건수\_롤링'], 누적\_사망\_롤링 = df['누적\_사망\_롤링'], 누적\_사망자수\_롤링 = df['누적\_사망자수\_롤링'], 누적\_건수\_롤링 = df['누적\_건수\_롤링'], 국가 = df['국가'] ))# 사용할 도구를 정의합니다.TOOLS = "팬, 휠\_줌, 박스\_줌, 리셋, 저장"# 툴팁 정의hover\_tool = 호버툴( tooltips=[ ( '날짜', '@x{%F}'), ( 'Count', '@y{int}' ), ], 포맷터={ '@x': '날짜/시간', # '@x' 필드에 '날짜/시간' 포맷터 사용 }, # 커서가 글리프에 수직으로 정렬될 때마다 툴팁을 표시합니다. #mode = 'vline')# 새 플롯 생성 f = 그림(도구 = 도구,  width = 800,  높이 = 400,  x\_range = [np.nanmin(usedf['Date\_reported']), np.nanmax(usedf['Date\_reported'])], y\_range = [max(np.nanmin(usedf['New\_cases\_rolling']),0), np.nanmax(usedf['New\_cases\_rolling'])], x\_축\_라벨 = '날짜', y\_axis\_label = 'COVID-19 Count (' + str(rollingAve) + '-일 롤링 평균)')f.tools.append(hover\_tool)# 영역 채우기f.varea(x = 'x', y1 = 'y', y2 = 0,  source = source,  color = '검정',  alpha = 0.5)# 선 그리기f.line('x', 'y', 소스 = 소스,  color = '검정',  알파 = 1,  선\_폭 = 2)# 드롭다운 메뉴 생성 # (참고: HTML 명명법 때문에 보케는 이 select를 호출합니다. 보케 드롭다운이라는 차이도 있습니다.)select = Select(title = '',  value = country, options = df['Country'].unique().tolist(), width = 200, margin = (5, 5, 5, 80))# 라디오 버튼 생성radio = RadioButtonGroup( labels = ['일일 확진자', '일일 사망자', '누적 확진자' ,'누적 사망자'],  active = 0, width = 100, margin = (5, 5, 5, 80))# 콜백을 위한 자바스크립트 코드callback = CustomJS( args = 딕셔너리( 소스 = 소스,  allSource = allSource, select = select, radio = radio, 범위 = 딕셔너리( x = f.x\_range,  y = f.y\_range )  ), code =  """ // 드롭다운에서 값 가져오기 var country = select.value; //라디오 버튼의 값을 키로 변환합니다. var key = null; if (radio.active == 0) key = 'New\_cases\_rolling'; if (radio.active == 1) key = 'New\_deaths\_rolling'; } } if (radio.active == 2) key = '누적\_cases\_rolling'; if (radio.active == 3) key = '누적\_데스\_롤링'   // 해당 국가의 데이터만 포함하도록 전체 데이터 집합을 필터링합니다. if (key){ var x = allSource.data.Date\_reported.filter(function(d,i){return allSource.data.Country[i] == country}); var y = allSource.data[key].filter(function(d,i){return allSource.data.Country[i] == country}); //플롯의 데이터 업데이트 source.data.x = x; source.data.y = y; source.change.emit(); //축 제한 재설정 //이 구문은 모든 브라우저에서 작동하지 않을 수 있습니다. ranges.x.start = Math.min(...x);  ranges.x.end = Math.max(...x); ranges.y.start = Math.max(Math.min(...y),0);  ranges.y.end = Math.max(...y); }  """)#콜백 첨부 select.js\_on\_change('value', callback)radio.js\_on\_click(callback)show(column([ Div(text = '보케 코로나19 데이터 탐색기============================'),  select, radio, f]))이것은 또 다른 테이블이며, boken을 사용하여 유사한 플롯을 생성하십시오: OPEN\_SHOP\_UUID REVIEW\_ID ACCURATE\_STAR \.0 01bc98471a682ea2a14bd7c9cd7c8803 1125615387 50 1 01bc98471a682ea2a14bd7c9cd7c8803 1083164517 40 2 01bc98471a682ea2a14bd7c9cd7c8803 1051793977 45 3 9e29c35d1ac580a63f8bdac793b4ce99 1117127397 50 4 9e29c35d1ac580a63f8bdac793b4ce99 1111765898 50 ... ... ... ... 96579 5C9962FB07D31A9A527D743E30153ACB 1231453621 50 96580 98FD2AA02226BCA4CD7CA8D3D9A65D2D 1228772059 40 96581 a7ad704be115dc54e1591fa395702371 1228935136 50 96582 218298cad49f6e846e1c5a09d521c5c8 1232356833 45 96583 85738579540879cbf90c8046201d00d9 1232116268 50  리뷰\_시간 제품 환경 서비스 0 2022-08-04 14:34:44 50.0 50.0 50.0 1 2022-04-29 16:26:05 40.0 40.0 40.0 2 2022-02-08 14:19:41 45.0 50.0 50.0 3 2022-07-19 13:47:45 50.0 50.0 50.0 4 2022-07-08 14:24:37 50.0 50.0