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,一经查实,立即删除!

相关文章

拆解维修飞科剃须刀

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

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

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

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

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

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

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

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

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

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

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

【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登录页面密码需密文存放(可以采用hash方式,建议用sha1或md5加盐)采用服务器端的验证码&#…

基于Hive和Hadoop的招聘分析系统

本项目是一个基于大数据技术的招聘分析系统,旨在为用户提供全面的招聘信息和深入的职位市场分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark 为核…

英集芯IP5911:集成锂电池充电管理和检测唤醒功能的低功耗8位MCU芯片

英集芯IP5911是一款集成锂电池充电管理、咪头检测唤醒、负载电阻插拔和阻值检测等功能的8bit MCU芯片。其封装采用QFN16,应用时仅需极少的外围器件,就能够有效减小整体方案的尺寸,降低BOM成本,为小型电子设备提供高集成度的解决方…

【常读常悟】《大数据之路-阿里巴巴大数据实践》一书读书摘要

【常读常悟】《大数据之路-阿里巴巴大数据实践》一书读书摘要 1、背景2、目录结构3、数据加工链路4、章节摘要4.1 第2章 日志采集4.1.1 日志采集方案4.1.2 采集指标 4.2 第3章 数据同步4.2.1 数据的特点4.2.2 数据同步的三种方式4.2.3 数据同步的最佳实践 4.3 第4章 离线数据开…

以太网交换安全:端口安全

一、端口安全介绍 端口安全是一种网络设备防护措施,通过将接口学习到的动态MAC地址转换为安全MAC地址(包括安全动态MAC和Sticky MAC),阻止除安全MAC和静态MAC之外的主机通过本接口和设备通信,从而增强设备的安全性。以…

基于muduo库函数实现protobuf协议的通信

文章目录 先定义具体的业务请求类型2. 实现服务端提供的服务protobuf_server.cppprotobuf_client.cpp 建议先去了解muduo库和protobuf协议: Protobuf库的使用Muduo库介绍及使用 先定义具体的业务请求类型 先使用protobuf库创建我们所要完成的业务请求类型&#xf…

YOLOv11改进 | 主干篇 | YOLOv11引入MobileNetV4

1. MobileNetV4介绍 1.1 摘要: 我们推出了最新一代的 MobileNet,称为 MobileNetV4 (MNv4),具有适用于移动设备的通用高效架构设计。 在其核心,我们引入了通用倒瓶颈(UIB)搜索块,这是一种统一且…

【MAUI】CommunityToolkit社区工具包介绍

一、为什么需要声明式开发 .NET的MVVM,始于WPF,很古典,它甚至可能是现代前端框架“声明式开发”的鼻祖。声明式开发,之所以出现,是因为命令式开发在UI层和代码层上无法解耦的问题。如下图所示: 1、命令式开发:后台代码需要调用UI层的控件(label.Text),如果更新UI层…

CEPH的写入流程

1、客户端程序发起对文件的读写请求,ceph前端接口(RADOS Gateway)将文件切分成多个固定大小的对象(默认大小为4MB) 2、计算文件到对象的映射 (1) 计算OID为每个对象分配一个唯一的OID(Object ID&#xff09…

【微服务】初识(day1)

基础概念 集群 集群是将一个系统完整的部署到多个服务器,每个服务器提供系统的所有服务,多个服务器可以通过负载均衡完成任务,每个服务器都可以称为集群的节点。 分布式 分布式是将一个系统拆分为多个子系统,多个子系统部署在…

免费录屏软件工具:助力高效屏幕录制

录屏已经成为了一项非常实用且广泛应用的技术。无论是制作教学视频、记录游戏精彩瞬间,还是进行软件操作演示等,我们都常常需要一款可靠的录屏软件。今天,就让我们一起来探索那些功能强大录屏软件免费版,看看它们是如何满足我们多…

Leecode刷题之路第六天之Z字形变换

题目出处 06-Z字形变换 题目描述 个人解法 思路: todo 代码示例:(Java) todo复杂度分析 todo 官方解法 06-Z字形变换官方解法 方法1:利用二维矩阵模拟 思路: 代码示例:(Java&am…

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC 第一节 硬件解读第二节 CubeMX配置第三节 代码编写 第一节 硬件解读 STM32的ADC是12位,通过硬件过采样扩展到16位,模数转换器嵌入到STM32L071xx器件中。有16个外部通道和2个内部通道&#xf…