c23b980ba622fd8460546205e98c1deb.gif

 
 
公众号后台回复“图书“,了解更多号主新书内容

     作者:AI悦创

     来源:AI悦创

其实,除了使用 Python 编写爬虫来下载资料, Python 在数据分析和可视化方面也非常强大。往往我们在工作中需要经常使用 Excel 来从表格生成曲线图,但步骤往往比较繁琐,而用 Python 则可以轻松实现。

1. 从 csv 或 excel 提取数据来画图

本节需要先安装 pandas 、matplotlib、seaborn

pip install pandas matplotlib seaborn

我们以刚才创建的 tips_2.xlsx 这个 excel 为例,来介绍我们如何把 Excel 表格中的数据画成图。

tips_2.xlsx 是上一篇我们生成的:Python 万能代码模版:爬虫代码篇

我们这次将 excel 中的卖出价一列,生成柱状图。

代码如下所示:

# -*- coding: utf-8 -*-
# @Author: AI悦创
# @Date:   2021-09-14 21:56:37
# @Last Modified by:   aiyc
# @Last Modified time: 2021-09-15 14:27:22
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 使用 pandas 读取 excel, csv 文件的话换成 pd.read_csv 即可
df = pd.read_excel("tips2.xlsx")

# 因为第一行是中文表头,所以我们先过滤掉
df = df[df.index>0]
sns.set()
figure2 = plt.figure(figsize = (10, 5))
figure2.add_subplot(1,1,1)

# 设置轴的属性
plt.xlabel("",fontsize = 14)
plt.ylabel("卖出价", fontsize = 14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.title("外汇情况", fontsize=14)

# 设置字体的属性
# plt.rcParams["font.sans-serif"] = ["Arial Unicode MS"]
# plt.rcParams["font.family"] = 'sans-serif'
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False

category = df[0]
index_category = np.arange(len(category))

# 将卖出价 转换为数字
df[3] = pd.to_numeric(df[3])
plt.xticks(rotation = 90)
plt.bar(x=df[0], height=df[3].values, color=[1,0,1])
plt.show()

输出如下所示:

6dfc206a89f841b16c2366651335504c.png

替换说明:

05de5fcde3728e9b208cb087a6cf95f7.png

  1. 替换要画图的 excel 文件夹名称

  2. Y 轴的标题

  3. 图的标题

  4. 横轴的数据(第几列做横轴)

  5. 纵轴的数据(第几列做纵轴)

代码: https://github.com/AndersonHJB/AIYC_DATA/tree/main/02-玩转图表,实现数据可视化/2.1%20从%20csv%20或%20excel%20提取数据来画图

2. 从文本文件中生成词云

需要先安装 wordcloud,jieba

pip install wordcloud jieba

词云是最近数据分析报告中非常常见的数据表现形式了,它会从一段文字中抽取出高频的词汇并且以图片的形式将它们展示出来。

如何用 Python 生成词云呢?

为了做示范,我们首先解析第一步我们抓取的 tips_1.html 网页(考研网),将所有的新闻标题都存储到一个文本文档中。

代码如下:

# -*- coding: utf-8 -*-
# @Author: AI悦创
# @Date:   2021-09-15 22:15:30
# @Last Modified by:   aiyc
# @Last Modified time: 2021-09-15 23:12:34
from bs4 import BeautifulSoup

# 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
def create_doc_from_filename(filename):
	with open(filename, "r", encoding='utf-8')as f:
		html_content = f.read()
	doc = BeautifulSoup(html_content, "lxml")
	return doc


def parse(doc):
	post_list = doc.find_all("div",class_="post-info")
	result = []
	for post in post_list:
		link = post.find_all("a")[1]
		result.append(link.text.strip())

	result_str="\n".join(result)
	with open("news_title.txt", "w", encoding='utf-8') as fo:
		fo.write(result_str)

def main():
	filename = "tips1.html"
	doc = create_doc_from_filename(filename)
	parse(doc)
	
if __name__ == '__main__':
	main()

接下来我们将 news_title.txt 这个文本文件中的汉字进行分词,并生成词云。代码如下:

import jieba
import wordcloud
import matplotlib.pyplot as plt

def create_ciyun():
	text = ""
	with open ("news_title.txt", encoding="utf-8") as fo:
		text = fo.read()
	split_list = jieba.lcut(text)
	final_text = " ".join(split_list)

	stopwords= ["的", "是", "了"]
	# Windows 系统的 font_path 替换为'C:\Windows\Fonts\STZHONGS.ttf'
	wc = wordcloud.WordCloud(font_path = r"C:\Windows\Fonts\STZHONGS.TTF", width=1000, height=700, background_color="white",max_words=100,stopwords = stopwords)
	wc.generate(final_text)
	plt.imshow(wc)
	plt.axis("off")
	plt.show()

然后,在 main 函数中调用:

def main():
	filename = "tips1.html"
	doc = create_doc_from_filename(filename)
	parse(doc)
	create_ciyun()

为了方便阅读,这里我也把整合好的代码放出来:

# -*- coding: utf-8 -*-
# @Author: AI悦创
# @Date:   2021-09-15 22:15:30
# @Last Modified by:   aiyc
# @Last Modified time: 2021-09-15 23:21:44
import jieba
import wordcloud
import matplotlib.pyplot as plt
from bs4 import BeautifulSoup

# 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
def create_doc_from_filename(filename):
	with open(filename, "r", encoding='utf-8')as f:
		html_content = f.read()
	doc = BeautifulSoup(html_content, "lxml")
	return doc


def parse(doc):
	post_list = doc.find_all("div",class_="post-info")
	result = []
	for post in post_list:
		link = post.find_all("a")[1]
		result.append(link.text.strip())

	result_str="\n".join(result)
	with open("news_title.txt", "w", encoding='utf-8') as fo:
		fo.write(result_str)


def create_ciyun():
	text = ""
	with open ("news_title.txt", encoding="utf-8") as fo:
		text = fo.read()
	split_list = jieba.lcut(text)
	final_text = " ".join(split_list)

	stopwords= ["的", "是", "了"]
	# Windows 系统的 font_path 替换为'C:\Windows\Fonts\STZHONGS.ttf'
	wc = wordcloud.WordCloud(font_path = r"C:\Windows\Fonts\STZHONGS.TTF", width=1000, height=700, background_color="white",max_words=100,stopwords = stopwords)
	wc.generate(final_text)
	plt.imshow(wc)
	plt.axis("off")
	plt.show()

def main():
	filename = "tips1.html"
	doc = create_doc_from_filename(filename)
	parse(doc)
	create_ciyun()

if __name__ == '__main__':
	main()

不过还是建议阅读源代码文件,源代码文件我此片段最后会放出来。

输出结果如下:

2c8b9179ec3d97c581f410103eda22a9.png如果你想生成自己的词云,首先你需要想清楚你的数据来源,一般是一个网页或者一个文本文件。

  • 如果是网页的话可以首先保存到本地,提取文本,之后就可以进行代码替换来生成了。(对于网页文件,需要自行提取文本咯,实在不会就把网页的文件的内容,复制出来。保存成 .txt 格式文件。

  • 如果是文本,直接复制在 text,再执行下文即可。)

我们代码模板,实际是下面这个模板:

def create_ciyun():
	text = ""
	with open ("news_title.txt", encoding="utf-8") as fo:
		text = fo.read()
	split_list = jieba.lcut(text)
	final_text = " ".join(split_list)

	stopwords= ["的", "是", "了"]
	# Windows 系统的 font_path 替换为'C:\Windows\Fonts\STZHONGS.ttf'
	wc = wordcloud.WordCloud(font_path = r"C:\Windows\Fonts\STZHONGS.TTF", width=1000, height=700, background_color="white",max_words=100,stopwords = stopwords)
	wc.generate(final_text)
	plt.imshow(wc)
	plt.axis("off")
	plt.show()

替换说明:

4b13dbb260fd085dc027856d2d2cd64d.png

  1. 替换为你准备的网页或者文本文件的文件名。

PS:上面的模板生成的词语适合非专业的使用,毕竟如果要较真的话,还是很糙的。

代码:https://github.com/AndersonHJB/AIYC_DATA/tree/main/02-玩转图表,实现数据可视化/2.2%20从文本文件中生成词云

◆ ◆ ◆  ◆ ◆
麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
 
 
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:


猜你喜欢

● 卧槽!原来爬取B站弹幕这么简单
● 厉害了!麟哥新书登顶京东销量排行榜!
● 笑死人不偿命的知乎沙雕问题排行榜

● 用Python扒出B站那些“惊为天人”的阿婆主!
● 你相信逛B站也能学编程吗
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐