标签归档:Python解决方案

Python 流程图 — 一键转化代码为流程图

Graphviz是一个可以对图进行自动布局的绘图工具,由贝尔实验室开源。我们在上次 Python 快速绘制画出漂亮的系统架构图 提到的diagrams,其内部的编排逻辑就用到了这个开源工具包。

而今天我们要介绍的项目,就是基于Python和Graphviz开发的,能将源代码转化为流程图的工具:pycallgraph

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

输入以下命令安装 pycallgraph 模块。

pip install pycallgraph

看到 Successfully installed xxx 则说明安装成功。除此之外,你还需要安装graphviz

macOS用户请使用brew安装:

brew install graphviz

windows用户请点击链接:graphviz-2.38.msi 下载安装,安装完成后需要将其写入到环境变量中:

2.生成流程图

该模块有两种调用方式,一种是在代码里通过上下文调用:

from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput

with PyCallGraph(output=GraphvizOutput()):
    # 需要绘制流程图的代码,可以是函数
    # ... ...

比如说,绘制一下咱上回的《Python 我的世界》源代码的流程图:

# ...省略大部分代码...
if __name__ == '__main__':
    from pycallgraph import PyCallGraph
    from pycallgraph.output import GraphvizOutput

    with PyCallGraph(output=GraphvizOutput()):
        main()

在运行该Python文件后,会在当前文件夹下产生一个pycallgraph.png的文件,这个就是该代码的流程图:

还有一种是使用命令的方式调用,这个方式必须使用bash才能运行,macOS用户可以忽视这个问题,但如果你是windows用户,请通过以下方式打开bash(以VS Code为例):

然后通过Ctrl + shift + ` 打开一个新的终端,即可看到以bash启动的命令行。

通过输入以下命令生成流程图:

pycallgraph graphviz -- ./你需要生成流程图的.py文件

完成后会在当前文件夹下生成一个pycallgraph.png的文件,这个就是这份代码的流程图。

通过这个方法,你可以清晰地看到这份源代码里面的调用逻辑和其每个模块的运行时间,是一个很方便的小工具,非常适合初学者学习他人的开源模块。大家有需要研究的代码可以用这个工具试一试,说不定有意外的收获呢。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 量化投资实战教程(3) —A股回测MACD策略

量化投资系列文章:

Backtrader 教程 — Python 量化投资原来这么简单(1)

Python 量化投资原来这么简单(2) —MACD策略(+26.9%)

Python 量化投资原来这么简单(3) —A股回测MACD策略

Github仓库:https://github.com/Ckend/pythondict-quant


上一回,我们基于简单的MACD策略回测了华正新材这只股票的收益率,发现效果非常好,收益达到了26.9%,但这个策略放到其他股票上会不会有这么高的收益呢?我们今天就来试试看这个策略在不考虑基本面,只考虑技术面的情况下,在A股上的平均表现。

为了回测该策略在A股上的平均表现,我们从A股随机选取了1000只股票,使用MACD策略回测其2010年1月1日至今,使用MACD策略进行投资的表现。其中,以一万元作为本金,佣金为万分之五,每次交易100股。

最终发现,使用该策略最终亏损的股票有626只,盈利的有372只,有2只股票数据不足被去除。最高盈利有84%,最差亏损也达-34%。盈利超过10%的股票有30只,亏损超过30%的有29只。并总结了这30只盈利超过10%的股票的特点。

下面是用Python和backtrader分析这些股票的详细教程。在公众号后台回复:量化投资3 可获得本文全部代码及数据。本系列文章github仓库:
https://github.com/Ckend/pythondict-quant

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

在终端输入以下命令安装我们所需要的依赖模块:

pip install backtrader

看到 Successfully installed xxx 则说明安装成功。

2.改造策略

最方便的回测股票数据的形式是将股票数据存储在MySQL数据库中,每次回测从数据库中拉取数据即可。但为了能够方便地让大家复现实验,我们将这些股票的数据以文件的形式存储下来。

策略上,我们不需要做改变,但是需要将运行策略的这一部分封装起来,用于批量执行策略:

def run_cerebro(stock_file, result):
    """
    运行策略
    :param stock_file: 股票数据文件位置
    :param result: 回测结果存储变量
    """
    
    cerebro = bt.Cerebro()

    cerebro.addstrategy(TestStrategy)

    # 加载数据到模型中
    data = bt.feeds.GenericCSVData(
        dataname=stock_file,
        fromdate=datetime.datetime(2010, 1, 1),
        todate=datetime.datetime(2020, 4, 25),
        dtformat='%Y%m%d',
        datetime=2,
        open=3,
        high=4,
        low=5,
        close=6,
        volume=10,
        reverse=True
    )
    cerebro.adddata(data)

    # 本金10000,每次交易100股
    cerebro.broker.setcash(10000)
    cerebro.addsizer(bt.sizers.FixedSize, stake=100)

    # 万五佣金
    cerebro.broker.setcommission(commission=0.0005)

    # 运行策略
    cerebro.run()

    # 剩余本金
    money_left = cerebro.broker.getvalue()

    # 获取股票名字
    stock_name = stock_file.split('\\')[-1].split('.csv')[0]

    # 将最终回报率以百分比的形式返回
    result[stock_name] = float(money_left - 10000) / 10000

然后遍历所有股票,运行策略,结果保存在result变量中:

files_path = 'stocks\\'
result = []

# 遍历所有股票数据
for stock in os.listdir(files_path):
    modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
    datapath = os.path.join(modpath, files_path + stock)
    print(datapath)
    try:
        run_cerebro(datapath, result)
    except Exception as e:
        print(e)

最后,我们使用pickle将变量结果保存为文件,以方便后续分析:

f = open('./batch_macd_result.txt', 'wb')
pickle.dump(result, f)
f.close()

随后,我们就可以随意分析这个结果,而不用重新跑一遍策略了。

3.结果分析

接下来,使用最简单的方法分析结果:

import pickle

# 加载保存的结果
f = open('./batch_macd_result.txt', 'rb')
data = pickle.load(f)
f.close()

# 计算
pos = []
neg = []
ten_pos = []
ten_neg = []
for result in data:
    res = data[result]
    if res > 0:
        pos.append(res)
    else:
        neg.append(res)

    if res > 0.1:
        ten_pos.append(result)
    elif res < -0.1:
        ten_neg.append(result)

max_stock = max(data, key=data.get)

print(f'最高收益的股票: {max_stock}, 达到 {data[max_stock]}')
print(f'正收益数量: {len(pos)}, 负收益数量:{len(neg)}')
print(f'+10%数量: {len(ten_pos)}, -10%数量:{len(ten_neg)}')
print(f'收益10%以上的股票: {ten_pos}')

随机抽取的1000千股票,回测结果如下:

D:\CODE\stock\backtrader&gt;python analysis.py
最高收益 600745.SH, 达到 0.8413365999999998
正收益数量: 372, 负收益数量:626
+10%数量: 30, -10%数量:29
收益10%以上的股票: ['000403.SZ', '000858.SZ', '002271.SZ', '002311.SZ', '002475.SZ', '002555.SZ', '002568.SZ', '002605.SZ', '002714.SZ', '300007.SZ', '300136.SZ', '300220.SZ', '300347.SZ', '300476.SZ', '300482.SZ', '300566.SZ', '300601.SZ', '300613.SZ', '300630.SZ', '300725.SZ', '600570.SH', '600585.SH', '600745.SH', '601231.SH', '601799.SH', '603297.SH', '603378.SH', '603655.SH', '603737.SH', '603823.SH']

显然,在不考虑基本面的情况下,该策略的收益并不高,因此不建议用该策略进行A股整体回测并作交易。但是我们可以观察一下收益10%以上的股票的基本面特点。

你会发现大部分使用MACD策略收益10%以上的股票,其同比年利润增长都是大于0的,只有2只股票例外。此外,大部分股票平均年利润同比增长都在20%到30%左右,而且不会有太大的波动。

所以,MACD策略只有在股票的基本面优秀的情况下,才能发挥最大的价值。而在股票基本面比较差的情况下,这个策略的表现非常差,因此对于投机者而言,它并不是一个好的策略,但是对于价值投资者而言,其具备一定的参考价值。

好了,我们关于MACD策略的分析就到这里,如果大家有进一步的兴趣的话,记得关注Python实用宝典哦,我们将每周更新一期量化投资相关的推送,希望大家喜欢,本文的代码及数据,请在公众号后台回复:量化投资3 下载。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

人人都能懂的 Python 自动发送邮件详细实战教程

自动发送邮件能应用于许多场景中,比如我想要知道股票策略中的股票池是否有实时的更新,这时候如果再拉一遍数据,跑一遍脚本,实在是太浪费时间了。为什么不把这一套流程放到服务器上,然后到点自动运行并发送邮件呢?

类似的应用场景还有很多,不仅仅是在股票策略提醒上,比如定时向某些人发送邮件;还比如网站宕机了,实时发送邮件提醒;又比如网站负载过高,发送邮件提醒……等等。

下面就来讲讲怎么用Python构建一个自动发送邮件的脚本。

1.开启SMTP服务

为了实现自动发送邮件的目的,我们需要在邮箱中开启SMTP服务:

这点很关键,别忘了去开启SMTP, 别忘了去开启SMTP,否则邮件是无法发送成功的 。然后你还需要点击下面生成授权码,这个授权码才是使用Python发送邮件时的真正密码。

邮箱设定成功后,就可以开始脚本开发了。

2.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

在终端输入以下命令安装我们所需要的依赖模块:

pip install yagmail

看到 Successfully installed xxx 则说明安装成功。本文全部源代码可在公众号后台回复:自动发送邮件 获得。

3.编写脚本

今天需要用到的模块是yagmail,一个非常方便的Python邮件发送模块,用这个模块,你甚至能一行命令发送邮件:

yag = yagmail.SMTP(
    host='smtp.qq.com', user='你的邮箱',
    password='你的授权码', smtp_ssl=True
).send('发送对象', '主题', '内容')

为了让这个发送邮件的方法更加具备可用性,我们将其封装到一个类中:

import yagmail 
class Mail:
    """
    邮件相关类
    """ 
    def sendmail(self, msg, title, receivers):
        """
        发送邮件
        
        Arguments:
            msg {str} -- 邮件正文
            title {str} -- 邮件标题
            receivers {list} -- 邮件接收者,数组
        """

        yag = yagmail.SMTP(
            host='smtp.qq.com', user='你的邮箱',
            password='你的鉴权码', smtp_ssl=True
        )

        try:
            yag.send(receivers, title, msg)
            print("邮件发送成功")

        except BaseException as e:
            print (e)
            print("Error: 无法发送邮件") 

这个类里还可以封装很多其他东西,比如log函数,用于显示时间:

import time
class Mail:
    """
    邮件相关类
    """

    def log(self, content):
        now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        print(f'{now_time}: {content}')

这样,需要显示时间的时候只需要调用self.log即可,可将sendmail函数改成如下所示:

    def sendmail(self, msg, title, receivers):
        """
        发送邮件
        
        Arguments:
            msg {str} -- 邮件正文
            title {str} -- 邮件标题
            receivers {list} -- 邮件接收者,数组
        """

        yag = yagmail.SMTP(
            host='smtp.qq.com', user='你的邮箱',
            password='你的鉴权码', smtp_ssl=True
        )

        try:
            yag.send(receivers, title, msg)
            self.log("邮件发送成功")

        except BaseException as e:
            print (e)
            self.log("Error: 无法发送邮件")

发送成功时显示:

PS D:\CODE\stock\api> python .\sendmail_yagmail.py
2020-04-22 00:51:34: 邮件发送成功

4.小例子

将刚刚编写完的类保存为sendmail.py,接下来就可以尝试一个小例子。我们用一个自动监控网站是否宕机的小脚本做示例:

import time
import requests
from sendmail import Mail

while True:
    response = requests.get('https://pythondict.com')

    # 根据状态码判断网站是否正常
    if response.status_code != 200:
        Mail().sendmail(
            '哥, pythondict挂了', 'Python实用宝典网站异常监控', ['你的邮箱']
        )

    time.sleep(600)

通过requests.get请求网站,使用response.status_code即可得到状态码,200为正常,其他情况均为异常。这个检测每十分钟运行一次,因此 time.sleep(600).

就这样,我们构建起了一个非常简单的网站异常监控脚本,如果你真的要在服务器上运行这个脚本,请记得使用nohup让其在后台运行:

nohup python test.py &

总之,自动发送邮件的用途非常广泛,不亚于手机自动通知,具体使用就要看各位自身的需求啦。

自动通知系列文章:

让Python自动提醒你:阿森纳进球啦!

Python 自动发送邮件详细教程

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

网飞公司(Netflix)是怎么用Python的?

本文译自网飞科技博客,原文:
https://netflixtechblog.com/python-at-netflix-bba45dae649e?gi=83b411a8aff

Netflix(网飞)是全球最大的视频流媒体平台,在除中国大陆地区之外的所有国家和地区都提供视频点播服务。Netflix是经营在线业务公司中的一个亮点。它成功地把传统的影像租赁业务和现代化的市场营销手段、先进的IT网络技术结合起来,从而开创了在线影像租赁的新局面。Netflix通过整合其自身的营销手段和最近的IT网络技术,成功地改变了消费习惯和打造了自己的品牌优势。

Netflix的技术本质上就是回答两个问题:

1. 如何提升用户观看体验?

2. 如何在内容上让用户喜欢?

而这两个问题,在Python的帮助之下,交了一份令人满意的答卷,让我们一起来看看 Python 在 Netflix 是如何应用的。

1.加快视频分发速度

为了加快视频的分发速度,网飞开发了一个名为 Open Connect 的内容分发网络(content delivery network,CDN),尽可能靠近用户,为客户改善流媒体体验,加快视频的下载速度。

而设计、构建和运营这个 CDN 基础设置所需的各种软件系统,其中很多都是用 Python 编写的。其有一个配置信息管理系统,里面跟踪网飞的网络设备库存:有哪些设备、哪些型号,用什么硬件组件,都位于什么位置。这些设备的配置由几个其他系统控制,包括数据源、设备配置的应用和备份。用于收集运行状况和其他运营数据的设备交互是另一个 Python 应用程序。

2.快速解决运营需求

网飞还用Python负责处理Netflix云的区域故障转移,流量管理,容量运营管理(管理内容可以维修的限制)等内容,使用的Python模块大致如下:

NumPy和SciPy

NumPy和SciPy是用于科学计算的库。Netflix使用这些Python库来执行数值分析,从而允许管理区域故障转移。

Boto3

Boto3是适用于Python的AWS(Amazon Web Services)的软件开发工具包(SDK)。这有助于Python开发人员将Python集成到AWS中,从而允许在基础架构中进行开发。

RQ(Redis队列)

这是一个Python库,可帮助跟踪队列中存在的任务并允许其执行,从而允许管理异步工作负载。

Flask

最后,Netflix使用Flask(Python Web开发库)API将所有先前的功能绑定在一起。

他们的工具主要是由 Python 构建的。编排故障转移的服务使用 numpy 和 scipy 来执行数值分析,boto3 对 AWS 基础设施进行更改,rq 用于运行异步工作负载,将其打包在一个 Flask API 的简单接口层中。放入 bpython shell 并进行临时制作的能力已经不止一次挽救了局面。

( bpython是一个不错的Python解释器的界面,开发者的目的是提供给用户所有的内置功能,很像现在的IDE(集成开发环境),但是将这些功能封装在在一个简单,轻量级的包里,可以在终端窗口里面运行,弥补原始解释器的不足。)

3.警报与统计、 自动修复

他们还用警报和统计分析工作中使用 Python。警报系统显示问题时,他们使用Python的许多统计和数学库(如 numpy、scipy、ruptures、pandas)来帮助自动分析 1000 多个相关信号。并开发了一个用于团队内外的时间序列相关系统 Spectator Python,以及分布式工作系统,用于并行处理大量的分析工作,以快速交付结果。

除此之外,他们也经常用Python来自动化任务、数据挖掘和清理的工具,也是可视化工作的方便工具。

4.信息安全

网飞信息安全团队使用 Python 为 Netflix 实现了许多高层次目标:安全自动化、风险分类、自动修复和漏洞识别等等。利用 Python 来保护使用 Bless 的 SSH 资源、利用 Python 帮助使用 Repokid 进行 IAM 权限调整、使用 Python 来帮助Lemur 生成 TLS 证书等等。

5.个性化推荐

说起个性化算法,当然少不了机器学习和深度学习。他们使用 Python 来训练一些 Netflix 影响用户体验关键方面的机器学习模型,如决策树、XGBoost等,而且在开发过程中,实现了一套自动化流程。

6.优化Python极限

为了使得生产效率提高,他们还利用机器学习开发了一个叫Metafolw的Python框架。这个框架提升了 Python 的极限,通过良好的设计和对Python代码的部分改造,成功实现了使用Python来获取几十G数据的可能性,大大提升了计算能力。

7.大数据编排

为了更好地编排大数据,他们还构建了一个用Python编写的事件驱动型平台,将许多个系统统一到该工具中,转化成事件流的形式进行调度,并具有模板化的作业类型。

因此,他们能够随时解耦微服务,而且通过这个平台,他们能够了解数据的流动状况,以及发生的所有事情。当然,Netflix 的系统之所以能够如此稳定,还有更多的技术因素在里面,这里就不能够再赘述了。有兴趣可以看看下面这本书。

《 混沌工程:Netflix系统稳定性之道 [Chaos Engineering]


文中涉及到的部分项目、库的官方地址:

Open Connect: https://openconnect.netflix.com/en/

bpython: https://bpython-interpreter.org/

nteract: https://nteract.io/

visualization tools: https://github.com/nteract/nteract/tree/master/packages/data-explorer

Spectator: https://github.com/Netflix/spectator-py

Security Monkey: https://github.com/Netflix/security_monkey

Bless: https://github.com/Netflix/bless

我们的文章到此就结束啦,如果你喜欢我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 免登录微博数据爬虫(仅研究使用)

微博数据是非常有价值的数据,这些数据可以用作我们进行一些系统开发时的数据源, 比如前段时间发过的:Python 短文本识别个体是否有自杀倾向,在此文中,我们使用微博绝望树洞的数据,利用SVM做了一个简单的自杀倾向识别模型。

当然,微博数据的应用还不仅如此,如果你大胆详细,大胆猜测,将会有许多可以利用这些数据进行研究的机会。不过, 技术是把双刃剑,有好有坏,我不希望各位拿着这个爬虫去做一些违反道德、法律的事情,应用于好的事务,才是技术诞生的初衷。

本文讲的是以用户为单位的爬虫,如果你希望能够定制自己需要的爬虫,请看这篇教程:Python 爬取微博树洞详细教程

1.准备

其实免登录的原理很简单,就是通过手机版的微博绕过其登录验证,大家可以用手机网页打开这个网址,你会发现其实大部分微博在你不登录的情况下都是可见的:
https://m.weibo.cn/u/2075686772

可见即可爬。因此,我们只需要调用这个微博数据的json接口即可获取到数据。不过我们不要一上来就直接撸代码,要善于利用Python开源社区的特点,上网上找相关的现成的成熟轮子,而不是自己动手做一个半成熟版,这样能节省许多时间。

经过一番搜索,我找到了这个免Cookie版的微博爬虫,dataabc开发的:
https://github.com/dataabc/weibo-crawler

其代码思路与我想的差不多,只需要调用json的数据接口即可获取数据:

下载该开源项目,可以上该网页直接Download, 也可以使用git:

git clone https://github.com/dataabc/weibo-crawler.git

如果你两个都不会,没关系,Python实用宝典后台回复 微博采集工具 即可下载。

2.配置采集参数

在开始采集数据前,你需要确保电脑上已经安装了Python,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

安装完Python后,Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal).

进入我们刚下载好的文件夹,输入以下命令安装所需要的模块:

pip install -r requirements.txt

看到许多个 Successfully installed xxx 则说明安装成功。

2.1 找到你需要爬的用户ID

点开你希望爬取的用户主页,然后查看此时的url,你会发现有一串数字在链接中,这个就是我们要用到的userID, 复制即可。

如果不是一串数字,可以点开任一条微博评论的页面,这时候上面的链接一定会有串数字,如果还是没有,就上手机版的微博页面找,这种时候就需要耐心和多尝试了。

2.2 修改config.json

获得用户的userID后,需要将ID写入到config.json的user_id_list数组中,如图所示:

其他参数如:
filter:控制爬取范围,值为1代表爬取全部原创微博,值为0代表爬取全部微博(原创+转发)
since_date: 爬取该日期之后的时间
write_mode: 写入的文件格式

下面的分别是:是否下载原创微博图片、是否下载转发微博图片、是否下载原创视频、是否下载转发的视频,如果为1则是,为0则为否。再往后如果你需要写入数据库,还可以配置MySQL或MongoDB的连接参数。

3.开始采集

配置好了以后,采集就很简单了,你只需要用CMD或Terminal进入该文件夹,输入:

python weibo.py

即可进行数据采集。采集结束后,如果你设定的是保存为csv文件,则会在当前文件夹下的weibo文件夹里产生一个名为该微博用户名的数字.csv文件,如:

weibo\阿森纳足球俱乐部\2075686772.csv

这个文件里就是你想要的数据。

该开源模块设计的功能其实非常完善,你看看下面这个列表就知道了。

真的太贴心辣,必须得感谢这位开源作者,如果你喜欢的话,记得上去他的仓库给他点个star哦!

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

编程零基础如何在半年内熟练掌握python?

这个问题是在知乎上遇到的,我觉得特别有意义,所以单独发篇推送来讲讲我的看法。不过这个问题得看我们如何定义熟练掌握了,如果你只是想会写爬虫,独立编写办公小程序,按照我下面的步骤进行学习,半年是有可能的。

如果是想用Python来找工作的话,半年还是有难度的,需要多做点项目,熟练掌握Python的一些特点,尤其是一些面向对象的编程方法。

学Python最重要的就是学会用别人已经造好的轮子进行快速而又高效的开发,可以从应用练习入手,再到一些数据分析的项目,最后如果能自己学会熟练使用TensorFlow或PyTorch或者Web开发框架Django,基本超越了绝大部分人了。

1.基础学习

阅读《Think Python》或者廖雪峰的Python教程。 读完前八章,到面向对象编程即可,后续的知识可以在不断的实操训练中学习。

不过,如果你的目标是找到工作,那建议全部阅读完,而且还要加增学习:《Python核心编程》。如果你访问不了github,可以关注Python实用宝典公众号,后台回复:核心编程

2.应用练习

基础学习完毕后,就要开始练习一些简单的实操性项目巩固学习,Python实用宝典过去的许多文章其实都是这样的简单实操性项目,非常适合大家用来熟练掌握一些包的应用。

比如打水印:超简单Python安全批量打水印教程!

提取音乐高潮:Python 制作音乐高潮副歌提取器

文献搜索工具:你不得不知道的python超级文献搜索工具

向手机发送通知:教你如何使用Python向手机发送通知(IFTTT)

爬虫练习:Python 爬取“微博树洞”详细教程

然后是用微博树洞做数据分析:Python 短文本自动识别个体是否有自杀倾向

哄哄女朋友:Python导出微信聊天记录并生成词云

3.进阶学习

进阶学习,就要深入学习一些框架。深度学习的,有TensorFlow和pyTorch,甚至Keras也是不错的选择。当然,也可以尝试一些更上层的框架,比如paddlehub:

检测人脸是否佩戴口罩:20行代码检测人脸是否佩戴口罩

Web开发,可以考虑Django和Flask框架,我们有用过Django开发一个简单的网站:
Django:Python 快速开发高潮音乐提取网

如果你只是想成为超级极客,可以看看这些文章: 

树莓派+智能音箱:Python声控普通风扇Python声控开机

树莓派+摄像头:Python人脸识别开机

Python 深度学习图像风格迁移

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 绘制悼念的词云蜡烛

谨以此文悼念伟大的李文亮医生。

《有的人》— 臧克家
有的人活着,他已经死了。
有的人死了,他还活着。
有的人,骑在人民头上:“啊,我多伟大!”。
有的人,俯下身子给人民当牛马。
有的人,把名字刻入石头,想“不朽”。
有的人,情愿作野草,等着地下的火烧。
有的人,他活着别人就不能活。
有的人,他活着为了多数人更好地活。
骑在人民头上的,
人民把他摔垮。
给人民作牛马的,
人民永远记住他!
把名字刻入石头的,
名字比尸首烂得更早;
只要春风吹到的地方,
到处是青青的野草。
他活着别人就不能活的人,
他的下场可以看到;
他活着为了多数人更好地活着的人,
群众把他抬举得很高,很高。

无奈才学疏浅,无法用更多的语言描述我对他的敬意。但是作为程序员,我也有我的悼念方式:用代码绘制词云组成的蜡烛用以悼念。

1.准备

基于Python,绘制悼念的词云蜡烛我们需要用到的包有:

  • pip install matplot
  • pip install scipy==1.2.1
  • pip install wordcloud
  • pip install jieba
  • pip install codecs
  • pip install pandas
  • pip install numpy

打开CMD/Terminal 输入以上命令即可安装。如果你还没有安装Python,可以阅读此篇文章:超详细Python安装指南

然后需要找到生成词云的文本和相关图片,这里我用的是BBC的一篇报道,还有这张蜡烛图片:

来源:图品汇

2.编写代码

整体代码如下,我编写了非常详细的注释,大家不懂得可以根据注释的提示进行查询和学习。

# coding:utf-8
import jieba
import numpy
import codecs
import pandas
import matplotlib.pyplot as plt
from scipy.misc import imread
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
from wordcloud import WordCloud
  
def load_file_segment():
    # 加载我们自己的词典
    jieba.load_userdict("mywords.txt")
    # 读取文本文件并分词
    f = codecs.open(u"text.txt",'r',encoding='utf-8')
    # 打开文件
    content = f.read()
    # 读取文件到content中
    f.close()
    # 关闭文件
    segment=[]
    # 保存分词结果
    segs=jieba.cut(content) 
    # 对整体进行分词
    for seg in segs:
        if len(seg) &gt; 1 and seg != '\r\n':
            # 如果说分词得到的结果非单字,且不是换行符,则加入到数组中
            segment.append(seg)
    return segment
 
def get_words_count_dict():
    segment = load_file_segment()
    # 获得分词结果
    df = pandas.DataFrame({'segment':segment})
    # 将分词数组转化为pandas数据结构
    words_count = df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size})
    # 按词分组,计算每个词的个数
    words_count = words_count.reset_index().sort_values(by="计数",ascending=False)
    # reset_index是为了保留segment字段,排序,数字大的在前面
    return words_count
 
words_count = get_words_count_dict()
# 获得词语和频数

bimg = imread('candle.jpeg')
# 读取我们想要生成词云的模板图片
wordcloud = WordCloud(background_color='white', mask=bimg, font_path='simsun.ttc')
# 获得词云对象,设定词云背景颜色及其图片和字体
 
# 如果你的背景色是透明的,请用这两条语句替换上面两条 
# bimg = imread(candle.jpeg')
# wordcloud = WordCloud(background_color=None, mode='RGBA', mask=bimg, font_path='simhei.ttc')
 

words = words_count.set_index("segment").to_dict()
# 将词语和频率转为字典
wordcloud = wordcloud.fit_words(words["计数"])
# 将词语及频率映射到词云对象上
bimgColors = ImageColorGenerator(bimg)
# 生成颜色
plt.axis("off")
# 关闭坐标轴
plt.imshow(wordcloud.recolor(color_func=bimgColors))
# 绘色
plt.show()

其中candle.jpeg是位于当前文件夹的蜡烛文件,simhei.ttc是位于当前文件夹的字体文件,mywords.txt是我自己生成的词表,text.txt便是用于生成词云的文本。

以上全部文件和源代码我都已上传到公众号后台,回复:悼念蜡烛 即可下载。

3.生成蜡烛词云

我将这份源代码命名为candle.py, 通过在命令行中运行:

python candle.py

即可获得该蜡烛词云

中华民族需要永远记住李文亮医生。


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 9行代码批量翻转壁纸的惊喜

今天在欣赏一些新的手机壁纸的时候,不小心把手机拿反了,但是却因此偶然看到了非常有特色的图片。因此突然有了推送的灵感——用Python批量翻转图片

其实原理很简单,用九行代码就能完成我们所需要的功能。

1.准备

为了能够翻转图片,我们需要先安装好PIL,也就是pillow,在CMD/Terminal输入:

pip install pillow

请记得先安装Python,才能够pip,如果你还没有安装Python,请看这篇文章: 超详细Python安装指南

2.编程

仅需要3个步骤:

1.获得图片文件夹下所有文件名

2.迭代所有图片

3.翻转保存到指定文件夹

#-*- coding: UTF-8 -*- 

from PIL import Image
import os

# 获得文件夹下所有文件
filePath = './imgs/'
filenames = os.listdir(filePath)

# 指定保存的文件夹
outputPath = './imgs_rotate/'

# 迭代所有图片
for filename in filenames:
    # 读取图像
    im = Image.open(filePath + filename)

    # 指定逆时针旋转的角度
    im_rotate = im.rotate(180)
    
    # 保存图像
    im_rotate.save(outputPath + filename) 

3.效果

嘻嘻,其实也是相当于壁纸分享了,当然,微信公众号会有压缩的现象,大家如果想下载原图请点击下方阅读原文,或者关注文章最下方Python实用宝典公众号,回复 翻转壁纸

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

教你怎么用 Python 自动一键整理文件

Python 自动整理文件是一个非常容易实现的工具。以前,我经常习惯性地把下载下来的东西放在桌面或者下载文件夹中,使用完后再也没管它,久而久之桌面便变得乱七八糟到后面再整理的时候就非常痛苦了,巴不得有一个自动整理的工具帮我归类文档。

不知道你是不是有过跟我一样糟糕的体验,不过,我们现在完全可以用Python做一个这样的工具来根据后缀名整理文件先来看看效果:

自动整理前:

自动整理后:

效果非常好,舒服多了如果你想要直接下载源代码试试看,请关注文章最下方的Python实用宝典公众号,后台回复 文件自动整理 获得源代码下载地址。

1.一键整理文件

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

你只需要修改源代码主程序中调用 auto_organize 函数的参数即可完成对对应文件的整理,比如我想整理  C:\Users\83493\Downloads 文件夹:

if __name__ == "__main__":    auto_organize(r"C:\Users\83493\Downloads")

如上所示,修改代码第61行的文件夹地址即可。修改完成后运行该脚本:

python auto_files.py

就能瞬间完成对指定文件夹的整理,极其方便。

你只需要修改源代码主程序中调用 auto_organize函数的参数即可完成对对应文件的整理,比如我想整理  C:\Users\83493\Downloads 文件夹:

if __name__ == "__main__":    auto_organize(r"C:\Users\83493\Downloads")


如上所示,修改代码第61行的文件夹地址即可。修改完成后运行该脚本:

python auto_files.py

就能瞬间完成对指定文件夹的整理,极其方便:

2.整理文件原理

为了整理这些文件,我们要遍历当前指定的文件夹:如果是文件夹则跳过,如果是文件则检测后缀,分类到对应的文件夹中。文件夹名字及其对应的文件后缀如下:

DIRECTORIES = {
    "图片": [".jpeg", ".jpg", ".tiff", ".gif", ".bmp", ".png", ".bpg", "svg",
               ".heif", ".psd"],
    "视频": [".avi", ".flv", ".wmv", ".mov", ".mp4", ".webm", ".vob", ".mng",
               ".qt", ".mpg", ".mpeg", ".3gp", ".mkv"],
    "文档": [".oxps", ".epub", ".pages", ".docx", ".doc", ".fdf", ".ods",
             ".odt", ".pwi", ".xsn", ".xps", ".dotx", ".docm", ".dox",
             ".rvg", ".rtf", ".rtfd", ".wpd", ".xls", ".xlsx", ".ppt",
             "pptx",".csv",",pdf"],
    "压缩文件": [".a", ".ar", ".cpio", ".iso", ".tar", ".gz", ".rz", ".7z",
                ".dmg", ".rar", ".xar", ".zip"],
    "影音": [".aac", ".aa", ".aac", ".dvf", ".m4a", ".m4b", ".m4p", ".mp3",
             ".msv", "ogg", "oga", ".raw", ".vox", ".wav", ".wma"],
    "文本": [".txt", ".in", ".out"],
    "编程": [".py",".html5", ".html", ".htm", ".xhtml",".c",".cpp",".java",".css"],
    "可执行程序": [".exe"],
}

接下来是自动整理的部分代码,先遍历指定的文件夹,识别后缀并分类到对应的文件夹中。

    for entry in os.scandir(dirval):
        if entry.is_dir():
            # 如果是文件夹则跳过
            continue
        file_path = Path(dirval + "\\" + entry.name)
        file_format = file_path.suffix.lower()
        # 避免后缀大小写判断问题,全转为小写
        if file_format in FILE_FORMATS:
            directory_path = Path(dirval + "\\" + FILE_FORMATS[file_format])
            directory_path.mkdir(exist_ok=True)
            file_path.rename(directory_path.joinpath(entry.name))

还有出现不存在在我们字典里的后缀的情况,把它们分类到名为 其他文件 的文件夹中:

    try:
        os.mkdir(dirval + "\\" +"其他文件")
    except:
        pass

    for dir in os.scandir(dirval):
        try:
            if dir.is_dir():
                # 删除空文件夹
                os.rmdir(dir)
            else:
                temp = str(Path(dir)).split('\\')
                # 分割文件路径
                path = '\\'.join(temp[:-1])
                print(path + '\\其他文件\\' + str(temp[-1]))
                os.rename(str(Path(dir)), path + '\\其他文件\\' + str(temp[-1]))
        except:
            pass

最后再把以上这些部分整理成函数即可。关注文章最下方的Python实用宝典公众号,后台回复 文件自动整理 获得源代码下载地址。

3.自定义整理

如果你并不想按照设定好的文件整理,希望能自定义地将某些特定后缀的文件放到另一个文件夹,比如 .py 文件统一收纳到“Python脚本”文件夹中,你可以这么改 DIRECTORIES 变量:

改动前:

DIRECTORIES = {
    # ......
    "编程": [".py",".html5", ".html", ".htm", ".xhtml",".c",".cpp",".java",".css"],
    # ......
}

改动后:

DIRECTORIES = {
    # ......
    "编程": [".html5", ".html", ".htm", ".xhtml",".c",".cpp",".java",".css"],
    "Python脚本": [".py"],
    # ......
}

你可以按照这个方法,自定义收纳那些你需要整理收纳的文件格式。

如果你只想对 DIRECTORIES 变量里那些后缀的文件进行整理,不属于这些后缀的文件则不进行整理,不需要放到“其他文件”目录下,此时要怎么做?

很简单,你只需要删除以下部分代码就可以完成这个功能:

# ......
    try:
        os.mkdir(dirval + "\\" +"其他文件")
    except:
        pass

    for dir in os.scandir(dirval):
        try:
            if dir.is_dir():
                # 删除空文件夹
                os.rmdir(dir)
            else:
                temp = str(Path(dir)).split('\\')
                # 分割文件路径
                path = '\\'.join(temp[:-1])
                print(path + '\\其他文件\\' + str(temp[-1]))
                os.rename(str(Path(dir)), path + '\\其他文件\\' + str(temp[-1]))
        except:
            pass
# ......

怎么样,是不是很方便?如果喜欢的话记得给我点个赞哦。

文章到此就结束啦,如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们会耐心解答的!

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python Vs R:你应该学哪个?

本文翻译自英文: R Vs Python: Which One Should You Learn?

如果你想成为一名专业的数据科学家,你至少需要学习一种编程语言。但是如何在Python和R这两种最流行的数据分析语言之间做出选择呢? 如果你有兴趣了解他们各自的优缺点,请继续阅读!

作为一名数据科学家,您可能需要学习SQL(结构化查询语言)。SQL实际上是关系数据的语言,大多数公司的信息仍然存在这种数据中。但SQL只给了你检索数据的能力,而不具备数据清洗或运行模型的能力——这就是Python和R的所用之处。

关于R的一点背景知识

R语言是由来自新西兰奥克兰大学的两位统计学家Ross Ihaka和Robert Gentleman发明的。它最初在1995年发布,并在2000年发布了一个较为稳定的测试版。它是一种解释型语言(不需要在运行代码前编译),并拥有一套非常强大的统计建模和绘图工具

R语言是S语言的一种实现,S语言是上世纪70年代在贝尔实验室开发的一种统计编程语言,它的灵感来自于Scheme (Lisp的一种变体)。它也是可扩展的,很容易从许多其他编程语言调用R的对象。

R语言是免费的,并且已经变得越来越受欢迎。相比于传统的商业统计软件包,如SAS和SPSS,大多数用户喜欢使用RStudio编写他们的R代码,RStudio是一种集成开发环境(IDE)。

关于Python的一点背景知识

Pytho最初是1991年由Guido van Rossum作为通用编程语言发布的。与R一样,它也是一种解释型语言,并且有一个相对全面的标准,可以轻松地对许多常见任务进行编程,不需要安装额外的。同样,它也是免费的。

对于数据科学来说,Python提供了许多非常强大。有NumPy(高效数值计算)、panda(广泛的数据清洗和分析工具)和statsmodel(常见的统计方法)。还有TensorFlow、Keras和PyTorch(用于构建深度学习神经网络的)。

现在,许多数据科学家使用Python编写时使用 Jupyter NotebooksJupyter Notebooks 可以方便地创建混合了文章、代码、数据和可视化图形的文档,从而方便地记录研究过程,也方便其他数据科学家查看和复制工作。

选择一种语言

从历史上来看,数据科学界内部存在着相当大的分歧。通常,具有较强学术或统计背景的数据科学家喜欢R,而具有较多编程背景的数据科学家则更喜欢Python。

Python的优势

对比于R,Python具有以下优势:

1.通用: Python是一种通用编程语言。它非常适合进行统计分析,不仅如此,如果你希望构建一个用于共享数据的网站,或者构建一个易于与生产系统集成的web服务,那么Python相对于R是更灵活、更有力的选择。

2.越来越受欢迎: 在2019年9月Tiobe最受欢迎的编程语言指数中,Python是第三大最受欢迎的编程语言(去年增长了超过2%),而R从去年的第18位下降到了第19位。

3.更适合深度学习: 大多数深度学习项目都在Python语言的基础上使用TensorFlow或PyTorch。虽然R TensorFlow已经发布了, 但是其依然远不及Python TensorFlow. 随着深度学习应用变得日益广泛(从计算机视觉开始,现在已经成为大多数处理自然语言任务的默认方法),Python变得越来越重要。

4.与其他语言相似: Python与其他语言相似,这可以节省许多学习成本。虽然有Lisp背景的人可以很快学会R, 但是有Lisp背景的人毕竟是少数。对于Python,你只要学过一种流行语言,比如Java, c#, JavaScript或Ruby——那么学起来将非常轻松。

仍然有很多工作需要使用到R,所以如果你有时间的话,不妨同时学习这两种语言。但是我认为,对于数据科学家来说,Python正在成为占主导地位的编程语言,是更好的首选学习对象。

文章到此就结束啦,如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们会耐心解答的!

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典