You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.0 KiB
67 lines
2.0 KiB
from pyecharts.charts import Bar, Page
|
|
from pyecharts import options as opts
|
|
import pandas as pd
|
|
from pyecharts.components import Table
|
|
|
|
df = pd.read_csv('export.csv')
|
|
|
|
df_sorted = df.sort_values(by='rating', ascending=False)#评分降序
|
|
|
|
#转为列表,获取电影名称、评分、链接和其他信息
|
|
movies = df_sorted['title'].tolist()
|
|
ratings = df_sorted['rating'].tolist()
|
|
links = df_sorted['link'].tolist()
|
|
other_info = df_sorted[['type', 'country', 'year', 'director', 'time', 'actor']].values.tolist()
|
|
|
|
#构建 tooltip 格式,光标位置显示信息
|
|
tooltip_formatter = '''
|
|
{movie}<br>
|
|
评分: {rating}<br>
|
|
'''.format(
|
|
movie='{b}',
|
|
rating='{c}',
|
|
)
|
|
|
|
#创建柱状图对象
|
|
bar = (
|
|
Bar()
|
|
.add_xaxis(movies)
|
|
.add_yaxis("评分", ratings, label_opts=opts.LabelOpts(is_show=False))
|
|
.set_global_opts(
|
|
title_opts=opts.TitleOpts(title="电影评分排行榜"),
|
|
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-45)),
|
|
tooltip_opts=opts.TooltipOpts(formatter=tooltip_formatter),
|
|
yaxis_opts=opts.AxisOpts(min_=8),
|
|
datazoom_opts=[opts.DataZoomOpts(type_="slider", range_start=0, range_end=100)],
|
|
)
|
|
.set_series_opts(#标记线
|
|
markline_opts=opts.MarkLineOpts(
|
|
data=[
|
|
opts.MarkLineItem(type_="average", name="平均值"),
|
|
opts.MarkLineItem(type_="max", name="最大值"),
|
|
opts.MarkLineItem(type_="min", name="最小值"),
|
|
]
|
|
)
|
|
)
|
|
)
|
|
|
|
#创建表格数据
|
|
table_data = []
|
|
for i in range(len(movies)):
|
|
row = [movies[i], ratings[i], links[i]] + other_info[i]
|
|
table_data.append(row)
|
|
|
|
#创建表格对象
|
|
table = (
|
|
Table()
|
|
.add(["电影名称", "评分", "链接", "类型", "国家", "年份", "导演", "时长", "演员"], table_data)
|
|
.set_global_opts(
|
|
title_opts=opts.ComponentTitleOpts(title="电影信息表格"),
|
|
|
|
)
|
|
)
|
|
|
|
#生成HTML文件
|
|
page = Page()
|
|
page.add(bar,table)
|
|
page.render("Movie.html") |