什么是编程(Programming)
编程是编定程序的中文简称,就是让计算机代码解决某个问题(目的),对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程(手段)。 为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机(人的意图通过编程透传给计算机),使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。
什么是编程语言(Programming Language)
计算机编程语言是指用于人与计算机之间通信的语言,是人与计算机之间传递信息的媒介,因为它是用来进行程序设计的,所以又称程序设计语言或者编程语言。
编程语言是一种特殊的语言。因为它是用于人与计算机之间传递信息的,所以人和计算机都能“读懂”。具体地说,一方面,人们要使用计算机语言指挥计算机完成某种特作,就必须对这种工作进行特殊描述,所以它能够被人们读懂。另一方面,计算机必须按计算机语言描述来行动,从而完成其描述的特定工作,所以能够被计算机“读懂”。
编程语言是程序设计的最重要的工具,它是指计算机能够接受和处理的、具有一定语法规则的语言。从计算机诞生,计算机语言经历了**机器语言、汇编语言和高级语言**几个阶段。 在所有的程序设计语言中,只有机器语言编制的源程序能够被计算机直接理解和执行,用其它程序设计语言编写的程序都必须利用语言处理程序“翻译”成计算机所能识别的机器语言程序。
数据科学家大都为什么选择Python
Python vs R
Python与R语言在数据分析领域的对比,DataCamp上有一篇引用率非常高的文章,数据分析选择R还是Python,不过这篇文章是2015年写的,我们先大致总结一下文章内容:
- R主要用于学术与研究,也开始迅速进入企业市场,越是接近统计学、研究、数据科学,你就会越偏爱R,而Python主要用于程序员想进入数据分析领域、掌握统计技能,以及其他开发人员进入数据科学领域。如果你的工作越接近工程环境,你会越偏爱Python。
- R的社区生态主要是研究员,数据科学家、统计学家和量化研究员,而Python主要是程序员和开发者。
- R学习门槛比较高,但是当你掌握了基础之后就学起来比较容易,R对程序员来说不难;Python可读性强,入门非常容易,被公认为非常不错的入门编程语言。
- 在2015年前的Tiobe编程语言的排名上Python排名在第4或第5,R排在第17到13。而据2015数据分析领域,用R的研究员占58%,Python占42%,两者都用的占23.45%;
- 在2013年,R转Python的有26%,Python转R的有18%,而新进入数据分析领域的有44%的人选择R,23%的人选择Python.
- 从2015年之前的情况看来,正如作者所说,R和Python在数据分析领域确实平分秋色,难分伯仲,从数据中我们可以看出,虽然Python相比R更流行,在编程方面更有优势,但是在数据科学领域,选择使用R的人更多。
但是翻到2018年的文章里看到2016、2017年的数据,情况下发生了逆转。在数据科学领域,2016年有34%的人选择Python,42%的人选择R,而到了2017年41%的人选择Python,36%的人选择R。 在2017年的调查统计里数据科学家和工程师最流行的编程语言分别是JavaScript(58.7%,令人惊讶啊,可能与数据可视化有关?)、SQL(58%)、Python(45%),而R(11.2%),Python在商业领域领域比较火,而R在学术和研究领域比较多,所以不那么流行吧。而在最近的Tiobe的排行榜上,与数据科学相关的编程语言Python、R、SQL、Matlab等涨幅都比较大,Python在整个编程语言的流行度也由2014年的2%猛增到2019年8.26%,跃居第3,成为2018年年度语言。随着机器学习今年来的飞速发展,截止2022年,Python已经成为世界上第二流行的编程语言。
Python vs Matlab
虽然不是学数学的,但是Matlab的大名可是如雷贯耳,与数学相关专业、相关行业的学生、工程师们基本一定会使用到它。MathWorks公司跟设计公司Adobe、三维软件公司Autodesk一样都是极其硬核的存在,旗下的产品不仅是学习必备,而且是工程(比工作听起来霸气)必备。我们来看一下美国相关专业人员对两者的对比,只是粗略而不精准的翻译一下。
“我是一名工程师,之前长期使用Matlab来处理复杂的数学运算都没有遇到什么大的问题,就在几个月前因为岗位需要学习了Python之后,我才意识到Matlab相比Python是多么的糟糕。之前需要我用Matlab花一整天处理的问题用Python只需数小时,Python的表现、流畅度让我惊讶。而且使用Python我可以做之前用Matlab做的任何事情,而且更优秀。因此我非常建议Matlab使用者转向Python。Python编程语言比Matlab更强大,能够联合非常多的外部工具模块,只需一个文件就可以调用非常多的库、函数、类,语法也更加简单,面向对象开发也更加方便,还能非常方便地调用C、C++、Fortran。Python是免费的,而且可以运行在更多平台上面。” —Stackoverflow某工程师
经过调查Matlab与Python的宿命之争在2011年就开始了,而且网上Matlab与Python的对比文章、评论非常之多。Matlab官方在2013年就开始拿Matlab和Python进行对比。年代越近,由Matlab全面转向Python的建议就越多,更多人直言Python是未来的编程语言,在Python与Matlab的选择之上,看了非常多的建议,已成一边倒的趋势。 有人列出了Python相对于Matlab的8大优势,我只粗略翻译一下这8大优势,详情大家可以去查看原文:
- Python的代码相比于Matlab更简洁,可读性更强;
- 和其他编程一样,Python都是从0开始计数,而Matlab不是;
- Python可以更好的支持哈希字典;
- 面向对象开发让Python更简单、更优雅;
- Python免费且开源;
- Python一个文件、模块里可以包含非常多的函数;
- Python支持import声明;
- Python支持更多图像处理的包和工具集
在PyCon 2017年的大会上,多位大佬提出科学家应该全面拥抱Python,在2015年开始Python在NASA的地位就开始遥遥领先IDL、Matlab和Fortran。由于这里我们只讨论Python和Matlab在数学上的对比,至于科学家转型Python的优势的细节,大家可以看DataCamp的雄文。
Python ABC
Python的源起及其logo
Python 英文原意为“蟒蛇”,直到 1989 年荷兰人 Guido van Rossum (简称 Guido)发明了一种面向对象的解释型编程语言,并将其命名为 Python,才赋予了它表示一门编程语言的含义。
Python是什么
Python 是一种面向对象的、解释型的、通用的、开源的脚本编程高级语言。
- 语法简单:Python 不要求在每个语句的最后写分号;定义变量时不需要指明类型,甚至可以给同一个变量赋值不同类型的数据。
- Python 是开源的:用户可以随意下载代码并且可以随意修改;
- Python 是免费的:开源并不等于免费,开源软件和免费软件是两个概念,只不过大多数的开源软件也是免费软件;Python 就是这样一种语言,它既开源又免费。
- Python 是高级语言:指 Python 封装较深,屏蔽了很多底层细节。
- Python 是解释型语言,能跨平台。
Python为何流行
- Python 简单易用,学习成本低,看起来非常优雅干净;
- Python 标准库和第三库众多,功能强大,既可以开发小工具,也可以开发企业级应用;
- Python 站在了人工智能和大数据的风口上,站在风口上,猪都能飞起来。
Python 作为学习编程的入门语言是再合适不过的。凡是在大学计算机专业学习过 C 语言的同学都感同身受,认为 C 语言不是很好的入门语言,很多曾经立志学习编程的读者,在学习了 C 语言之后,就决心不再学习编程。因此,是否学会 C 语言,好像成为了进入编程行业的筛选标准。但是,如果将 Python 作为编程入门语言,就不会出现类似 C 语言的那些窘境问题。目前,逐渐有高校开始使用 Python 作为软件专业大学生(甚至也包含非软件专业)的入门编程语言。
大厂程序员为何偏爱MacOS
Windows vs MacOS vs Linux
Windows系统,这是国内用户最多,也是安装次数最的系统。
Windows的软件生态非常丰富,一大部分人选择的Windows就是因为这个,软件极其丰富,或者说是游戏极其丰富,这个我们也是深有体会的。无论是办公,休闲,娱乐,电影,音乐,游戏总有那么几款软件适合您!
这同时也是Windows最致命的问题,Windows的软件虽然丰富,但是质量却参差不齐,你在网页随意下载的软件都可以安装,但是能不能用,有没有毒,那可就不好说了!在杀毒软件横行的时代,每下载一个游戏就会附赠5个浏览器,10个桌面快捷方式,无数个弹窗广告。而且弹窗广告总是在游戏最激情的时候弹出。曾经的木马病毒,QQ号被盗,应该很多人都经历过。当我们写完了文档,或者做完了图片,剪完了视频,准备收工的时候,突然蓝屏上一个哭脸,告诉你电脑遇到了一些问题,可以在它收集完信息之后重启电脑。这时候真的无f**k说。为什么Windows电脑总是能在我们最不想死机的时候死机?
另一个令人难受的就是Windows仿佛一直在更新,随着系统的更新,除了把我的软件更的不能用了,我也不知道它到底更新了什么!
对于要编程的Windows系统来说安装编程环境比较麻烦,刚开始的Python,Java可能还好。但是后边到了docker,消息队列,跑开源项目的时候,你就知道有多麻烦了,先不提虚拟机,wsl啦!小白们真的不太想搞。而且硬件还要允许!Windows的定制性差,到了编程服务,系统安全的时候,要修改系统设置时很难找到对应的入口,还要反复重启电脑,才能修改成功。竟无语凝噎!
MacOS: 苹果专有操作系统。如果你是个果粉,各个设备之间同步数据,联动,非常的方便,除去系统本身,苹果电脑的屏幕和设计本身就是牛的,国产的电脑也都纷纷效仿。系统稳定,即使一直不关机也不会死机。
对于编程的来说,MacOS是基于Unix操作系统的,而且自带了很多开发工具, 尤其是终端,很多命令和企业开发常用的Linux系统类似,便于我们搭建环境,和学习命令行的使用。在同等配置环境下,Mac开发的流畅度和开发软件的打开速度会更快,开发效率拉满,所以你会发现,互联网大厂的员工都是清一色苹果电脑。
此外,近几年苹果电脑发展迅猛,M1,M2,M3芯片的电脑,也更是的受到业内人士的一致认可。
缺点:
- 软件相比Windows系统比较少, 很多软件的使用是需要花钱的。白嫖党不是很友好。而且软件数量较少。很多在Windows上好用的软件在macOS上是没有替代品的。
- 绝大多数的游戏不能玩。这也是很多人不选择Mac电脑的原因。
- 致命缺点:贵。一时间我竟不知,这到底是他的错还是我的错。
Linux:
对于程序员来说, Linux是必须会的系统。因为大部分企业项目都是部署在 Linux服务器上。而且 Linux是开源,可定制的,可以根据项目的不同需求打造更安全,更高效,更简洁的操作系统。
程序员兄弟们,一般都是选择Windows作为自己的电脑,游戏打得,开发做的,软件也很多。集美们颜值控,经济条件也允许,喜欢Mac的话,安排一个也无可厚非!当然还是要基于自己的实际需求,你需要的软件,你追求的效率,你喜欢的颜值都可以是你选择系统的理由。如果你是前端开发,设计,用Mac体验会更好。如果你是学习系统底层开发的,安全方向的同学,要掌握Linux就多一些。
Mac 上 Python环境安装与配置
Python3 安装
- 其它-终端,打开终端,shell->新建窗口->Homebrew
- 查看当前Python版本 python -V
- 通过Mac自带的 Homebrew 来管理 brew search python3
- 安装 brew install python3
- 可以通过修改
.bash_profile
文件来设置环境变量,使python
命令指向Python 3,例如,可以输入export PATH="/usr/local/Cellar/python3/3.6.5/bin"
,并执行source ~/.bash_profile
来使更改生效。 - 在终端输入 python 进入python环境
- 在终端输入 exit() 退出python环境
基础终端指令
- 显示当前工作目录的绝对路径: pwd
- 查看当前目录的所有内容信息:ls (-a / -l)
- 切换到指定目录:cd [目录地址参数]
- cd ~ 回到自己的home目录,比如你是root , cd ~到/root
- cd … 回到当前目录的上一级目录
- 创建目录: mkdir
-p: 创建多级目录 - 拷贝文件到指定目录: cp src dst
- 移动文件到指定目录:mv src dst
- 删除文件或目录: rm
- 查看文本文件内容: vim 文件名
Python 代码的两种运行方式
Python 代码有两种运行方式,即交互运行和脚本运行:
- 交互运行方式: MacOS下在终端下运行(和 Windows 系统上的 cmd 类似),启动 Python 解释器后(终端命令行输入python然后回车即可进入Python解释器,输入exit()然后回车即可退出Python解释器),解释器等待用户输入指令,在接收到用户指令后就去执行该指令,指令执行完毕后接着等待用户的下一条指令。
- 脚本运行方式则是将用户执行存入到一个文本文件(如 test.py)中,然后让解释器去执行该文本文件中的所有指令: python test.py。
你的第一个Python程序
试着用上述两种方式分别打印 “Hello World!”
python test.py
# test.py
print("Hello, World!")
print("Hello, Again!")
print(2+3)
print(10-2)
print(2*6)
print(84/4)
print(86%7)
print(2**10)
print(5 > 9)
你将看到的输出如下:
除了顺序执行结构之外,比较常见的还有分支结构和循环结构,分别举例如下:
分支结构
# test2.py
choice = input("enter your choice: 1 or 2:")
if choice == "1":
print("You choose 1.")
else:
print("You choose 2.")`
循环结构
for i in range(10):
print("Round %d"%(i))
Python还可以干什么
以下代码仅供参考,以便于读者更直观了解Python可以干些什么。暂时请不要纠结具体代码的含义和用法,随着学习的进行,你将逐渐明白每条指令的含义,并能逐步写出较为复杂的程序。
复杂曲线绘制
# drawHeart.py
import matplotlib.pyplot as plt
import numpy as np
t = np.linspace(0, 2 * np.pi, 1000)
x = 16 * np.sin(t)**3
y = 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)
plt.figure(figsize=(8, 6))
plt.plot(x, y, color='red')
plt.fill(x, y, color='red')
plt.axis('equal')
plt.show()
读取图像,进行处理并显示
以下代码需要确保你的环境中已经安装了OpenCV库,你可以使用以下命令安装:
pip install opencv-python
# processImage.py
import cv2
# 读取图像
image = cv2.imread('/Users/renmin/Downloads/bk_example.jpg')
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用Canny算法提取边缘
edges = cv2.Canny(gray, threshold1=100, threshold2=200)
# 显示图像
cv2.imshow('Original Image', image)
cv2.imshow('Edges', edges)
# 等待按键,然后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
读取文件中的数据,并显示散点图/柱状图
以下代码需要确保你的环境中已经安装了pandas库(pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。),你可以使用以下命令安装:
pip install pandas
# drawCSV.py
import pandas as pd
import matplotlib.pyplot as plt
# 读取CSV文件
data = pd.read_csv('data.csv') # 假设CSV文件名为data.csv
# 绘制散点图
plt.scatter(data['YEAR'], data['GDP'])
# 绘制柱状图
#data.plot(kind='bar', x='YEAR', y='GDP')
# 显示图表
plt.show()
# data.csv
YEAR,GDP
1990,100
2000,500
2010,1600
2020,8000
批量获取图片
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse
def download_images(url, save_dir):
# 发送GET请求获取网页内容
response = requests.get(url)
# 检查是否成功获取网页内容
if response.status_code == 200:
# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(response.content, 'html.parser')
# 查找所有图片标签
img_tags = soup.find_all('img')
# 创建保存图片的目录
if not os.path.exists(save_dir):
os.makedirs(save_dir)
# 遍历所有图片标签
for img_tag in img_tags:
# 获取图片的URL
img_url = img_tag.get('src')
if img_url:
# 解析图片的绝对URL
img_url = urljoin(url, img_url)
# 发送GET请求获取图片内容
img_response = requests.get(img_url)
# 检查是否成功获取图片内容
if img_response.status_code == 200:
# 提取图片文件名
img_filename = os.path.basename(urlparse(img_url).path)
# 保存图片到指定目录
with open(os.path.join(save_dir, img_filename), 'wb') as f:
f.write(img_response.content)
print(f"已下载图片:{img_filename}")
else:
print(f"无法下载图片:{img_url}")
else:
print("找不到图片URL")
else:
print(f"无法获取网页内容:{url}")
# 示例用法
url = "https://example.com" # 修改为你想要下载图片的网页URL
save_directory = "download_images" # 修改为你想要保存图片的目录
download_images(url, save_directory)
机器学习
此处略。感兴趣的同学可以在网上搜到大量基于Python的、有关计算机视觉(CV),语音识别/合成,NLP(文字翻译等)相关的机器学习、人工智能应用。近年来,随着人工智能的发展,Python成为了人工智能领域最受欢迎的编程语言之一。Python的一个优点是它有大量的第三方库,这些库为人工智能开发提供了很多有用的工具和算法。例如,著名的PyTorch是人工智能领域中最流行的深度学习框架之一。
附录:
-
Linux指令学习(适用于MacOS终端):
- 简化版: 新手入门linux之最常用的20条命令
- 深入版: https://linux.vbird.org/ 或者 同名书籍《鸟哥的Linux私房菜》
-
vim: vim指令大全