Skip to main content

个人工具综合平台,包含常用工具,网络爬虫,知识图谱,神经网络预测等工具

Project description

1 概述

1.1 安装

一个Python的常用工具类库,主要用于股票预测等功能,同时提供各类优化算法的调用工具。 联系方式:540673597@qq.com

安装方法一:

pip install yangke

使用该命令为最小化yangke安装,只会安装yangke库的必要依赖。因yangke库中包含多个模块,当使用具体模块时, 可能存在依赖不全的问题,此时需要根据提示,继续安装使用的模块的必要依赖。

安装方法二:

pip install yangke[All]

使用该命令会安装yangke库中所有模块的依赖。yangke库中包含的模块可以使1.2节测试方法进行查询。

1.2 测试是否安装成功

import yangke
yangke.info()

如果安装成功,则提示如下图所示。 图片无法显示

2 小功能

2.1 多彩的logger输出

在test.py中输入以下代码:

from yangke.common.config import logger

logger.debug("debug from yangke logger")
logger.info("info from yangke logger")
logger.warning("warning from yangke logger")
logger.error("error from yangke logger")
logger.critical("critical from yangke logger")

运行结果如下图所示:

图片无法显示

高级日志配置

使用settings.yaml文件配置日志输出的格式。 在test.py同目录下创建settings.yaml文件,写入以下内容:

logger:
  dateFormat: 'YYYY/MM/DD HH:mm:ss'
  format: '{time} - {level} - {module}:{function}:{line} - {message}'
  level: 10  # 可取0,10,20,30,40,50,分别代表notset, debug, info, warn, error, fatal
  levelColor:
    DEBUG: yellow  # 小写表示前景色
    INFO: "GREEN"  # 大写表示后景色

则运行中日志按该定义输出,如下图所示:

图片无法显示

日志的格式定义参数含义可以参见loguru的官方说明文档,本类库提供了yaml配置日志的途径,方便用户自定义。

可以自定义的内容有:

  • 不同的level级别使用不同的样式;
  • 不同的field(即time, level, module)使用不同的样式,loguru的默认样式就是这种形式。
  • 日志文字样式
    • 前景色,小写的颜色或"fg "定义的颜色
    • 背景色,大写的颜色或"bg "定义的颜色
    • 字体样式,下划线、斜体、加粗等,定义参见loguru说明。
  • 日期格式,如 'YYYY/MM/DD HH:mm:ss'
  • 日志格式,如 '{time} - {level} - {module}:{function}:{line} - {message}'
  • field的对齐方式

2.2 给python方法添加日志环境提示

在程序运行进入某些关键函数或方法时,会生成进入该函数或方法的日志域。使用示例如下。

在test.py中输入以下代码:

from yangke.common.config import logger, loggingTitleCall


@loggingTitleCall(title="初始化mysql数据库连接")
def init_mysql():
    logger.info("测试mysql是否可用")
    logger.info("连接mysql")
    logger.info("mysql连接成功")


init_mysql()

运行结果如下图所示:

图片无法显示

也可以临时更改某个方法中的logger级别,定制不同的logger输出格式,详细用法参见项目源码。

2.3 windows系统运行命令

运行windows系统的命令,有两个方法。

from yangke.core import *

runAsAdmin('echo "1111" > ssssss.txt', popup=True)
result = runCMD('echo "11111"', charset="GBK", wait_for_result=True, output_type="RETURN")
print(result)

运行结果如下图所示:

图片无法显示 说明:

runAsAdmin(cmd, cwd=None, charset="gbk", python=None, popup=True) 

该方法以管理员方式运行命令,在windows系统上会弹出确认窗口,询问是否以管理员方式运行,如果不需要 弹出确认窗口,可以设置参数popup=False,但这实际上利用了windows的漏洞,在win10上会被defender当做病毒拦截,在 win7上能正常运行。

runCMD(command: str, charset: str = "utf8", wait_for_result: bool = True, cwd=None,
       output_type: str = "RETURN", timeout=None)

该方法可以返回第三方命令的执行结果给当前python主进程,如2.3节示例的运行结果,这在很多时候是很有用的。

2.4 判断是否安装某python库

from yangke.core import existModule

existModule("pandas")

2.5 读取csv或txt至pandas.DataFrame中

from yangke.common.fileOperate import read_csv_ex

read_csv_ex(file)

该方法可以处理双引号括起来的跨行的元素,解决各类常见编码问题,解决各行元素数量不同导致的读取报错问题。 该方法可解决以下错误:

UnicodeDecodeError 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

pandas.errors.ParserError: Error tokenizing data. C error: Expected 21 fields in line 45, saw 41

该方法几乎可以读入任何形式的csv文件和txt文件内容,解决了数据读入的问题,后续的数据清洗就可以进行下去了。

该方法的其他参数有: read_csv_ex(file, sep=None, header="infer", skiprows=None, error_bad_lines=True, nrows=None, index_col=None, low_memory=None, na_values=" ")

2.6 yangke.base中的小工具

from yangke.base import *

然后可以使用以下方法

  • 读取yaml文件,返回对应的字典对象或列表对象

readFromYAML(file: str, encoding="utf8")

  • 获取当前电脑的IP地址

get_localhost_ip()

  • 获取文本文件的编码

get_encoding_of_file(file)

  • 将图片转换为base64格式

输入图片可以是 url, ndarray或本地的图片文件路径

pic2base64(pic)

  • 将图片转换为ndarray格式

输入图片可以是 url, ndarray或本地的图片文件路径

pic2ndarray(pic)

  • 将xls格式的excel文件另存为xlsx或csv

该方法利用的是本地安装的Office或WPS,因此只要本地的Office或WPS能正常打开的xls文件都可以成功另存,具有极强的适应性。其他excel类库在某些情况下无法另存或存在编码错误的问题。

save_as_xlsx(file, engine="WPS", ext="xlsx", visible=False)

  • 开启新线程运行指定的目标函数

start_threads(targets, args_list=())

  • 遍历目录下的文件

yield_all_file(folder, filter_=None, ignore_temp_file: bool = True)

  • 装饰器方法

    @run_once 确保修饰的方法只被调用一次,运行中会忽略第一次以后的调用

    @auto_save_para

2 Stock模块(股票)

3 神经网络

3.1 残差神经网络(ResNet)

残差神经网络是由微软研究院的和开明、张祥雨、任少卿、孙剑等人提出的。ResNet在2015年的ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中夺得了冠军。

残差神经网络的主要贡献是发现了“退化现象”,并针对退化现象发明了“快捷链接(Shortcut connection)”,解决了深度过大的神经网络训练困难的问题。使得神经网络的深度可以大大增加。

残差神经网络适用于需要较多层数的神经网络架构中,如果神经网络层数不多,则不需要使用该网络结构。

3.1.1 网络深度问题

从理论上讲,越深的神经网络准确率越高,因为层数较多的神经网络,可以由较浅的神经网络和恒等变换网络拼接而成,如下图所示。 图片无法显示

3.1.2 退化现象与对策

通过实验,随着神经网络层数的不断增加,模型的准确率显示不断的提高,达到最大值,然后随着网络层数的继续增加,模型准确率毫无征兆的大幅度降低。ResNet团队吧这一现象成为“退化(Degradation)”。

退化现象的本质是随着网络层数的增加,神经网络训练过程难以获得有效的梯度,因此大量的神经网络权值更新都出现随机变化现象,即梯度消失的现象越来越明显。为了解决该问题,ResNet团队在ResNet模块中增加了快捷连接分支,使得梯度可以很好的传递到更深的神经网络层中。

3.2 激活函数/激励函数(Activation Function)

3.2.1 relu函数

卷积神经网络中常用

3.2.2 sigmoid函数

3.2.3 tanh函数

3.2.4 softplus函数

图片无法显示

3.3 分类函数

3.3.1 sigmoid

二分类问题时,神经网络隐藏层的最后会接一个sigmoid函数,用于将神经网络输出结果变换为两个概率值。当多分类问题时,需要使用softmax函数。

3.3.2 softmax

首先,我们知道概率有两个性质:1)预测的概率为非负数;2)各种预测结果概率之和等于1。

softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的。

3.4 损失函数

3.4.1 cross entropy

首先是信息量。假设我们听到了两件事,分别如下:

事件A:巴西队进入了2018世界杯决赛圈。

事件B:中国队进入了2018世界杯决赛圈。

仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大。究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。

信息熵=求和(事件概率×事件信息量)

具体理论参见:https://www.jianshu.com/p/47172eb86b39

总之,该损失函数适用于“类别排斥多分类问题”。

3.4.2 mean average error(MSE)

适用于回归任务

3.5 神经网络类库

3.5.1 pytorch

  • Variable对象的类型是<class 'torch.Tensor'>,这和torch.FloatTensor类的对象是同样的类型。

    虽然类型相同,但是Variable计算时,他在后台一步步默默地搭建着一个庞大的系统,叫做计算图(computational graph)。这个图将所有的计算步骤(节点)都连接起来,最后进行误差反向传递的时候,一次性将所有variable里面的修改幅度(梯度)都计算出来,而tensor没有这个能力。

  • numpy和pytorch数据类型转换

torch_data = torch.from_numpy(np_data) np_data = torch_data.numpy()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yangke-1.11.12.tar.gz (631.3 kB view hashes)

Uploaded Source

Built Distribution

yangke-1.11.12-py3-none-any.whl (780.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page