Python Notes

Coding Skill目录下的所有Tutorials、Notes博客都会不定期迭代更新

文章目录

leetcode刷题

算法/数据结构/Python/剑指offer/机器学习/leetcode Python implement
Author own leetcode solutions by python
中文 Python 笔记

Pypi

Link
The Python Package Index (PyPI) is a repository of software for the Python programming language.

glob

https://docs.python.org/3/library/glob.html
https://blog.csdn.net/dcrmg/article/details/78309469
1.介绍
glob模块用来查找文件目录和文件,常见的两个方法有glob.glob()和glob.iglob(),可以和常用的find功能进行类比,glob支持*?[]这三种通配符

2.五种通配符

通配符功能
*匹配0或多个字符
**匹配所有文件、目录、子目录和子目录里的文件(3.5版本新增)
?匹配1个字符,与正则表达式里的?不同
[exp]匹配指定范围内的字符,如:[1-9]匹配1至9范围内的字符
[!exp]匹配不在指定范围内的字符
import glob
filelist=glob.glob(r'./*.py')
#返回的数据类型是list,
#>>['./1.py','./2.py']包含'./'
#而*.py返回 “a.py”.

# iglob与glob类似,只是这里返回值为迭代器,对于大量文件时更为省内存
import glob  
f = glob.iglob(r'../*.py') 
print f #<generator object iglob at 0x00B9FF80> 
for py in f: 
    print py  

继承

https://blog.csdn.net/neuldp/article/details/52771415
https://blog.csdn.net/feishicheng/article/details/79596000

csvkit

https://csvkit.readthedocs.io/en/1.0.3/
csvkit is a suite of command-line tools for converting to and working with CSV, the king of tabular file formats.

os.walk()和os.path.walk()

https://www.cnblogs.com/zmlctt/p/4222621.html

python 列表相加:两种方法实现

1 利用操作符+
比如:

a = [1,2,3]
b = [4,5,6]
c = a+b
c的结果:[1,2,3,4,5,6]

2 利用extend
比如:

a = [1,2,3]
b = [4,5,6]
a.extend(b)
a的结果:[1,2,3,4,5,6]

结果是一样的,但是+号生成的是一个新的对象,而extend则是在原地的修改a对象。
另外注意:列表的append方法,是往列表中添加新元素
比如:

a = [1,2,3]
a.append(4) #后面跟的是元素类型
a的结果为:[1,2,3,4]

关于json.dumps中的参数,例如ensure_ascii

https://blog.csdn.net/liangxy2014/article/details/78985057

python 输出一串中文字符,在控制台上(控制台使用UTF-8编码)通过print 可以正常显示,但是写入到文件中之后,中文字符都输出成ascii编码了。英文字符能正常显示可读字符。

原因:json.dumps 序列化时默认使用的ascii编码,想输出真正的中文需要指定ensure_ascii=False:更深入分析,是应为dJSON object 不是单纯的unicode实现,而是包含了混合的unicode编码以及已经用utf-8编码之后的字符串。
可行的方式如下:

 1 import os
 2 import os.path
 3 import io
 4 import sys
 5 import json
 6 
 7 contentByPage = {}
 8 contentByPage['document'] = shortName
 9 contentByPage['content'] = text
10 contentByPage['pageNumber'] = pageNumber
11 jsonFile = io.open(shortName+"--"+str(pageNumber)+".json",'w', encoding='utf8')
12 jsonFile.write(json.dumps(contentByPage, ensure_ascii=False).decode('utf8'))
13 jsonFile.flush()
14 jsonFile.close()

列表表达式其实就是将for循环的处理逻辑搬到前面来。

当处理逻辑过于复杂,则还是采用for循环迭代或函数

python循环单个数据结构可以返回多个变量

[x,y for x,y in [(1,2),(2,4),(3,6)]]
[x+y for x,y in [[1,2],[2,4],[3,6]]]

python range() 函数可创建一个整数列表,一般用在 for 循环中。

range(start, stop[, step])
start: 计数从 start 开始。默认是从 0 开始。
stop: 计数到 stop 结束,但不包括 stop。
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

[x for x in range(5)]
[0, 1, 2, 3, 4]

[x for x in range(5,10)]
[5, 6, 7, 8, 9]

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

enumerate(sequence, [start=0])
sequence – 一个序列、迭代器或其他支持迭代对象。
start – 下标起始位置。

生成器

列表表达式的 [] 改为 () 即可

g = (str(index)+":"+str(x) for index,x in enumerate(seasons,1))
g
<generator object at 0x10314a830>

[g1 for g1 in g]
[‘1:Spring’, ‘2:Summer’, ‘3:Fall’, ‘4:Winter’]

生成器另一种方式:yield
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return ‘done’
这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

f = fib(6)
f
<generator object fib at 0x104feaaa0>

这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

def fib(max):
… n, a, b = 0, 0, 1
… while n < max:
… yield b
… a, b = b, a + b
… n = n + 1
… return ‘done’

g2 = fib(6)
g2
<generator object fib at 0x10314a7d8>

[g21 for g21 in g2]
[1, 1, 2, 3, 5, 8]

但是用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中:

g = fib(6)
while True:
… try:
… x = next(g)
… print(‘g:’, x)
… except StopIteration as e:
… print(‘Generator return value:’, e.value)
… break

g: 1
g: 1
g: 2
g: 3
g: 5
g: 8
Generator return value: done

生成器的好处:降低数据在内存中的消耗

在python中不需要像java一样用临时变量即可完成互换

a,b = b,a+b
a,b = b,a
=>
t = (b,a+b)
a = t(0)
b = t(1)

高阶函数

既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
def add(x, y, f):
return f(x) + f(y)

print(add(-5, 6, abs))

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:

def f(x):
… return x * x

r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
list® # 转为list数据结构,常用,str转list,list转str
[1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce()函数把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

from functools import reduce
def add(x, y):
… return x + y

reduce(add, [1, 3, 5, 7, 9])
25

from functools import reduce

DIGITS = {‘0’: 0, ‘1’: 1, ‘2’: 2, ‘3’: 3, ‘4’: 4, ‘5’: 5, ‘6’: 6, ‘7’: 7, ‘8’: 8, ‘9’: 9}

def char2num(s):
return DIGITS[s]

def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s))
函数f() iterable数据

filter()函数用于过滤序列。
和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
例如,在一个list中,删掉偶数,只保留奇数,可以这么写:
def is_odd(n):
return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) # 结果: [1, 5, 9, 15]

面向对象

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度
面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递
在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性

pymysql pymongodb redis

pymysql学习-菜鸟教程
http://www.runoob.com/python3/python3-mysql.html
pymysql官方文档
https://pymysql.readthedocs.io/en/latest/

json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0
https://blog.csdn.net/liu_xzhen/article/details/79563782

1.Math.round():根据“round”的字面意思“附近、周围”,可以猜测该函数是求一个附近的整数,看下面几个例子就明白。
小数点后第一位<5
正数:Math.round(11.46)=11
负数:Math.round(-11.46)=-11

小数点后第一位>5
正数:Math.round(11.68)=12
负数:Math.round(-11.68)=-12

小数点后第一位=5
正数:Math.round(11.5)=12
负数:Math.round(-11.5)=-11
总结:(小数点后第一位)大于五全部加,等于五正数加,小于五全不加。

2.Math.ceil():根据“ceil”的字面意思“天花板”去理解;
例如:
Math.ceil(11.46)=Math.ceil(11.68)=Math.ceil(11.5)=12
Math.ceil(-11.46)=Math.ceil(-11.68)=Math.ceil(-11.5)=-11

3.Math.floor():根据“floor”的字面意思“地板”去理解;
例如:
Math.ceil(11.46)=Math.ceil(11.68)=Math.ceil(11.5)=11
Math.ceil(-11.46)=Math.ceil(-11.68)=Math.ceil(-11.5)=-12

python基础----特性(property)、静态方法(staticmethod)、类方法(classmethod)、__str__的用法

https://www.cnblogs.com/wangyongsong/p/6750454.html

在Python中使用break跳出多层循环?

https://www.zhihu.com/question/37076998

Python 操作Office文件api\

docx模块:可读取、写入.docx文档(不支持.doc文档!!!)
xlrd模块:可读取.xls、.xlsx表格
xlwt模块:可写入.xls表格(不可写入.xlsx文件!!!)
pptx模块:可读取、写入.ppt、.pptx(.ppt演示文稿,只能读取pptx模块自身输出的,对其他方式生成的不支持!!!)

base64 转为图片保存

什么是base64?
https://blog.csdn.net/qq_32502511/article/details/73551187

简单的文件操作 api-shutil

https://blog.csdn.net/woshisangsang/article/details/74360612
https://blog.csdn.net/silentwolfyh/article/details/74931123
python中对文件和文件夹进行移动、复制、删除、重命名,主要依赖os模块和shutil模块,要死记硬背这两个模块的方法还是比较困难的,可以用一个例子集中演示文件的移动、复制、删除、重命名,用到的时候直接查询就行。

#导入shutil模块和os模块
import shutil,os

#复制单个文件
shutil.copy("C:\\a\\1.txt","C:\\b")
#复制并重命名新文件
shutil.copy("C:\\a\\2.txt","C:\\b\\121.txt")
#复制整个目录(备份)
shutil.copytree("C:\\a","C:\\b\\new_a")

#删除文件
os.unlink("C:\\b\\1.txt")
os.unlink("C:\\b\\121.txt")
#删除空文件夹
try:
    os.rmdir("C:\\b\\new_a")
except Exception as ex:
    print("错误信息:"+str(ex))#提示:错误信息,目录不是空的
#删除文件夹及内容
shutil.rmtree("C:\\b\\new_a")

#移动文件
shutil.move("C:\\a\\1.txt","C:\\b")
#移动文件夹
shutil.move("C:\\a\\c","C:\\b")

#重命名文件
shutil.move("C:\\a\\2.txt","C:\\a\\new2.txt")
#重命名文件夹
shutil.move("C:\\a\\d","C:\\a\\new_d")

Python异常模块traceback

#!/usr/bin/python
import sys
import traceback
import test1
a=10
b=0
try:
    print test1.division(a,b)
except:
    print 'invoking division failed.'
    traceback.print_exc()
    sys.exit(1)

用try…except捕获异常,然后traceback.print_exc()打印。

Random

https://docs.python.org/3/library/random.html#bookkeeping-functions
https://www.cnblogs.com/duking1991/p/6121300.html

random.random()用于生成,用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成随机数
n: a <= n <= b。如果 a <b, 则 b <= n <= a。

print random.uniform(10, 20)  
print random.uniform(20, 10)  
#---- 
#18.7356606526  
#12.5798298022  
random.randint

用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,Python生成随机数
print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 
print random.randint(20, 20) #结果永远是20 
#print random.randint(20, 10) #该语句是错误的。 
下限必须小于上限。

random.randrange

从指定范围内,按指定基数递增的集合中 ,这篇文章就是对python生成随机数的应用程序的部分介绍。

随机整数:
>>> import random
>>> random.randint(0,99)
21

随机选取0100间的偶数:
>>> import random
>>> random.randrange(0, 101, 2)
42

随机浮点数:
>>> import random
>>> random.random() 
0.85415370477785668
>>> random.uniform(1, 10)
5.4221167969800881

随机字符:
>>> import random
>>> random.choice('abcdefg&#%^*f')
'd'

多个字符中选取特定数量的字符:
>>> import random
random.sample('abcdefghij',3) 
['a', 'd', 'b']

多个字符中选取特定数量的字符组成新字符串:
>>> import random
>>> import string
>>> string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).r
eplace(" ","")
'fih'

随机选取字符串:
>>> import random
>>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )
'lemon'

洗牌:
>>> import random
>>> items = [1, 2, 3, 4, 5, 6]
>>> random.shuffle(items)
>>> items
[3, 2, 5, 6, 4, 1]

项目导包/模块

from . import tfutil

Python 包内的导入问题(绝对导入和相对导入)

http://www.cnblogs.com/gaowengang/p/8543840.html

python
env 是一个外部命令,程序文件/bin/env,列出所有环境变量及其赋值。env命令显示当前用户的变量;

scipy.misc报错

module ‘scipy.misc’ has no attribute ‘imresize’
module ‘scipy.misc’ has no attribute ‘imsave’
解决方案:
pip install pillow
因为scipy.misc是基于pillow的

python中type dtype astype 的用法

1.type 获取数据类型

2.dtype 数组元素的类型
在这里插入图片描述
3.astype 修改数据类型
在这里插入图片描述

python模块之argparse

https://docs.python.org/3/library/argparse.html
https://blog.csdn.net/ziyang_li/article/details/9664973
https://blog.csdn.net/yuyushikuan/article/details/79729660

ValueError: could not broadcast input array from shape (32,32,3) into shape (32,32)

报错在以下这段代码,应该是数据问题,有些数据是三维的,有些数据是一维的导致
sample_images = np.array(array)

python的subprocess模块

python的subprocess模块
Python之系统交互(subprocess)

from future import print_function

python2/3 print()差异

AttributeError: ‘module’ object has no attribute’xxx’

  1. 命名py脚本时,不要与python预留字,模块名等相同

  2. 删除该库的.pyc文件(因为py脚本每次运行时均会生成.pyc文件;在已经生成.pyc文件的情况下,若代码不更新,运行时依旧会走pyc,所以要删除.pyc文件),重新运行代码;或者找一个可以运行代码的环境,拷贝替换当前机器的.pyc文件即可

sys.argv[] 用法

sys.argv[]是用来获取命令行输入的参数的(参数和参数之间空格区分),sys.argv[0]表示代码本身文件路径,所以从参数1开始,表示获取的参数了
https://blog.csdn.net/u013205877/article/details/78571453

LMDB数据库

LMDB的全称是Lightning Memory-Mapped Database(快如闪电的内存映射数据库),它的文件结构简单,包含一个数据文件和一个锁文件:
在这里插入图片描述
https://blog.csdn.net/dcrmg/article/details/79144507

可变参数*args,关键字参数**kwargs

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
关键字参数有什么用?它可以扩展函数的功能。

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

>>> person('Michael', 30)
name: Michael age: 30 other: {}
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

zipfile 解压缩zip文件

Blog

   $ apt-get install p7zip-full # ubuntu
   $ brew install p7zip # Mac
   with zipfile.ZipFile(filepath) as zf:
       zf.extractall(base_path)

tarfile解压gz文件

tarfile.open(filepath, 'r:gz').extractall(dest_directory)

sys.path自定义导入环境

import sys
# sys.path.append('./network')
# sys.path.append('./utils')
sys.path.append('./')
# sys.path.append("/home/xufeng/.conda/envs/fashion/lib/python3.6/site-packages")
# print(sys.path)

python any()和all()用法

https://www.cnblogs.com/apple2016/p/5767453.html

from future import print_function

https://blog.csdn.net/xiaotao_1/article/details/79460365

hasattr() getattr() setattr()

https://www.cnblogs.com/cenyu/p/5713686.html

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

Ref

Python文件头部的#!/usr/bin/env python 是什么意思

https://blog.csdn.net/ai_XX/article/details/82998403

python 查看对象的属性和方法

https://blog.csdn.net/ruguowoshiyu/article/details/80539299

print(dir(obj)) obj为对象名, 此命令打印对象所有属性和方法

a = [1,2]
print(dir(a))

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

列表的前一部分为魔法方法,最后才是我们关注的属性和方法
'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'

实战案例浅析JS加密 - DES与Base64

https://mp.weixin.qq.com/s/e0jFdh0hz4ro89i80SJuRA

Python分发打包

Official doc
Github
Blog Recommand
Python打包分发工具setuptools简介

装饰器

函数 = 对象
变量 也可以是 对象
数据结构 = 类(变量(数据)+ 函数)
对象 ?= 类实例(单独的变量(数据)+ 函数)
l = List(‘h’,‘e’)
那变量 l 是不是就是类实例了?

由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。

假设我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

本质上,decorator就是一个返回函数的高阶函数。

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper
    
观察上面的log,因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助Python的@语法,把decorator置于函数的定义处:
@log
def now():
    print('2015-3-25')
    
调用now()函数,不仅会运行now()函数本身,还会在运行now()函数前打印一行日志:
>>> now()
call now():
2015-3-25

把@log放到now()函数的定义处,相当于执行了语句:
now = log(now)

https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584

python特殊函数

1__call__()
在python中所有的函数都是可调用对象。
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...

单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。

Ref

2__str__和__repr__
把一个类的实例变成 str,就需要实现特殊方法__str__():

>>> p = Person('Bob', 'male')
>>> print p
(Person: Bob, male)
但是,如果直接敲变量 p:

>>> p
<main.Person object at 0x10c941890>
似乎__str__() 不会被调用。

因为 Python 定义了__str__()和__repr__()两种方法,str()用于显示给用户,而__repr__()用于显示给开发人员。

有一个偷懒的定义__repr__的方法:

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def __str__(self):
        return '(Person: %s, %s)' % (self.name, self.gender)
    __repr__ = __str__

Ref

3.多态
多态: 类具有继承关系,并且子类类型可以向上转型看做父类类型。
Ref

4.进阶
@property
#可以向访问数据属性一样去访问area,会触发一个函数的执行,动态计算出一个值

@classmethod

@staticmethod
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。
而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。
这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

@wrap_objective

Python 中的 classmethod 和 staticmethod 有什么具体用途?
python基础----特性(property)、静态方法(staticmethod)、类方法(classmethod)、__str__的用法
@staticmethod和@classmethod的用法
Python进阶-----静态方法(@staticmethod)

Python self

https://www.cnblogs.com/jessonluo/p/4717140.html

匿名函数 Lambda

匿名函数lambda x: x * x实际上就是:

def f(x):
    return x * x

关键字lambda表示匿名函数,冒号前面的x表示函数参数。

python计算占用内存

10种检测Python程序运行时间、CPU和内存占用的方法
python线程通信
python 多线程中子线程和主线程相互通信
多线程之线程通信
Python线程通信

python fire使用指南

Python Fire是一个Python库,只需对Fire进行一次调用即可将任何Python组件转变为命令行界面。
https://blog.csdn.net/qq_17550379/article/details/79943740

datetime

Python datetime 格式化字符串:strftime()
python 移动文件或文件夹操作

不同目录模块导入

python笔记(一)获取当前目录路径和文件
Python中import导入上一级目录模块及循环import问题的解决

Supervisor进程管理工具

Python 进程管理工具 Supervisor 使用教程

垃圾回收

gc垃圾回收
System.gc();

绘图模块:Matplotlib、Seaborn

Python 3下Matplotlib画图中文显示乱码的解决方法
http://blog.csdn.net/u012705410/article/details/47379957

Matplotlib 图例中文显示(大小修改)
http://blog.csdn.net/qq_28119401/article/details/50917653

matplotlib.pyplot.plot()参数详解
http://blog.csdn.net/chinwuforwork/article/details/51786967

Python数据可视化-seaborn
https://www.cnblogs.com/gczr/p/6767175.html
https://www.cnblogs.com/kylinlin/p/5236601.html

数据库模块

python操作MongoDB
https://www.cnblogs.com/melonjiang/p/6536876.html
mongodb教程
http://www.runoob.com/mongodb/mongodb-databases-documents-collections.html

数据分析模块

数据分析之pandas
https://www.cnblogs.com/nxld/p/6058591.html
https://www.cnblogs.com/en-heng/p/5630849.html
http://blog.csdn.net/zhurui_idea/article/details/56012622
http://www.cnblogs.com/gczr/p/6761613.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值