1. 文本数据清洗与预处理
1.1 去除HTML标签
在进行文本分析时,经常需要处理一些带有HTML标签的文本,例如:
text = "<p>这是一段带有<b>HTML标签</b>的文本。</p>"
可以使用正则表达式去除所有HTML标签,代码如下:
import re
def remove_html_tags(text):
clean_text = re.sub('<.*?>', '', text)
return clean_text
clean_text = remove_html_tags(text)
print(clean_text)
# 输出:这是一段带有HTML标签的文本。
注:代码中的正则表达式含义为:<.*?> 表示匹配 `<` 和 `>` 之间的任意字符,最后的 `?` 表示非贪婪模式,即尽可能少地匹配。
1.2 去除标点符号
在文本分析中,单个或一组标点符号对结果分析可能影响较小,可根据需求选择保留或去除。以下是去除标点符号的代码实现:
import string
def remove_punctuation(text):
clean_text = ''
for char in text:
if char not in string.punctuation:
clean_text += char
return clean_text
text = "这是一段带有标点符号,如:逗号、句号、感叹号等的文本!"
clean_text = remove_punctuation(text)
print(clean_text)
# 输出:这是一段带有标点符号如逗号句号感叹号等的文本
注:string.punctuation是Python自带的字符串常量,包含所有标点符号。
1.3 去除停用词
在自然语言处理中,“停用词”是指一些在处理自然语言时被认为没有意义的词语,例如“的”、“了”、“是”等常用词语。去除这些停用词可以提高算法的准确率。这里以中文停用词表为例:
def remove_stop_words(text, stopwords):
clean_text = ''
for word in text.split():
if word not in stopwords:
clean_text += word + ' '
return clean_text
text = "这是一段带有停用词的样本,例如:的、了、是等单词需要被去除。"
stopwords = ['的', '了', '是', '等', '需要']
clean_text = remove_stop_words(text, stopwords)
print(clean_text)
# 输出:这段带有停用词样本例如单词被去除
注:stopwords是包含停用词的列表,多数情况下需要手动构建。
2. 数据可视化
2.1 柱状图
柱状图是一种常见的数据可视化类型,经常用于表现离散的数值数据。Python中有多种模块可以实现柱状图的绘制,这里以 matplotlib 为例:
import matplotlib.pyplot as plt
x_data = ["cat", "dog", "bird", "fish"]
y_data = [5, 3, 7, 2]
plt.bar(x_data, y_data)
plt.show()
执行代码后,可以看到生成的柱状图:
2.2 折线图
折线图通常用于表示数据随时间或某一变量的变化情况。Python中使用 matplotlib 模块实现折线图的绘制,以下是示例代码:
x_data = ["2020", "2021", "2022", "2023", "2024"]
y_data = [30, 55, 80, 120, 150]
plt.plot(x_data, y_data, marker='o')
plt.show()
执行代码后,可以看到生成的折线图:
3. 文件读写操作
3.1 读取文件内容
在Python中,可以使用open()函数打开文件并读取其中的内容:
filename = "example.txt"
with open(filename, "r") as f:
text = f.read()
print(text)
以上代码读取example.txt的内容,并使用with语句确保文件关闭,避免引起资源泄露。
3.2 将数据写入文件
除了读取文件内容,Python还可以将数据写入文件。这里以写入字符串为例:
filename = "example.txt"
text = "这是要写入文件的内容。"
with open(filename, "w") as f:
f.write(text)
以上代码将字符串写入example.txt文件中,如果文件不存在则会创建该文件。
4. 正则表达式
4.1 匹配单个字符
使用正则表达式可以匹配满足某种特定字符模式的字符串。其中,"."表示匹配任意一个字符,例如:
import re
text = "这是一个文本文件,其中包含各种单个字符,如 . , * & 等。"
pattern = "."
matches = re.findall(pattern, text)
print(matches)
# 输出:['这', '是', '一', '个', '文', '本', '文', '件', ',', '其中', '包', '含', '各', '种', '单', '个', '字', '符', ',', '如', '.', ',', '*', '&', '等', '。']
4.2 匹配多个字符
使用正则表达式匹配多个字符时,可以使用花括号表示匹配长度范围。例如,正则表达式 `.{2,5}` 表示匹配长度为2到5的任意字符:
text = "这是一个文本文件,其中包含了不同长度的连续字符,如 ab、abc、abcd 等。"
pattern = ".{2,3}"
matches = re.findall(pattern, text)
print(matches)
# 输出:['这是', '一个', '文本', '文件', ',其中', '包含', '了不同', '长度的', '连续', '字符,', '如ab', '、abc', '、abc', '、d 等']
5. 网络爬虫
5.1 获取HTML页面内容
使用Python中的requests库可以轻松获取网页内容,以下是一个简单示例:
import requests
url = "https://www.baidu.com"
response = requests.get(url)
html = response.text
print(html)
5.2 解析HTML页面内容
获取HTML页面内容后,需要将其解析成可读的格式。Python中有多个HTML解析库可供选择,例如:Beautiful Soup,这里以Beautiful Soup为例:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
# 获取
标签内容
title = soup.title.string
print(title)
# 获取标签的所有文本
p_texts = [p.text for p in soup.find_all('p')]
print(p_texts)
以上代码使用Beautiful Soup解析网页并获取title标签和所有p标签的文本内容。
6. 机器学习
6.1 决策树
Python中有多个机器学习库可供选择,例如scikit-learn。以下是使用scikit-learn库实现决策树分类的示例:
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
clf = DecisionTreeClassifier()
clf.fit(X, y)
# 预测样本类别
sample = [[5.1, 3.5, 1.4, 0.2], [6.2, 3.3, 4.5, 1.4]]
prediction = clf.predict(sample)
print(prediction)
以上代码使用scikit-learn库的DecisionTreeClassifier类实现决策树分类,利用鸢尾花数据集进行训练。
6.2 神经网络
除了决策树,Python中还有多种实现机器学习的库和框架可供选择。以下是使用Keras框架实现简单神经网络的示例:
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
# 载入数据
iris = load_iris()
X = iris.data
y = iris.target
# 对类别进行one-hot编码
y = to_categorical(y)
# 定义模型
model = Sequential()
model.add(Dense(10, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(X, y, epochs=50, batch_size=10)
# 预测样本类别
sample = [[5.1, 3.5, 1.4, 0.2], [6.2, 3.3, 4.5, 1.4]]
prediction = model.predict(sample)
print(prediction)
以上代码使用Keras框架实现了一个简单的神经网络,并利用鸢尾花数据集进行训练和测试。