Python从入门到精通秘籍十九

一、Python之union 联合类型注释

当谈论Python中的联合类型注释时,通常会提到Union类型。Uniontyping模块中定义的一个泛型类,用于表示多个可能的类型。

Union的语法如下:

Union[type1, type2, ...]

其中type1type2, … 是要组成联合类型的具体类型。

为了更好地理解,以下是一个示例代码,展示了如何使用Union进行类型注释:

from typing import Uniondef process_data(data: Union[str, int, float]) -> None:if isinstance(data, str):# 处理字符串类型的数据print("处理字符串:", data.upper())elif isinstance(data, int):# 处理整数类型的数据print("处理整数:", data * 2)elif isinstance(data, float):# 处理浮点数类型的数据print("处理浮点数:", data * 1.5)# 测试代码
process_data("hello")       # 输出:处理字符串: HELLO
process_data(10)            # 输出:处理整数: 20
process_data(3.14)          # 输出:处理浮点数: 4.71

在上面的例子中,process_data()函数接受一个参数data,可以是strint或者float类型。通过使用Union类型注释,我们明确了这个参数可以接受多种类型的值。

注意,Union并不限制参数的取值范围,而是指定了参数可以是多个类型中的任意一个。在函数内部,我们使用isinstance()函数来判断参数的具体类型,并采取相应的操作。

总结起来,Union联合类型注释允许我们在类型注释中指定多个可能的类型,使代码更加灵活和易读。

二、Python之多态

在Python中,多态是面向对象编程的一个重要概念。它允许不同类型的对象对相同的方法做出不同的响应。通过使用多态,我们可以编写更加灵活和可扩展的代码。

下面是一个示例代码,展示了如何使用多态实现不同形状的计算面积:

class Shape:def area(self):passclass Rectangle(Shape):def __init__(self, width, height):self.width = widthself.height = heightdef area(self):return self.width * self.heightclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):return 3.14 * self.radius ** 2def calculate_area(shape):return shape.area()# 创建不同的形状对象
rectangle = Rectangle(5, 10)
circle = Circle(7)# 调用calculate_area函数并传入不同的形状对象
print(calculate_area(rectangle))  # 输出: 50
print(calculate_area(circle))     # 输出: 153.86

在上面的示例中,我们定义了一个抽象基类Shape,它有一个抽象方法area()。然后,我们创建了两个具体子类RectangleCircle,它们分别实现了area()方法以计算矩形和圆的面积。

接下来,我们定义了一个calculate_area()函数,它接受一个Shape类型的参数,并调用其area()方法来计算面积。

通过调用calculate_area()并传入不同的形状对象,我们可以看到多态的效果。无论是矩形还是圆,它们都能根据自己的特性正确计算出面积。

这就是多态的好处:尽管我们在calculate_area()函数中并没有指定具体的类型,但它能够根据传入的对象动态地调用适当的方法。这种灵活性使得代码更具可扩展性和复用性。

总结起来,Python中的多态通过允许不同类型的对象对相同的方法做出不同的响应,提供了灵活和可扩展的编程方式。它是面向对象编程中重要且强大的特性之一。

三、Python之电商数据分析案例

电商数据分析案例可以涉及多个方面,例如用户行为分析、销售趋势分析、产品推荐等。以下是一个简单的示例,展示了如何使用Python进行电商数据分析。

假设我们有一个名为ecommerce.csv的数据文件,包含了一家电商公司的订单数据,其中包括订单ID、购买日期、购买金额、产品类别等信息。

首先,导入所需的库:

import pandas as pd
import matplotlib.pyplot as plt

接下来,读取数据文件并加载数据:

data = pd.read_csv('ecommerce.csv')

然后,我们可以查看数据的前几行以了解数据结构:

print(data.head())

接着,我们可以使用一些统计方法来了解数据的概述:

print(data.describe())

针对电商数据分析,我们可以从不同角度进行分析。以下是几个常见的分析示例:

  1. 用户行为分析

    我们可以分析用户的购买行为,例如购买次数、购买金额等。下面是计算每个用户的购买次数和总购买金额的示例:

    purchase_count = data.groupby('UserID').size().reset_index(name='PurchaseCount')
    purchase_amount = data.groupby('UserID')['Amount'].sum().reset_index(name='TotalAmount')
    user_analysis = purchase_count.merge(purchase_amount, on='UserID')
    print(user_analysis)
    
  2. 销售趋势分析

    我们可以分析销售额和订单量随时间的变化趋势,以了解销售的季节性和趋势。下面是绘制每月销售额和订单量的示例:

    data['PurchaseDate'] = pd.to_datetime(data['PurchaseDate'])
    monthly_sales = data.groupby(data['PurchaseDate'].dt.to_period('M')).sum().reset_index()plt.figure(figsize=(10, 6))
    plt.plot(monthly_sales['PurchaseDate'], monthly_sales['Amount'], label='Sales')
    plt.plot(monthly_sales['PurchaseDate'], monthly_sales['OrderID'], label='Orders')
    plt.xlabel('Month')
    plt.ylabel('Value')
    plt.title('Monthly Sales and Orders')
    plt.legend()
    plt.show()
    
  3. 产品类别分析

    我们可以分析不同产品类别的销售情况,以了解热门产品和销售趋势。下面是计算每个产品类别的总销售额和平均销售额的示例:

    category_sales = data.groupby('Category')['Amount'].agg(['sum', 'mean']).reset_index()
    print(category_sales)
    

以上是电商数据分析的简单示例,实际上可能会涉及到更复杂的数据处理、可视化和高级分析技术。根据具体需求,你可以进一步探索或扩展这些代码来进行更深入的电商数据分析。

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

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

相关文章

第十九章 linux部署scrapyd

文章目录 1. linux部署python环境1. 部署python源文件环境2. 下载python3. 解压安装包4. 安装5. 配置环境变量6. 检查是否安装成功7. 准备python使用的包8. 安装scrapyd9. 配置scrapyd10. 开放6800端口 2. 部署gerapy1. 本机下载包2. 初始化3. 进入gerapy同步数据库4. 创建用户…

类。。。。。。

类的访问权限 类的成员有三种访问权限:public、private 和 protected,分别表示公有的、私有的和受保护的。 在类的内部(类的成员函数中),无论成员被声明为 public 还是 private,都是可以访问。 在类的外…

nginx启停操作

一、nginx启动 方式一: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf方式二: systemctl start nginx 查看进程启动状态 ps -ef | grep nginx 上图表示nginx进程启动成功,进程号为30034为主进程(负责链接操作)&am…

2024/3/24--爬虫库

1.常用的爬虫库 (1)在setting的project里面点击Python Interpreter (2)常用的爬虫库有 import requests //用途:用于发送HTTP请求。from bs4 import BeautifulSoup //用于从HTML或XML文档中提取数据。import scrapy //一个功能强大的爬虫框架&#xf…

基于 C++ STL 的图书管理系统213行

定制魏:QTWZPW,获取更多源码等 目录 一、实践项目名称 二、实践目的 三、实践要求 四、实践内容 五、代码框架参考 六、代码效果展示 七、完整代码主函数展示 一、实践项目名称 基于 C STL 的图书管理系统 二、实践目的 通过设计和实现一个基于…

AI之Suno:Suno V3的简介、安装和使用方法、案例应用之详细攻略

AI之Suno:Suno V3的简介、安装和使用方法、案例应用之详细攻略 目录 Suno AI的简介 1、特点与改进: Suno AI的安装和使用方法 1、第一步,让国产大模型—ChatGLM4帮我写一个提示词 2、第二步,将提示词交给Suno v3,…

优秀学员作品:SpringBoot茶叶商城系统源码+运行教程+开发文档(参考论文)

今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的茶叶商城系统,主要实现了茶叶采购,出售茶叶的流程,除基础脚手架外,实现的功能有: 前台 : 首页、商品列表、新闻列表、个人中心、…

python把图片重命名

在Python中,你可以使用os模块来重命名文件,包括图片文件。以下是一个简单的示例,该示例会将指定目录中的所有.jpg图片文件重命名为new_name_1.jpg,new_name_2.jpg,以此类推: import os# 指定图片所在的目录…

【算法】双指针的应用

文章目录 前言1. 移动零(easy)2. 复写零(easy)3. 快乐数(medium)4. 盛水最多的容器(medium)5. 有效三角形的个数(medium)6.和为 s 的两个数字(eas…

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议) 本文目的前置知识点TCP协议简介主要特性通信流程1. 建立连接的过程(三次握手,243)1.1 为什么要三次握手,两次不行吗? 2. 释放连接的过程(…

msvcp110.dll丢失修复办法

在计算机使用过程中,我们经常会遇到一些扩展名为.dll的文件,这些文件是动态链接库文件,用于提供程序运行时所需的函数和资源。其中,msvcp110.dll文件是一个非常重要的动态链接库文件,它属于Microsoft Visual C 2012 Re…

Elastic 线下 Meetup 将于 2024 年 3 月 30 号在武汉举办

2024 Elastic Meetup 武汉站活动,由 Elastic、腾讯、新智锦绣联合举办,现诚邀广大技术爱好者及开发者参加。 活动时间 2024年3月30日 13:30-18:00 活动地点 中国武汉 武汉市江夏区腾讯大道1号腾讯武汉研发中心一楼多功能厅 13:30-14:00 入场 活动流程…

【C++从练气到飞升】06---重识类和对象

🎈个人主页:库库的里昂 ✨收录专栏:C从练气到飞升 🎉鸟欲高飞先振翅,人求上进先读书。 目录 ⛳️推荐 一、再谈构造函数 1. 构造函数体赋值 2. 初始化列表 每个成员变量在初始化列表中只能出现一次--初始化只能初始…

修复JeeSite vue 2.x视图滑动到顶部间距问题:Less文件修改实践

在前端开发中,样式调整是常见且必不可少的任务之一。最近,我在处理JeeSite项目时,遇到了一个视图滑动到顶部时顶部Tabs与页面顶部存在间距的问题。经过深入调查,发现这个问题可以通过修改相应的Less文件来解决。下面,我…

数据结构奇妙旅程之深入解析快速排序

快速排序(Quick Sort)是一种高效的排序算法,它使用了分治法的策略来将一个数组排序。其基本思想是选择一个基准元素,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比基准元素小,另…

15、Spring Cloud Alibaba Sentinel实现熔断与限流

注:本篇文章主要参考周阳老师讲解的cloud进行整理的! 1、Sentinel 1.1、官网 https://sentinelguard.io/zh-cn/ 等价对标 Spring Cloud Circuit Breaker 1.2、是什么 https://github.com/alibaba/Sentinel/wiki 1.3、去哪下 https://github.com/alibab…

如何在Ubuntu系统使用Docker搭建MongoDB结合内网穿透实现公网连接

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署Mon…

头歌实训--机器学习(决策树)

第1关&#xff1a;决策树简述 第2关&#xff1a;决策树算法详解 import numpy as np from sklearn import datasets#######Begin####### # 划分函数 def split(x,y,d,value):index_a(x[:,d]<value)index_b(x[:,d]>value)return x[index_a],x[index_b],y[index_a],y[inde…

[linux]--关于进程概念(上)

目录 冯诺依曼体系结构 操作系统 概念 设计os的目的 定位 如何理解管理 总结 系统调用和库函数概念 进程 描述进程-pcb 组织进程 查看进程 通过系统调用获取进程标示符 通过系统调用创建进程-fork初识 进程状态 阻塞和挂起 Z(zombie)-僵尸进程 冯诺依曼体系结…

shell实现查询进程号并批量kill(脚本)

问题或需求描述 在shell中&#xff0c;如果你想通过命令行查询出一系列匹配某个关键词的进程&#xff0c;并使用xargs命令批量结束这些进程&#xff0c;可以按照以下步骤操作&#xff1a; # 查询并提取进程号 pgrep -f "关键词" | xargs kill# 或者&#xff0c;如果…