Python进阶
2024-03-14 11:30:34 4 举报
AI智能生成
《Python进阶》是一本深入讲解Python编程技术的图书,内容涵盖了Python的高级特性、并发编程、网络编程、数据库编程、系统管理以及模块开发等。本书还提供了大量实用的案例和代码示例,帮助读者理解和掌握Python的实用技巧。适合有一定Python基础的读者阅读,为Python程序员提供了丰富的进阶学习资源。
作者其他创作
大纲/内容
进阶
正则表达式
re 模块
re.match( 正则表达式 , 字符串 , 控制正则的匹配方式 )
如果字符串开始不符合正则表达式,则匹配失败,函数返回 None
re.serch( 正则表达式 , 字符串 , 控制正则的匹配方式 )
匹配整个字符串,直到找到一个匹配
re. start() || end() || span( 开始 ,结束 ) || group( 索引 )
只需要结果的索引的值
re.sub( 正则 , 替换字符串(可为函数) , 字符串 , 替换次数 , 控制正则的匹配方式 )
返回函数
re.compile
生成正则对象
re.findall( 正则,字符串,起始,结束 )
返回列表
re.finditer()
同 findall()
返回迭代器
re.split( 正则,字符串,分割次数,控制正则的匹配方式 )
返回列表
CGI编程
通用网关接口、是一段程序 运行在服务器上
MySQL
1.安装mysql 驱动
pip install mysql-connector-python
2. 导包
import mysql.connector
3.创建数据库连接返回对象
mysql . connector . connect ( host , user , password )
4. 实例化返回游标对象
数据库对象 . cursor()
5.执行
光标对象 . execute( 执行SQL )
防止数据库查询发生 SQL 注入 ,使用 %s 占位符来转义查询的条件
6.关闭游标 和 数据库连接
数据库对象 . close()
游标对象 . close()
数据库对象 . commit()
修改和插入,必须使用提交
数据库对象 . rollback()
回滚
游标对象 . lastrowid
获取记录的ID
游标对象 . fetchall()
获取所有记录
游标对象 . fetchone()
获取一条记录
PyMySQL
是 Python3.x 连接 Mysql数据库的
区别
创建数据库连接
pymysql.connect(
host='localhost',
user='用户',
password='密码',
database='库'
)
host='localhost',
user='用户',
password='密码',
database='库'
)
ACID
原子
一个事务中、要么全部成功、要么全部失败
一致
一个事务中、 数据更新的值要一致
隔离
事务操作的之间是隔离的
持久
一旦事务被提交、数据库的数据改变是永久性的
数据库异常
|__Warning
|__Error
|__InterfaceError
|__DatabaseError
|__DataError
|__OperationalError
|__IntegrityError
|__InternalError
|__ProgrammingError
|__NotSupportedError
|__Error
|__InterfaceError
|__DatabaseError
|__DataError
|__OperationalError
|__IntegrityError
|__InternalError
|__ProgrammingError
|__NotSupportedError
网络编程
低级别
Socket
高级别
SocketServer
语法格式
socket.socket( family,type )
family
AF_UNIX 或 AF_INET
type
SOCK_STREAM 或 SOCK_DGRAM
服务端
1.socket对象
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2.获取本地主机名和设置端口
host = socket.gethostname()
port = 9998
port = 9998
3.绑定端口号
serverSocket.bind((host,port))
4.最大连接数
serverSocket.listen(5)
5.建立客户端连接
clientSocket,addr = serverSocket.accept()
6.构建消息、发送消息
clientSocket.send(msg.encode("utf-8"))
7.关闭资源
clientSocket.close()
客户端
1.socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2.获取本地主机名和设置端口
host = socket.gethostname()
port = 9998
port = 9998
3.连接服务
s.connect((host, port))
4.接收小于 1024 字节的数据
msg = s.recv(1024)
5.释放资源
s.close()
6.打印消息
print(msg.decode('utf-8'))
常用模块
HTTP 网页访问
80
httplib, urllib, xmlrpclib
NNTP 帖子
119
nntplib
FTP 文件传输
20
ftplib, urllib
POP3 接收邮件
110
poplib
IMAP4 获取邮件
143
imaplib
Telnet 命令行
23
telnetlib
Gopher 信息查找
70
gopherlib, urllib
SMTP
发送邮件
语法格式
smtpObj = smtplib.SMTP( host ,port ,host_name )
host
指定主机的ip地址或者域名如:runoob.com,可选参数
port
如果提供 host , 需要指定端口号,默认 25
local_hostname
如果SMTP在你的本机上,只需要指定服务器地址为 localhost
SMTP.sendmail( 发送者地址,发送地址, 消息 )
1.发送者地址和发送地址
sender = 'from@runoob.com'
receiver = ['zhangqilin0906@163.com']
2.创建消息
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("菜鸟教程", 'utf-8') # 发送者
message['To'] = Header("测试", 'utf-8') # 接收者
3.主机ip 和 发送
smtpObj = smtplib.SMTP('10.1.56.182')
smtpObj.sendmail(sender, receiver, message.as_string())
多线程
_thread
语法格式
_thread.start_new_thread ( 线程函数 ,传递给线程的参数、必须是元组 , 可选 )
threading(推荐使用)
包含 _thread 所有模块,还增加其它功能
threading. current_thread()
返回当前的线程变量
threading.enumerate()
返回一个包含正在运行的线程的列表。正在运行指线程启动后、结束前,不包括启动前和终止后的线程
threading.active_count()
返回正在运行的线程数量,与 len(threading.enumerate()) 有相同的结果
threading . Thread( target=线程将要执行的目标函数,args=(目标函数的参数,以元组形式传递),kwargs={目标函数的关键字参数,以字典形式传递},daemon=指定线程是否为守护线程 )
创建Thread类的实例
实例 . start()
启动线程
实例 . join()
等待线程结束
实例 . Lock()
创建锁
. acquire()
获取锁
. release()
释放锁
XML解析
ElementTree
导包
import xml.etree.ElementTree as ET
语法格式
root1 = ET.fromstring(xml_string)
# 可以将包含xml数据的字符串转换为Element对象
tree = ET.parse('E:\pythonProjects\demo01\movies.xml')
# 解析xml文档
root2 = tree.getroot()
title_element = root2.find("title")
# 找具体指定标签的第一个子元素
title_text = title_element.text
# 访问元素的文本内容
book_element = root2.findall("book")
# 找具体指定标签的所子元素
price = book_element.attrib["price"]
# 可以访问元素的属性
root2.remove(title_element)
# 删除元素
new_element = ET.Element("new_element")
# 创建新的元素
new_sub_element = ET.SubElement(root1,"new_sub_element")
# 可以创建具有指定标签的子元素
SAX
一种基于事件驱动的API
解析器和事件处理器
解析器负责读取 XML 文档,并向事件处理器发送事件,如元素开始跟元素结束事件
而事件处理器则负责对事件作出响应,对传递的 XML 数据进行处理
语法格式
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
创建一个 SAX 解析器并解析xml文档
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
创建一个 XML 解析器并解析 xml 字符串
1.自定义类 继承 contenthandler类
startDocument() 方法
文档启动的时候调用。
endDocument() 方法
解析器到达文档结尾时调用。
startElement(name, attrs) 方法
遇到XML开始标签时调用,name 是标签的名字,attrs 是标签的属性值字典。
endElement(name) 方法
遇到XML结束标签时调用。
2.parser = xml.sax.make_parser()
# 创建一个 XMLReader
3.parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# 关闭命名空间
4.Handler = MovieHandler()
parser.setContentHandler( Handler )
# 重写 ContextHandler
5.parser.parse("movies.xml")
DOM
是W3C组织推荐的处理可扩展置标语言的标准编程接口
一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里
导包
from xml.dom.minidom import parse
import xml.dom.minidom
语法格式
DOMTree = xml.dom.minidom.parse("movies.xml")
# 使用minidom解析器打开 XML 文档
collection = DOMTree.documentElement
collection.getElementsByTagName("movie")
collection.hasAttribute("shelf")
JSON
json.dumps()
对数据进行编码
json.loads()
对数据进行解码
日期与时间
导包
import time
时间类
常用函数
time.localtime( 年=2024, 月=3, 日=11, 时=11, 分=30, 秒=3, 星期(周一0~~周天6)=0, 一年的第几日=71, 是否有夏令时=0)
格式化时间
time.asctime(时间)
类似函数
time.ctime
time.strftime(格式,时间)
字符串转时间戳
time.mktime(time.strptime(字符串,格式))
time.perf_counter() # 返回系统运行时间
time.process_time() # 返回进程运行时间
time.process_time() # 返回进程运行时间
time.gmtime()
返回格林威治天文时间下的时间元组t
time.mktime()
接受时间元组并返回时间戳
time.sleep()
睡眠
time.tzset()
初始化时间
time.zone()
本地时区
import calendar
用来处理年历和月历
常用函数
calendar.calendar(year,w=2,l=1,c=6)
返回一个多行字符串格式的 year 年年历
calendar.firstweekday( )
返回当前每周起始日期的设置
calendar.isleap(year)
是闰年返回 True,否则为 False
calendar.leapdays(y1,y2)
返回在Y1,Y2两年之间的闰年总数
calendar.month(year,month,w=2,l=1)
返回一个多行字符串格式的year年month月日历
calendar.monthrange(year,month)
返回两个整数。第一个是该月的星期几,第二个是该月有几天
calendar.monthcalendar(year,month)
返回一个整数的单层嵌套列表
calendar.prcal(year, w=0, l=0, c=6, m=3)
相当于 print(calendar.calendar())
calendar.prmonth(theyear, themonth, w=0, l=0)
相当于 print(calendar.month())
calendar.setfirstweekday(weekday)
设置每周的起始日期码
calendar.timegm(tupletime)
和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间戳
calendar.weekday(year,month,day)
返回给定日期的日期码
MongoDB
导包
import pymongo
语法格式
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
连接数据库
dblist = myclient.list_database_names()
获取数据库名称
mydb = myclient["runoobdb"]
获取指定库的集合
mydb.insert_one(mydict)
添加操作
mydb.insert_many()
插入多个
mydb.find_one()
查询一条
mydb.find()
查询所有、阔号内可以指定字段和条件
mydb.update_one
修改一条
update_many()
修改多条
mydb.delete_one()
删除一条
mydb.delete_many()
删除多个、删除所有
mydb.drop()
删除集合
urllib
urlib.requester
打开和读取url
语法格式
urlib.requester.quote()
编码
urlib.requester.unquote()
解码
urlib.requester.Request(url地址,数据,头部信息)
请求处理
urllib.request.urlopen()
响应结果
对象 . read()
读取网页内容
对象 . readline()
读取一行
对象 . readlines()
读取全部内容
对象 . getcode()
状态码
urlib.error
包含requester抛出的异常
urlib.parse
解析url
语法格式
urllib.parse.urlparse(url路径)
返回 6 个字符串:协议,位置,路径,参数,查询,判断
urlib.robotparser
解析 robts.txt(是一种存放于网站根目录下的 robots 协议,它通常用于告诉搜索引擎对网站的抓取规则) 文件
uWSGI
Math
数学模块
math.acos(x) 返回 x 的反余弦,结果范围在 0 到 pi 之间。
math.acosh(x) 返回 x 的反双曲余弦值。
math.asin(x) 返回 x 的反正弦值,结果范围在 -pi/2 到 pi/2 之间。
math.asinh(x) 返回 x 的反双曲正弦值。
math.atan(x) 返回 x 的反正切值,结果范围在 -pi/2 到 pi/2 之间。
math.atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值,结果是在 -pi 和 pi 之间。
math.atanh(x) 返回 x 的反双曲正切值。
math.ceil(x) 将 x 向上舍入到最接近的整数
math.comb(n, k) 返回不重复且无顺序地从 n 项中选择 k 项的方式总数。
math.copysign(x, y) 返回一个基于 x 的绝对值和 y 的符号的浮点数。
math.cos() 返回 x 弧度的余弦值。
math.cosh(x) 返回 x 的双曲余弦值。
math.degrees(x) 将角度 x 从弧度转换为度数。
math.dist(p, q) 返回 p 与 q 两点之间的欧几里得距离,以一个坐标序列(或可迭代对象)的形式给出。 两个点必须具有相同的维度。
math.erf(x) 返回一个数的误差函数
math.erfc(x) 返回 x 处的互补误差函数
math.exp(x) 返回 e 的 x 次幂,Ex, 其中 e = 2.718281... 是自然对数的基数。
math.expm1() 返回 Ex - 1, e 的 x 次幂,Ex,其中 e = 2.718281... 是自然对数的基数。这通常比 math.e ** x 或 pow(math.e, x) 更精确。
math.fabs(x) 返回 x 的绝对值。
math.factorial(x) 返回 x 的阶乘。 如果 x 不是整数或为负数时则将引发 ValueError。
math.floor() 将数字向下舍入到最接近的整数
math.fmod(x, y) 返回 x/y 的余数
math.frexp(x) 以 (m, e) 对的形式返回 x 的尾数和指数。 m 是一个浮点数, e 是一个整数,正好是 x == m * 2**e 。 如果 x 为零,则返回 (0.0, 0) ,否则返回 0.5 <= abs(m) < 1 。
math.fsum(iterable) 返回可迭代对象 (元组, 数组, 列表, 等)中的元素总和,是浮点值。
math.gamma(x) 返回 x 处的伽马函数值。
math.gcd() 返回给定的整数参数的最大公约数。
math.hypot() 返回欧几里得范数,sqrt(sum(x**2 for x in coordinates))。 这是从原点到坐标给定点的向量长度。
math.isclose(a,b) 检查两个值是否彼此接近,若 a 和 b 的值比较接近则返回 True,否则返回 False。。
math.isfinite(x) 判断 x 是否有限,如果 x 既不是无穷大也不是 NaN,则返回 True ,否则返回 False 。
math.isinf(x) 判断 x 是否是无穷大,如果 x 是正或负无穷大,则返回 True ,否则返回 False 。
math.isnan() 判断数字是否为 NaN,如果 x 是 NaN(不是数字),则返回 True ,否则返回 False 。
math.isqrt() 将平方根数向下舍入到最接近的整数
math.ldexp(x, i) 返回 x * (2**i) 。 这基本上是函数 math.frexp() 的反函数。
math.lgamma() 返回伽玛函数在 x 绝对值的自然对数。
math.log(x[, base]) 使用一个参数,返回 x 的自然对数(底为 e )。
math.log10(x) 返回 x 底为 10 的对数。
math.log1p(x) 返回 1+x 的自然对数(以 e 为底)。
math.log2(x) 返回 x 以 2 为底的对数
math.perm(n, k=None) 返回不重复且有顺序地从 n 项中选择 k 项的方式总数。
math.pow(x, y) 将返回 x 的 y 次幂。
math.prod(iterable) 计算可迭代对象中所有元素的积。
math.radians(x) 将角度 x 从度数转换为弧度。
math.remainder(x, y) 返回 IEEE 754 风格的 x 除于 y 的余数。
math.sin(x) 返回 x 弧度的正弦值。
math.sinh(x) 返回 x 的双曲正弦值。
math.sqrt(x) 返回 x 的平方根。
math.tan(x) 返回 x 弧度的正切值。
math.tanh(x) 返回 x 的双曲正切值。
math.trunc(x) 返回 x 截断整数的部分,即返回整数部分,删除小数部分
模块常量
math.e 返回欧拉数 (2.7182...)
math.inf 返回正无穷大浮点数
math.nan 返回一个浮点值 NaN (not a number)
math.pi π 一般指圆周率。 圆周率 PI (3.1415...)
math.tau 数学常数 τ = 6.283185...,精确到可用精度。Tau 是一个圆周常数,等于 2π,圆的周长与半径之比。
pip命令
pip --version
查看 pip 版本
pip install some-package-name
安装
pip uninstall some-package-name
移除某个包
pip list
查看安装的包
扩展
Anaconda
是一个集成的数据科学和机器学习环境、更方便地在不同环境之间进行切换,环境管理较为简单
operator
比较模块
加法
a + b
add(a, b)
字符串拼接
seq1 + seq2
concat(seq1, seq2)
包含测试
obj in seq
contains(seq, obj)
除法
a / b
truediv(a, b)
除法
a // b
floordiv(a, b)
按位与
a & b
and_(a, b)
按位异或
a ^ b
xor(a, b)
按位取反
~ a
invert(a)
按位或
a | b
or_(a, b)
取幂
a ** b
pow(a, b)
标识
a is b
is_(a, b)
标识
a is not b
is_not(a, b)
索引赋值
obj[k] = v
setitem(obj, k, v)
索引删除
del obj[k]
delitem(obj, k)
索引取值
obj[k]
getitem(obj, k)
左移
a << b
lshift(a, b)
取模
a % b
mod(a, b)
乘法
a * b
mul(a, b)
矩阵乘法
a @ b
matmul(a, b)
取反(算术)
- a
neg(a)
取反(逻辑)
not a
not_(a)
正数
+ a
pos(a)
右移
a >> b
rshift(a, b)
切片赋值
seq[i:j] = values
setitem(seq, slice(i, j), values)
切片删除
del seq[i:j]
delitem(seq, slice(i, j))
切片取值
seq[i:j]
getitem(seq, slice(i, j))
字符串格式化
s % obj
mod(s, obj)
减法
a - b
sub(a, b)
真值测试
obj
truth(obj)
比较
a < b
lt(a, b)
比较
a <= b
le(a, b)
相等
a == b
eq(a, b)
不等
a != b
ne(a, b)
比较
a >= b
ge(a, b)
比较
a > b
gt(a, b)
requeset
语法格式
delete(url, args)
发送 DELETE 请求到指定 url
get(url, params, args)
发送 GET 请求到指定 url
reponse = requests.get(url)
reponse . headers
状态码
reponse . content
头部信息
reponse . status_code
内容
reponse . text
内容
apparent_encoding 编码方式
close() 关闭与服务器的连接
content 返回响应的内容,以字节为单位
cookies 返回一个 CookieJar 对象,包含了从服务器发回的 cookie
elapsed 返回一个 timedelta 对象,包含了从发送请求到响应到达之间经过的时间量,可以用于测试响应速度。比如 r.elapsed.microseconds 表示响应到达需要多少微秒。
encoding 解码 r.text 的编码方式
headers 返回响应头,字典格式
history 返回包含请求历史的响应对象列表(url)
is_permanent_redirect 如果响应是永久重定向的 url,则返回 True,否则返回 False
is_redirect 如果响应被重定向,则返回 True,否则返回 False
iter_content() 迭代响应
iter_lines() 迭代响应的行
json() 返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)
links 返回响应的解析头链接
next 返回重定向链中下一个请求的 PreparedRequest 对象
ok 检查 "status_code" 的值,如果小于400,则返回 True,如果不小于 400,则返回 False
raise_for_status() 如果发生错误,方法返回一个 HTTPError 对象
reason 响应状态的描述,比如 "Not Found" 或 "OK"
request 返回请求此响应的请求对象
status_code 返回 http 的状态码,比如 404 和 200(200 是 OK,404 是 Not Found)
text 返回响应的内容,unicode 类型数据
url 返回响应的 URL
head(url, args)
发送 HEAD 请求到指定 url
patch(url, data, args)
发送 PATCH 请求到指定 url
requests.post(url, data={ 字典、元组列表、字节或文件对象 }, json={key: value}, args)
发送 POST 请求到指定 url
put(url, data, args)
发送 PUT 请求到指定 url
request(method, url, args)
向指定的 url 发送指定的请求方法
Random
随机模块
seed()
初始化随机数生成器
getstate()
返回捕获生成器当前内部状态的对象。
setstate()
state 应该是从之前调用 getstate() 获得的,并且 setstate() 将生成器的内部状态恢复到 getstate() 被调用时的状态。
getrandbits(k)
返回具有 k 个随机比特位的非负 Python 整数。 此方法随 MersenneTwister 生成器一起提供,其他一些生成器也可能将其作为 API 的可选部分提供。 在可能的情况下,getrandbits() 会启用 randrange() 来处理任意大的区间。
randrange()
从 range(start, stop, step) 返回一个随机选择的元素。
randint(a, b)
返回随机整数 N 满足 a <= N <= b。
choice(seq)
从非空序列 seq 返回一个随机元素。 如果 seq 为空,则引发 IndexError。
choices(population, weights=None, *, cum_weights=None, k=1)
从 population 中选择替换,返回大小为 k 的元素列表。 如果 population 为空,则引发 IndexError。
shuffle(x[, random])
将序列 x 随机打乱位置。
sample(population, k, *, counts=None)
返回从总体序列或集合中选择的唯一元素的 k 长度列表。 用于无重复的随机抽样。
random() 返回 [0.0, 1.0)
范围内的下一个随机浮点数。
uniform()
返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a 。
triangular(low, high, mode)
返回一个随机浮点数 N ,使得 low <= N <= high 并在这些边界之间使用指定的 mode 。 low 和 high 边界默认为零和一。 mode 参数默认为边界之间的中点,给出对称分布。
betavariate(alpha, beta)
Beta 分布。 参数的条件是 alpha > 0 和 beta > 0。 返回值的范围介于 0 和 1 之间。
expovariate(lambd)
指数分布。 lambd 是 1.0 除以所需的平均值,它应该是非零的。
gammavariate()
Gamma 分布( 不是伽马函数) 参数的条件是 alpha > 0 和 beta > 0。
gauss(mu, sigma)
正态分布,也称高斯分布。 mu 为平均值,而 sigma 为标准差。 此函数要稍快于下面所定义的 normalvariate() 函数。
lognormvariate(mu, sigma)
对数正态分布。 如果你采用这个分布的自然对数,你将得到一个正态分布,平均值为 mu 和标准差为 sigma 。 mu 可以是任何值,sigma 必须大于零。
normalvariate(mu, sigma)
正态分布。 mu 是平均值,sigma 是标准差。
vonmisesvariate(mu, kappa)
冯·米塞斯分布。 mu 是平均角度,以弧度表示,介于0和 2*pi 之间,kappa 是浓度参数,必须大于或等于零。 如果 kappa 等于零,则该分布在 0 到 2*pi 的范围内减小到均匀的随机角度。
paretovariate(alpha)
帕累托分布。 alpha 是形状参数。
weibullvariate(alpha, beta)
威布尔分布。 alpha 是比例参数,beta 是形状参数。
statistics
提供了许多基本统计计算的函数、可以帮助我们分析和计算数据集的统计特征
statistics.harmonic_mean()
计算给定数据集的调和平均值
statistics.mean()
计算数据集的平均值
statistics.median()
计算数据集的中位数
statistics.median_grouped()
计算给定分组数据集的分组中位数
statistics.median_high()
计算给定数据集的高位中位数
statistics.median_low()
计算给定数据集的低位中位数
statistics.mode()
计算数据集的众数(出现频率最高的值)
statistics.pstdev()
计算给定数据集的样本标准偏差
statistics.stdev()
计算数据集的标准差
statistics.pvariance()
计算给定数据集的样本方差
statistics.variance()
计算数据集的方差
statistics.quantiles()
计算数据集的分位数,可指定分位数的数量(默认为四分位数)
hashlib
提供了常见的哈希算法的实现
语法格式
hashlib . md5(b"字符串")
digest()
二进制表示哈希值
hexdigest()
十六进制表示哈希值
md5(不安全)、sha1(不安全)、sha224(低)、sha256(中等)、sha512(高)、sha384(高)、sha3_224(高)、sha3_256(高)、sha3_512(高)、sha3_384(高)、shake_128(高)、shake_256(高)
量化
下载包
pip install pandas yfinance matplotlib
Pandas
是一个功能强大的开源数据处理和分析库,专门设计用于高效地进行数据分析和操作
yfinance
是一个用于获取金融数据的库,支持从 Yahoo Finance 获取股票、指数和其他金融市场数据
Matplotlib
是一个二维绘图库,用于创建静态、动态和交互式的数据可视化图表
语法格式
1.根据股票代码、开始时间和结束时间下载数据
data = yf.download(symbol, start=start_date, end=end_date)
2.展示
data.head()
3.可视化
绘制股票走势图
data['Close'].plot(figsize=(10, 6), label=symbol)
plt.title(f"{symbol} Stock Price")
plt.xlabel("Date")
plt.ylabel("Price")
plt.legend()
plt.show()
pyecharts
数据可视化库
pip install pyecharts
源码安装
$ git clone https://github.com/pyecharts/pyecharts.git
$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install
# 或者执行 python install.py
0 条评论
下一页