我有一个mysql数据表,存了2018-2022年的每个学校的分数线,但是有的学校不仅有一个批次,可能会有多个批次,我想用pyecharts实现数据可视化:最好有文字提示说输入你想查询 的两个学校吧,就是有六个框,第一个框用来选择2018-2022,第二个框用来选择学校,第三个就是用来选择批次,第四个框还是用来选择2018-2022,第五个框就是还是用来输入学校,第六个框就是输入批次,当然这个学校和批次肯定是要和我数据库的内容对应的吧,不可能说我数据库一个学校只有一个批次,你还能搜到他其他批次的分数 最后就是搜到的两个学校进行数据可视化可以直观的看出他们的分数差距,默认展示2022年的清华大学和北京大学的成绩对比,而且我不想用flask!!!
时间: 2024-03-21 21:43:12 浏览: 54
详解mysql 获取某个时间段每一天、每一个小时的统计数据
好的,你可以使用Python中的pandas和pyecharts库来实现你的需求。
首先,你需要连接你的MySQL数据库,并将数据导入到pandas的DataFrame中。可以使用pandas的read_sql_query()方法来实现:
```python
import pandas as pd
import pymysql
# 连接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', database='database_name')
# 查询数据
sql = "SELECT * FROM score_line"
df = pd.read_sql_query(sql, conn)
# 关闭连接
conn.close()
```
假设你的数据库中的表名为`score_line`,包含以下字段:`year, school, batch, score`。
接下来,你可以使用pandas的groupby()方法和agg()方法来计算每个学校每个批次的分数线的平均分:
```python
# 计算每个学校每个批次的平均分数
grouped = df.groupby(['year', 'school', 'batch'])['score'].agg('mean').reset_index()
```
然后,你可以使用pyecharts库来创建一个页面,包含六个下拉框和一个柱状图来展示两个学校的分数对比。可以使用pyecharts的Page、Grid、Bar和Tab组件来实现:
```python
from pyecharts.charts import Bar
from pyecharts.components import Table
from pyecharts.options import ComponentTitleOpts
# 创建一个页面
page = Page()
# 创建六个下拉框
years = sorted(list(set(grouped['year'])))
schools = sorted(list(set(grouped['school'])))
batches = sorted(list(set(grouped['batch'])))
year_select_1 = Select()
year_select_1.options = years
year_select_2 = Select()
year_select_2.options = years
school_select_1 = Select()
school_select_1.options = schools
school_select_2 = Select()
school_select_2.options = schools
batch_select_1 = Select()
batch_select_1.options = batches
batch_select_2 = Select()
batch_select_2.options = batches
# 创建一个柱状图
bar = Bar()
# 默认展示2022年的清华大学和北京大学的成绩对比
school_1 = '清华大学'
batch_1 = '本科一批'
school_2 = '北京大学'
batch_2 = '本科一批'
data_1 = grouped[(grouped['year'] == 2022) & (grouped['school'] == school_1) & (grouped['batch'] == batch_1)]['score'].values
data_2 = grouped[(grouped['year'] == 2022) & (grouped['school'] == school_2) & (grouped['batch'] == batch_2)]['score'].values
bar.add_xaxis([school_1, school_2])
bar.add_yaxis('成绩', [data_1[0], data_2[0]])
# 创建一个表格,展示选中的学校和批次的平均分
table = Table()
table.add(['学校', '批次', '平均分'], [[school_1, batch_1, data_1[0]], [school_2, batch_2, data_2[0]]])
table.set_global_opts(title_opts=ComponentTitleOpts(title='学校分数线平均分'))
# 将下拉框、柱状图和表格组合在一起,放到一个Grid中
grid = Grid()
grid.add(year_select_1, grid_opts=opts.GridOpts(pos_left='10%', pos_top='5%'))
grid.add(school_select_1, grid_opts=opts.GridOpts(pos_left='30%', pos_top='5%'))
grid.add(batch_select_1, grid_opts=opts.GridOpts(pos_left='50%', pos_top='5%'))
grid.add(year_select_2, grid_opts=opts.GridOpts(pos_left='10%', pos_top='15%'))
grid.add(school_select_2, grid_opts=opts.GridOpts(pos_left='30%', pos_top='15%'))
grid.add(batch_select_2, grid_opts=opts.GridOpts(pos_left='50%', pos_top='15%'))
grid.add(bar, grid_opts=opts.GridOpts(pos_left='10%', pos_top='30%', width='80%', height='50%'))
grid.add(table, grid_opts=opts.GridOpts(pos_left='10%', pos_top='80%', width='80%'))
# 将Grid添加到页面中
page.add(grid)
# 显示页面
page.render('score_line.html')
```
最后,你可以在命令行中运行这个Python脚本,生成一个HTML文件。在浏览器中打开这个HTML文件,就可以看到你的可视化结果了。
阅读全文