春江水暖鸭先知 – 学习Python记

终于忍不住,想学习Python了。从开始的一点点摸索,到现在刚刚进了Python的神奇世界。对比原来使用的Java,编程真的是有一种幸福感啊。想想Python的理念,不要重复的发明轮子,可以这么说,日常的操作,都可以找到相应的库。从科学计算,到网站建设,从网络爬虫,到神经网络,从图象处理,到程序学习。真的是无所不包。

本来原来的题目叫做:Python入门的,但是写着写着,发现收不住了。所幸,起一个风花学月的名字,挂个科技的外衣,想到哪写到哪。大概围绕着三件事性:Python学习,进化算法网站,大数据这三件事的。以上全做引子,正文如下:

但是,在进入Python的大门前,我们还是要做一些准备。这样才能愉快的玩耍,体味Python的方便(入坑)。如果您已经有了python的经验,那么您是我的老师。本文只是写给那些对Python一无所知的人。

Python是一门语法非常灵活的语言,如果做一件事情,C语言关注的是效率,如果程序需要2000行代码;那么用Java编写就只需要200行;而用Python?20行就可以了。但是Python的简洁灵活却并没有降低学习他的难度。

Python是一门十分遵循面向对象理念的解释型语言。它的理念除了不要重复发明轮子,还有: 显式的比隐式的更好;代码的可读性,格式更重要;只用一种正确的方式来完成一件事。解释型语言的核心要意是,你按照你的想象力写上一段话,然后Python就会照自己的想像力(?)试着去解释你的这段话,(哈哈)解释得通?OK。解释不通?报错。

Python是用空格的代码缩进来标识代码块的。不可以使用Tab来分割代码。使用对齐方式来区分代码块,这跟java和c都有很大的不同。

编写Python的开发环境:

Windows:强烈不推荐。后面各种坑。尤其是要引入各种第三方包时。最好的方式是在Windows下装虚拟机。
树莓派:很有意思,但是,说起来速度还是慢,尤其是在科学计算时。
阿里云:很理想的环境,上面可以24小时运行很多有意思的程序,实现想法。

学习Python从一个点先入手很重要。想一下子学习Python的方方面面?太旁杂了。了解一些重要的基础知识,就可以让Python为我们做很多事情。边使用边学习。

而我的目的是建一个网站。即进化算法网站。那么首先就要:

购买阿里云服务。

apt install python3
apt install python3-pip
python3 -m pip install uwsgi (yum & pip两种安装方式。注意二者先其一。)
python3 -m pip install django

发布正式的网站应用使用:
Nginx+uwsgi+django的形式。

Nginx为静态代理服务器,还能实现反向代理。在发布综合性的网站时很好用。uwsgi为python的容器。django为python网站的框架,采用MVC架构,熟悉JAVA的人上手很快。并且建立企业级的应用也没问题。

阿里云

安装环境

以下为安装python环境所要安装的扩展包。把他们都安装上,能避免很多莫名其妙的问题。

apt install openssl-devel python3-tk libblas-dev liblapack-dev python3-spicy libxml2-dev libxslt1-dev python-lxml

apt install python3-django python3-mysqldb

如果是使用windows。有一些包无法直接使用pipy安装。则要下载预编译好的包。使用如下命令安装。

https://www.lfd.uci.edu/~gohlke/pythonlibs/

pip install C:\path\to\downloaded\file\lxml-3.6.1-cp27-cp27m-win32.whl

还是别有windows开发python。坑太多。

更换国内pypi

国外的源太慢,不能忍受,必须更换国内源。具体使用方法请点击链接查看:

https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

开发工具

下面python工具三选一。这三个我都试用过。因为熟悉JAVA,所以从eclipse+Pydev开始。pycharm为专门Python开发的工具。最后停留在了vim,因为我使用的是小笔记本,2G的内存,vim以他不错的性能表现。立刻赢得了我的喜爱。

  • eclipse + PyDev
  • pycharm
  • vim + tmux + git + vim插件

不过vim虽然编程用起来很好,但学习曲线却并不容易。不过如果你足够闲,那天底下就没有学不会的技能。关键在于:你想不想。

Python有意思的语法

  • list,set,dict,tuple。[] {} {} ()
  • json,re,urllib,
  • 格式化字符串:f,r
  • 日期类型
  • 访问json
  • True, False, None
  • list() set() str() int() len() type()
  • 对运算符的重载
  • 在py文件开头加入文件编码:
  • – coding: utf-8 –
  • parse.quote
  • .zfill
  • .isdigit

set类型是和数学里的集合对应的,即集合里的原素不会重复。tuple是一个特别有意思的类型,可以实现很多奇葩的操作。比如交换两个变量的值:

a, b = b, a

或者我想在一个函数里返回多个值:

return a, b, c, d

python的日期类型里有:datetime, date, time和calender类型。datatime 是由date和time组成。这三种类型可以互相转换。

timedelta用来计算两个时间的差。tzinfo用来表示时区信息。strftime和strptime分别用来格式化时间和解析字符串时间。

urllib为python的网络库,python2和python3使用上有不同,请参考官方文档。当然网络操做也可以使用第三方库:如request或beautifulsoup等。

第三方库

制作词云

  • pillow
  • numpy:数值计算用库。矩阵计算
  • request:网页访问包
  • matplotlib:画图
  • wordcloud:
  • jieba:中文分词包
  • pymysql:最新的mysql驱动
  • mysqlclient:mysql客户端
  • scikit-learn:机器学习包
  • scipy
  • pandas:用来画股票k线包
  • seaborn:用来画图包
  • tushare:用来获得k线数据包
  • lxml:
  • bs4:beautifulsoup

把上面的安装包名放到requestment.txt文件里,然后用如下命令安装:

python3 -m pip install -r requestment.txt

requestment.txt:

pillow
numpy
request
matplotlib
wordcloud
jieba
pymysql
mysqlclient
scikit-learn
scipy
pandas
seaborn
tushare
lxml
bs4

安装方法:如果用pip安装不成功,还可以用下面的方法:

apt install python3-pandas

三个工具的介绍:

Jupter

Jupter为新型的笔记工具。把编程,分析,结果和笔记融合在一起,我喜欢这种理念。由此可见,我们需要編程,需要数值处理,而这些,都应该成为我们知识和处理做决定的工具。仅此而已。

Anaconda

Anaconda为数值分析师准备的打包好的python的套装。

MobaXterm:

连接远程终端有putty工具。另一个不得不提的就是MobaXterm。它工作在windows端。自带X11服务。他的作用就是利用linux的X11 Fowarding把远程的图象传输到本地。使用MobaXterm连接阿里云学习matplotlib来画图再也不是梦。

MobaXterm为开源免费版的。

Python树莓派编程

我要做的网站:

商品排行榜,这是我要利用Python完成的第一件事情。

功能

  1. 商品对比
  2. 商品总排行。
  3. 使用百度统计。
  4. 后台,搜索商品。

DAY2的功能

  1. 类目排行,活越度排行。
  2. 防刷,点击记录。
  3. 商品排行静态化。(按天,按每小时刷新一次。)
  4. 网上数据收集。
  5. 推荐算法学习,21个问题树算法。

在网上购物时,遇到的问题是?

人们关心什么?:价格,可靠,好用,幸福指数
人们会购买什么?通过什么渠道 ,在哪里,什么时候 ,

使用指标的方法来指导行动:指标原则:简单,计算可靠,而指标的解读由人去解读。

指标体系:采用值,百分比的两种方式。现在假设设置的指标:

  • 评价集中度
  • 置信空间
  • 性价比指数
  • 热度
python3 -m pip install --upgrade pip
apt installlibmariadbclient-dev
apt install python3-mysqldb # install mysqlclient
python3 -m pip install mysqlclient
# run init db sql
python3 manage.py migrate
python3 manage.py runserver
apt install fonts-wqy-zenhei # make cloud picture will use it.

商品进化网站

白话大数据与机器学习

这是Python引出的第二件事,看一本大数据的书。

数学的思维

大数据和机器学习里有很多的数学,但是也只是把高中的很多数学知识综合运用一下罢了。这里面,函数,矩阵,方程,向量,极值,距离,概率,排列组合,变量代换,平面,三角函数等知识糅合在一起了。

平面,方程,函数的关系

假设我有一个四维的平面: ax+by+cz+du+e=0

也可记作 f(x, y, z, u)=0

而这个函数的系数,即是一个四维向量:[a, b, c, d]

定义距离的概念及距离概念的扩展

在数轴上有两个点之间的距离;在平面上有两个点之间的距离;由此,扩展到n维空间的距离。

定义平面的概念及平面概念的扩展

平面,我向即可求点到平面的距离;平面可以把点分到两侧去;

向量

有大小,有方向,这是一个向量;由此,扩展到n维空间,即是得到一个n维的向量。假设一个四维空间的向量,我们可以把它记作:[a, b, c, d]

函数的概念

函数的概念太重要了。他决定了某种可以对应,映射的变化,我们记作 y=f(x)。

 y=f(x)

系数

对模型进行训练?其实是为了找到一个合适的方程的系数。

矩阵的运算

对整个矩阵进行加减乘,的运算。由此,我们可以把多个向量组成矩阵。用离散数学对矩阵进行整体运算。

求导

求导即是求曲线的切线的斜率。

向量建模

假设我们认为用户作决策跟用户的很多属性标签相关,那么即把用户的所有标签当作向量的一个维度进行建模:

[年龄,性别,学历,收入,家庭成员]

我们可以从这本书中学到的知识:

比如如何做天气预报,如何做一个推荐算法,怎样对用户进行画象,简单的图像识别,文本识别等。

这本书的启示:

切莫纠结于学术方面的推导困难而不去实践
用离散来解决连续
用有穷来解决无穷
升维的方法
成本和精度的对立
映射是数学的重要思维
高斯分布,即是二八法则

白话大数据与机器学习

静态博客

除了wordpress。我们还有pelican。他是python下的静态博客生成器。使用pelican + nginx + scp。分分钟一个新的网站就建好了。

常用命令:

  • pelican-quickstart
  • pelican
  • pelican –autoreload –listen

https://docs.getpelican.com/en/stable/

git clone --recursive https://github.com/getpelican/pelican-themes

网站的模板:

网站默认提供的模板为notmyidea。说实话这个模板已经很老了。对比现今的bootstrap4,已经显得很简陋。也不能很好的兼容手机设备。所以你需要在下面的模板网站找到合适的模板为我所用。

http://pelicanthemes.com/

使用rst或md模板来写博客

Coser服网

比如我建立的为COSer寻找衣服的网站:

Coser衣服网

接着说第三方库

numpy

科学计算中的矩阵计算包。

np.arange( 1, 150, 10 ).reshape(3, 5)
np.linspace(1, 100, 1000)

pandas

可以方便的用来操做股票数据。pandas有两个重要的数据结构Series DataFrame

  • s = Series(np.random.randint(1,10,4), index=[‘a’,’b’,’c’,’d’])
  • df = DataFrame(np.random.randint(1,10,24).reshape(6,4), index=dates, columns=list(‘ABCD’))

常用方法:

  • .head()
  • .tail()
  • .plot()
  • .sum()
  • .index
  • .value

seaborn

画图工具。最常用的即画出两两元素的关系图。

.jointplot
.pairplot

matplotlib

数学用专用画图工具。

scikit-learn

机器学习工具。

Keras

深度学习API。神经网络工具。

apt install python3-keras # for debian 10

量化投资

这是Python引起的第三件事。也是正在尝试的一件事。欢迎有兴趣的同学一块来探讨。

VN.PY

重要的概念

sharp率: (收益-无风险利率)/波动率;

胜率是指出手赚钱次数与总出手次数之比;

赔率是指平均每次出手赚到的钱除以平均每次出手赔的钱,也叫做盈亏比。

投资策略,有的是高胜率低赔率,有的是低胜率高赔率,两样都高的,基本是不存在的。一般来说,胜率在40%左右,盈亏比在2以上的,就算不错的策略了。

程序化CTA

这是一种低胜率,高赔率的方法。

程序化交易由入场条件、出场条件,品种选择、时机选择,资金管理,一起组成。

我们追求的策略是:达到40%左右胜率,盈亏比在2以上,夏普率在1.5以上,最大回撤比一手保证金要少,最大回撤越小越好。这里面,最终看的指标是夏普率,但也并不是越高越好,太高的话,很可能是你的策略过拟合了。

注册获得开源股票数据API

Tushare为中国的开源交易数据提供者。注册后即可以使用提供的免费交易数据。这样如果你会使用python编程,同时也做了一些投资,有一些想法,不防拿这些数据来实验一下。这算不算进入大数据的一个窗口呢?

面对着这随时可以方便取到的股票交易数据,以及其它的一些数据,如期货,债券,利率,基金,银行拆借利率,M2,GDP,CPI,PPI。

还包括外汇和区块链的大数据信息。

注册Tushare

FAQ:

  • 1 centos,windows,aws的linux,
  • 2 两个版本的uwsgi:可能使用apt,或pip安装了两个版本。二者选一。
  • 3 nginx+uwsgi+django
  • 4 两个网站的双备份
  • 5 两个python版本,两个pip
  • 6 更换国内pypi
  • 7 urllib的三个版本
  • 8 值得谈的/usr/local/src目录
  • 9 md5的签名算法
  • 10 URL对空格等的处理
  • 11 虚拟机开启swap分区
  • 12 nginx的端口和socket文件
  • 13 版本问题
  • 14 注意操做系统的版本,firefox的版本,Geckodriver的版本,selenium的版本,python3的版本,pip的版本,setuptools的版本,数据库的版本,sqlite,mysql,mariadb的版本
  • 15 mariadb&mysql
  • 16 windows被卡在了vc++14.0的动态库上。
  • 17 cento: yum install python-devel mysql-devel
  • 18 字符集utf8 与 utf8mb4 异同,utf8mb4_unicode_ci 与 utf8mb4_general_ci
  • 19 自己编译sqlite,python3。启用ssl
  • 20 问题的可能的解决思路
    • 使用apt安装dev依赖
    • 安装repository版
    • 安装python3-xxx版
    • 使用pip安装
    • 安装预编译版
    • 下载源码,用源码安装
    • 检查是否是安装的版本太旧,文档已经过期、
    • 多使用官网,
  • 21 问题的依赖链条
    • python3 xxx.py
    • python3 -m pip install tushare
    • python3 -m pip install lxml
    • apt apt-get install libxml2-dev libxslt1-dev
    • apt update
    • apt upgrade