关注小聚,获取数据分析最新资讯
在数据分析中,一个小小的快捷方式或附加组件有时真是天赐之物,并且可以成为真正的生产力助推器。所以,在这里小聚整理了使用Python进行数据分析的一些小技巧,
希望能成为你数据分析时 Python 日常帮手的最佳实践。
巧用 Python 爬虫,实现财富自由
首先可以用 Python 来进行爬虫,什么是爬虫?简单理解来说就是抓取网络上的数据(文档、资料、图片等)。比如你考研可以爬文档和学习资料,要网络上的表格数据做分析,批量下载图片等。
下面我们来看看是如何实现的。
01
爬取文档、学习资料
首先,你得先确定你要爬的网站是什么?你要获取的目的是什么?比如,小明想爬青研帮网站中的招考指南,所以他想搜集目前该网页的所有文章的标题和超链接,以方便后续浏览。
爬取网站的链接:https://zkaoy.com/sions/exam
目的:收集目前该网页的所有文章的标题和超链接
使用 Python,可以参考以下两步的代码模板实现(提示:需要先安装 Python 依赖:urllib3 bs4)。
第一步,下载该网页并保存为文件,代码如下。
import urllib3
# 第一个函数,用来下载网页,返回网页内容
# 参数 url 代表所要下载的网页网址。
# 整体代码和之前类似
def download_content(url):
http = urllib3.PoolManager()
response = http.request("GET", url)
response_data = response.data
html_content = response_data.decode()
return html_content
# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量
def save_to_file(filename, content):
fo = open(filename,"w", encoding="utf-8")
fo.write(content)
fo.close()
# 下载报考指南的网页
url = "https://zkaoy.com/sions/exam"
result = download_content(url)
save_to_file("tips1.html", result)
第二步,解析网页,并提取出文章的链接和标题。
from bs4 import BeautifulSoup
# 输入参数为要分析的 html 文件名,返回值为对应的BeautifulSoup对象
def create_doc_from_filename(filename):
fo = open(filename, "r", encoding='utf-8')
html_content = fo.read()
fo.close()
doc = BeautifulSoup(html_content)
return doc
doc = create_doc_from_filename("tips1.html")
post_list = doc.find_all("div",class_="post-info")
for post in post_list:
link = post.find_all("a")[1]
print(link.text.strip())
print(link["href"])
执行代码之后,你就可以看到网页中的标题和链接已经被打印到了屏幕上。那如果你想爬取其他网页如何替换呢?你只需替换几处即可,如下图所示。
替换为想要下载的网页地址
替换为网页保存的文件名
是 BeautifulSoup 函数,我们用它一步步从 html 的结构中解析出我们想要的内容,这里我们实现的是首先找到所有 class 属性是 post-info 的 div 标签,然后将这些标签中的 a 标签的文本部分提取出来。
02
使用代理服务器
这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。
03
多线程并发抓取
单线程太慢的话,就需要多线程了,这里给个简单的线程池模板 这个程序只是简单地打印了1-10,但是可以看出是并发的。
虽然说Python的多线程很鸡肋但是对于爬虫这种网络频繁型,还是能一定程度提高效率的。
当然爬虫技巧除了以上外,还可以进行Cookies处理、伪装成浏览器访问、页面解析等等,小聚将在后续的文章中进行详细讲解说明。
自动办公,提升 X10 倍工作效率
01
一行代码,定义List
定义某种列表时,写For循环过于麻烦,幸运的是,Python有一种内置的方法可以在一行代码中解决这个问题。
下面是使用For循环创建列表和用一行代码创建列表的对比。
x = [1,2,3,4]
out = []
for item in x:
out.append(item**2)
print(out)
[1, 4, 9, 16]
# vs.
x = [1,2,3,4]
out = [item**2 for item in x]
print(out)
[1, 4, 9, 16]
02
Map和Filter
一旦掌握了lambda表达式,学习将它们与Map和Filter函数配合使用,可以实现更为强大的功能。
具体来说,map通过对列表中每个元素执行某种操作并将其转换为新列表。在本例中,它遍历每个元素并乘以2,构成新列表。请注意,list()函数只是将输出转换为列表类型。
Filter函数接受一个列表和一条规则,就像map一样,但它通过比较每个元素和布尔过滤规则来返回原始列表的一个子集。
Arange返回给定步长的等差列表。它的三个参数start、stop、step分别表示起始值,结束值和步长, 请注意,stop点是一个“截止”值,因此它不会包含在数组输出中。
Linspace和Arrange非常相似,但略有不同。Linspace以指定数目均匀分割区间。所以给定区间start和end,以及等分分割点数目num,linspace将返回一个NumPy数组。这对绘图时数据可视化和声明坐标轴特别有用。
Axis代表什么?
在Pandas中,删除一列或在NumPy矩阵中求和值时,可能会遇到Axis。我们用删除一列(行)的例子:
如果你想处理列,将Axis设置为1,如果你想要处理行,将其设置为0。但为什么呢?回想一下Pandas中的shape
03
使用 Python 实现批量重命名文件
使用 Python 进行批量的文件重命名是比较简单的。比如我们要把一批图片导入到 PS 中编辑,或者导致一批视频文件到 PR 中操作,如果资源的文件名杂乱的话会严重影响效率。所以一般情况下我们都需要首先将相关的文件批量的按照某个规则重命名。
这里我们以前面爬虫示例的 3 小节中批量下载的图片文件夹为例,批量把该文件夹中的所有图片名字重命名为 “图片_0x.jpg ”的形式,其中 x 是图片的序号,逐一递增。
代码如下:
import os
root, dirs, files = next(os.walk("tips_3/"))
idx = 0
for item in files:
old_file_path = os.path.join(root,item)
new_file_path = os.path.join(root, f"图片_{idx}.jpg")
os.rename(old_file_path, new_file_path)
idx = idx + 1
执行过后,重新查看 tips_3 文件夹,可以看到下面的图片均已变成我们希望的格式。
当你希望批量重命名一批文件时,可以首先将这些文件放到某个文件夹中,然后按照下述方法进行批量重命名。
1,替换为希望批量重命名的文件夹;
2,文件的格式。其中{idx}部分需要保留,代码执行时会被替换为序号。
小结
虽然以上技巧会让你的数据分析更加方便快捷,但是在开始数据分析之旅之前,必须要掌握Python的基础方法和用法,就像一出生先要学会走路一样,别着急上跑道,打好基本功才能练就硬本事,特别是初学者一定要记住以下几点:
代码规范,这本身就是一个非常好的习惯,如果开始不养好好的代码规划,以后会很痛苦。
多动手,少看书,很多人学Python就一味的看书,这不是学数学物理,你看例题可能就会了,学习Python主要是学习编程思想。
勤练习,学完新的知识点,一定要记得如何去应用,不然学完就会忘,学我们这行主要都是实际操作。
学习要有效率,如果自己都觉得效率非常低,那就停不停,找一下原因,去问问过来人这是为什么。
聚数学院年末福利持续赠送中,
小聚整理汇总了官方B站所有视频相关配套资料
现在 全套免费送!!
领取方式:
关注同名公众号