windows 7 python3 安装MySQLdb 库

李魔佛 发表了文章 • 0 个评论 • 18 次浏览 • 2018-06-20 18:04 • 来自相关话题

python3下没有MySQLdb的库,可以直接到这里下载mysqlclient库来替代。https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
 
python3下没有MySQLdb的库,可以直接到这里下载mysqlclient库来替代。https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
 

python3中定义抽象类的方法在python2中不兼容

李魔佛 发表了文章 • 0 个评论 • 42 次浏览 • 2018-06-10 20:54 • 来自相关话题

在python3中新式的定义抽象类的方法如下:from abc import ABCMeta,abstractmethod

class Server(metaclass=ABCMeta):

@abstractmethod
def __init__(self):
pass

def __str__(self):
return self.name

@abstractmethod
def boot(self):
pass

@abstractmethod
def kill(self):
pass
 
但是这个方法在python2中会提示语法错误。
 
在python2中只能像下面这种方式定义抽象类:
 from abc import ABCMeta,abstractmethod

class Server(object):
__metaclass__=ABCMeta
@abstractmethod
def __init__(self):
pass

def __str__(self):
return self.name

@abstractmethod
def boot(self):
pass

@abstractmethod
def kill(self):
pass
这种方式不仅在python2中可以正常运行,在python3中也可以。但是python3的方法只能兼容python3,无法在python2中运行。
 
原创地址:
http://30daydo.com/article/326
欢迎转载,请注明出处。 查看全部
在python3中新式的定义抽象类的方法如下:
from abc import ABCMeta,abstractmethod

class Server(metaclass=ABCMeta):

@abstractmethod
def __init__(self):
pass

def __str__(self):
return self.name

@abstractmethod
def boot(self):
pass

@abstractmethod
def kill(self):
pass

 
但是这个方法在python2中会提示语法错误。
 
在python2中只能像下面这种方式定义抽象类:
 
from abc import ABCMeta,abstractmethod

class Server(object):
__metaclass__=ABCMeta
@abstractmethod
def __init__(self):
pass

def __str__(self):
return self.name

@abstractmethod
def boot(self):
pass

@abstractmethod
def kill(self):
pass

这种方式不仅在python2中可以正常运行,在python3中也可以。但是python3的方法只能兼容python3,无法在python2中运行。
 
原创地址:
http://30daydo.com/article/326
欢迎转载,请注明出处。

numpy数组四舍五入

李魔佛 发表了文章 • 0 个评论 • 107 次浏览 • 2018-05-21 09:17 • 来自相关话题

numpy.around(nlist, number)
传入一个np的数组和需要保留的位数作为参数
 
例子:import numpy as np
x = np.arange(10)
x=x/77.0
print x
输出结果为:[b][0. 0.01298701 0.02597403 0.03896104 0.05194805 0.06493506
0.07792208 0.09090909 0.1038961 0.11688312][/b] [b]np.around(x, 3) #保存为3位小数[/b]
array([0. , 0.013, 0.026, 0.039, 0.052, 0.065, 0.078, 0.091, 0.104, 0.117]) 查看全部
numpy.around(nlist, number)
传入一个np的数组和需要保留的位数作为参数
 
例子:
import numpy as np
x = np.arange(10)
x=x/77.0
print x

输出结果为:
[b][0.         0.01298701 0.02597403 0.03896104 0.05194805 0.06493506
0.07792208 0.09090909 0.1038961 0.11688312][/b]
 
[b]np.around(x, 3)   #保存为3位小数[/b]

array([0. , 0.013, 0.026, 0.039, 0.052, 0.065, 0.078, 0.091, 0.104, 0.117])

抄底?还是跳入火坑

绫波丽 发表了文章 • 0 个评论 • 167 次浏览 • 2018-04-27 20:54 • 来自相关话题

对于抄底,个人的态度是谨慎的。 尽量不会去参与。 因为很多看起来的底,很有可能只是个下跌中继,下面还有地下室,地下车库,十八层地狱。尤其是那些经历多个缩量跌停的个股。 在趋势面前,没有人能够凭借一己之力扭转。

截几个图给大家看看:





富控互动(点击查看大图)

如果你去抄底了,在图示2的位置买入,假如你买入1W快,那么到今天(2018-04-27)如果没及时止损割肉,那么现在就剩6900.
而如果是从1的位置买入一直持有到现在,那么现在就剩4000元。





顺威股份(点击大图)

如果你在2位置抄底,那么现在会亏损40%

同样,如果你在2位置去抄底神雾







那么到现在你会亏损51%,而在3位置去抄底,那么你到现在会亏损31%,所以抄底过程中,如果你没有做好马上捞一笔就跑的习惯,还是不要去参与。参与了,就要跑的快,不论盈利或者亏损。 不然后面的都是深渊。
 
  查看全部
对于抄底,个人的态度是谨慎的。 尽量不会去参与。 因为很多看起来的底,很有可能只是个下跌中继,下面还有地下室,地下车库,十八层地狱。尤其是那些经历多个缩量跌停的个股。 在趋势面前,没有人能够凭借一己之力扭转。

截几个图给大家看看:

抄底.PNG

富控互动(点击查看大图)

如果你去抄底了,在图示2的位置买入,假如你买入1W快,那么到今天(2018-04-27)如果没及时止损割肉,那么现在就剩6900.
而如果是从1的位置买入一直持有到现在,那么现在就剩4000元。

顺威.PNG

顺威股份(点击大图)

如果你在2位置抄底,那么现在会亏损40%

同样,如果你在2位置去抄底神雾


神雾.PNG


那么到现在你会亏损51%,而在3位置去抄底,那么你到现在会亏损31%,所以抄底过程中,如果你没有做好马上捞一笔就跑的习惯,还是不要去参与。参与了,就要跑的快,不论盈利或者亏损。 不然后面的都是深渊。
 
 

pandas中diff控制移动方向,向上移动

李魔佛 发表了文章 • 0 个评论 • 178 次浏览 • 2018-04-25 20:39 • 来自相关话题

初始化一个dataframe
 
然后使用默认的diff(periods=1)





行的索引不变,数据被往下拉了一行。当然你也可以使用periods=2 ,那么数据整体会往下移2格。
 
如果要往上移动,只要把periods的值设为负的就可以了。





  查看全部
diff.PNG

初始化一个dataframe
 
然后使用默认的diff(periods=1)

shift.PNG

行的索引不变,数据被往下拉了一行。当然你也可以使用periods=2 ,那么数据整体会往下移2格。
 
如果要往上移动,只要把periods的值设为负的就可以了。
shift2.PNG


 

python安装mpl_finance [finance模块已经从matplotlib2.0.2中脱离出来]

李魔佛 发表了文章 • 0 个评论 • 1072 次浏览 • 2018-04-23 23:17 • 来自相关话题

最新的matplotlib中已经把其中的finance库脱离出来,目前还没有放入PIP的仓库中,所以使用pip install mpl_finance会提示找不到所需要的库.
 
解决办法:
到官方github中下载源码,然后在本地安装即可。 目前的mpl_finance的版本还是dev版,不过用起来也没什么大问题。
 
git clone git@github.com:matplotlib/mpl_finance.git
 
等待下载后,进入该目录, sudo python setup.py install
 
OK
  查看全部
最新的matplotlib中已经把其中的finance库脱离出来,目前还没有放入PIP的仓库中,所以使用pip install mpl_finance会提示找不到所需要的库.
 
解决办法:
到官方github中下载源码,然后在本地安装即可。 目前的mpl_finance的版本还是dev版,不过用起来也没什么大问题。
 
git clone git@github.com:matplotlib/mpl_finance.git
 
等待下载后,进入该目录, sudo python setup.py install
 
OK
 

python取出两个两个同样表结构的MySQL数据库中不同的行

李魔佛 发表了文章 • 0 个评论 • 175 次浏览 • 2018-04-14 11:11 • 来自相关话题

因为平时有本地数据库和远程数据库,本地的时候是离线的时候看的。 有时候因为修改代码的缘故,导致远程数据和本地数据有不一样的地方,那么可以使用python+pandas很简单的筛选出不同的行。
 
df_new[~(df_new['URL'].isin(df_old['URL'].values))]
 
其中df_old 为本地的数据库读取的dataframe数据,而df_new 为远程的数据,通过判断唯一的key URL的值来筛选出不同的数据行 查看全部
因为平时有本地数据库和远程数据库,本地的时候是离线的时候看的。 有时候因为修改代码的缘故,导致远程数据和本地数据有不一样的地方,那么可以使用python+pandas很简单的筛选出不同的行。
 
df_new[~(df_new['URL'].isin(df_old['URL'].values))]
 
其中df_old 为本地的数据库读取的dataframe数据,而df_new 为远程的数据,通过判断唯一的key URL的值来筛选出不同的数据行

RuntimeWarning: More than 20 figures have been opened.

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 528 次浏览 • 2018-04-12 12:40 • 来自相关话题

pycharm Failed with error: Could not read from remote repository. git push 操作

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 416 次浏览 • 2018-03-14 00:31 • 来自相关话题

urlparse中defrag函数的用法

李魔佛 发表了文章 • 0 个评论 • 280 次浏览 • 2018-03-11 17:59 • 来自相关话题

urlparse.urldefrag(url)¶

If url contains a fragment identifier, returns a modified version of url with no fragment identifier, and the fragment identifier as a separate string. If there is no fragment identifier in url, returns url unmodified and an empty string.

官网的解释如上,作用就是把url中的fragment标识符去掉。What ?
fragment标识符是url中#号的部分。
比如  http://www.example.com/index.html#print
 
#代表网页中的一个位置。其右面的字符,就是该位置的标识符。
 
就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。

为网页位置指定标识符,有两个方法。一是使用锚点,比如<a name="print"></a>,二是使用id属性,比如<div id="print" >。
 
 
所以:
url='http://www.example.com/index.html#print'
url=urlparse.defrag(url)
那么返回的url是http://www.example.com/index.html,因为这两个页面实际是同一个url,在爬虫程序中可以用来过滤同一个页面 查看全部


urlparse.urldefrag(url)¶

If url contains a fragment identifier, returns a modified version of url with no fragment identifier, and the fragment identifier as a separate string. If there is no fragment identifier in url, returns url unmodified and an empty string.


官网的解释如上,作用就是把url中的fragment标识符去掉。What ?
fragment标识符是url中#号的部分。
比如  http://www.example.com/index.html#print
 
#代表网页中的一个位置。其右面的字符,就是该位置的标识符。
 
就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。

为网页位置指定标识符,有两个方法。一是使用锚点,比如<a name="print"></a>,二是使用id属性,比如<div id="print" >。
 
 
所以:
url='http://www.example.com/index.html#print'
url=urlparse.defrag(url)
那么返回的url是http://www.example.com/index.html,因为这两个页面实际是同一个url,在爬虫程序中可以用来过滤同一个页面

strptime修改默认年份,datetime - strptime默认值为 1900

李魔佛 发表了文章 • 0 个评论 • 397 次浏览 • 2018-03-07 08:42 • 来自相关话题

比如
s='03-06 18:36'
news_time_f=datetime.datetime.strptime(s,%m-%d %H:%M')
print news_time_f
 
返回来的结果是datetime类型,但是年份是1900年。
1900-03-06 18:36:00
 
有两种办法:
1. 在日期格式前人为添加年份
news_time_f=datetime.datetime.strptime(''s,'%Y-%m-%d %H:%M')
 
2.使用自带的replace函数
s='03-06 18:36'
news_time_f=datetime.datetime.strptime(s,%m-%d %H:%M')
news_time_f=news_time_f.replace(2018)
 
上面两种方法都可以把03-06 18:36
转换为2018-03-06 18:36:00的datetime类型 查看全部
比如
s='03-06 18:36'
news_time_f=datetime.datetime.strptime(s,%m-%d %H:%M')
print news_time_f
 
返回来的结果是datetime类型,但是年份是1900年。
1900-03-06 18:36:00
 
有两种办法:
1. 在日期格式前人为添加年份
news_time_f=datetime.datetime.strptime(''s,'%Y-%m-%d %H:%M')
 
2.使用自带的replace函数
s='03-06 18:36'
news_time_f=datetime.datetime.strptime(s,%m-%d %H:%M')
news_time_f=news_time_f.replace(2018)
 
上面两种方法都可以把03-06 18:36
转换为2018-03-06 18:36:00的datetime类型

python预测下一期双色球号码【机器学习】

李魔佛 发表了文章 • 2 个评论 • 1736 次浏览 • 2018-02-19 10:16 • 来自相关话题

Task:
1. 在福彩官网抓取所有的历史双色球数据。
2. 使用历史数据进行继续学习。
 
Part1 数据抓取
 
main.pyimport re
from bs4 import BeautifulSoup
import urllib2
from mylog import MyLog as mylog
from save2excel import SavaBallDate

class DoubleColorBallItem(object):
date = None
order = None
red1 = None
red2 = None
red3 = None
red4 = None
red5 = None
red6 = None
blue = None
money = None
firstPrize = None
secondPrize = None

class GetDoubleColorBallNumber(object):
'''这个类用于获取双色球中奖号码, 返回一个txt文件
'''
def __init__(self):
self.urls =
self.log = mylog()
self.getUrls()
self.items = self.spider(self.urls)
self.pipelines(self.items)
self.log.info('beging save data to excel \r\n')
SavaBallDate(self.items)
self.log.info('save data to excel end ...\r\n')


def getUrls(self):
'''获取数据来源网页
'''
URL = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html'
htmlContent = self.getResponseContent(URL)
soup = BeautifulSoup(htmlContent, 'lxml')
tag = soup.find_all(re.compile('p'))[-1]
pages = tag.strong.get_text()
for i in xrange(1, int(pages)+1):
url = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_' + str(i) + '.html'
self.urls.append(url)
self.log.info(u'添加URL:%s 到URLS \r\n' %url)

def getResponseContent(self, url):
'''这里单独使用一个函数返回页面返回值,是为了后期方便的加入proxy和headers等
'''
try:
response = urllib2.urlopen(url.encode('utf8'))
except:
self.log.error(u'Python 返回URL:%s 数据失败 \r\n' %url)
else:
self.log.info(u'Python 返回URUL:%s 数据成功 \r\n' %url)
return response.read()


def spider(self,urls):
'''这个函数的作用是从获取的数据中过滤得到中奖信息
'''
items =
for url in urls:
htmlContent = self.getResponseContent(url)
soup = BeautifulSoup(htmlContent, 'lxml')
tags = soup.find_all('tr', attrs={})
for tag in tags:
if tag.find('em'):
item = DoubleColorBallItem()
tagTd = tag.find_all('td')
item.date = tagTd[0].get_text()
item.order = tagTd[1].get_text()
tagEm = tagTd[2].find_all('em')
item.red1 = tagEm[0].get_text()
item.red2 = tagEm[1].get_text()
item.red3 = tagEm[2].get_text()
item.red4 = tagEm[3].get_text()
item.red5 = tagEm[4].get_text()
item.red6 = tagEm[5].get_text()
item.blue = tagEm[6].get_text()
item.money = tagTd[3].find('strong').get_text()
item.firstPrize = tagTd[4].find('strong').get_text()
item.secondPrize = tagTd[5].find('strong').get_text()
items.append(item)
self.log.info(u'获取日期为:%s 的数据成功' %(item.date))
return items

def pipelines(self,items):
fileName = u'双色球.txt'.encode('GBK')
with open(fileName, 'w') as fp:
for item in items:
fp.write('%s %s \t %s %s %s %s %s %s %s \t %s \t %s %s \n'
%(item.date,item.order,item.red1,item.red2,item.red3,item.red4,item.red5,item.red6,item.blue,item.money,item.firstPrize,item.secondPrize))
self.log.info(u'将日期为:%s 的数据存入"%s"...' %(item.date, fileName.decode('GBK')))


if __name__ == '__main__':
GDCBN = GetDoubleColorBallNumber()




from mylog import MyLog as mylog 
from save2excel import SavaBallDate
这两个模块四用来显示log和保存为excel数据。import logging
import getpass
import sys


#### 定义MyLog类
class MyLog(object):
#### 类MyLog的构造函数
def __init__(self):
self.user = getpass.getuser()
self.logger = logging.getLogger(self.user)
self.logger.setLevel(logging.DEBUG)

#### 日志文件名
self.logFile = sys.argv[0][0:-3] + '.log'
self.formatter = logging.Formatter('%(asctime)-12s %(levelname)-8s %(name)-10s %(message)-12s\r\n')

#### 日志显示到屏幕上并输出到日志文件内
self.logHand = logging.FileHandler(self.logFile, encoding='utf8')
self.logHand.setFormatter(self.formatter)
self.logHand.setLevel(logging.DEBUG)

self.logHandSt = logging.StreamHandler()
self.logHandSt.setFormatter(self.formatter)
self.logHandSt.setLevel(logging.DEBUG)

self.logger.addHandler(self.logHand)
self.logger.addHandler(self.logHandSt)

#### 日志的5个级别对应以下的5个函数
def debug(self,msg):
self.logger.debug(msg)

def info(self,msg):
self.logger.info(msg)

def warn(self,msg):
self.logger.warn(msg)

def error(self,msg):
self.logger.error(msg)

def critical(self,msg):
self.logger.critical(msg)

if __name__ == '__main__':
mylog = MyLog()
mylog.debug(u"I'm debug 测试中文")
mylog.info("I'm info")
mylog.warn("I'm warn")
mylog.error(u"I'm error 测试中文")
mylog.critical("I'm critical")


 import xlwt
class SavaBallDate(object):
def __init__(self, items):
self.items = items
self.run(self.items)

def run(self,items):
fileName = u'双色球.xls'.encode('GBK')
book = xlwt.Workbook(encoding='utf8')
sheet=book.add_sheet('ball', cell_overwrite_ok=True)
sheet.write(0, 0, u'开奖日期'.encode('utf8'))
sheet.write(0, 1, u'期号'.encode('utf8'))
sheet.write(0, 2, u'红1'.encode('utf8'))
sheet.write(0, 3, u'红2'.encode('utf8'))
sheet.write(0, 4, u'红3'.encode('utf8'))
sheet.write(0, 5, u'红4'.encode('utf8'))
sheet.write(0, 6, u'红5'.encode('utf8'))
sheet.write(0, 7, u'红6'.encode('utf8'))
sheet.write(0, 8, u'蓝'.encode('utf8'))
sheet.write(0, 9, u'销售金额'.encode('utf8'))
sheet.write(0, 10, u'一等奖'.encode('utf8'))
sheet.write(0, 11, u'二等奖'.encode('utf8'))
i = 1
while i <= len(items):
item = items[i-1]
sheet.write(i, 0, item.date)
sheet.write(i, 1, item.order)
sheet.write(i, 2, item.red1)
sheet.write(i, 3, item.red2)
sheet.write(i, 4, item.red3)
sheet.write(i, 5, item.red4)
sheet.write(i, 6, item.red5)
sheet.write(i, 7, item.red6)
sheet.write(i, 8, item.blue)
sheet.write(i, 9, item.money)
sheet.write(i, 10, item.firstPrize)
sheet.write(i, 11, item.secondPrize)
i += 1
book.save(fileName)



if __name__ == '__main__':
pass



 
运行脚本后,会在本地生成一个excel文件,保存为一下的格式:





 
第一步完成。
 Part2 机器学习进行预测
2018-02-19
待续,后面继续更新 
原文链接:
http://30daydo.com/article/277
  查看全部
Task:
1. 在福彩官网抓取所有的历史双色球数据。
2. 使用历史数据进行继续学习。
 
Part1 数据抓取
 
main.py
import re
from bs4 import BeautifulSoup
import urllib2
from mylog import MyLog as mylog
from save2excel import SavaBallDate

class DoubleColorBallItem(object):
date = None
order = None
red1 = None
red2 = None
red3 = None
red4 = None
red5 = None
red6 = None
blue = None
money = None
firstPrize = None
secondPrize = None

class GetDoubleColorBallNumber(object):
'''这个类用于获取双色球中奖号码, 返回一个txt文件
'''
def __init__(self):
self.urls =
self.log = mylog()
self.getUrls()
self.items = self.spider(self.urls)
self.pipelines(self.items)
self.log.info('beging save data to excel \r\n')
SavaBallDate(self.items)
self.log.info('save data to excel end ...\r\n')


def getUrls(self):
'''获取数据来源网页
'''
URL = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html'
htmlContent = self.getResponseContent(URL)
soup = BeautifulSoup(htmlContent, 'lxml')
tag = soup.find_all(re.compile('p'))[-1]
pages = tag.strong.get_text()
for i in xrange(1, int(pages)+1):
url = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_' + str(i) + '.html'
self.urls.append(url)
self.log.info(u'添加URL:%s 到URLS \r\n' %url)

def getResponseContent(self, url):
'''这里单独使用一个函数返回页面返回值,是为了后期方便的加入proxy和headers等
'''
try:
response = urllib2.urlopen(url.encode('utf8'))
except:
self.log.error(u'Python 返回URL:%s 数据失败 \r\n' %url)
else:
self.log.info(u'Python 返回URUL:%s 数据成功 \r\n' %url)
return response.read()


def spider(self,urls):
'''这个函数的作用是从获取的数据中过滤得到中奖信息
'''
items =
for url in urls:
htmlContent = self.getResponseContent(url)
soup = BeautifulSoup(htmlContent, 'lxml')
tags = soup.find_all('tr', attrs={})
for tag in tags:
if tag.find('em'):
item = DoubleColorBallItem()
tagTd = tag.find_all('td')
item.date = tagTd[0].get_text()
item.order = tagTd[1].get_text()
tagEm = tagTd[2].find_all('em')
item.red1 = tagEm[0].get_text()
item.red2 = tagEm[1].get_text()
item.red3 = tagEm[2].get_text()
item.red4 = tagEm[3].get_text()
item.red5 = tagEm[4].get_text()
item.red6 = tagEm[5].get_text()
item.blue = tagEm[6].get_text()
item.money = tagTd[3].find('strong').get_text()
item.firstPrize = tagTd[4].find('strong').get_text()
item.secondPrize = tagTd[5].find('strong').get_text()
items.append(item)
self.log.info(u'获取日期为:%s 的数据成功' %(item.date))
return items

def pipelines(self,items):
fileName = u'双色球.txt'.encode('GBK')
with open(fileName, 'w') as fp:
for item in items:
fp.write('%s %s \t %s %s %s %s %s %s %s \t %s \t %s %s \n'
%(item.date,item.order,item.red1,item.red2,item.red3,item.red4,item.red5,item.red6,item.blue,item.money,item.firstPrize,item.secondPrize))
self.log.info(u'将日期为:%s 的数据存入"%s"...' %(item.date, fileName.decode('GBK')))


if __name__ == '__main__':
GDCBN = GetDoubleColorBallNumber()




from mylog import MyLog as mylog 
from save2excel import SavaBallDate
这两个模块四用来显示log和保存为excel数据。
import logging
import getpass
import sys


#### 定义MyLog类
class MyLog(object):
#### 类MyLog的构造函数
def __init__(self):
self.user = getpass.getuser()
self.logger = logging.getLogger(self.user)
self.logger.setLevel(logging.DEBUG)

#### 日志文件名
self.logFile = sys.argv[0][0:-3] + '.log'
self.formatter = logging.Formatter('%(asctime)-12s %(levelname)-8s %(name)-10s %(message)-12s\r\n')

#### 日志显示到屏幕上并输出到日志文件内
self.logHand = logging.FileHandler(self.logFile, encoding='utf8')
self.logHand.setFormatter(self.formatter)
self.logHand.setLevel(logging.DEBUG)

self.logHandSt = logging.StreamHandler()
self.logHandSt.setFormatter(self.formatter)
self.logHandSt.setLevel(logging.DEBUG)

self.logger.addHandler(self.logHand)
self.logger.addHandler(self.logHandSt)

#### 日志的5个级别对应以下的5个函数
def debug(self,msg):
self.logger.debug(msg)

def info(self,msg):
self.logger.info(msg)

def warn(self,msg):
self.logger.warn(msg)

def error(self,msg):
self.logger.error(msg)

def critical(self,msg):
self.logger.critical(msg)

if __name__ == '__main__':
mylog = MyLog()
mylog.debug(u"I'm debug 测试中文")
mylog.info("I'm info")
mylog.warn("I'm warn")
mylog.error(u"I'm error 测试中文")
mylog.critical("I'm critical")


 
import xlwt
class SavaBallDate(object):
def __init__(self, items):
self.items = items
self.run(self.items)

def run(self,items):
fileName = u'双色球.xls'.encode('GBK')
book = xlwt.Workbook(encoding='utf8')
sheet=book.add_sheet('ball', cell_overwrite_ok=True)
sheet.write(0, 0, u'开奖日期'.encode('utf8'))
sheet.write(0, 1, u'期号'.encode('utf8'))
sheet.write(0, 2, u'红1'.encode('utf8'))
sheet.write(0, 3, u'红2'.encode('utf8'))
sheet.write(0, 4, u'红3'.encode('utf8'))
sheet.write(0, 5, u'红4'.encode('utf8'))
sheet.write(0, 6, u'红5'.encode('utf8'))
sheet.write(0, 7, u'红6'.encode('utf8'))
sheet.write(0, 8, u'蓝'.encode('utf8'))
sheet.write(0, 9, u'销售金额'.encode('utf8'))
sheet.write(0, 10, u'一等奖'.encode('utf8'))
sheet.write(0, 11, u'二等奖'.encode('utf8'))
i = 1
while i <= len(items):
item = items[i-1]
sheet.write(i, 0, item.date)
sheet.write(i, 1, item.order)
sheet.write(i, 2, item.red1)
sheet.write(i, 3, item.red2)
sheet.write(i, 4, item.red3)
sheet.write(i, 5, item.red4)
sheet.write(i, 6, item.red5)
sheet.write(i, 7, item.red6)
sheet.write(i, 8, item.blue)
sheet.write(i, 9, item.money)
sheet.write(i, 10, item.firstPrize)
sheet.write(i, 11, item.secondPrize)
i += 1
book.save(fileName)



if __name__ == '__main__':
pass



 
运行脚本后,会在本地生成一个excel文件,保存为一下的格式:

double.GIF

 
第一步完成。
 Part2 机器学习进行预测
2018-02-19
待续,后面继续更新 
原文链接:
http://30daydo.com/article/277
 

TypeError: the dtype datetime64 is not supported for parsing

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 832 次浏览 • 2018-02-05 02:44 • 来自相关话题

Pycharm控制台窗口怎样可以显示不同程序的运行结果

李魔佛 发表了文章 • 0 个评论 • 1012 次浏览 • 2018-01-27 20:31 • 来自相关话题

默认情况下,每次运行会把之前的那个结果给清理掉。 有时候运行多个程序像对比结果,不太方便。
可以在pycharm的控制台那里点击右键,在弹出的菜单中,选择“Pin Tab”,那么当前的控制台就不会被清掉啦,它可以一直保留着,自带你自己手动去关闭它。
默认情况下,每次运行会把之前的那个结果给清理掉。 有时候运行多个程序像对比结果,不太方便。
可以在pycharm的控制台那里点击右键,在弹出的菜单中,选择“Pin Tab”,那么当前的控制台就不会被清掉啦,它可以一直保留着,自带你自己手动去关闭它。

运行python requests/urllib2/urllib3 需要sudo/root权限,为什么?

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 638 次浏览 • 2018-01-10 23:36 • 来自相关话题

scipy.misc.lena AttributeError: 'module' object has no attribute 'lena'

李魔佛 发表了文章 • 0 个评论 • 2092 次浏览 • 2018-01-03 19:42 • 来自相关话题

在数据可视化的那本书上看到的demo,不过运行不通过,然后出现上面的那个错误,lena函数看起来被移除了。
 
import scipy.misc
lena=scipy.misc.lena()
plt.gray()
plt.imshow(lena)
plt.colorbar()
plt.show()
Error:
lena=scipy.misc.lena()
AttributeError: 'module' object has no attribute 'lena'
  
定位到scipy包的位置
/usr/local/lib/python2.7/dist-packages/scipy/misc
然后根据文本查找一下: find -name '*.py' | xargs grep 'lena'
 
果然,没有返回相关的字段。 看样子在scipy 1.0.0版本上已经移除了lena图的数据了。 
 
不过替换了一张其他的图片。 在misc目录下看到一个叫ascent的data, 替换这个函数后: 
scipy.misc.ascent()
后,显示一个楼梯的图片。只能凑合着用吧。 lena图自己上网找一张然后数字化就好了。
 
  查看全部
在数据可视化的那本书上看到的demo,不过运行不通过,然后出现上面的那个错误,lena函数看起来被移除了。
 
	import scipy.misc
lena=scipy.misc.lena()
plt.gray()
plt.imshow(lena)
plt.colorbar()
plt.show()

Error:
lena=scipy.misc.lena()
AttributeError: 'module' object has no attribute 'lena'
  
定位到scipy包的位置
/usr/local/lib/python2.7/dist-packages/scipy/misc
然后根据文本查找一下: find -name '*.py' | xargs grep 'lena'
 
果然,没有返回相关的字段。 看样子在scipy 1.0.0版本上已经移除了lena图的数据了。 
 
不过替换了一张其他的图片。 在misc目录下看到一个叫ascent的data, 替换这个函数后: 
scipy.misc.ascent()
后,显示一个楼梯的图片。只能凑合着用吧。 lena图自己上网找一张然后数字化就好了。
 
 

ubuntu python matplotlib绘图不显示图形

李魔佛 发表了文章 • 0 个评论 • 751 次浏览 • 2017-12-25 16:37 • 来自相关话题

版本信息: ubuntu16
python 2.7
matplotlib (最新,通过pip安装的)
 
绘制任何图形都会输出下面的错误:
TypeError: Couldn't find foreign struct converter for 'cairo.Context'
 
cairo这个依赖库我已经通过apt安装的了。
 
通过调试,最后发现需要安装这个库: 
    sudo apt-get install python-gi-cairo
 
安装后就可以看到图像能够正常显示了。(不然会显示一片空白,其实如果你选择保存的话,然后打开图像,是可以看到绘制出来的图像的) 查看全部
版本信息: ubuntu16
python 2.7
matplotlib (最新,通过pip安装的)
 
绘制任何图形都会输出下面的错误:
TypeError: Couldn't find foreign struct converter for 'cairo.Context'
 
cairo这个依赖库我已经通过apt安装的了。
 
通过调试,最后发现需要安装这个库: 
    sudo apt-get install python-gi-cairo
 
安装后就可以看到图像能够正常显示了。(不然会显示一片空白,其实如果你选择保存的话,然后打开图像,是可以看到绘制出来的图像的)

python多线程出现错误 thread.error: can't start new thread

李魔佛 发表了文章 • 0 个评论 • 882 次浏览 • 2017-12-14 17:58 • 来自相关话题

原因是线程数太多,没有退出,导致正在运行的线程数超过系统的限制。(win7 64bit貌似支持1000多个python线程同时运行)。
 
解决办法就是加锁或者合理退出一些占用资源的线程。
原因是线程数太多,没有退出,导致正在运行的线程数超过系统的限制。(win7 64bit貌似支持1000多个python线程同时运行)。
 
解决办法就是加锁或者合理退出一些占用资源的线程。

matplotlib pie饼图 lable设置中文乱码 解决办法

李魔佛 发表了文章 • 0 个评论 • 662 次浏览 • 2017-11-03 17:10 • 来自相关话题

X=[1,1,1,1,1,1,1]
labels = [u'百度',u'京东',u'陆金所',u'工行',u'招行',u'华泰',u'国金',u'广发',u'QQ']
plt.figure()
p = plt.pie(X,labels=labels) 





(实际X的数据为其他数据,这里只是简单的设为1的列表)
 
google了些资料,找到以下可行的解决办法:
 
找一个系统自带的中文字体文件的路径
比如这一个:C:\Windows\winsxs\amd64_microsoft-windows-font-truetype-simfang_31bf3856ad364e35_6.1.7600.16385_none_e417159f3b4eb1b7\simfang.ttf
 
把路径拷贝下来。
 
然后在代码中设置: for front in p[1]:
front.set_fontproperties(mpl.font_manager.FontProperties(
fname='C:\Windows\winsxs\amd64_microsoft-windows-font-truetype-simfang_31bf3856ad364e35_6.1.7600.16385_none_e417159f3b4eb1b7\simfang.ttf'))
 
把 p中的font属性强制改为指向我们想要的字体路径,这样就可以达到修改饼图上的中文乱码问题了。
 





 
正常显示中文了。
 
在linux下同理,只需要下载一个字体文件,放在某个目录,然后在代码中指定字体的位置。
字体文件下载: https://fontzone.net/download/simhei
然后运行: $locate -b '\mpl-data'
看看mpl目录的位置,把字体文件放到fonts/ttf这个目录下面,
如果使用代码设定,如下:#!/usr/bin/env python
#coding:utf-8
"""a demo of matplotlib"""
import matplotlib as mpl
from matplotlib import pyplot as plt
mpl.rcParams[u'font.sans-serif'] = ['simhei']
mpl.rcParams['axes.unicode_minus'] = False
years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
gdp = [300.2, 543.3, 1075.9, 2862.5, 5979.6, 10289.7, 14958.3]
#创建一副线图,x轴是年份,y轴是gdp
plt.plot(years, gdp, color='green', marker='o', linestyle='solid')
#添加一个标题
plt.title(u'名义GDP')
#给y轴加标记
plt.ylabel(u'十亿美元')
plt.show()
 
PS:
在树莓派上回出现的问题:
UserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to DejaVu Sanspi@raspb DejaVu Sans^CserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to
 
这个时候只要安装一个font-manager就可以了:
sudo apt install font-manager
 
OK ! 查看全部
    X=[1,1,1,1,1,1,1]
labels = [u'百度',u'京东',u'陆金所',u'工行',u'招行',u'华泰',u'国金',u'广发',u'QQ']
plt.figure()
p = plt.pie(X,labels=labels)
 

matplot_乱码.png

(实际X的数据为其他数据,这里只是简单的设为1的列表)
 
google了些资料,找到以下可行的解决办法:
 
找一个系统自带的中文字体文件的路径
比如这一个:C:\Windows\winsxs\amd64_microsoft-windows-font-truetype-simfang_31bf3856ad364e35_6.1.7600.16385_none_e417159f3b4eb1b7\simfang.ttf
 
把路径拷贝下来。
 
然后在代码中设置:
    for front in p[1]:
front.set_fontproperties(mpl.font_manager.FontProperties(
fname='C:\Windows\winsxs\amd64_microsoft-windows-font-truetype-simfang_31bf3856ad364e35_6.1.7600.16385_none_e417159f3b4eb1b7\simfang.ttf'))

 
把 p中的font属性强制改为指向我们想要的字体路径,这样就可以达到修改饼图上的中文乱码问题了。
 

matplot_乱码2.png

 
正常显示中文了。
 
在linux下同理,只需要下载一个字体文件,放在某个目录,然后在代码中指定字体的位置。
字体文件下载: https://fontzone.net/download/simhei
然后运行: $locate -b '\mpl-data'
看看mpl目录的位置,把字体文件放到fonts/ttf这个目录下面,
如果使用代码设定,如下:
#!/usr/bin/env python
#coding:utf-8
"""a demo of matplotlib"""
import matplotlib as mpl
from matplotlib import pyplot as plt
mpl.rcParams[u'font.sans-serif'] = ['simhei']
mpl.rcParams['axes.unicode_minus'] = False
years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
gdp = [300.2, 543.3, 1075.9, 2862.5, 5979.6, 10289.7, 14958.3]
#创建一副线图,x轴是年份,y轴是gdp
plt.plot(years, gdp, color='green', marker='o', linestyle='solid')
#添加一个标题
plt.title(u'名义GDP')
#给y轴加标记
plt.ylabel(u'十亿美元')
plt.show()

 
PS:
在树莓派上回出现的问题:
UserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to DejaVu Sanspi@raspb DejaVu Sans^CserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to
 
这个时候只要安装一个font-manager就可以了:
sudo apt install font-manager
 
OK !

You must either define the environment variable DJANGO_SETTINGS_MODULE

李魔佛 发表了文章 • 0 个评论 • 478 次浏览 • 2017-10-08 12:41 • 来自相关话题

代码如下:
from django import template
def template_usage():
t = template.Template('My name is {{ name }}')
c = template.Context({'name':'Rocky'})
print t.render(c)

template_usage()
就出错了。
 
这个原因一般就是直接使用python或者ipython交互解析器造成的。
 
你需要切换到你的django目录,然后使用python manager.py shell 运行, 然后执行上面的函数或者代码, 就不会再出现这个错误了
 
django.core.exceptions.ImproperlyConfigured: Requested setting TEMPLATES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
 
  查看全部
代码如下:
from django import template
def template_usage():
t = template.Template('My name is {{ name }}')
c = template.Context({'name':'Rocky'})
print t.render(c)

template_usage()

就出错了。
 
这个原因一般就是直接使用python或者ipython交互解析器造成的。
 
你需要切换到你的django目录,然后使用python manager.py shell 运行, 然后执行上面的函数或者代码, 就不会再出现这个错误了
 
django.core.exceptions.ImproperlyConfigured: Requested setting TEMPLATES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
 
 

30天学会django

李魔佛 发表了文章 • 0 个评论 • 598 次浏览 • 2017-09-17 23:40 • 来自相关话题

没错,最近30天开始要折腾这玩意。
 
先放个标题出来。 每天不定时更新。
 
 
我用的视频教程是cstv的那一个系列教程。
 
不推荐那个django中文手册的,因为文档比较旧,很多命令或者代码是无法再新版的django上运行通过的。 这个会比较打击人。
 

  查看全部
没错,最近30天开始要折腾这玩意。
 
先放个标题出来。 每天不定时更新。
 
 
我用的视频教程是cstv的那一个系列教程。
 
不推荐那个django中文手册的,因为文档比较旧,很多命令或者代码是无法再新版的django上运行通过的。 这个会比较打击人。
 

 

mongodb中$sum:1 后面的1是什么意思

李魔佛 发表了文章 • 0 个评论 • 1271 次浏览 • 2017-09-05 23:32 • 来自相关话题

源数据:
{
"_id" : "GuqXmAkkARqhBDqhy",
"beatmapset_id" : "342537",
"version" : "MX",
"diff_approach" : "5",
"artist" : "Yousei Teikoku",
"title" : "Kokou no Sousei",
"difficultyrating" : "3.5552737712860107"
}
{
"_id" : "oHLT7KqsB7bztBGvu",
"beatmapset_id" : "342537",
"version" : "HD",
"diff_approach" : "5",
"artist" : "Yousei Teikoku",
"title" : "Kokou no Sousei",
"difficultyrating" : "2.7515676021575928"
}
{
"_id" : "GbotZfrPEwW69FkGD",
"beatmapset_id" : "342537",
"version" : "NM",
"diff_approach" : "5",
"artist" : "Yousei Teikoku",
"title" : "Kokou no Sousei",
"difficultyrating" : "0"
}
 然后运行以下的命令:
 
db.getCollection('dup_case').aggregate(
[
{$group:{
_id:{diff_approach:'$diff_approach'},
count:{$sum:2}
}},
{$match:{count:{$gt:1}}}
]

 
返回的count是6
 
所以
$sum:1 的含义:
如果前面的情况出现一次,就加1, 如果后面$sum:2 那么每次前面条件满足一次就加2
  查看全部
源数据:
{
"_id" : "GuqXmAkkARqhBDqhy",
"beatmapset_id" : "342537",
"version" : "MX",
"diff_approach" : "5",
"artist" : "Yousei Teikoku",
"title" : "Kokou no Sousei",
"difficultyrating" : "3.5552737712860107"
}
{
"_id" : "oHLT7KqsB7bztBGvu",
"beatmapset_id" : "342537",
"version" : "HD",
"diff_approach" : "5",
"artist" : "Yousei Teikoku",
"title" : "Kokou no Sousei",
"difficultyrating" : "2.7515676021575928"
}
{
"_id" : "GbotZfrPEwW69FkGD",
"beatmapset_id" : "342537",
"version" : "NM",
"diff_approach" : "5",
"artist" : "Yousei Teikoku",
"title" : "Kokou no Sousei",
"difficultyrating" : "0"
}

 然后运行以下的命令:
 
db.getCollection('dup_case').aggregate(
[
{$group:{
_id:{diff_approach:'$diff_approach'},
count:{$sum:2}
}},
{$match:{count:{$gt:1}}}
]
)
 
 
返回的count是6
 
所以
$sum:1 的含义:
如果前面的情况出现一次,就加1, 如果后面$sum:2 那么每次前面条件满足一次就加2
 

python print 打印 % 百分号

李魔佛 发表了文章 • 0 个评论 • 884 次浏览 • 2017-09-05 21:27 • 来自相关话题

记得以前困扰过自己的一个问题.
当时的解决方式是这样的:
 

a = 1
print "a values is ", a, "%"
 
把百分号切割开来.
 
后来才知道,正确显示百分号的方法:
 
 print 'a values is %d%%' %a
 用2个百分号来标示.
 
 
  查看全部
记得以前困扰过自己的一个问题.
当时的解决方式是这样的:
 

a = 1
print "a values is ", a, "%"
 
把百分号切割开来.
 
后来才知道,正确显示百分号的方法:
 
 
print 'a values is %d%%' %a

 用2个百分号来标示.
 
 
 

Python 学习笔记2.1 ——数据类型和结构

sicily02 发表了文章 • 2 个评论 • 613 次浏览 • 2017-08-29 13:22 • 来自相关话题

电脑配置:windows 64位
Python版本:3.6.0
 
学习内容: 量化分析师的Python日记【第1天:谁来给我讲讲Python?】 以下为转载加自己的笔记
         
一、容器
1,什么是容器

Python中有一种名为容器的数据结构,包括序列和字典,序列又包括列表、元组、字符串等
 




 
列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]

元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)

字符串的基本形式比如:’hello’
 
以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。
 
索引是从0开始的





 
2. 序列的一些通用操作

除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。

(1)索引(补充上面)

序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:





 
(2)分片

使用分片操作来访问一定范围内的元素,它的格式为:

a[开始索引:结束索引:步长]

那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。





 
 
  查看全部
电脑配置:windows 64位
Python版本:3.6.0
 
学习内容: 量化分析师的Python日记【第1天:谁来给我讲讲Python?】 以下为转载加自己的笔记
         
一、容器
1,什么是容器

Python中有一种名为容器的数据结构,包括序列和字典,序列又包括列表、元组、字符串等
 
1.png

 
列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]

元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)

字符串的基本形式比如:’hello’
 
以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。
 
索引是从0开始的

2.png

 
2. 序列的一些通用操作

除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。

(1)索引(补充上面)

序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:

微信截图_20170908173242.png

 
(2)分片

使用分片操作来访问一定范围内的元素,它的格式为:

a[开始索引:结束索引:步长]

那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。

微信截图_20170908173417.png

 
 
 

Python 学习笔记1.2——第三方库安装

sicily02 发表了文章 • 0 个评论 • 463 次浏览 • 2017-08-27 18:23 • 来自相关话题

电脑配置:windows 64位
python版本:3.6.0
 
一、前往第三方网站下载所需要的包
 
http://www.lfd.uci.edu/~gohlke/pythonlibs/ 
 
二、使用pip安装
 
pip install xxx




  查看全部
电脑配置:windows 64位
python版本:3.6.0
 
一、前往第三方网站下载所需要的包
 
http://www.lfd.uci.edu/~gohlke/pythonlibs/ 
 
二、使用pip安装
 
pip install xxx
5.png