数据可视化技术 | pyechart

#各评分段电影数量占比玫瑰图 hyl
movie = pd.read_csv("C:/Users/01/Desktop/movie.csv", encoding="utf-8")
movie = movie[["rate"]]
movie=movie.sort_values(by="rate")
movie=movie.astype('float')
count=[0,0,0,0,0,0,0,0,0,0]
for i in movie.values:
    if  i<5:
        count[0]+=1
    elif i<6:
        count[1]+=1
    elif i<6.5:
        count[2]+=1
    elif i<7:
        count[3]+=1
    elif i<7.5:
        count[4]+=1
    elif i<8:
        count[5]+=1
    elif i<8.5:
        count[6]+=1
    elif i<9:
        count[7]+=1
    elif i<9.5:
        count[8]+=1
    elif i<10:
        count[9]+=1
name=["[0-5)分","[5-6)分","[6-6.5)分","[6.5-7)分","[7-7.5)分","[7.5-8)分","[8,8.5)","[8.5-9)","[9-9.5)","[9.5-10]"]
movie = pd.read_csv("C:/Users/01/Desktop/movie.csv", encoding="utf-8")
movie = movie[["rate", "category"]]
movie.dropna(inplace=True)
movie['category'] = movie['category'].apply(lambda x: x[:2])
movie_mean = round(movie.groupby('category')['rate'].mean(), 2)
movie_type = list(movie_mean.index)
movie_score = list(map(float, movie_mean.values))
color_series = ['#FAE927', '#E9E416', '#C9DA36', '#9ECB3C', '#6DBC49', '#37B44E', '#3DBA78', '#144ADCF', '#209AC9',
                '#CF7B25', '#D99D21', '#FA8F2F', '#F57A34', '#D44C2D', '#2C6BA0', '#6A368B', '#44388E']
pie1 = Pie()
pie1.set_colors(color_series)
pie1.add("222", [list(z) for z in zip(name, count)], radius=["15%", "100%"], center=["50%", "50%"],
         rosetype="area")
pie1.set_global_opts(title_opts=opts.TitleOpts(title='各评分段电影数量占比玫瑰图'),
                     legend_opts=opts.LegendOpts(is_show=False), toolbox_opts=opts.ToolboxOpts())

# 21世纪各年不同类型电影数量河流图 wlr
movie = pd.read_csv("C:/Users/01/Desktop/movie.csv", encoding="utf-8")
movie = movie[["showtime", "category"]]
movie.dropna(inplace=True)
movie['category'] = movie['category'].apply(lambda x: x[:2])
type_map = {}
for tp in movie['category'].values.tolist():
    group = tp.split('/')

    for t in group:
        if not t in type_map.keys():
            type_map[t] = 1
y_data = []
x_data = range(2000, max(movie['showtime']) + 1)
for year in x_data:
    for tp in type_map:
        _data = movie[movie["showtime"] == year]
        _data = _data[_data["category"].astype(str).str.contains(tp)]
        value = [str(year), len(_data), tp]
        y_data.append(value)
name = []
for i, j in type_map.items():
    name.append(i)
river = ThemeRiver()
river.add(
    series_name=name,
    data=y_data,
    singleaxis_opts=opts.SingleAxisOpts(
        pos_top="50", pos_bottom="50", type_="time"
    ),
)
river.set_global_opts(
    tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line"),
    title_opts=opts.TitleOpts(title="21世纪各年不同类型电影数量河流图", subtitle="2000--2023", pos_bottom="70%", pos_right="50%"),
)

# 世界语言电影数量排名前七漏斗图 wlr
movie = pd.read_csv("C:/Users/01/Desktop/movie.csv", encoding="utf-8")
movie = movie[["language"]]
movie.dropna(inplace=True)
movie['language'] = movie['language'].apply(lambda x: x[:2])
lang = movie['language'].value_counts()[:7]
lang = pd.DataFrame(lang)
a = lang.index
b = lang['language']

c = (
    Funnel()
        .add("类目", [list(z) for z in zip(a, b)])
)
c.set_global_opts(title_opts=opts.TitleOpts(title="世界语言电影数量排名前七漏斗图"),
                  legend_opts=opts.LegendOpts(orient="vertical", pos_top="20%", pos_left="10%"))
c.set_series_opts(label_opts=opts.LabelOpts(is_show=True))

 


#21世纪不同类型电影平均分直方图 wlr
movie = pd.read_csv("C:/Users/01/Desktop/movie.csv", encoding="utf-8")
movie = movie[["rate", "category"]]
movie.dropna(inplace=True)
movie['category'] = movie['category'].apply(lambda x: x[:2])
movie_mean = round(movie.groupby('category')['rate'].mean(), 2)
movie_type = list(movie_mean.index)
movie_score = list(map(float, movie_mean.values))
bar = Bar()
bar.add_xaxis(movie_type)
bar.add_yaxis('21世纪不同类型电影平均分直方图',movie_score)

# 刘德华作品类型统计饼图 mq
df = pd.read_csv("C:/Users/01/Desktop/movie.csv", encoding="utf-8")
data = df[df['actor'].astype(str).str.contains('刘德华')]
type_map = {}

for tp in data['category'].values.tolist():
    group = tp.split('/')
    for t in group:
        if not t in type_map.keys():
            type_map[t] = 1
        if t in type_map.keys():
            type_map[t] += 1

pie = Pie()
pie.add('刘德华作品类型', list(zip(type_map.keys(), type_map.values())))
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
pie.set_global_opts(title_opts=opts.TitleOpts(title='刘德华作品类型占比饼图'),legend_opts=opts.LegendOpts(orient="vertical", pos_top="20%", pos_left="5%"))

 

#每年刘德华演过的电影平均分折线图 mq
data = pd.read_csv("C:/Users/01/Desktop/movie.csv", encoding="utf-8")
data = data[data['actor'].astype(str).str.contains('刘德华')]
rateall=pd.DataFrame(data,columns=['showtime','rate'])
rateall=rateall.sort_values(by='showtime',ascending=True)
avg = rateall.groupby('showtime').mean()
avg = avg['rate']
year_list = [str(i) for i in (1988, 1989, 1990, 1991, 1994, 1997, 1999)]
timeline_year_list = [str(i) for i in
                      (2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015)]
# 创建时间轴对象
timeline = Timeline()
for i in range(len(timeline_year_list)):
    # 创建一个折线图对象
    line_chart = Line()
    x_data = year_list + timeline_year_list[:i + 1] if i > 0 else year_list

    line_chart.add_xaxis(x_data)
    line_chart.add_yaxis('rate', avg)
    # 设置标题和坐标轴标签
    line_chart.set_global_opts(title_opts=opts.TitleOpts(title="刘德华({})年电影平均分".format(timeline_year_list[i])),
                               xaxis_opts=opts.AxisOpts(name="年份"),
                               yaxis_opts=opts.AxisOpts(name="rate"))
    line_chart.set_series_opts(
        label_opts=opts.LabelOpts(is_show=True),  # 隐藏数值
        markpoint_opts=opts.MarkPointOpts(
            data=[
                opts.MarkPointItem(type_="max", name="最大值")
            ]
        )
    )
    # 添加当前折线图到时间轴
    timeline.add(line_chart, "{}年".format(timeline_year_list[i]))
    timeline.add_schema(
        play_interval=1000,  # 设置自动播放的间隔时间,单位为毫秒
        is_auto_play=True,  # 设置是否自动播放,默认为 True
        is_loop_play=True,  # 设置时间轴是否循环播放,默认为 False
        is_timeline_show=True
    )

 

#各国电影评分超过9分的电影部数世界地图 hyl
movie = pd.read_csv('C:/Users/01/Desktop/movie.csv', encoding='utf-8')
movie = movie[["rate", "district"]]
movie = movie[movie['rate'] >= 9.0]
data_ra = movie[["rate"]]
data_ra = data_ra[data_ra['rate'] >= 9.0]
movie['district'] = movie['district'].apply(lambda x: x.split('_')[0])
movie['district'] = movie['district'].replace('United States of America', 'United States')
data_di = list(movie["district"])
di_map = {}
for t in data_di:
    if t in di_map.keys():
        di_map[t] += 1

    else:
        di_map[t] = 1

s = list(di_map.keys())
v = list(di_map.values())
map = (
    Map()
        .add('各国电影评分超过9分的电影部数', list(zip(s, v)), "world")
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(title_opts=opts.TitleOpts(title="Map-世界地图"), visualmap_opts=opts.VisualMapOpts(max_=30)
                         ))

 

from flask import Flask,render_template,Markup
from jinja2 import Environment, FileSystemLoader
from pyecharts.globals import CurrentConfig
import json,re,os
from pyecharts import types

from pyecharts.charts import Bar, Line, Pie, Map, Page, Timeline
from pyecharts.faker import Faker

from flask import Flask, json
from jinja2 import Environment, FileSystemLoader
from markupsafe import Markup
from mpmath.function_docs import re
from pyecharts.globals import CurrentConfig

from pyecharts.charts import Pie, Page
from pyecharts import options as opts, types
from pyecharts.charts import ThemeRiver
import pandas as pd
from pyecharts.charts import Funnel

# 将模板位置指定为本项目的templates文件夹
CurrentConfig.GLOBAL_ENV = Environment(loader=FileSystemLoader("./templates"))

#图代码

#page
#参数layout=Page.DraggablePageLayout表示可拖动布局
page = Page(layout=Page.DraggablePageLayout)
page.add(timeline,map,pie1,bar,river,c,pie)


app = Flask(__name__)


def save_resize_html(
        source: str = "render.html",
        cfg_file: types.Optional[str] = None
    ) -> str:
        with open(source, "r", encoding="utf8") as f:
            html = f.read()

        charts = []

        if cfg_file:
            with open(cfg_file, "r", encoding="utf8") as f:
                charts = json.load(f)

        for chart in charts:
            s = (
                '<div id="{cid}" class="chart-container" style="position: absolute; '
                'width: {width}; height: {height}; top: {top}; left: {left};">'.format(
                    cid=chart["cid"],
                    width=chart["width"],
                    height=chart["height"],
                    top=chart["top"],
                    left=chart["left"],
                )
            )
            html = re.sub(
                '<div id="{}" class="chart-container" style="(.*?)">'.format(
                    chart["cid"]
                ),
                s,
                html,
            )
            html = re.sub("'border-width', '1px'", "'border-width', '0px'", html)
            html = re.sub(
                r'<button onclick="downloadCfg\(\)">Save Config</button>', "", html
            )
            html = re.sub(r".resizable\(\).draggable\(\)", "", html)

        return html

@app.route('/')
def index():
    if os.path.exists("C:/Users/01/PycharmProjects/myflask_demo/chart_config.json"):
        new_html = save_resize_html('templates/render.html', "C:/Users/01/PycharmProjects/myflask_demo/chart_config.json")
        return Markup(new_html)
    else:
        old_html = page.render_embed('my_simple_page.html')
        with open('templates/render.html', "w", encoding="utf8") as f:
            f.write(old_html)
        return Markup(old_html)




if __name__ == '__main__':
    app.run()

wlr、mq、hyl的小组作业 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值