SQL连接Python

对于运营部门的Yoyo来说,她想要知道夜曲优选的订单都来自哪些省份,每个省份的总订单数以及总订单金额分别是多少。
这时小鹿就会通过SQL对连接的数据库进行查询,再将结果传递给Python处理,并帮助Yoyo生成可视化图表。

我们先来快速的体验一下这个过程。

Step1.1:订单表orders

订单表orders是夜曲优选数据库中用于记录订单数据的表。
小鹿通过SQL语句,可以快速获取订单表的每一行信息。

SELECT *
FROM orders; 

Step1.2:地址表address

地址表address是夜曲优选数据库中用于记录收件地址数据的表。
小鹿通过SQL语句,可以快速获取地址表的每一行信息。

SELECT *
FROM address; 

Step2:两表连接

为了统计每笔订单发往的省份信息,小鹿使用SQL语句将订单表与地址表关联起来。
按照省份对数据进行分组,并计算每个省份的订单量与订单总价。

SELECT a.province, COUNT(*), SUM(total_price)
FROM orders o 
JOIN address a 
ON o.addr_id=a.id
GROUP BY a.province;

Step3:Sql连接Pyhton

最后小鹿将刚才的查询语句整合到Python程序中。
利用Python连接数据库,并通过刚才的SQL语句获取每个省份下订单的数据,绘制成可以交互的图表信息。

import pymysql 
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Page
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType


mysql_conn = pymysql.connect(
    host='localhost', 
    port=3306, 
    user='yequ', 
    password='yequ123', 
    database='nocturneshop',
    charset='utf8')

cur = mysql_conn.cursor()


def get_elems():
    sql = """
     SELECT a.province,COUNT(*),SUM(total_price)
     FROM orders o 
     JOIN address a 
     ON o.addr_id=a.id
     GROUP BY a.province;
    """

    cur.execute(sql)
    elems = cur.fetchall()
    return elems

def create_map():
    data=get_elems()
    map_data=[]
    line_map=[]
    y_data=[]
    for i in range (0,len(data)):
        
        if data[i][0][:3] not in ["黑龙江","内蒙古"]:
            map_data.append([data[i][0][:2],data[i][1]])
            line_map.append(("四川",data[i][0][:2]))
        else:
            map_data.append([data[i][0][:3],data[i][1]])
            line_map.append(("四川",data[i][0][:3]))
        

    map = (
    Geo(init_opts=opts.InitOpts(theme=ThemeType.DARK))
    .add_schema(
        maptype="china",
        is_roam=False,
        itemstyle_opts=opts.ItemStyleOpts(color="#364A66",border_color="#58667a")
    )
    .add(
        "各省订单数量",
        map_data,
        type_=ChartType.EFFECT_SCATTER,
        
    )
    .add(
        "订单分布",
        line_map,
        type_=ChartType.LINES,
        effect_opts=opts.EffectOpts(
            symbol=SymbolType.ARROW, symbol_size=6, color="red"
        ),
        linestyle_opts=opts.LineStyleOpts(curve=0.2),
    )
    
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(),
        title_opts=opts.TitleOpts(title="订单分布情况"),
    )
    )
    return map

def create_bar():
    data=get_elems()
    x_data=[]
    y_data=[]
    for i in range (0,len(data)):
        
        if data[i][0][:3] not in ["黑龙江","内蒙古"]:
            x_data.append(data[i][0][:2])
            y_data.append(data[i][2])
        else:
            x_data.append(data[i][0][:3])
            y_data.append(data[i][2])
            
    bar= (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
        .add_xaxis(x_data)
        .add_yaxis("总订单金额", y_data)
        .set_series_opts(
            label_opts=opts.LabelOpts(position="right",font_size=12),
            
        )
        .set_global_opts(title_opts=opts.TitleOpts(title="各省总订单金额"),
            xaxis_opts=opts.AxisOpts(),
            yaxis_opts=opts.AxisOpts(),
            datazoom_opts=opts.DataZoomOpts(orient= "vertical",range_start=50,is_zoom_lock=True),
            
        )
        .reversal_axis()
    )
    
    return bar

def page_layout():
    page = Page()
    page.add(
        create_map(),
        create_bar()       
    )
    page.render("/Users/geo.html")

if __name__ == "__main__":
    page_layout()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拆解维修飞科剃须刀

原因 用了好几年的剃须刀,经过一次更换电池。后来上面的盖帽松动,无法合盖,经过把弹片矫正后修复。最近一次”大力出奇迹“的操作直接断送了这个老伤员最后的可能性。最终只能花了将近十块大洋买了一套盖着和中间座。简单更换了一下。 记录…

单元测试进阶-Mock使用和插桩

目录 一、基本概念 1、Mock 2、插桩(Sutbbing) 二、参考文章 一、基本概念 1、Mock Mock的作用就是不直接new对象,而是使用Mock方法或者注解Mock一个对象。 这个对象他不是new创建的对象,Mock对该对象的一些成员变量和方法…

【RabbitMQ 项目】服务端:消费者管理模块

文章目录 一.概念辨析1.什么是消费者?2.服务端为什么要管理消费者?3.怎么管理消费者?4.需要管理生产者吗? 二.编写思路1.定义消费者2.定义队列消费者管理管理类3.定义消费者管理类 三.代码实践 一.概念辨析 1.什么是消费者&#…

html嵌入百度地图

html嵌入百度地图 key地址 https://lbsyun.baidu.com/apiconsole/key#/home &#xff0c;点进去注册应用、然后复制key换掉即可显示地图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>百度地图搜索…

C++随心记 续一

C中的模板 在其它语言中如Java或者C#中可能叫做泛型&#xff0c;在C中为模板&#xff0c;泛型的限制通常比模板多。模板可以解决多次的代码重复问题&#xff0c;如以下场景 #include <iostream> #include <string>void print(int value) {std::cout << val…

MySQL存储和处理XML数据

文章目录 一、实战概述二、准备数据三、实战步骤1、创建数据库2、创建数据表3、插入XML数据4、查询XML数据5、修改XML数据6、删除XML数据7、注意事项四、实战小结一、实战概述 MySQL不直接支持XML数据类型,但可以通过TEXT或BLOB类型字段存储XML数据,利用ExtractValue和Update…

Spark Job 对象 详解

在 Apache Spark 中&#xff0c;Job 对象是执行逻辑的核心组件之一&#xff0c;它代表了对一系列数据操作&#xff08;如 transformations 和 actions&#xff09;的提交。理解 Job 的本质和它在 Spark 中的运行机制&#xff0c;有助于深入理解 Spark 的任务调度、执行模型和容…

滚雪球学Oracle[8.3讲]:区块链与Oracle

全文目录&#xff1a; 前言一、Oracle Blockchain的架构与应用1.1 Oracle Blockchain的基本架构1.1.1 Oracle Blockchain的核心组件 1.2 Oracle Blockchain的优势示例&#xff1a;Oracle Blockchain的实际应用 二、区块链与传统数据库的集成2.1 区块链与传统数据库的关系2.2 区…

PWM:控制信号的秘密武器

什么是PWM&#xff1f; PWM&#xff08;Pulse Width Modulation&#xff0c;脉宽调制&#xff09;是一种通过改变信号的占空比来控制电压输出的技术。简单来说&#xff0c;PWM信号由一系列高低电平组成&#xff0c;通过调节高电平持续的时间比例&#xff0c;可以控制信号的平均…

目前最好用的爬虫软件是那个?

作为一名数据工程师&#xff0c;三天两头要采集数据&#xff0c;用过十几种爬虫软件&#xff0c;也用过Python爬虫库&#xff0c;还是建议新手使用现成的软件比较方便。 这里推荐3款不错的自动化爬虫工具&#xff0c;八爪鱼、亮数据、Web Scraper 1. 八爪鱼爬虫 八爪鱼爬虫是一…

ARM base instruction -- ccmp

Conditional Compare (register) sets the value of the condition flags to the result of the comparison of two registers if the condition is TRUE, and an immediate value otherwise. 条件比较&#xff08;寄存器&#xff09;如果条件为真&#xff0c;则将条件标志的值…

Linux:深入理解冯诺依曼结构与操作系统

目录 1. 冯诺依曼体系结构 1.1 结构分析 1.2 存储结构分布图 2. 操作系统 2.1 概念 2.2 如何管理 2.3 什么是系统调用和库函数 1. 冯诺依曼体系结构 1.1 结构分析 不管是何种计算机&#xff0c;如个人笔记本电脑&#xff0c;服务器&#xff0c;都是遵循冯诺依曼结构。…

[leetcode]674_最长连续递增序列

给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定&#xff0c;如果对于每个 l < i < r&#xff0c;都有 nums[i] < nums[i 1] &am…

可视化图表与源代码显示配置项及页面的动态调整功能分析

可视化图表与源代码显示配置项及页面的动态调整功能分析 文章目录 可视化图表与源代码显示配置项及页面的动态调整功能分析1.分析图表源代码2.分析源代码显示功能**完整代码参考&#xff1a;** 3.分析源代码显示及动态调整**完整代码参考&#xff1a;** 4.分析代码编辑器及运行…

【AI知识点】泛化(Generalization)与过拟合(Overfitting)

泛化&#xff08;generalization&#xff09; 是机器学习中的一个核心概念&#xff0c;指的是模型在训练数据之外的新数据上表现得如何。换句话说&#xff0c;泛化能力衡量的是模型能否在未见过的样本上做出正确的预测或推断。 1. 泛化的背景 当我们训练机器学习模型时&#…

华为云LTS日志上报至观测云最佳实践

华为云LTS简介 华为云云日志服务&#xff08;Log Tank Service&#xff0c;简称 LTS&#xff09;&#xff0c;用于收集来自主机和云服务的日志数据&#xff0c;通过海量日志数据的分析与处理&#xff0c;可以将云服务和应用程序的可用性和性能最大化&#xff0c;为您提供实时、…

vue框架和uniapp框架区别

文章目录 vue框架和uniapp框架区别一、引言二、Vue.js 概述1、Vue.js 简介1.1、特点 2、适用场景 三、Uni-app 概述1、Uni-app 简介1.1、特点 2、适用场景 四、区别与比较1、跨平台能力2、开发体验3、性能优化4、社区和支持 五、总结 vue框架和uniapp框架区别 一、引言 在前端…

基于SSM的爱心慈善公益网站的设计与实现

文未可获取一份本项目的java源码和数据库参考。 选题意义 随着经济的不断进步&#xff0c;发展各种进行公益事业的渠道不断的出现&#xff0c;作为一个礼仪之邦&#xff0c;中华民族一直秉承先人的团结与友善精神&#xff0c;对社会和他人给予帮助关怀。但中国的公益事业相对…

【AIGC】2022-CVPR-利用潜在扩散模型进行高分辨率图像合成

2022-CVPR-High-Resolution Image Synthesis with Latent Diffusion Models 利用潜在扩散模型进行高分辨率图像合成摘要1. 引言2. 相关工作3. 方法3.1. 感知图像压缩3.2. 潜在扩散模型3.3. 调节机制 4. 实验4.1. 关于感知压缩权衡4.2. 利用潜在扩散生成图像4.3. 条件潜在扩散4.…

防sql注入的网站登录系统设计与实现

课程名称 网络安全 大作业名称 防sql注入的网站登录系统设计与实现 姓名 学号 班级 大 作 业 要 求 结合mysql数据库设计一个web登录页面密码需密文存放&#xff08;可以采用hash方式&#xff0c;建议用sha1或md5加盐&#xff09;采用服务器端的验证码&#…