Basic For Python

python开发环境的准备:Anaconda,Jupyter Notebook,Spyder

Numpy,Pandas,和Matplotlib的使用也是在python学习中非常重要的部分。

本人在按照教程安装完anaconda环境以及对应的idejupyter notebook之后开始正式的python的学习。

(:在本篇博客中,仅对python的各个功能进行最基础的了解。)

首先是python的数据结构列表list,元组tuple,字典dict,集合set:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#列表
l=[1,2,3,"hello"]
l.append("world")#在列表的末尾插入元素
l.extend(["a"])#在列表l末尾增加列表
l.insert(0,"lol")#在列表指定位置插入元素
l.remove("lol")#删除列表中出现的第一个lol
del l[3]#删除列表中对应位置的元素
l.pop(4)#删除列表中对应位置的元素

#特别注意!!
a=[1,2,3,4]
b=a
#此时如果对b表进行更改,a表也会随之更改,因此应该设置为:
b=a.copy()

#元组
a=(1,2,3)
#元组中的元素不可被更改

#字典
d={"Name":"Charlie","Job":"Teacher"}
print(d["Name"])
d["age"]=25#添加
del d["age"]#删除

#集合
set([1,2,3,4,2,1,1,1,2,12])
#set仅保留一次(去重)

对于if语句,注意:

1
2
3
4
if a<b:#注意有冒号
c=10
else:#注意有冒号
c=20

对于循环

1
2
3
4
5
6
7
8
9
10
i=0
while i<10:#注意有冒号
i=i+1;

for i in range(10):
print(i)

s="abcdefg"
for i in s:
print(i)

关于函数:

1
2
3
def sumoftwo(x,y):
result=x+y
return result

文件的IO:

1
2
3
4
5
6
7
8
9
file=open("text.txt","r")#注意路径
file.read()
file.read(100)#读入元素的个数
file.readline()#读入行的行数
file.readlines()#读入所有行
file=open("test.txt","w")#覆盖
file.write("你好")
file=open("text.txt","a")#加入
file.close()
1
2
3
4
file=open("text.txt","r")
for line in file:
print(line)
file.close()

python模块:

1
2
3
4
5
6
7
8
import time
time.time()#显示时间从1970年1月1日0时0分0秒到现在
time.sleep()#停留时间
time.strftime("%y-%m-%d %H:%M:%S")
#年月日时分秒
import time as t
from time import strftime as t
#简写
1
2
3
4
5
import os
os.getcwd()#查看当前文件盘
os.listdir()#查看某文件盘包含的文件
os.listdir(os.getcwd())
os.mkdir()#生成新文件夹

异常处理:

1
2
try:
except:

在这里可以等效为c++中的异常处理的的trycatch

关于NumpyNumpy是一个运行速度非常快的数学库,主要用与数组计算,包含:

  1. 一个强大的N维数组对象。
  2. 广播功能函数。
  3. 整合代码的工具。
  4. 线性代数、傅里叶变化、随机数生成等功能。

接着,本人在按照教程安装完numpy环境以及对应的idespyder

1
2
3
4
5
6
7
8
9
10
11
12
13
#载入numpy
import numpy as np
#定义ndarray
a=np.array([1,2,3,4])
b=np.array([[1,2,3],[3,2,1]])
c=np.array([[1,2.5,3.14][13.1,2.6,1.2]])
d=np.array([[1,2,3,4]])#1*4二维数组
#查看指令
a.size
a.shape
b.shape
b.size
b.ndim
1
2
3
4
5
6
np.arrange(20)#生成数字0-19
np.linspace(0,9,10)#生成0-9的浮点数
m=np.zeros([5,5])#生成5*5的全0矩阵
m=np.ones([5,5])#生成5*5的全1矩阵
m=np.random.rand(5,5)#生成5*5的随机矩阵
m=np.random.randn(33)#生成3*3的高斯分布

有关矩阵的运算:

1
2
3
4
5
6
7
8
9
10
11
12
13
a=np.array([1,2,3])
b=a.copy()
c=a+b#[2,4,6]
c=a*b#[1,4,9]
d=np.dot(a,b)#[1,4,9]
#注意reshape元素数量要一致!
ax=np.reshape(a,(3,1))#更改矩阵
bx=np.reshape(b,(1,3))
np.dot(ax,bx)#矩阵乘法3*3

np.vstack()#竖直方向拼接vertically
np.hstack()#水平方拼接horizontally
a.T#矩阵转置

向量和矩阵的索引:

1
2
3
4
5
6
7
8
9
10
a=np.array([0,1,2,3,4,5,6,7,8,9])
a[0:5]#0,1,2,3,4,从第一个开始第五个结束
a[3:]#3,4,5,6,7,8,9
a[3:-1]#3,4,5,6,7,8
a[:3]#0,1,2

b=a.reshape(5,2)
b[3,0]#6
b[3]#[6,7]
b[:0]#[0,2,4,6,8]

Numpy的常用科学计算:

1
2
3
4
5
6
7
8
9
10
np.log(2)#0.69
np.exp(2)#7.38
#作用与向量、矩阵是一样的
np.log(a)#对a中的每个数都求对数
np.max(a)#求a之中最大的数
np.mean(a)#平均数
np.median(a)#中值
np.std(a)#方差
np.argmax()#返回最大值的索引
np.argmin()

生成一个10*10,边界为1,内部为0的矩阵:

1
2
m=np.ones([10,10])
m[1:9,1:9]=0

关于pandaspandas是为了解决数据分析任务而创建的。pandas纳入了大量库和一些标准的数据模型,提供了高效的操作大型数据集所需的工具。

关于matplotlib:matplotlib是基于python语言的开源项目,旨在为python提供一个数据绘图包,实现专业的绘图功能。

1
2
import pandas as pd
data=pd.DataFrame([1,2,3,4]),columns=["number"],index=["a","b","c","d"]

值得一提的是,pandas可以直接导入csv文件。关于pandas中的数据预处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
data1=pd.read_csv('data.csv')
data.to_csv('data_first.csv')
data1.loc[5,"Age"]#第一个为index,第二个为columns不可输入数字
data1.iloc[6,1]#两个索引都可以是数字

pd.concat([data,data1])
data2=pd.read_csv('data.csv')
data3=pd.concat([data1,data2])
data4=data3.append([data1,data2])
#有没有的部分会被设成nan
data.isnull()#判断nan的位置
#True的位置为nan
data.dropna()#删去含有nan的行
data.fillna(0)#将nan值全部填为0

关于pandas中的常用函数:

1
2
3
4
5
6
7
8
data.drop(2)#删去第二行(与index对应)
data1["Age"].mean
#各种函数同numpy
data1.sort_values(by="Age")#根据年龄大小进行排序
data1.sort_values(by="Job")#根据首字母的顺序进行排序(a开始)

temp=data3["Age"].values#array of float
data3["Age"].describe()#自动统计,快速查看某一列的统计数据

用matplotlib进行画图:

1
2
3
4
5
6
7
8
9
10
import matplotlib.pyplot as plt
x=np.linspace(0,10,100)
y=np.six(x)

plt.plot(x,y)#将定义的x,y画入图中
plt.xlabel("x")
plt.ylabel("y")
plt.title("asdf123")
plt.grid(True)#背景网格
plt.show()

可画出如下的图案:

image-20220130154128301

1
2
3
4
5
6
7
8
9
10
11
y1=np.six(x)
y2=np.exp(x)

plt.figure()

plt.subplot(1,2,1)#1行2列第一个图
#将两个图分开
plt.plot(x,y1,"r")#red

plt.subplot(1,2,2)
plt.plot(x,y2,"g")#green

可画出如下的图案:

image-20220130162502084

1
2
3
4
5
6
plt.xlim()#显示x轴的区间
plt.ylim()#显示y轴的区间
"r."#只有点
"r.-"#点行
"r--"#虚线连接
plt.imshow()#展示图片

在最后,我们进行简单的网络爬虫的学习。有关爬虫:可以自动的获取网页内容的程序,能够高效获得网上的海量数据。

过程如下:

  1. 通过网址和DNS服务器找到服务器主机。
  2. 发送请求获得浏览器结果。
  3. 解析获得浏览器呈现的结果。

几种常见的爬虫工具:

  1. Urllib
  2. Requests(页面级)
  3. Scarpy(网站级)
  4. Selenium

对于status_code:

  1. 2字头:代表请求已经被服务器成功接收和理解。
  2. 3字头:重新定向。
  3. 4字头:客户端发生错误。
  4. 5,6字头:服务器发生错误或异常。
1
2
3
4
import requests
data=requests.get("https://www.csdn.net")
data.encoding="utf-8"#显示中文
data.text#网站源代码

爬虫静态网站实战:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests
form bs4 import BeautifulSoup

url=#静态网站网址定义
header={"user-agent":"Mozilla/5.0"}#反爬机制
data=requests.get(url=url,headers=header)
html=data.text
#可以运用chrome中的开发者工具

soup=BeautifulSoup(html,"lxml")
lis=soup.find_all(name="div",attrs="id":"row355")

i=0
for li in lis:
temp=li.find(name="div",attrs={"_index":str(i)})
i=i+1
print(temp.text)
Author: Jerry Ren
Link: http://example.com/2022/01/19/Basic-For-Python/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.