数据分析系列之Python数据分析简介

OpenCV-py学习笔记(三)—— 图像处理(上) 文章目录改变颜色空间1. 转换颜色空间 cv2.cvtColor()2. 物体跟踪 cv2.inRange()图像的阈值处理1. 简单阈值处理 cv2.threshold()2. 自适应阈值处理 cv2.adaptiveThreshold() 改变颜色空间 1. 转换颜色空间 cv2.cvtColor() OpenCV中提供了100多种颜色空间,其实我们常用的也就那么三个,RGB、HSV、灰度图,... 阅读详情

Python是一门简单易学且功能强大的编程语言,使其在许多领域成为编写脚本或开发应用程序理想语言 .Python被称作"胶水语言",是由于其运行效率的问题,将程序核心部分由C++等高效率语言编写,然后各个部分由它粘合.
我们在开发中如果是新手可以先选择Windows平台,后期可以迁移至Linux平台,Linux平台自带Python,而且更容易解决第三方库依赖问题.至于语言版本我推荐使用3.x版本.

1.Windows平台环境安装

1.1安装Python

打开下载Windows x86-64 executable installer 64位安装程序,并安装完毕.

1.2安装Anaconda

Anaconda是一个方便的python包管理和环境管理软件,一般用来配置不同的项目环境,科学计算所需要的第三方模块都可以在其中获得。前往Anaconda即可下载安装,国内用户可以到下载最新版本.
TUNA 还提供了 Anaconda 仓库的镜像,菜单打开Anaconda3文件夹,打开Anaconda Prompt,运行以下命令:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

conda常用命令:

conda info --envs 获得当前环境
conda create -n your_env_name 创建新的环境,默认最新版本Python
conda create -n your_env_name python=3.5 创建指定3.5版本的Python环境
conda create -n your_env_name python=3.5 numpy pandas 创建3.5环境并且安装两个包
conda update --all 更新包信息
conda env list 查看环境列表
activate 环境名 切换环境
deactivate 退出环境
conda create -n your_env_name --clone oldname 创建一个新环境想克隆一部分旧的环境
conda remove -n your_env_name --all 删除某个环境
conda env export > environment.yml 导出环境配置(非常有用,比如你想帮朋友安装和你一模一样的环境,你可以直接导出一个配置文件给他,就能免除很多人力安装)  
conda env create -f environment.yml 当前目录生成一个environment.yml,你把它交给小伙伴或拷到另一台机器,小伙伴只需要对这个文件执行命令,就可以生成和你原来一模一样的环境啦
conda list 列举当前环境下的所有包
conda list -n packagename 列举某个特定名称包
conda install packagename 为当前环境安装某包
conda install -n envname packagename 为某环境安装某包
conda search packagename 搜索某包
conda update packagename 更新当前环境某包
conda update -n envname packagename 更新某特定环境某包
conda remove packagename 删除当前环境某包
conda remove -n envname packagename 删除某环境环境某包

2.Python使用入门

运行Python程序有两种方式,一种是直接在命令行中输入Python,直接启动程序,然后输入相关命令,exit()即可退出,第二种是通过运行py文件来执行Python程序.本文通过第二种,命令是python xxx.py,具体用法如下例:

#!/usr/bin/env python3 为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释
# -*- coding: utf-8 -*- 位于头部,表示文件中带有中文,需要使用UTF8编码,同时注意保存UTF-8格式.
# python hello.py 单行注释,以#开头
''' 多行注释,3个英文单引号'
nihaonihao
wqwqeqwewq
'''
a = 10 #整数赋值
f = 1.5 #浮点数赋值
c = "字符串" #字符串赋值
d = "I\'m ok" #字符转义
e = r'\\\\t\\\\' #不进行转义
#'''表示多行打印输出
f = True #布尔值
f and False #布尔与运算
not True #非运算
None #空值
PI = 3.14159265359 #规定常量格式
10 // 3 #地板除,只取整数部分
10 % 3 #取余数
ord('A') #获取字符整数表示
chr(66) #把编码转换为对应的字符
x = b'ABC' #bytes类型的数据用带b前缀的单引号或双引号表示
'ABC'.encode('ascii') #str通过encode()方法可以编码为指定的bytes,bytes中,无法显示为ASCII字符的字节,用\x##显示
b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') #把bytes变为str,就需要用decode()方法
len('ABC') #计算str包含多少个字符
len(b'ABC') #len()函数就计算字节数
'Hi, %s, you have $%d.' % ('Michael', 1000000) #格式化字符串
'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)  #格式化函数
print ('hhhhh红') #控制台打印输出
classmates = ['Michael', 'Bob', 'Tracy'] #list是一种有序的集合,可以随时添加和删除其中的元素。
classmates[-1] #-1做索引,直接获取最后一个元素
classmates.append('Adam') #往list中追加元素到末尾
classmates.insert(1, 'Jack') #把元素插入到指定的位置
classmates.pop() #删除list末尾的元素
classmates.pop(1) #删除指定位置的元素
classmates[1] = 'Sarah' #把某个元素替换成别的元素,可以直接赋值给对应的索引位置
s = ['python', 'java', ['asp', 'php'], 'scheme'] #list元素也可以是另一个list
classmates = ('Michael', 'Bob', 'Tracy') #tuple一旦初始化就不能修改
t = (1,) #只有1个元素的tuple定义时必须加一个逗号,,来消除歧义
age = 3        #条件判断
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')
s = input('birth: ') #获得输入框,输入字符串
birth = int(s)       #字符串变为数字
if birth < 2000:     #判断数字大小
    print('00前')
else:
    print('00后')
list(range(5)) #range()函数,可以生成一个整数序列,再通过list()函数可以转换为list
sum = 0 #for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    sum = sum + x
print(sum)
n = 1 #只要条件满足,就不断循环,条件不满足时退出循环
while n <= 100:
    if n > 10: # 当n = 11时,条件满足,执行break语句
        break # break语句会结束当前循环
    print(n)
    n = n + 1
print('END')
n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0: # 如果n是偶数,执行continue语句
        continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
    print(n)
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} #类似Go的map,使用键-值(key-value)存储
d['Tracy'] = 88 #修改key对应的值
'Thomas' in d #通过in判断key是否存在
d.get('Thomas', -1) #get()方法,如果key不存在,可以返回None,或者自己指定的value
d.pop('Bob') #pop(key)方法,对应的key,value也会从dict中删除
s = set([1, 1, 2, 2, 3, 3]) #一组key的集合,但不存储value,key不能重复,所以,在set中,没有重复的key.自动过滤重复key
s.add(4) #add(key)方法可以添加元素到set中
s.remove(4) #remove(key)方法可以删除元素
int('123') #内置的常用函数还包括数据类型转换函数
abs(-20) #绝对值函数
max(2, 3, 1, -5) #接收任意多个参数,并返回最大的那个
#函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回
def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x
from abstest import my_abs #my_abs()的函数定义保存为abstest.py文件
def my_abs(x):
    if not isinstance(x, (int, float)): #内置函数isinstance(),参数类型做检查,只允许整数和浮点数类型的参数
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x
def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny #同时返回多个值,但其实就是一个tuple
def map(): #map函数声明,无参数
    pass   #pass 不做任何事情,一般用做占位语句。
map() #调用map函数
#把年龄和城市设为默认参数,大多数学生注册时不需要提供年龄和城市,只提供必须的两个参数
def enroll(name, gender, age=6, city='Beijing'): 
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)
def add_end(L=None): #不变对象一旦创建,对象内部的数据就不能修改
    if L is None:
        L = []
    L.append('END')
    return L
def calc(*numbers): #参数前面加*号。参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
calc(1, 2)
calc()
nums = [1, 2, 3]
calc(*nums) #*nums表示把nums这个list的所有元素作为可变参数传进去
#函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数
def person(name, age, **kw): 
    print('name:', name, 'age:', age, 'other:', kw)
person('Adam', 45, gender='M', job='Engineer')
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)#**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra
def person(name, age, **kw): #检查是否有city和job参数
    if 'city' in kw:
        # 有city参数
        pass
    if 'job' in kw:
        # 有job参数
        pass
    print('name:', name, 'age:', age, 'other:', kw)
def person(name, age, *, city, job): #限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数
    print(name, age, city, job)# *后面的参数被视为命名关键字参数
person('Jack', 24, city='Beijing', job='Engineer') #命名关键字参数必须传入参数名
def person(name, age, *, city='Beijing', job): #命名关键字参数city具有默认值,调用时,可不传入city参数
    print(name, age, city, job)
def person(name, age, *args, city, job): #有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*
    print(name, age, args, city, job)
#参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
#*args是可变参数,args接收的是一个tuple,**kw是关键字参数,kw接收的是一个dict。
#命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数
def fact(n): #函数在内部调用自身本身,这个函数就是递归函数
    if n==1:
        return 1
    return n * fact(n - 1)
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
L[0:3]  #从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素
d = {'a': 1, 'b': 2, 'c': 3}
for key in d: #迭代key
for value in d.values(): #迭代value
for k, v in d.items(): #同时迭代key和value
from collections import Iterable # str是否可迭代
isinstance('abc', Iterable)
for i, value in enumerate(['A', 'B', 'C']): #内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身
     print(i, value)
[x * x for x in range(1, 11)] #生成列表,遍历[1,...,10]每一个,执行x*x,获得列表[1,...,100]
[x * x for x in range(1, 11) if x % 2 == 0] #[4, 16, 36, 64, 100]
[s.lower() for s in L] #把一个list中所有的字符串变成小写
g = (x * x for x in range(10)) #一边循环一边计算的机制,称为生成器
next(g) #next()函数获得generator的下一个返回值
for n in g: #获得g的每一个值
   print(n)
def odd(): #调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
    print('step 1')
    yield 1
    print('step 2')
    yield(3)
    print('step 3')
    yield(5)
from collections import Iterable #直接作用于for循环的对象统称为可迭代对象,使用isinstance()判断一个对象是否是Iterable对象,
isinstance([], Iterable)
from collections import Iterator #next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
isinstance((x for x in range(10)), Iterator) #isinstance()判断一个对象是否是Iterator对象
def add(x, y, f): #函数即变量,一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
    return f(x) + f(y)
print(add(-5, 6, abs))
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) #map()函数接收两个参数,函数,Iterable,map将传入的函数依次作用到序列的每个元素,通过list()函数让它把整个序列都计算出来并返回一个list
from functools import reduce
def add(x, y): #reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
     return x + y
reduce(add, [1, 3, 5, 7, 9])#25
def is_odd(n): #filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
    return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) # 结果: [1, 5, 9, 15]
sorted([36, 5, -12, 9, -21], key=abs) #sorted()函数是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序
def lazy_sum(*args): #不返回求和的结果,而是返回求和的函数
    def sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum
f = lazy_sum(1, 3, 5, 7, 9) #f为返回的函数
f() #调用得到结果25
list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) #关键字lambda表示匿名函数,冒号前面的x表示函数参数
def log(func): #在函数调用前后自动打印日志,但又不希望修改函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)
    def wrapper(*args, **kw): #
        print('call %s():' % func.__name__) #函数对象有一个__name__属性,可以拿到函数的名字
        return func(*args, **kw)
    return wrapper
@log #decorator置于函数的定义处,不仅会运行now()函数本身,还会在运行now()函数前打印一行日志
def now():
    print('2015-3-25')
import functools
int2 = functools.partial(int, base=2) #functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
# mycompany 顶层包名mycompany,维护多个包,避免模块名冲突
#├─ __init__.py #__init__.py本身就是一个模块,而它的模块名就是mycompany
#├─ abc.py   #abc.py模块的名字就变成了mycompany.abc
#└─ xyz.py   #一个.py文件就称之为一个模块(Module)
#类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等
if __name__=='__main__': #在其他地方导入该hello模块时,if判断将失败,因此,这种if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试
    test()
class Student(object): #class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
    pass
bart = Student() #Student类创建出Student的实例,创建实例是通过类名+()实现的
bart.name = 'Bart Simpson' #给实例bart绑定一个name属性
#类初始化方法,特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去
class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def get_grade(self): #类的方法
            if self.score >= 90:
                return 'A'
            else:
                return 'C'
bart = Student('Bart Simpson', 59) #必须传入初始化参数
bart.get_grade() #调用方法
class Student(object):
    def __init__(self, name, score): #属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问
        self.__name = name
        self.__score = score
class Animal(object): #父类
    def run(self):
        print('Animal is running...')
class Dog(Animal): #子类,直接从Animal类继承就自动拥有了run()方法
    def eat(self): #可增加方法
            print('Eating meat...')
     def run(self): #可覆盖方法
             print('Dog is running...')
isinstance(Dog, Animal) #判断是否是一类
def set_score(self, score): #给所有实例都绑定方法,可以给class绑定方法
  self.score = score #动态绑定允许我们在程序运行的过程中动态给class加上功能
Student.set_score = set_score
class Student(object):
    __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称,只允许绑定以下属性
 class Student(object):
     @property #只读修饰器,不会暴露
     def birth(self):
         return self._birth
     @birth.setter #只写修饰器,可通过属性调用,s.bitrh = 1234
     def birth(self, value):
         self._birth = value
     @property
     def age(self):
         return 2015 - self._birth
class Dog(Mammal, Runnable): #多重继承,一个子类就可以同时获得多个父类的所有功能
    pass
 try:  #某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块
     r = 10 / 0
     print('result:', r)
 except ZeroDivisionError as e:
     print('except:', e)
 finally:
     print('finally...')
 print('END')
 #python mydict_test.py 以_test结尾 单元测试
 class TestStudent(unittest.TestCase):
     def test_80_to_100(self):
         s1 = Student('Bart', 80)
         s2 = Student('Lisa', 100)
         self.assertEqual(s1.get_grade(), 'A')
         self.assertEqual(s2.get_grade(), 'A')
 if __name__ == '__main__':
     unittest.main()

写的有点简单,但数据分析掌握这些就足够了,想要了解更多可以查看相关文档.

3.Python数据分析工具

Python本身数据分析能力并不强,所以需要借助一些第三方库来增强能力,下面介绍用Python数据挖掘用到的相关扩展库.

扩展库简介
Numpy提供数组支持
Scipy提供矩阵支持
Matplotlib数据可视化工具,作图库
Pandas数据分析和探索工具
StatsModels统计建模和计量经济学
Scikit-Learn支持回归分类聚类分析的机器学习库
Keras深度学习库
Gensim文本主题的数据挖掘库

3.1 Numpy

Python并没有提供数组这一功能,而列表处理大量数据会速度比较慢,而Numpy处理速度是C语言级别,因此,许多其他库依赖numpy. 我使用conda安装numpy:

conda create -n Python3.7 python=3.7
conda info --envs
activate Python3.7
conda install numpy

如果没有安装conda可以直接

pip install numpy

3.2 Scipy

Numpy至多提供多维数组,而不能提供矩阵以及涉及矩阵的一系列运算,Scipy提供大量涉及矩阵的最优化,线性代数,积分,插值,拟合,快速傅里叶变换等多种计算公式,这些功能都是挖掘与计算必备的.安装它之前必须安装Numpy,以下包类似,安装方法类似numpy.

conda install scipy

以上两个模块具体测试代码为:

import numpy as nm  #以np作为numpy包的别名
from scipy import integrate #从scipy包导入integrate积分函数
def g(x): #定义被积的函数
    return (1-x**2)**0.5 
pi_2,err = integrate.quad(g,-1,1) #获得-1到1之间函数的积分结果和误差
print(pi_2*2) #结果为圆周率pi一半
a = nm.array([1,2,8,4,5]) #创建数组a[1,2,8,4,5]
print(a) #输出数组
print(a[:2] #获得前两个,切片
)
print(a.min()) #输出最小值
print(a.sort()) #数组从小到大排序
print(a)

3.3 Matplotlib

使用Matplotlib可以快速的将数据可视化,同时输出高质量的各种格式的图片.测试代码:

import numpy as np  
import matplotlib.pyplot as plt #导入绘图pyplot 
x = np.linspace(0,10,1000)  #自变量x
y = np.sin(x)+1 #因变量y
z = np.cos(x**2)+1 #因变量z
plt.rcParams['font.sans-serif']=['SimHei'] #中文黑体
plt.figure(figsize=(8,4)) #设置图像大小
plt.plot(x,y,label = '$\sin x+1$',color = 'red',linewidth = 2) #作图,设置标签,线条颜色,线条大小
plt.plot(x,z,'b--',label = '$\cos x^2+1$') #作图,设置标签,线条类型
plt.xlabel('Time(s)') #x轴名称
plt.ylabel('Volt') #y轴名称
plt.title('A Simple Example') #标题
plt.ylim(0,2.2) #显示y轴范围
plt.legend() #显示图例
plt.show() #显示作图结果

3.4 Pandas

Pandas可以说是Python最为强大的数据分析和数据探索的工具了,支持类似SQL的数据的增删改查,并且带有丰富的数据处理函数,支持处理时间序列分析功能,灵活处理缺失数据等.安装:

conda install pandas
conda install xlrd #默认pandas不支持读Excel功能
conda install xlwt #为Python加入写Excel功能

Pandas基本数据结构为Series和DataFrame,Series是一种带有索引的序列对象,DataFrame类似与数据库table有行列的数据对象,它的每一列都是Series对象.为了定位Series对象,每一个Series都存在一个Index,用来标记不同的Series元素,类似SQL的主键.DataFrame的索引对应着每一行.示例程序:

import  pandas as pd 
s = pd.Series([1,2,3],index=['a','b','c']) #创建一个序s,值123,索引abc
d = pd.DataFrame([[1,2,3],[4,5,6]],columns = ['a','b','c']) #创建一个table,表头abc,每一行123,456,索引默认0,1
d2 = pd.DataFrame(s) #用序列s生成table
d.head() #预览前5行数据
d.describe() #数据统计量 
pd.read_excel('data.xls') #读取文件,且文件存储路径不能有中文
#pd.read_csv('data.csv',encoding='utf-8')

3.5 StatsModels

Pandas着力于数据读取,处理和探索,而StatsModels更注重于数据的统计建模分析,StatsModels支持与Pandas进行数据交互,成为Python下最为强大的数据挖掘组合.

import statsmodels.api as sm    #调用statsmodels里面的api,通过api调用相当于调用了statsmodels.regression.linear_model,可以使用linear_model文件里的函数
spector_data = sm.datasets.spector.load()  #读取样例的数据集,数据集可以在文件statsmodels\datasets\spector里面找到spector.csv
spector_data.exog = sm.add_constant(spector_data.exog, prepend=False) #将spector_data里面exog增加一列常量 
# Fit and summarize OLS model
mod = sm.OLS(spector_data.endog, spector_data.exog) #使用函数OLS读入需要分析的数据,其中spector_data.endog是被拟合的数据Y, spector_data.exog是需要拟合的自变量X
res = mod.fit() #进行拟合。返回的是statsmodels.regression.linear_model.RegressionResults类型赋值给变量res
print(res.summary()) #打印变量res的结果

3.6 Scikit-Learn

Scikit-Learn是Python下强大的机器学习相关的库,提供完整的机器学习工具箱,包括数据预处理,分类,回归,聚类,预测和模型分析等.创建一个机器学习的模型比较简单:

from sklearn.linear_model import LinearRegression #导入线性回归模型
model = LinearRegression() #建立线性回归模型
print(model) 

所有模型提供的接口有:
model.fit(): 训练模型,对于监督模型来说是fit(X,y),对于非监督模型是fit(X)
监督模型提供的接口有:
model.predict(X_new):预测新样品
model.predict_proba(X_new):预测概率,仅对某些模型有用(比如LR)
model.score(): 得分越高,fit越好
非监督模型提供接口有:
model.transform():从数据中学到新的基空间
model.fit_transform():从数据中学到新的基并且将数据按照这组基进行转换

3.7 Kears

SciKit不包括人工神经网络,所以不能进行深度学习,Keras是一个用Python编写的高级神经网络API,它能够以TensorFlow,CNTK,或者Theano作为后端运行。Keras的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键.
安装Kears:

conda install tensorflow-gpu #安装gpu加速
conda install tensorflow #安装谷歌深度学习库
conda install kears #安装kears

示例程序:

import numpy as np
np.random.seed(1337)  
from keras.models import Sequential 
from keras.layers import Dense
import matplotlib.pyplot as plt

# 创建数据集
X = np.linspace(-1, 1, 200)
np.random.shuffle(X)    # 将数据集随机化
Y = 0.5 * X + 2 + np.random.normal(0, 0.05, (200, )) # 假设我们真实模型为:Y=0.5X+2
# 绘制数据集plt.scatter(X, Y)
plt.show()

X_train, Y_train = X[:160], Y[:160]     # 把前160个数据放到训练集
X_test, Y_test = X[160:], Y[160:]       # 把后40个点放到测试集

# 定义一个model,
model = Sequential () # Keras有两种类型的模型,序贯模型(Sequential)和函数式模型
                      # 比较常用的是Sequential,它是单输入单输出的
model.add(Dense(output_dim=1, input_dim=1)) # 通过add()方法一层层添加模型
                                            # Dense是全连接层,第一层需要定义输入,
                                            # 第二层无需指定输入,一般第二层把第一层的输出作为输入

# 定义完模型就需要训练了,不过训练之前我们需要指定一些训练参数
# 通过compile()方法选择损失函数和优化器
# 这里我们用均方误差作为损失函数,随机梯度下降作为优化方法
model.compile(loss='mse', optimizer='sgd')

# 开始训练
print('Training -----------')
for step in range(301):
    cost = model.train_on_batch(X_train, Y_train) # Keras有很多开始训练的函数,这里用train_on_batch()
    if step % 100 == 0:
        print('train cost: ', cost)

# 测试训练好的模型
print('\nTesting ------------')
cost = model.evaluate(X_test, Y_test, batch_size=40)
print('test cost:', cost)
W, b = model.layers[0].get_weights()    # 查看训练出的网络参数
                                        # 由于我们网络只有一层,且每次训练的输入只有一个,输出只有一个
                                        # 因此第一层训练出Y=WX+B这个模型,其中W,b为训练出的参数
print('Weights=', W, '\nbiases=', b)
# plotting the prediction
Y_pred = model.predict(X_test)
plt.scatter(X_test, Y_test)
plt.plot(X_test, Y_pred)
plt.show()

最后示意图为:在这里插入图片描述

3.8 Gensim

Gensim负责处理语言方面的任务,例如文本相似度计算,LDA,Word2Vec等,具体使用请搜索官网.

Python从入门到精通系列丛书(由清华大学出版社出版)_使用python了解原理清华大学出版 Python数据分析从入门到精通》全面介绍了使用Python进行数据分析所必需的各项知识。全书共分为14章,包括了解数据分析、搭建Python数据分析环境、Pandas统计分析、Matplotlib可视化数据分析图表、Seaborn可视化数据分析图表、第三方可视化数据分析图表Pyecharts、图解数组计算模块NumPy、数据统计分析案例、机器学习库Scikit-Learn、注册用户分析(MySQL版)、电商销售数据分析与预测、二手房房价分析与预测,以及客户价值分析。 阅读详情

相关推荐

基于Python的数据分析

下面来介绍一下基于Python的数据分析,主要介绍数据分析的概念、数据分析流程、Python优势、常用模块的用途以及使用 Python进行数据分析的学习方法及步骤; 随着大数据和人工智能时代的到来,网络和信息技术开始渗透到人类日常生活的方方面面,产生的数据量也呈现指数级增长的态势,同时现有数据的量级已经远远超过了目前人力所能处理的范畴。在此背景下,数据分析成为数据科学领域中一个全新的研究 课题。...

跑得动就不要歇着 3万+

python简介怎么写-python简历模板范文

个人信息姓名:XXX 最高学历: 本科年龄:25 性别:男 婚姻状况:已婚求职意向:python工程师手机:12312345678邮箱:lingxian@capablist.com教育经历2013年09月 - 2017年07月 软件工程专业 本科 北京理工大学工作经历一、2017-05 到 2019-07 python工程师 北京XXX网络科技有限公司工作内容:...

weixin_37988176的博客 4068

Python从入门到数据分析第一篇—Python简介- Python介绍与初探

一直以来以分享Python、数据分析、数据科学为主,即使有了大受好评的程序入门系列,但考虑到多数文章使用分析工具都以Python为主,决定撰写这一系列文章帮助刚看完程序,对于Python数据分析感到好奇的朋友入门,并且衔接与实作我过往的文章。如此一来您能够透过这一系列文章学习Python程序语言,做Python商管程序设计,同时配合其他文章实作数据分析。

程序员干货站 2276

python 数据分析与应用

python数据分析知识点总结:python数据分析概述、NumPy数值计算基础、Matplotlib数据可视化基础、Pandas统计分析基础、使用Pandas进行数据预处理、使用scikit-learn构建模型

嵌入式阿齐Archie 3250

python数据分析与可视化案例 python数据分析项目 python数据分析基础

python数据分析基础(一) 该部分将对python数据结构、函数等基础内容进行回顾,python大牛和想要直接套用模板进行数据分析方法的朋友可以直接跳过此部分。 一、基本数据结构-元组和列表 元组和列表是python最常见也是最基本的数据结构,其区别在于元组的内容和长度是不可变的,而列表是可变的。下面通过实例来介绍一些元组列表的基本操作。 1、两者之间的转换 a=[1,2,3,4] b=1,2,3,4 print(type(a)) print(type(b)) <class 'list

coder20222022的博客 6799

Python数据分析:【NumPy系列】NumPy 简介:您的数据科学之旅的起点

NumPy(发音为“Numb-Pie”,绝不是数学上的“哑派”)是 Python 中最受欢迎的科学计算库之一。想象一下,有一个超级英雄,他可以在毫秒内处理数百万数据点。这个超级英雄,就是 NumPy!

若北辰 677

Python 使用OpenCV 控制摄像头

Python 使用OpenCV 控制摄像头 flyfish # -*- coding: utf-8 -*- """ Spyder Editor """ import cv2 cap = cv2.VideoCapture(0) while(1): ret,frame=cap.read() if ret: cv2.imshow('capture',fram...

二分掌柜的 3298

Python爬虫之Scrapy框架系列(7)——XXTop250电影简介信息的获取及存储到本地

Python爬虫之Scrapy框架系列(7)——XXTop250电影简介信息的获取及存储到本地

孤寒者的博客 1万+

Python工程师简历100条技能例句,写简历再也不用愁!!

相信大家在写简历的时候,都有过这种一种困惑,就是不知道该怎么写自己的技能清单,今天我们就给大家提供100条Python工程师简历技能例句,让大家写简历的时候再也不用发愁了。1、熟悉Flask/Tornado等常用的开发框架;2、熟悉使用MySQL数据库及调优能力,熟悉Redis, MongoDB;3、熟悉Linux\Unix环境、熟悉TCP/P、HTTP/HTTPS等通信协议;4、熟悉分布式、缓存、消息、负载均衡实现。

python03014的博客 1万+

英飞凌AURIX™ Development Studio(ADS)工程调试与烧录实战指南

本文详细介绍了英飞凌AURIX™ Development Studio(ADS)的工程调试与烧录实战指南。从调试环境搭建、硬件连接到断点设置、变量监控等核心调试技巧,帮助开发者快速掌握ADS安装使用教程,提升多核处理器开发效率。

k8l9m0n的博客 572

时序SDC约束set_data_check及常见应用场景

时序约束SDC之set_data_check命令及常见应用场景解析

weixin_37584728的博客 2286

python中beautifulsoup的用法_python系列之(1)BeautifulSoup的用法

好久没更新博客了。打算写一个python的爬虫系列及数据分析。falg也不能随便立,以免打脸。python爬取内容,是过程,分析数据是结果,最终得出结论才是目的。python爬虫爬取了内容,一般都是从网页上获取,那我们从html页面中如何提取出自己想要的信息呢?那就需要解析。目前常用的有BeautifulSoup、PyQuery、XPath和正则表达式。正则容易出错,而且一直是弱项,就讲讲其他三个...

weixin_33908564的博客 229

Ubuntu22.04中通过conda快速部署PyTorch开发环境(CPU/GPU双版本实战)

本文详细介绍了在Ubuntu22.04系统中,如何利用Conda高效部署PyTorch开发环境。文章分别提供了CPU与GPU双版本的实战教程,涵盖环境创建、镜像加速、版本匹配及深度验证等关键步骤,旨在帮助开发者快速搭建稳定、兼容的深度学习环境,从而专注于模型开发。

rose2的博客 556

python商品关联_Python数据分析案例—商品关联性挖掘(Apriori算法)

这是python数据分析案例系列的第三篇,关于Apriori算法及其Python实现。欢迎关注交流!看前面的基础知识可能会有些晦涩难懂,不过我觉得这些才是做分析的核心知识,不要把精力用在python炫技上。啤酒与尿布的故事广为人知。我们如何发现买啤酒的人往往也会买尿布这一规律?数据挖掘中的用于挖掘频繁项集和关联规则的Apriori算法可以告诉我们。本文首先对Apriori算法进行简介,而后进一步介...

weixin_39898733的博客 1138

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

「汽车电子助手」的博客 696

论文阅读:arxiv 2023 EduChat: A Large-Scale Language Model-based Chatbot System for Intelligent Education

EduChat是一个基于大规模语言模型(LLM)的教育领域聊天机器人系统,旨在为教师、学生和家长提供个性化、公平且富有同理心的智能教育服务。该系统通过在教育语料库上进行预训练和特定任务微调,强化了开放式问答、作文评估、苏格拉底式教学和情感支持等教育功能。为解决领域知识不足和知识更新问题,EduChat采用了检索增强技术,并融入心理学和教育学理论。该项目已开源,提供代码、数据和模型参数,推动LLM在智能教育中的应用发展。

CSPhD-winston的博客 1039

python数据分析简介

NumPy(Numerical Python) 是Python数据分析必不可少的第三方库,NumPy的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型,使其具备了构造复杂数据类型的能力。是一个运行速度非常快的数学库,主要用于数组计算,包含:高性能科学计算和数据分析的基础包ndarray,多维数组,具有矢量(向量)运算能力,快速、节省空间矩阵运算,无需循环,可完成类似Matlab(商业数学软件)中的矢量运算用于读写磁盘数据的工具以及用于操作内存映射文件的工具。

weixin_58425848的博客 1914

医疗工具识别(手术器械计数):基于YOLOv8的智能手术器械管理系统

YOLOv8是Ultralytics公司于2023年推出的最新一代目标检测算法,相比前代YOLOv5,在精度和速度上都有显著提升。Anchor-free检测:不再使用预定义的anchor boxes,简化了检测流程更高效的骨干网络:采用CSPDarknet53作为特征提取网络多尺度特征融合:通过PANet结构实现更好的小目标检测损失函数优化:使用CIoU损失提高边界框回归精度YOLOv8提供了多种规模的模型(n/s/m/l/x),可根据实际需求在精度和速度之间进行权衡。

YOLO 480

python数据分析简介&numpy简介

Python作为当下最为流行的编程语言之一1.可以独立完成数据分析的各种任务2.数据分析领域里有海量开源库3.机器学习深度学习领域最热门的编程语言4.在爬虫,Web开发等领域均有应用与ExcelPowerBITableau等软件比较1.Excel有百万行数据限制2.PowerBITableau在处理大数据的时候速度相对较慢3.ExcelPower BI和Tableau需要付费购买授权4.Python功能远比ExcelPowerBI。

aliedudu的博客 675

ABAP CDS Time Functions 全面解析:用 TIMS_IS_VALID 护航时刻字段的正确性

摘要:本文深入解析ABAP CDS时间函数TIMS_IS_VALID的应用,重点介绍其在企业系统时间字段校验中的关键作用。文章指出无效时间数据会导致业务流程混乱,而CDS层校验能有效减少重复逻辑。详细说明TIMS类型格式要求、空值处理规则,并提供两种工程实现方案:在CDS视图中直接派生校验列,或通过ABAP SQL在内存表中批量验证。最后给出可直接运行的代码示例,包括一个ABAP报表演示内存表验证,以及一个CDS View Entity实现系统时间自动映射与校验,帮助开发者在业务场景中快速落地时间校验功能。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 193

如何利用air780e与stm32c8c6进行通信实现给手机发送一条英文短信的功能?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1237

Python数据分析简介

1、打开命令提示符2、安装 Jupyter Notebook:在命令提示符中输入以下命令,使用 pip 安装 Jupyter Notebook。3、启动 Jupyter Notebook:在命令提示符中输入以下命令,启动 Jupyter Notebook。4、接下来Jupyter Notebook 会在默认的浏览器中打开,如果没有自动打开,可以在浏览器中输入:来访问。

2402_83521187的博客 870

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Python入门系列】第九篇:Python数据分析和处理

Python数据分析和处理是当今数据科学领域中的重要技能之一。随着大数据时代的到来,越来越多的组织和企业需要从海量数据中提取有价值的信息。Python作为一种功能强大且易于上手的编程语言,提供了丰富的数据分析和处理工具和库,如pandas、numpy、matplotlib等。本文将介绍Python数据分析和处理的基础知识和常用操作。

杰西笔记 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python码上行动系列丛书(由北京大学出版社出版)

Python码上行动系列丛书(由北京大学出版社出版),感谢大家的支持

hacker707的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 数据分析系列之数据挖掘基础
下一篇: 数据分析系列之数据探索
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值