DeepSeek+大数据分析快速应用落地
一、环境准备
1、准备一个 hive 的环境,并可以进行远程连接
2、环境中安装有 sqoop 和 mysql
3、DeepSeek 我使用的是 《问小白》
注册地址:打开问小白,填入我的分享码【1VYXOI】使用满血DeepSeek R1,零延迟、不卡、不限次、不收费!问小白 - 更专业的AI搜索
二、数据准备
使用你的数据或者我的数据都可以,我的数据如下,请自行下载:
📎ai示例.zip
三、案例效果图
四、操作步骤
1、使用 DeepSeek 创建 hive 表结构
提示词:根据以上 3 个文件,生成 hive 的建表语句,建表时字段为英文,注释为中文,字段名称不要太长,注意第一行是我们的表头。
drop database ai_test cascade ;
create database ai_test;CREATE TABLE IF NOT EXISTS public_charging_pile (dt STRING COMMENT '时间,格式为YYYY-MM-DD',cq INT COMMENT '重庆公共类充电桩数量(台)',bj INT COMMENT '北京公共类充电桩数量(台)',gd INT COMMENT '广东公共类充电桩数量(台)',sh INT COMMENT '上海公共类充电桩数量(台)',zj INT COMMENT '浙江公共类充电桩数量(台)',ah INT COMMENT '安徽公共类充电桩数量(台)',tj INT COMMENT '天津公共类充电桩数量(台)',sc INT COMMENT '四川公共类充电桩数量(台)',sd INT COMMENT '山东公共类充电桩数量(台)',js INT COMMENT '江苏公共类充电桩数量(台)',dc_national INT COMMENT '全国直流充电桩数量(台)',ac_national INT COMMENT '全国交流充电桩数量(台)'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count'='1');CREATE TABLE IF NOT EXISTS gasoline_price (dt STRING COMMENT '时间,格式为YYYY年MM月',price_98 DECIMAL(12,10) COMMENT '98#汽油全国零售价格(元/升)',price_95 DECIMAL(12,10) COMMENT '95#汽油全国零售价格(元/升)',price_92 DECIMAL(12,10) COMMENT '92#汽油全国零售价格(元/升)'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count'='1');CREATE TABLE IF NOT EXISTS new_energy_vehicle (dt STRING COMMENT '时间,格式为YYYY年MM月',production_total DECIMAL(10,2) COMMENT '新能源汽车产量(万辆)',sales_total DECIMAL(10,2) COMMENT '新能源汽车销量(万辆)',production_ev DECIMAL(10,2) COMMENT '纯电动汽车产量(万辆)',sales_ev DECIMAL(10,2) COMMENT '纯电动汽车销量(万辆)',production_phev DECIMAL(10,2) COMMENT '插电式混合动力汽车产量(万辆)',sales_phev DECIMAL(10,2) COMMENT '插电式混合动力汽车销量(万辆)'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count'='1');
2、将数据加载到 hive 表中
load data local inpath '/home/test_ai/全国新能源汽车产销量.csv' into table new_energy_vehicle;
load data local inpath '/home/test_ai/公共类充电桩数量(台).csv' into table public_charging_pile;
load data local inpath '/home/test_ai/汽油数据.csv' into table gasoline_price;
3、使用 DeepSeek 开启 hive 的本地模式
提示词:请帮我查询开启hive本地模式的命令,我使用的是hive3.1.2
SET hive.exec.mode.local.auto = true; -- 核心参数,默认为false
SET hive.exec.mode.local.auto.inputbytes.max = 134217728; -- 输入数据量阈值(默认128MB)
SET hive.exec.mode.local.auto.input.files.max = 4; -- 输入文件数阈值(默认4个)
4、 让 DeepSeek 根据表结构挖掘可以做的需求
提示词:通过以上三个表中的数据,能统计哪些指标,这些指标最好是多个表关联才能查找出来的最好。
以前生成的需求如下:
1. 能源价格与新能源车销量关联分析
需求:汽油价格波动对新能源汽车销量的影响系数
2. 充电桩建设与新能源车产能关系
需求:充电桩数量增速与新能源车产量增速的滞后效应
3. 区域充电设施与市场渗透率对比
需求:重点省份充电桩密度 vs 新能源车销量占比
4、技术路线竞争分析
需求:直流桩占比 vs 纯电动车销量渗透率
现在的需求:
一、能源替代效应分析
油价波动与新能源汽车销量动态关系
关联汽油价格表和新能源汽车产销量表,分析油价上涨对新能源汽车销量的影响
SELECT gp.dt AS month,gp.price_92,ne.sales_total,(ne.sales_total - LAG(ne.sales_total) OVER (ORDER BY gp.dt)) / LAG(ne.sales_total) OVER (ORDER BY gp.dt) AS sales_growth_rate
FROM gasoline_price gp
JOIN new_energy_vehicle ne ON gp.dt = ne.dt;
将数据写入 hive 表中:
create table ads_yj_xl_gl as
SELECTgp.dt AS month,gp.price_92,ne.sales_total,(ne.sales_total - LAG(ne.sales_total) OVER (ORDER BY gp.dt)) / LAG(ne.sales_total) OVER (ORDER BY gp.dt) AS sales_growth_rate
FROM gasoline_price gp
JOIN new_energy_vehicle ne ON gp.dt = ne.dt;
其他需求,请自行按照上面的放入统计写入 hive 的 ads 层。
二、充电桩覆盖率与燃油车使用成本对比
结合充电桩数量、油价及新能源汽车销量,计算每万辆车充电桩保有量,并与燃油成本对比:
SELECT pc.dt,(pc.dc_national + pc.ac_national) / ne.sales_total AS charging_pile_per_10k_vehicles,gp.price_92 * 12 AS annual_fuel_cost_per_car -- 假设年均行驶里程折算
FROM public_charging_pile pc
JOIN new_energy_vehicle ne ON SUBSTR(pc.dt, 1, 7) = ne.dt
JOIN gasoline_price gp ON ne.dt = gp.dt;
三、充电设施与产销协同性分析
充电桩类型分布与车型销量匹配度
SELECT ne.dt,ne.production_ev AS pure_electric_production,ne.production_phev AS plug_in_hybrid_production,pc.dc_national AS fast_charging_piles,pc.ac_national AS slow_charging_piles
FROM new_energy_vehicle ne
JOIN public_charging_pile pc ON ne.dt = DATE_FORMAT(pc.dt, 'yyyy-MM');
区域充电设施密度与新能源汽车渗透率
SELECT pc.dt,pc.cq AS chongqing_piles,pc.gd AS guangdong_piles,ne.sales_total * 0.3 AS estimated_regional_sales -- 假设TOP10省份占比70%
FROM public_charging_pile pc
JOIN new_energy_vehicle ne ON SUBSTR(pc.dt, 1, 7) = ne.dt;
5、使用 DeepSeek 编写 sqoop 命令,将数据导出 mysql
在 mysql 中创建一个表:
create database ai_test_bi;
提示词:
根据如下 hive 中该表的建表语句,生成 mysql 的建表语句,表名和 hive 的表名一致:
create temporary table ads_yj_xl_gl
(
month string,
price_92 decimal(12, 10),
sales_total decimal(10, 2),
sales_growth_rate decimal(24, 13)
);
生成的 sql 建表语句如下:
CREATE TABLE ads_yj_xl_gl (month VARCHAR(20) NOT NULL COMMENT '月份,格式为YYYY年MM月',price_92 DECIMAL(12,10) COMMENT '92#汽油全国零售价格(元/升)',sales_total DECIMAL(10,2) COMMENT '新能源汽车总销量(万辆)',sales_growth_rate DECIMAL(24,13) COMMENT '销量增长率'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
提示词:请仿照如下格式:
sqoop export \
--connect jdbc:mysql://node01:3306/gongcheng \
--username root \
--password 123456 \
--table user3 \
--hcatalog-database hive03 \
--hcatalog-table par3 \
-m 1
编写一个 sqoop 命令,将 hive 中的 ai_test 数据库中的ads_yj_xl_gl 数据导出到 mysql 数据库中,mysql 数据库的主机名是 node01,用户名是 root,密码是 123456
生成的命令如下:
sqoop export \
--connect jdbc:mysql://node01:3306/ai_test_bi \
--username root \
--password 123456 \
--table ads_yj_xl_gl \
--hcatalog-database ai_test \
--hcatalog-table ads_yj_xl_gl \
-m 1
6、使用 DeepSeek 编写可视化界面,并运行 [python+echarts]
提示词如下:
假如我有一个mysql表,mysql的数据库名字是ai_test_bi,主机名是node01,用户名和密码是root,123456,mysql中有一个表ads_yj_xl_gl,表的建表语句如下:
CREATE TABLE ads_yj_xl_gl (month VARCHAR(20) NOT NULL COMMENT '月份,格式为YYYY年MM月',price_92 DECIMAL(12,10) COMMENT '92#汽油全国零售价格(元/升)',sales_total DECIMAL(10,2) COMMENT '新能源汽车总销量(万辆)',sales_growth_rate DECIMAL(24,13) COMMENT '销量增长率'
);
请编写一个python代码,python中使用echarts,帮我展示几个图表,这些图表和我的表ads_yj_xl_gl中的数据需要契合。
pip install pandas sqlalchemy pyecharts pymysql
会出现一个错误:
以上代码报错:
UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.df = pd.read_sql(query, conn)
Traceback (most recent call last):File "D:\企业实习课\pyspark_workspace\pythonProject2\pythonProject\test_ai.py", line 132, in <module>chart = create_combined_chart(df)File "D:\企业实习课\pyspark_workspace\pythonProject2\pythonProject\test_ai.py", line 68, in create_combined_chartaxisline_opts=opts.AxisLineOpts(linestyle_color="#5793f3")
TypeError: __init__() got an unexpected keyword argument 'linestyle_color'
请重新生成
import pandas as pd
from sqlalchemy import create_engine
from pyecharts.charts import Line, Grid, Scatter
from pyecharts import options as opts# MySQL连接配置
def fetch_and_process_data():try:engine = create_engine("mysql+pymysql://root:123456@node01:3306/ai_test_bi""?charset=utf8mb4")query = """SELECT DATE_FORMAT(STR_TO_DATE(month, '%Y年%m月'), '%Y-%m') AS month,price_92,sales_total,sales_growth_rateFROM ads_yj_xl_glORDER BY STR_TO_DATE(month, '%Y年%m月')"""df = pd.read_sql(query, engine)df['sales_growth_rate'] = df['sales_growth_rate'].fillna(0)return dfexcept Exception as e:print(f"数据库错误:{str(e)}")return pd.DataFrame()def create_combined_chart(df):# 主趋势图line = (Line(init_opts=opts.InitOpts(width="1600px", height="600px")).add_xaxis(df['month'].tolist()).add_yaxis("92#汽油价格(元/升)", df['price_92'].round(2).tolist(),yaxis_index=0, color="#d14a61", symbol="triangle",linestyle_opts=opts.LineStyleOpts(width=3)).add_yaxis("新能源车销量(万辆)", df['sales_total'].round(1).tolist(),yaxis_index=1, color="#5793f3", symbol="circle",linestyle_opts=opts.LineStyleOpts(width=3, type_="dashed")).extend_axis(yaxis=opts.AxisOpts(name="销量(万辆)", type_="value", position="right",axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="#5793f3")))).set_global_opts(title_opts=opts.TitleOpts(title="油价与新能源车销量趋势分析", pos_top="5%"),datazoom_opts=[opts.DataZoomOpts(pos_bottom="15%")],yaxis_opts=opts.AxisOpts(name="油价(元/升)", splitline_opts=opts.SplitLineOpts(is_show=True)),xaxis_opts=opts.AxisOpts(name="时间", axislabel_opts=opts.LabelOpts(rotate=45))))# 增长率散点图scatter = (Scatter().add_xaxis(df['price_92'].round(2).tolist()).add_yaxis("增长率", (df['sales_growth_rate']*100).round(2).tolist(),symbol_size=12, label_opts=opts.LabelOpts(is_show=False)).set_global_opts(xaxis_opts=opts.AxisOpts(name="汽油价格(元/升)"),yaxis_opts=opts.AxisOpts(name="增长率(%)", axislabel_opts=opts.LabelOpts(formatter="{value}%"))))grid = (Grid().add(line, grid_opts=opts.GridOpts(pos_left="10%", pos_right="10%", height="60%")).add(scatter, grid_opts=opts.GridOpts(pos_left="10%", pos_right="10%", pos_top="75%")))return gridif __name__ == "__main__":df = fetch_and_process_data()if not df.empty:chart = create_combined_chart(df)chart.render("energy_analysis_fixed.html")print("可视化文件生成成功:energy_analysis_fixed.html")else:print("数据获取失败,请检查数据库连接")
有可能还有别的错误:
ModuleNotFoundError: No module named 'sqlalchemy'
解决方案:
pip install sqlalchemy
再次运行,无错误:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Awesome-pyecharts</title><script type="text/javascript" src="https://assets.pyecharts.org/assets/v5/echarts.min.js"></script></head>
<body ><div id="c11f1b5d33074118ac3ebbb30ff32fd5" class="chart-container" style="width:900px; height:500px; "></div><script>var chart_c11f1b5d33074118ac3ebbb30ff32fd5 = echarts.init(document.getElementById('c11f1b5d33074118ac3ebbb30ff32fd5'), 'white', {renderer: 'canvas'});var option_c11f1b5d33074118ac3ebbb30ff32fd5 = {"animation": true,"animationThreshold": 2000,"animationDuration": 1000,"animationEasing": "cubicOut","animationDelay": 0,"animationDurationUpdate": 300,"animationEasingUpdate": "cubicOut","animationDelayUpdate": 0,"aria": {"enabled": false},"color": ["#d14a61","#5793f3","#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],"series": [{"type": "line","name": "92#\u6c7d\u6cb9\u4ef7\u683c(\u5143/\u5347)","connectNulls": false,"xAxisIndex": 0,"yAxisIndex": 0,"symbol": "triangle","symbolSize": 4,"showSymbol": true,"smooth": false,"clip": true,"step": false,"stackStrategy": "samesign","data": [["2019\u5e7410\u6708",6.68],["2019\u5e7411\u6708",6.72],["2019\u5e7412\u6708",6.79],["2019\u5e749\u6708",6.63],["2020\u5e7410\u6708",6.67],["2020\u5e7411\u6708",6.72],["2020\u5e7412\u6708",5.75],["2020\u5e741\u6708",6.96],["2020\u5e742\u6708",6.95],["2020\u5e743\u6708",5.9],["2020\u5e744\u6708",5.49],["2020\u5e745\u6708",5.5],["2020\u5e746\u6708",5.7],["2020\u5e747\u6708",5.67],["2020\u5e748\u6708",5.71],["2020\u5e749\u6708",5.6],["2021\u5e7410\u6708",7.39],["2021\u5e7411\u6708",7.53],["2021\u5e7412\u6708",7.07],["2021\u5e741\u6708",6.01],["2021\u5e742\u6708",6.23],["2021\u5e743\u6708",6.68],["2021\u5e744\u6708",6.59],["2021\u5e745\u6708",6.71],["2021\u5e746\u6708",6.92],["2021\u5e747\u6708",7.1],["2021\u5e748\u6708",7.01],["2021\u5e749\u6708",7.01],["2022\u5e741\u6708",7.27],["2022\u5e742\u6708",7.72],["2022\u5e743\u6708",8.27],["2022\u5e744\u6708",8.52],["2022\u5e745\u6708",8.56],["2022\u5e746\u6708",9.13],["2022\u5e747\u6708",8.77]],"hoverAnimation": true,"label": {"show": true,"margin": 8,"valueAnimation": false},"logBase": 10,"seriesLayoutBy": "column","lineStyle": {"show": true,"width": 3,"opacity": 1,"curveness": 0,"type": "solid"},"areaStyle": {"opacity": 0},"zlevel": 0,"z": 0},{"type": "line","name": "\u65b0\u80fd\u6e90\u8f66\u9500\u91cf(\u4e07\u8f86)","connectNulls": false,"xAxisIndex": 0,"yAxisIndex": 0,"symbol": "circle","symbolSize": 4,"showSymbol": true,"smooth": false,"clip": true,"step": false,"stackStrategy": "samesign","data": [["2019\u5e7410\u6708",7.5],["2019\u5e7411\u6708",9.5],["2019\u5e7412\u6708",16.3],["2019\u5e749\u6708",8.0],["2020\u5e7410\u6708",16.0],["2020\u5e7411\u6708",20.0],["2020\u5e7412\u6708",24.8],["2020\u5e741\u6708",4.4],["2020\u5e742\u6708",1.3],["2020\u5e743\u6708",5.3],["2020\u5e744\u6708",7.2],["2020\u5e745\u6708",8.2],["2020\u5e746\u6708",10.4],["2020\u5e747\u6708",9.8],["2020\u5e748\u6708",10.9],["2020\u5e749\u6708",13.8],["2021\u5e7410\u6708",38.3],["2021\u5e7411\u6708",45.0],["2021\u5e7412\u6708",53.1],["2021\u5e741\u6708",17.9],["2021\u5e742\u6708",11.0],["2021\u5e743\u6708",22.6],["2021\u5e744\u6708",20.6],["2021\u5e745\u6708",21.7],["2021\u5e746\u6708",25.6],["2021\u5e747\u6708",32.1],["2021\u5e748\u6708",32.1],["2021\u5e749\u6708",35.7],["2022\u5e741\u6708",43.1],["2022\u5e742\u6708",33.4],["2022\u5e743\u6708",48.4],["2022\u5e744\u6708",29.9],["2022\u5e745\u6708",44.7],["2022\u5e746\u6708",59.6],["2022\u5e747\u6708",59.3]],"hoverAnimation": true,"label": {"show": true,"margin": 8,"valueAnimation": false},"logBase": 10,"seriesLayoutBy": "column","lineStyle": {"show": true,"width": 3,"opacity": 1,"curveness": 0,"type": "dashed"},"areaStyle": {"opacity": 0},"zlevel": 0,"z": 0},{"type": "scatter","name": "\u589e\u957f\u7387","xAxisIndex": 1,"yAxisIndex": 1,"symbolSize": 12,"data": [[6.68,0.0],[6.72,26.67],[6.79,71.58],[6.63,-50.92],[6.67,100.0],[6.72,25.0],[5.75,24.0],[6.96,-82.26],[6.95,-70.68],[5.9,310.85],[5.49,35.85],[5.5,13.89],[5.7,26.83],[5.67,-5.77],[5.71,11.22],[5.6,26.61],[7.39,177.54],[7.53,17.39],[7.07,18.1],[6.01,-66.29],[6.23,-38.55],[6.68,105.45],[6.59,-8.85],[6.71,5.34],[6.92,17.97],[7.1,25.39],[7.01,0.0],[7.01,11.21],[7.27,20.73],[7.72,-22.51],[8.27,44.91],[8.52,-38.22],[8.56,49.5],[9.13,33.33],[8.77,-0.5]],"label": {"show": false,"margin": 8,"valueAnimation": false}}],"legend": [{"data": ["92#\u6c7d\u6cb9\u4ef7\u683c(\u5143/\u5347)","\u65b0\u80fd\u6e90\u8f66\u9500\u91cf(\u4e07\u8f86)"],"selected": {},"show": true,"padding": 5,"itemGap": 10,"itemWidth": 25,"itemHeight": 14,"backgroundColor": "transparent","borderColor": "#ccc","borderRadius": 0,"pageButtonItemGap": 5,"pageButtonPosition": "end","pageFormatter": "{current}/{total}","pageIconColor": "#2f4554","pageIconInactiveColor": "#aaa","pageIconSize": 15,"animationDurationUpdate": 800,"selector": false,"selectorPosition": "auto","selectorItemGap": 7,"selectorButtonGap": 10},{"data": ["\u589e\u957f\u7387"],"selected": {},"show": true,"padding": 5,"itemGap": 10,"itemWidth": 25,"itemHeight": 14,"backgroundColor": "transparent","borderColor": "#ccc","borderRadius": 0,"pageButtonItemGap": 5,"pageButtonPosition": "end","pageFormatter": "{current}/{total}","pageIconColor": "#2f4554","pageIconInactiveColor": "#aaa","pageIconSize": 15,"animationDurationUpdate": 800,"selector": false,"selectorPosition": "auto","selectorItemGap": 7,"selectorButtonGap": 10}],"tooltip": {"show": true,"trigger": "item","triggerOn": "mousemove|click","axisPointer": {"type": "line"},"showContent": true,"alwaysShowContent": false,"showDelay": 0,"hideDelay": 100,"enterable": false,"confine": false,"appendToBody": false,"transitionDuration": 0.4,"textStyle": {"fontSize": 14},"borderWidth": 0,"padding": 5,"order": "seriesAsc"},"xAxis": [{"name": "\u65f6\u95f4","show": true,"scale": false,"nameLocation": "end","nameGap": 15,"gridIndex": 0,"axisLabel": {"show": true,"rotate": 45,"margin": 8,"valueAnimation": false},"inverse": false,"offset": 0,"splitNumber": 5,"minInterval": 0,"splitLine": {"show": true,"lineStyle": {"show": true,"width": 1,"opacity": 1,"curveness": 0,"type": "solid"}},"animation": true,"animationThreshold": 2000,"animationDuration": 1000,"animationEasing": "cubicOut","animationDelay": 0,"animationDurationUpdate": 300,"animationEasingUpdate": "cubicOut","animationDelayUpdate": 0,"data": ["2019\u5e7410\u6708","2019\u5e7411\u6708","2019\u5e7412\u6708","2019\u5e749\u6708","2020\u5e7410\u6708","2020\u5e7411\u6708","2020\u5e7412\u6708","2020\u5e741\u6708","2020\u5e742\u6708","2020\u5e743\u6708","2020\u5e744\u6708","2020\u5e745\u6708","2020\u5e746\u6708","2020\u5e747\u6708","2020\u5e748\u6708","2020\u5e749\u6708","2021\u5e7410\u6708","2021\u5e7411\u6708","2021\u5e7412\u6708","2021\u5e741\u6708","2021\u5e742\u6708","2021\u5e743\u6708","2021\u5e744\u6708","2021\u5e745\u6708","2021\u5e746\u6708","2021\u5e747\u6708","2021\u5e748\u6708","2021\u5e749\u6708","2022\u5e741\u6708","2022\u5e742\u6708","2022\u5e743\u6708","2022\u5e744\u6708","2022\u5e745\u6708","2022\u5e746\u6708","2022\u5e747\u6708"]},{"name": "\u6c7d\u6cb9\u4ef7\u683c(\u5143/\u5347)","show": true,"scale": false,"nameLocation": "end","nameGap": 15,"gridIndex": 1,"inverse": false,"offset": 0,"splitNumber": 5,"minInterval": 0,"splitLine": {"show": true,"lineStyle": {"show": true,"width": 1,"opacity": 1,"curveness": 0,"type": "solid"}},"animation": true,"animationThreshold": 2000,"animationDuration": 1000,"animationEasing": "cubicOut","animationDelay": 0,"animationDurationUpdate": 300,"animationEasingUpdate": "cubicOut","animationDelayUpdate": 0,"data": [6.68,6.72,6.79,6.63,6.67,6.72,5.75,6.96,6.95,5.9,5.49,5.5,5.7,5.67,5.71,5.6,7.39,7.53,7.07,6.01,6.23,6.68,6.59,6.71,6.92,7.1,7.01,7.01,7.27,7.72,8.27,8.52,8.56,9.13,8.77]}],"yAxis": [{"name": "\u6cb9\u4ef7(\u5143/\u5347)","show": true,"scale": false,"nameLocation": "end","nameGap": 15,"gridIndex": 0,"inverse": false,"offset": 0,"splitNumber": 5,"minInterval": 0,"splitLine": {"show": true,"lineStyle": {"show": true,"width": 1,"opacity": 1,"curveness": 0,"type": "solid"}},"animation": true,"animationThreshold": 2000,"animationDuration": 1000,"animationEasing": "cubicOut","animationDelay": 0,"animationDurationUpdate": 300,"animationEasingUpdate": "cubicOut","animationDelayUpdate": 0},{"type": "value","name": "\u9500\u91cf(\u4e07\u8f86)","show": true,"scale": false,"nameLocation": "end","nameGap": 15,"gridIndex": 0,"axisLine": {"show": true,"onZero": true,"onZeroAxisIndex": 0,"lineStyle": {"show": true,"width": 1,"opacity": 1,"curveness": 0,"type": "solid","color": "#5793f3"}},"inverse": false,"position": "right","offset": 0,"splitNumber": 5,"minInterval": 0,"splitLine": {"show": true,"lineStyle": {"show": true,"width": 1,"opacity": 1,"curveness": 0,"type": "solid"}},"animation": true,"animationThreshold": 2000,"animationDuration": 1000,"animationEasing": "cubicOut","animationDelay": 0,"animationDurationUpdate": 300,"animationEasingUpdate": "cubicOut","animationDelayUpdate": 0},{"name": "\u589e\u957f\u7387(%)","show": true,"scale": false,"nameLocation": "end","nameGap": 15,"gridIndex": 1,"axisLabel": {"show": true,"margin": 8,"formatter": "{value}%","valueAnimation": false},"inverse": false,"offset": 0,"splitNumber": 5,"minInterval": 0,"splitLine": {"show": true,"lineStyle": {"show": true,"width": 1,"opacity": 1,"curveness": 0,"type": "solid"}},"animation": true,"animationThreshold": 2000,"animationDuration": 1000,"animationEasing": "cubicOut","animationDelay": 0,"animationDurationUpdate": 300,"animationEasingUpdate": "cubicOut","animationDelayUpdate": 0}],"title": [{"show": true,"text": "\u6cb9\u4ef7\u4e0e\u65b0\u80fd\u6e90\u8f66\u9500\u91cf\u8d8b\u52bf\u5206\u6790","target": "blank","subtarget": "blank","top": "5%","padding": 5,"itemGap": 10,"textAlign": "auto","textVerticalAlign": "auto","triggerEvent": false},{"show": true,"target": "blank","subtarget": "blank","padding": 5,"itemGap": 10,"textAlign": "auto","textVerticalAlign": "auto","triggerEvent": false}],"dataZoom": [{"show": true,"type": "slider","showDetail": true,"showDataShadow": true,"realtime": true,"start": 20,"end": 80,"orient": "horizontal","zoomLock": false,"bottom": "15%","filterMode": "filter"},[{"show": true,"type": "slider","showDetail": true,"showDataShadow": true,"realtime": true,"start": 20,"end": 80,"orient": "horizontal","zoomLock": false,"bottom": "15%","filterMode": "filter"}]],"grid": [{"show": false,"zlevel": 0,"z": 2,"left": "10%","right": "10%","height": "60%","containLabel": false,"backgroundColor": "transparent","borderColor": "#ccc","borderWidth": 1,"shadowOffsetX": 0,"shadowOffsetY": 0},{"show": false,"zlevel": 0,"z": 2,"left": "10%","top": "75%","right": "10%","containLabel": false,"backgroundColor": "transparent","borderColor": "#ccc","borderWidth": 1,"shadowOffsetX": 0,"shadowOffsetY": 0}]
};chart_c11f1b5d33074118ac3ebbb30ff32fd5.setOption(option_c11f1b5d33074118ac3ebbb30ff32fd5);</script>
</body>
</html>
预览:
假如生成的 html 有三个或者多个,你需要将这三个或者多个 html 在一个 html 中展示,可以如下进行:
根据提示,代码已经完美运行,代码如下:
import pymysql
from pyecharts.charts import Line, Scatter
from pyecharts import options as opts# 数据库连接配置
config = {"host": "node01","port": 3306,"user": "root","password": "123456","database": "test_ai","charset": "utf8"
}# 连接数据库并获取数据
try:conn = pymysql.connect(**config)cursor = conn.cursor()cursor.execute("""SELECT month,COALESCE(gasoline_92, 0) AS gasoline_92,COALESCE(new_energy_vehicle_sales, 0) AS new_energy,COALESCE(price_sales_corr, 0) AS corrFROM a ORDER BY month""")data = cursor.fetchall()# 提取各列数据months = [row[0] for row in data]gasoline_92 = [float(row[1]) for row in data]new_energy = [float(row[2]) for row in data]corr_values = [float(row[3]) for row in data]finally:cursor.close()conn.close()# 图表1:燃油价格与新能源销量趋势图
line = (Line().add_xaxis(months).add_yaxis("92号汽油价格", gasoline_92,linestyle_opts=opts.LineStyleOpts(width=3),is_smooth=True).add_yaxis("新能源车销量", new_energy,linestyle_opts=opts.LineStyleOpts(width=3, type_="dashed"),is_smooth=True).set_global_opts(title_opts=opts.TitleOpts(title="能源价格与销量趋势分析"),tooltip_opts=opts.TooltipOpts(trigger="axis"),datazoom_opts=opts.DataZoomOpts(),yaxis_opts=opts.AxisOpts(name="数值范围",type_="value",axislabel_opts=opts.LabelOpts(formatter="{value}")))
)# 图表2:价格与销量的相关性分析
scatter = (Scatter().add_xaxis(gasoline_92).add_yaxis("相关系数", corr_values,symbol_size=12,label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="汽油价格与销量相关性分布"),xaxis_opts=opts.AxisOpts(name="92号汽油价格"),yaxis_opts=opts.AxisOpts(name="相关系数"),tooltip_opts=opts.TooltipOpts(formatter="价格: {c}"),visualmap_opts=opts.VisualMapOpts(dimension=1,min_=min(corr_values),max_=max(corr_values),range_color=["#50C878", "#FF0000"]))
)# 图表3:价格-销量相关性趋势
corr_line = (Line().add_xaxis(months).add_yaxis("价格-销量相关系数", corr_values,is_smooth=True,areastyle_opts=opts.AreaStyleOpts(opacity=0.3),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")])).set_global_opts(title_opts=opts.TitleOpts(title="月度价格-销量相关系数趋势"),yaxis_opts=opts.AxisOpts(name="相关系数"),tooltip_opts=opts.TooltipOpts(trigger="axis"))
)# 生成HTML文件
line.render("energy_trend.html")
scatter.render("price_correlation_scatter.html")
corr_line.render("correlation_trend.html")print("图表已生成:energy_trend.html, price_correlation_scatter.html, correlation_trend.html")但是目前生成的图表在三个html中,是否可以帮我合成一个html展示三个图表呢?
相关文章:
DeepSeek+大数据分析快速应用落地
一、环境准备 1、准备一个 hive 的环境,并可以进行远程连接 2、环境中安装有 sqoop 和 mysql 3、DeepSeek 我使用的是 《问小白》 注册地址:打开问小白,填入我的分享码【1VYXOI】使用满血DeepSeek R1,零延迟、不卡、不限次、不…...
web前端开发:CSS的常用选择器
CSS常用选择器 CSS选择器是用于精准定位HTML元素并对其应用样式的核心工具。它的作用类似于“筛选器”,通过特定规则匹配文档中的元素,从而实现样式控制。 核心作用 定位元素 通过元素名称、类名、ID、属性等条件,快速找到需要样式化的目标元…...
Mathematica 中,将含有小数的表达式转换为整数或分数形式
具体方法和示例: 1. 使用 Rationalize 函数 Rationalize[x] 将小数 x 转换为最接近的有理数(分数形式),可指定精度容忍度。 示例: Rationalize[0.25] (* 输出: 1/4 *) Rationalize[3.14159, 0.001] (* 输出:…...
在 Ubuntu 下通过 Docker 部署 Mastodon 服务器的详细教程
大家好!今天我们来聊聊如何在 Ubuntu 系统上通过 Docker 部署 Mastodon 服务器。Mastodon 是一个开源的社交网络平台,类似于 Twitter,但更注重隐私和去中心化。Docker 则是一个非常流行的容器化平台,能够让我们轻松地打包、分发和…...
JavaScript基础-01(笔记)
前期:js变量 数据类型 数据类型检测 类型转换 数据类型 //// 基本数据类型 存放到栈// a.Number 数字类型(包含整数 小数)var num1var num1.23443var num2222// NaN 非数字类型或者不能转为数字(例:1,"1","1233…...
【C语言基础】C++ 中的 `vector` 及其 C 语言实现详解
一、C 中的 vector:动态数组的核心特性 1. 基本概念 vector 是 C 标准模板库(STL)中的动态数组容器,支持自动扩容、高效元素访问和丰富的操作接口。其核心特性包括: 动态内存管理:自动调整容量࿰…...
记录待办事项的便签软件有没有推荐的?
在快节奏的现代生活中,我们每天都要处理大量的工作任务和生活琐事,稍有不慎就可能遗漏重要事项。你是否经常遇到这样的情况:明明记得有件事要做,却怎么也想不起来是什么;或者手头同时有好几项任务,却不知道…...
华为OD机试真题——硬件产品销售方案(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 华为OD机试真题《硬件产品销售方案》: 目录 题目名称࿱…...
鸿蒙应用元服务开发-Account Kit未成年人模式订阅和处理用户信息变更
一、概述 通过订阅用户信息变更,您可以接收有关用户及其账户的重要更新。当用户取消元服务的授权信息、注销华为账号时,华为账号服务器会发送通知到元服务,元服务可以根据通知消息进行自身业务处理。 二、用户信息变更事件介绍 三、订阅用…...
优化 Dockerfile 性能之实践(Practice of Optimizing Dockerfile Performance)
优化 Dockerfile 性能之实践 构建 Docker 镜像时,Dockerfile 的性能会显著影响构建过程的效率。经过优化的 Dockerfile 可以缩短构建时间、最小化镜像大小并提高整体容器性能。在本文中,我们将探讨优化 Dockerfile 性能的最佳实践。 尽量减少层数 影响…...
OpenShift介绍,跟 Kubernetes ,Docker关系
1. OpenShift 简介 OpenShift是一个开源项目,基于主流的容器技术Docker及容器编排引擎Kubernetes构建。可以基于OpenShift构建属于自己的容器云平台。OpenShift的开源社区版本叫OpenShift Origin,现在叫OKD。 OpenShift 项目主页:https://www.okd.io/。OpenShift GitHub仓库…...
Go:包和 go 工具
引言 通过对关联特性分类,组成便于理解和修改的单元,使包与程序其他包保持独立,助力大型程序的设计与维护 。模块化让包可在不同项目共享、复用、发布及全球范围使用。 每个包定义不同命名空间作为标识符,关联具体包,…...
GIS开发笔记(5)结合osg及osgEarth实现虚线环形区域绘制
一、实现效果:输入中点坐标点、内圆半径、外圆半径,绘制坐标点所在高度的水平面的两个圆形形成环形区域。 二、实现原理: 创建中心点所在平面的圆形几何体,将其分别挂接到同一个节点上,再将该节点挂接到用户绘制组节…...
天线静电防护:NRESDTLC5V0D8B
一. 物联网天线的使用环境 1.1 联网天线广泛应用于智能家居领域,比如智能门锁、智能摄像头等设备中,通过天线实现设备与家庭网络的连接,用户可以远程控制和监控家居设备。以智能摄像头为例,它通过天线将拍摄的画面实时传输到用户…...
Linux进程相关选择题及解析
1. 关于Linux进程创建,以下说法正确的是? A. fork()函数调用后,子进程从父进程的fork()之后开始执行 B. fork()函数返回两次,父进程返回子进程PID,子进程返回0[10][11] C. exec函数族会替换当前进程的代码段,但保留数据段和堆栈 D. wait()函数只能等待直接子进程退出 答…...
Day(22)--网络编程习题
习题 以下是这些 TCP 通信练习题的 Java 代码实现及解析: TCP 通信练习 1 - 多发多收 客户端(Client1.java) java import java.io.IOException; import java.io.OutputStream; import java.net.Socket; public class Client1 {public…...
Kubernetes 节点摘除指南
目录 一、安全摘除节点的标准流程 1. 确认节点名称及状态 2. 标记节点为不可调度 3. 排空(Drain)节点 4. 删除节点 二、验证节点是否成功摘除 1. 检查节点列表 2. 检查节点详细信息 3. 验证 Pod 状态 三、彻底清理节点(可选…...
SM4密码算法的CPA攻击技术
SM4算法简介 可参见博文 SM4分组密码算法研究。 SM4密码算法的CPA攻击技术 相关功耗攻击(CPA)是侧信道功耗分析攻击中较为常见的攻击方法之一,攻击者利用密码算法执行过程中,在侧信道泄露的信息(如时序、能量、缓存等)和通信信道的消息(如明文、私钥等)进行测试,通过…...
Golang|KVBitcask
文章目录 初识KVbitcask论文详解 初识KV bitcask论文详解 论文地址:https://riak.com/assets/bitcask-intro.pdf理想的存储引擎,应该满足下面一些特点:...
【Python进阶】元组:不可变序列的十大核心应用
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现(10个案例)案例1:基础创建与访问案例2:解包…...
centos安装libheif
参考 解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“:连接超时问题_error response from daemon :get-CSDN博客 HEIF编解码器安装 - navyum - 博客园 https://github.com/strukturag/libheif #升级gcc yum install centos…...
初步认识Model Context Protocol (MCP) Java SDK
1. Maven如何下载MCP Java SDK 基础配置(核心模块) 在您的pom.xml文件中添加以下依赖: <dependencyManagement> <dependencies> <dependency> <groupId>io.modelcontextprotocol.sdk</groupId> <artifactI…...
第三章 爬虫提速、selenium模块、requests模块进阶(终)
目录 一.requests进阶 (一)处理cookie (二)防盗链 (三)代理 二.爬虫提速 (一)线程池和进程池 (二)协程 (三)异步http请求-aio…...
unity使用内建组件给刚体增加重力
2019年3月9日11:10:24 unity开发中,有时候发现刚体上的重力不能满足我们的需要,可以通过使用内建组件Constant Force来增加重力: 在游戏对象上。请按照以下操作: 为Player添加一个名为Constant Force组件,选择Player在…...
Java开发中的设计模式之观察者模式详细讲解
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都会自动收到通知并更新。这种模式在Java开发中非常常见,尤其是在事件驱…...
【学习笔记】计算机网络(九)—— 无线网络和移动网络
第9章 无线网络和移动网络 文章目录 第9章 无线网络和移动网络9.1 无线局域网WLAN9.1.1 无线局域网的组成9.1.2 802.11局域网的物理层9.1.3 802.11局域网的MAC层协议CSMA 协议CSMA/CD 协议 - 总线型 - 半双工CSMA/CA 协议 9.1.4 802.11局域网的MAC帧 9.2 无线个人区域网WPAN9.3…...
一个基于Django的写字楼管理系统实现方案
一个基于Django的写字楼管理系统实现方案 用户现在需要我用Django来编写一个写字楼管理系统的Web版本,要求包括增删改查写字楼的HTML页面,视频管理功能,本地化部署,以及人员权限管理,包含完整的代码结构和功能实现&am…...
C++面试考点:类(class)
1、类的定义 C中的类提供了面向对象编程、继承与多态的机制。其构成包括成员(各种自定义数据)、行为(定义的函数操作)、封装(private、public、protected)。核心是了解类的继承机制,以及各种封装…...
ThreadPoolExecutor 多线程用requests请求一个地址的时候为什么会报错,而多进程用requests请求一个地址的时候不会报错,为什么?
网络请求行为 多线程:requests 库底层依赖 urllib3,而 urllib3 使用连接池管理网络请求。在多线程环境中,连接池可能会因为线程间的竞争导致连接泄漏或超时。 多进程:每个进程独立管理自己的连接池,因此不会出现线程间…...
数据库脱裤
假设你已经getshell 找到mysql账号密码。 网站要连接mysql,就需要把mysql的账号密码保存在一个php文件中,类似config.php、common.inc.php等,在shell中,读取这些文件,找到其中信息即可 下面是一些常见平台的配置文…...
十二,<FastApi>中间件
什么是中间件? "中间件"是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应之后工作. 代码示例: from fastapi import FastAPI, Response from fastapi import Request import uvicornapp FastAPI()app.middleware("http") async def m2…...
欢迎使用Markdown编辑器
使用Markdown编辑器 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注…...
RabbitMQ架构原理及消息分发机制
RabbitMQ架构原理及消息分发机制 在现代分布式系统中,消息队列是不可或缺的组件之一。它不仅能够解耦系统模块,还能实现异步通信和削峰填谷。在众多消息队列中,RabbitMQ 因其高并发、高可靠性和丰富的功能而备受青睐。本文将从 RabbitMQ 的基…...
智能麻将出牌组件
开篇引言 麻将作为一款风靡全球的策略性游戏,其复杂的规则和多变的牌局给玩家带来了无尽乐趣。在数字化时代,运用编程技术为麻将游戏赋予智能,实现自动出牌功能,不仅能提升玩家体验,还能深入探索算法在博弈游戏中的…...
python脚本补充
本文是对实用的 Python 小脚本_python写脚本-CSDN博客的一点补充。对简单脚本的一些操作上的优化。 ###Utilities ### ###重命名文件名 import os import tkinter as tk from tkinter import filedialog, simpledialog, messageboxdef batch_rename():# 弹出文件夹选择对话框d…...
【经验记录贴】活用shell,提高工作效率
背景 最近在做测试的时候,需要手动kill服务的进程,然后通过命令重启服务,再进行测试。每次重启都会涉及到下面三个命令的执行: 1)检索进程ID $ ps -elf | grep programname root 1123 112 1234 0 0 0 0:00…...
出现 ERR_CERT_COMMON_NAME_INVALID | 301 302 重定向的解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 执行代码时,出现如下提示: GET https://xxxx/admin-api/system...
解决本地浏览器访问服务器端语音识别项目显示“麦克风未授权”的问题
解决本地浏览器访问服务器端语音识别项目显示“麦克风未授权”的问题 在 chrome://flags 启用特殊权限(不推荐长期启用) 在浏览器地址栏输入: chrome://flags然后搜索: Insecure origins treated as secure 找到类似项ÿ…...
【数论】线性筛质数
线性筛质数 在之前的一篇筛质数的文章中只解释了埃式筛质数的方法,没有解释线性筛质数的方法 我们先看一下线性筛质数的代码 【例题】 给定一个正整数 n,请你求出 1∼n 中质数的个数。 输入格式 共一行,包含整数 n。 输出格式 共一行…...
视频孪生重构施工逻辑:智慧工地的数字化升级
当"智慧工地"概念在2017年首次写入《建筑业发展"十三五"规划》时,行业普遍将其等同于摄像头与传感器的简单叠加。十年数字浪潮冲刷下,智慧工地的内涵已发生本质跃迁:从工具层面的信息化改造,进化为基于视频数…...
【Lerobot】加载本地数据LeRobotDataset数据、读取并解析parquet
官方例子:https://github.com/huggingface/lerobot/blob/main/examples/1_load_lerobot_dataset.py https://github.com/NVIDIA/Isaac-GR00T/blob/main/getting_started/LeRobot_compatible_data_schema.md 使用SO100机械臂进行数据采集后,得到如下格式…...
卷积神经网络 CNN 模型介绍
卷积神经网络 CNN 模型介绍 一、经典CNN模型1. LeNet-5(基础模型)2. AlexNet3. VGGNet(VGG16/VGG19)4. ResNet(残差网络) 二、轻量化CNN模型1. MobileNet系列2. EfficientNet3. ShuffleNet 三、改进型CNN模…...
Vue —— 实用的工具函数
目录 响应式数据管理1. toRef 和 torefs2. shallowRef 和 shallowReactive3. markRaw 依赖追踪与副作用1. computed2. watch 和 watchEffect 类型判断与优化1. unref2. isRef 、isReactive 和 isProxy 组件通信与生命周期1. provide 和 inject2. nextTick 高级工具1. useAttrs …...
Langchain + Gemini API调用基本操作
本文参考Langchain中ChatGoogleGenerativeAI的官方文档,在本地的jupyter notebook中运行。 关于API的细节在官方文档最开头给出: 我们在使用时,可以选择model"gemini-2.0-flash-001"或者生成图片的ChatGoogleGenerativeAI(model“…...
软件线上故障复盘报告
软件线上故障复盘报告 故障编号:INC-2024XXX 复盘日期:YYYY-MM-DD 参与人员:研发/运维/测试/产品/客服负责人 一、故障概况 1.1 基础信息 字段内容数据来源故障等级P0/P1/P2(参考SLA分级标准)运维告警…...
分享:批量提取图片文字并自动命名文件,ocr识别图片指定区域并重命名文件名工具,基于WPF和腾讯OCR识别的接口的视线方案
一、项目背景 在处理大量图片时,常常需要从图片中提取特定区域的文字信息,并依据这些信息对图片进行重命名。例如,在档案管理领域,大量纸质文件被扫描成图片后,需要从图片中提取关键信息(如文件编号、日期等)来重命名图片,以便后续的检索和管理;在电商领域,商家可能…...
SIMULIA-Abaqus有限元分析软件针对汽车行业的解决方案
汽车行业是Abaqus软件的一个重要应用领域,许多知名的汽车企业都是Abaqus的用户,本文为您重点介绍Abaqus针对汽车行业有哪些应用及其解决方案。 Abaqus是一款什么软件: Abaqus公司是世界知名的计算机仿真行业的软件公司,成立于197…...
linux下使用php修改php.ini的session.save_path无效的解决办法
linux下安装php的组合还是php-fpm和nginx,其实已经安装好了,网站已经能够跑起来了,但是遇到后台登录的时候验证码一直不对,看了下报错,session无法存储,于是新增了一个phpinfo文件,使用web查看下…...
脚本-QQ批量发送消息(图片和文字)
目录 代码 代码功能详解 注意事项 致谢 代码 import io import traceback import win32clipboard import pyautogui import pyperclip import win32gui # 替换为pywin32的正确模块名 import pandas as pd import time from PIL import Imageclass QQAutoMessage:def __in…...
高等数学A1 期末救济(导数)
基于song复习 闭区间上连续函数的性质 在闭区间里,f(x)连续> f(x)有界 导数 导数三种定义及不同写法 常用导数公式 可导→连续,但连续❎→可导 切线类问题求解 求某点切线方程与求过某点的切线方程 反函数求导法则 反函数的导数直接函数导数的导数 例…...