如何系统的自学Python
Python的系统的自学,其实应该分成两块:
- Python本身语言语法的学习
- Python在特定应用场景相关库和场景知识的学习,比如机器学习方面,办公自动化,Web后端变成,网络编程,桌面图形界面等等
打个通俗的例子,你完全会汉语的语法和单词,也能流利的用汉语表达自己感受和想法,但是找一篇现代数学的论文或者一篇前言医学的论文,虽然字你都认识,汉语的语法你也完全看的懂,但是这样的现代数学或者医学的论文,如果你没有相关的知识,你从头看到尾,你还是完全不理解这些论文究竟在说啥。
同样的,Python是一门计算机语言,它为人类和计算机交流发明的,Python定义一种语言的语法和规则,让你用这样的“语言”描述自己的想法的时候,计算机就会理解你的意思,并按照你的要求执行。
比如用Python写出下面的代码,也就是相当于你朝计算机喊“给我输出100次Hello",之所以我们现在需要用Python告诉计算机我们的想法,而不是直接用汉语告诉计算机,是因为汉语也好,英语也好,其他人类的语言也好,一方面不严谨,模糊信息太多,计算机难以理解,另一方面,人类的语言冗余信息太多,也不效率(你懂得,人类大部分交流,很多话都是在扯淡,没有信息含量),希望人工智能的进步让未来的计算机能直接理解人类心中的想法:
for i in range(100):
print("Hello")
所以,回到如何系统的自学Python, 其实也要分成两块看:
- 如何系统的自学的Python语言语法
- 如何系统自学的Python各种应用场景,比如数据分析,网络编程,Web编程,图像处理,桌面图形界面程序,机器学习等等各种场景
如何系统的自学的Python语言语法
Python语言语法这块不是很复杂,任何入门级的Python教程书都有,并且官方文档就自带了一份中文的教程,在你安装Python本机就有,也可以直接在官网网站上看到:
Python 教程 - Python 3.8.3 文档docs.python.org
这个文档就已经详细把Python语言和语法说的很清楚,包括几个Python语言最重要的几部分:
- 流程控制( If, for, while)
- 数据结构(数字,字符串,列表,字典等)
- 模块
- 异常
- 类
- 常用标准库
官方3.8版本的文档一共16章,总共也没多少字,对Python语言和语法方方面面的内容也都有相应的代码,仔仔细细照着敲一遍,反反复复联系几遍,就和刚学一门外语的,不要纠结太多,就是要多”说“,对于Python而言,就是要反复“说”给计算机听。
尽量给自己一点高强度练习,让自己反复习惯用Python表达自己的想法,慢慢的你就有用Python和计算机交流的感觉了,这时候Python语言和语法你也基本系统学了一遍,也基本都有理解了。
如何系统自学的Python各种应用场景
首先,要明白一点,Python应用场景涉及计算机的方方面面,并没有必要系统的全部学一遍,要根据你的实际需求来,就像你会汉语,但是也没有必要把汉语用的所有方面都学一遍,没见过几个会说普通的话,尝试去写宋词元曲的,对吧。
所以,根据你的需求来看,你需要学习Python那个应用场景,这种情况下,根据每个人情况,也要分两种:
- 本身已具备相关应用场景的专业知识
- 本身不具备相关应用场景的专业知识
比如,如果你本人就是数学系或者统计系的,对数据分析的相关数据概念很清楚,你去学习Python数据科学的相关库(Numpy,Pandas,statsmodels,Skt-learn等),你会觉得非常轻松,因为你专业上学到一些专业知识和算法,已经被人用Python都包装好了,只要你会Python的语言语法,都可以轻松调用。
又比如你本来就已经熟悉用Qt来开发桌面图形界面程序,这时候,你用PyQt5或者PySide,你同样会觉得非常简单,也谈不上自学成本,十分钟了解下这些库的用法,马上就可以上手。
但是,大部分人的情况,是本身不具备相关应用场景的专业知识,比如学习Django/Flash的,是第一次接触Web编程,学习PyTorch/Keras的人,也是第一次接触神经网络,与其说是想系统的自学的Python,比如是说想借Python的语言学习Web开发/数据分析/机器学习/图像处理。。。。
对于这种情况,建议是,根据你自己的需求,尽快找到你所对应Pyhon的库,而且通常要找包装的比较简单的库,没太多细节的的库,比如说,学深度学习,先从包装成最简单的Keras,先用起来,比如说从来没接触过Web后端开发,先用最简单的Flask开始,而且要尽快直接用最简单的库,先跑起来,先动起来,因为你本身没有这块的基础知识,而Python这些库,恰恰能让你很快入手,尽快直观了解这方便的知识,比如你原来不理解什么是神经网络,那就直接先用Keras照例子写个手写体,先跑起来再说,再看看找下传统的算法,例如用Skt-learn也写个手写体识别,两个不同的算法一起跑起来对比下,你对神经网络和深度学习,立刻就不会觉得神秘,会有直接的认识。
import numpy as np
np.random.seed(1337) # for reproducibility
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D,AveragePooling2D
from keras.utils import np_utils
from keras import backend as K
import MNIST
# 全局变量
batch_size = 128 # 批处理样本数量
nb_classes = 10 # 分类数目
epochs = 600 # 迭代次数
img_rows, img_cols = 28, 28 # 输入图片样本的宽高
nb_filters = 32 # 卷积核的个数
pool_size = (2, 2) # 池化层的大小
kernel_size = (5, 5) # 卷积核的大小
input_shape = (img_rows, img_cols,1) # 输入图片的维度
X_train, Y_train = MNIST.get_training_data_set(600, False) # 加载训练样本数据集,和one-hot编码后的样本标签数据集。最大60000
X_test, Y_test = MNIST.get_test_data_set(100, False) # 加载测试特征数据集,和one-hot编码后的测试标签数据集,最大10000
X_train = np.array(X_train).astype(bool) # 转成0-1黑白图。方便训练
X_train=X_train[:,:,:,np.newaxis] # 添加一个维度,代表图片通道。这样数据集共4个维度,样本个数、宽度、高度、通道数
Y_train = np.array(Y_train)
X_test = np.array(X_test).astype(bool) # 转成0-1黑白图。方便训练
X_test=X_test[:,:,:,np.newaxis] # 添加一个维度,代表图片通道。这样数据集共4个维度,样本个数、宽度、高度、通道数
Y_test = np.array(Y_test)
print('样本数据集的维度:', X_train.shape,Y_train.shape)
print('测试数据集的维度:', X_test.shape,Y_test.shape)
print(MNIST.printimg(X_train[1]))
print(Y_train[1])
model = Sequential()
model.add(Conv2D(6,kernel_size,input_shape=input_shape,strides=1)) # 卷积层1
model.add(AveragePooling2D(pool_size=pool_size,strides=2)) # 池化层
model.add(Conv2D(12,kernel_size,strides=1)) # 卷积层2
model.add(AveragePooling2D(pool_size=pool_size,strides=2)) # 池化层
model.add(Flatten()) # 拉成一维数据
model.add(Dense(nb_classes)) # 全连接层2
model.add(Activation('sigmoid')) # sigmoid评分
model.compile(loss='categorical_crossentropy',optimizer='adadelta',metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=batch_size, epochs=epochs,verbose=1, validation_data=(X_test, Y_test))
score = model.evaluate(X_test, Y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
最后总结下,所谓系统自学Python,很多时候,很多人指的是系统的学习Python应用在XXX方面,而不是指Python语言本身,这时候,如果没有相关方面的知识,最好的办法,从Python包装的使用难度最低的库入手,尽快让自己对具体知识有了具体的理解,想学深度学习,尽快用Keras搭建自己的第一个神经网络,想学爬虫,先用requests抓第一个网页信息,想开发Web,先用Flask搭一个网站,当你通过Python把这个应用方面或者专业的知识理解透了,用其他语言C/C++/JAV去做,对你来说也是豁然开朗的感觉,立刻动手立刻去做立刻去理解,除此之外,再无法他发。