print("Hello!" + "陈菲")
感兴趣的开发模块:(共6个)
1. Requests
Requests库中有7个主要的函数
分别是 request() 、get() 、 head() 、post() 、put() 、patch() 、delete() 。这七个函数中request()函数是其余六个函数的基础函数,其余六个函数的实现都是通过调用该函数实现的。
方法说明
-
requests.request() 构造一个请求,支撑一下方法的基础方法
-
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET(请求URL位置的资源)
-
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD(请求URL位置的资源的头部信息)
-
requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST(请求向URL位置的资源附加新的数据)
-
requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT(请求向URL位置储存一个资源,覆盖原来URL位置的资源)
-
requests.patch() 向HTML网页提交局部修改的请求,对应于HTTP的PATCH(请求局部更新URL位置的资源)
-
requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE(请求删除URL位置储存的资源)
而这几个函数中,最常用的又是 requests.get() 函数。get函数有很多的参数,我只举几个比较常用的参数
参数说明
-
url 就是网站的url
-
params 将字典或字节序列,作为参数添加到url中,get形式的参数
-
data 将字典或字节序列,作为参数添加到url中,post形式的参数
-
headers 请求头,可以修改User-Agent等参数
-
timeout 超时时间
-
proxies 设置代理
2. Pandas
一般写法
import pandas as pd
主要特点
-
使用默认和自定义索引的快速高效的DataFrame对象。
-
用于将数据从不同文件格式加载到内存数据对象的工具。
-
数据对齐和缺失数据的集成处理。
-
重新设置和旋转日期集。
-
大数据集的基于标签的分片,索引和子集。
-
数据结构中的列可以被删除或插入。
-
按数据分组进行聚合和转换。
-
高性能的数据合并和连接。
-
时间序列功能。
主要功能
导入数据
-
pd.read_csv(filename):从CSV文件导入数据
-
pd.read_table(filename):从限定分隔符的文本文件导入数据
-
pd.read_excel(filename):从Excel文件导入数据
-
pd.read_sql(query, connection_object):从SQL表/库导入数据
-
pd.read_json(json_string):从JSON格式的字符串导入数据
-
pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
-
pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()
-
pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据
导出数据
-
df.to_csv(filename):导出数据到CSV文件
-
df.to_excel(filename):导出数据到Excel文件
-
df.to_sql(table_name, connection_object):导出数据到SQL表
-
df.to_json(filename):以Json格式导出数据到文本文件
创建测试对象
-
pd.DataFrame(np.random.rand(20,5)):创建20行5列的随机数组成的DataFrame对象
-
pd.Series(my_list):从可迭代对象my_list创建一个Series对象
-
df.index = pd.date_range(‘1900/1/30’, periods=df.shape[0]):增加一个日期索引
查看、检查数据
-
df.head(n):查看DataFrame对象的前n行
-
df.tail(n):查看DataFrame对象的最后n行
-
df.shape():查看行数和列数
-
df.info():查看索引、数据类型和内存信息
-
df.describe():查看数值型列的汇总统计
-
s.value_counts(dropna=False):查看Series对象的唯一值和计数
-
df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数
数据选取
-
df[col]:根据列名,并以Series的形式返回列
-
df[[col1, col2]]:以DataFrame形式返回多列
-
s.iloc[0]:按位置选取数据
-
s.loc[‘index_one’]:按索引选取数据
-
df.iloc[0,:]:返回第一行
-
df.iloc[0,0]:返回第一列的第一个元素
数据清理
-
df.columns = [‘a’,’b’,’c’]:重命名列名
-
pd.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组
-
pd.notnull():检查DataFrame对象中的非空值,并返回一个Boolean数组
-
df.dropna():删除所有包含空值的行
-
df.dropna(axis=1):删除所有包含空值的列
-
df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行
-
df.fillna(x):用x替换DataFrame对象中所有的空值
-
s.astype(float):将Series中的数据类型更改为float类型
-
s.replace(1,’one’):用‘one’代替所有等于1的值
-
s.replace([1,3],[‘one’,’three’]):用’one’代替1,用’three’代替3
-
df.rename(columns=lambda x: x + 1):批量更改列名
-
df.rename(columns={‘old_name’: ‘new_ name’}):选择性更改列名
-
df.set_index(‘column_one’):更改索引列
-
df.rename(index=lambda x: x + 1):批量重命名索引
数据处理:Filter、Sort和GroupBy
-
df[df[col] > 0.5]:选择col列的值大于0.5的行
-
df.sort_values(col1):按照列col1排序数据,默认升序排列
-
df.sort_values(col2, ascending=False):按照列col1降序排列数据
-
df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据
-
df.groupby(col):返回一个按列col进行分组的Groupby对象
-
df.groupby([col1,col2]):返回一个按多列进行分组的Groupby对象
-
df.groupby(col1)[col2]:返回按列col1进行分组后,列col2的均值
-
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
-
df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值
-
data.apply(np.mean):对DataFrame中的每一列应用函数np.mean
-
data.apply(np.max,axis=1):对DataFrame中的每一行应用函数np.max
数据合并
-
df1.append(df2):将df2中的行添加到df1的尾部
-
df.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部
-
df1.join(df2,on=col1,how=’inner’):对df1的列和df2的列执行SQL形式的join
数据统计
-
df.describe():查看数据值列的汇总统计
-
df.mean():返回所有列的均值
-
df.corr():返回列与列之间的相关系数
-
df.count():返回每一列中的非空值的个数
-
df.max():返回每一列的最大值
-
df.min():返回每一列的最小值
-
df.median():返回每一列的中位数
-
df.std():返回每一列的标准差
3.NumPy
numpy的主要对象是同种元素的多维数组,所有的元素都必须是一种类型,可通过一个正整数元组索引的元素表格。在numpy中维度称为轴(axes),轴的个数叫做秩(rank)。Numpy的数组类型narray,其常用对象属性:
-
ndarray.dim 数组轴的个数
-
ndarray.shape 数组的维度
-
ndarray.size 数组元素的个数
-
ndarray.dtype 数组元素类型
-
ndarray.itemsize 数组每个元素的字节大小
-
ndarray.data 指向数据内存,包含实际数组元素
主要功能
创建数组:
-
通过list或元组创建ndarray,元素类型可以由给定的数据自动推导出来,也可以由设计者给定。
-
调用zeros/ ones/ empty/ zeros_like/ones_like/ eye等函数生成
-
调用arange/ linspace也可生成
打印数组:
使用print即可,如 a = np.arange(9).reshape(3,3),再调用print(a)即可将数组a显示出来。
基本运算:
1.数组的算术运算是按元素进行的。
设a = np.array([2,3]),b=np.array(7,8)
加法:c = a + b, 则c为 array([9,11])
加法:c = b - a, 则c为 array([5,5])
乘法:c = a * b, 则c为 array([14,24])
二次方:c = a ** 2,则c为array([4, 9])
当两个数组元素的类型不同时,其会进行类型转换,往更精确的方向转换,比如int和float相加,得到的结果为float
2.矩阵乘法 dot函数
索引:
-
可通过arr[a, b], arr[:,b],arr[a, :],arr[m:n, b],arr[a, m:n],arr[m:n, p:q]等多种形式进行访问某个位置的元素、行或列。
-
arr[-1]表示访问最后一行
for row in arr: //表示按行访问arr print row
-
若想访问每个数组中元素,可以使用flat属性,如
for element in b.flat: print element
组合不同的数组:
可以沿不同轴将数组堆叠在一起:
-
Column_stack: 以列将一维数组组合成二维数组
-
Row_stack:以行将一维数组组合成二维数组
-
Hstack:水平方向堆叠
-
Vstack:垂直方向堆叠
-
Concatenate:允许可选参数给出组合时沿着的轴
将数组分割:
-
Hsplit:水平分割
-
Vsplit:垂直分割
-
Array_split:指定沿哪个轴分割
深拷贝与浅拷贝:
a= np.array([1,2,3]);
b= a; #浅拷贝,即b与a指向同一个空间, b is a = true
c= a.copy() #深拷贝,把a的内容复制给了c,不指向同一空间, c isa = false
d = a.view() #浅复制,d与a指向同一数据空间,但是此时创建了新的对象,d is a=false
mat函数:
mat函数将目标数据类型转换为矩阵(matrix)
matrix对象是继承ndarray而来,因此其和ndarray有相同的属性和方法,但它们之间有六个重要的区别:
-
矩阵对象可以使用字符串符号创建,以允许matlab风格语法
-
矩阵对象总是二维的
-
矩阵对象乘法就是矩阵乘法
-
Matrix objects over-ridepower to be matrix raised to a power. The same warning about using power insidea function that uses asanyarray(…) to get an array object holds for this fact.(这个没太懂)
-
矩阵对象的默认优先级__array_priority__是10.0,因此与ndarrays的混合操作总是产生矩阵
-
矩阵有其特殊属性,使计算更容易. arr.T矩阵转置,arr.I矩阵求逆,arr.H矩阵共轭, arr.A将矩阵作为一个ndarray对象返回
4. Matplotlib
matplotlib库是什么
matplotlib是python中常用的一个绘图库,他的功能相当于matlab,基本上matlab上能实现的绘图功能都能够通过matplotlib库来在python中进行实现。
matplotlib基础用法
matplotlib绘图使用的是其中的pyplot库,其核心思想包括以下几个步骤:
-
定一个画布;
-
在画布上绘制所需要展示的图表;
-
展示画布内容。
一些常用图表的绘制方法
统计图表绘制
-
直方图绘制
-
饼状图绘制
散点图 & 曲线绘制
-
散点图绘制
-
一般曲线绘制
图片属性设置
-
图片大小设置
-
坐标轴设置
-
网格设置
复杂图表绘制
-
同一张图中绘制多条曲线
-
以子图的方式绘制多条曲线
-
同一张图中设置双坐标系
-
在大图中绘制子图
5.TensorFlow
简介
-
随着各种图像识别, 语音识别的记录被不断刷新, 深度学习被证明是一个极具潜力的技术方向. 构建高效, 可靠, 可扩展的基础工具, 能为这一领域发展起到极大作用.
-
Google 退出了一套深度学习系统: TensorFlow. TensorFlow 是目前最优秀的深度学习系统之一:
-
具有灵活的表达能力, 能够快速实现各种算法
-
高执行能力, 具备分布扩展性
-
跨平台可移植性
-
试验可复现性
-
支持快速产品化, 模型可随时部署
-
TensorFlow 是一个基于数据流图的数值计算开源库.
-
面向数值计算 (深度学习, 通用计算机应用) 数据流图是 TensorFlow 计算的抽象表示. 数据流图是有向图, 图中的各点表示各种数学的计算操作, 边表示操作与操作之间传递的高纬度数值数据, 称为 tensor. 支持各种设备的灵活部署, 分布式集群, 手机移动设备.
特点
TensorFlow 是一个机遇数据流编程的符号数学系统, 被广泛应用于各类机器学习算法的编程实现.
TensorFlow 的特点:
-
多平台支持, 很容易在移动设备上运行
-
内置了简单的高级 API, 使用方便
-
支持可视化训练 (TensorBoard)
-
容易实现生产部署 (TensorFlow Serving)
-
良好的文档和广大的社区支持
6. PyTorch
基本用法
输出版本
import torch
print(torch.__version__)
1.7.0+cpu
创建a矩阵
a = torch.empty(5, 3)
print(a)
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
创建一个随机矩阵
b = torch.rand(5, 3)
print(b)
tensor([[0.7127, 0.1942, 0.3997],
[0.2898, 0.1822, 0.7947],
[0.2400, 0.9720, 0.9462],
[0.3822, 0.0322, 0.7618],
[0.4938, 0.8348, 0.9067]])
创建一个全0矩阵
c = torch.zeros(5, 3, dtype=torch.long)
print(c)
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
直接传入数据
d = torch.tensor([5.5, 3])
print(d)
tensor([5.5000, 3.0000])
创建一个全1矩阵
e = torch.ones(5, 3, dtype=torch.double)
print(e)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
标准差是1的随机数
f = torch.rand_like(e, dtype=torch.float)
print(f)
tensor([[0.1031, 0.3789, 0.9064],
[0.0158, 0.2760, 0.3095],
[0.1251, 0.3651, 0.4132],
[0.3512, 0.9256, 0.9110],
[0.1770, 0.0112, 0.9681]])
基本计算方法
定义张量
a = torch.zeros([5, 3])
b = torch.ones([5, 3])
加法
c = a + b
d = torch.add(a, b)
print(c)
print(d)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
减法
e = a - b
f = torch.sub(a, b)
print(e)
print(f)
tensor([[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.]])
tensor([[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.]])
索引
print(a[:, 1])
print(b[:, 1])
tensor([0., 0., 0., 0., 0.])
tensor([1., 1., 1., 1., 1.])
操作维度
x = torch.randn(4,4)
y = x.view(16)
z = x.view(-1,8)
print(x.size())
print(y.size())
print(z.size())
torch.Size([4, 4])
torch.Size([16])
torch.Size([2, 8])
与numpy协同操作
import numpy as np
x = torch.ones(5)
y = x.numpy()
print(y)
[1. 1. 1. 1. 1.]
x = np.ones(5)
y = torch.from_numpy(x)
print(x)
[1. 1. 1. 1. 1.]
半年后期望做成的小项目:外卖比价平台
背景
- 社畜与高校学生党,不管是在家还是在校还是在工作,上班的劳累与食堂菜色的单一,都导致对外卖的需求不减反增。
- 普通人没有时间各个平台比价,从而专注一个平台,容易被外卖平台使用算法杀熟。(比如是否是会员、是否短期内下过单、顾客的手机型号等)
场景描述
- 订外卖的话,我更倾向于做成app,会更方便大多数人群随时随地使用。
- 该app中包含各大外卖平台(美团、饿了么、到家美食会等)的商品。
- 展示方式
- 若某家店铺只使用一家外卖平台,那么app将直接展示。
- 若某家店铺不止使用一家外卖平台,则展示同一商品的各个平台价格对比。
功能描述
- 下单
- 用户选择下单地址。
- 用户搜索需要下单的商品。
- 搜索的结果页面将展示包含该商品的所有店铺(由近及远 and 根据客户下单次数等 形成相应的排序算法)。
- 点进某一店铺后,选择需要的商品,可以看到不同平台的商品价格、优惠情况、即时的配送费、打包费等。
- 也可查询某一商品的30天/60天的历史价格变化曲线。
- 用户选好之后,点击下单按钮,后台即可在相应的外卖平台下单,用户付款。
- 收藏
- 针对用户喜爱的商品 or 被他人种草且还未拔草的商品,可纳入收藏夹。
- 当这些商品通过一些可取的优惠从而达到历史最低价格时,提醒用户下单。
- 爆料
- 当用户有时自己使用外卖平台通过领取比较特殊的优惠券,but 此时app的比价算法无法覆盖到时。
- 用户可以选择爆料,把怎么领取优惠券的方式通过文字/截图,清晰地表述出来。
- app客服人员审核通过后,可奖励爆料者适当奖励金,奖励金可以在外卖付款时直接抵用。