淘宝数据爬取(二 数据清洗)
淘宝数据清洗
01 导入相关模块
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import re
import jieba
from wordcloud import WordCloud
from imageio import imread
import warnings
sns.set(style="darkgrid")
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False
warnings.filterwarnings("ignore")
02 数据读取
df = pd.read_csv("笔记本电脑.csv", engine='python', encoding='utf-8-sig', header=None)
df.columns = ["描述信息", "价格", "付款人数", "旗舰店", "发货地址"]
df.head()
03 数据去重:我们认为“描述信息”和“价格”相同的记录,都是相同的记录。
# 去重之前的记录数
print("去重之前的记录数",df.shape)
# 记录去重
df.drop_duplicates(subset=["描述信息","价格"],inplace=True)
# 去重之后的记录数
print("去重之后的记录数",df.shape)
04 付款人数字段的处理
# df["付款人数"].unique()
def func1(x):
if x.find("万") !=' ':
x = re.findall("(\d+)",x)[0]
return int(x) * 10000
else:
return int(re.findall("(\d+)",x)[0])
df["付款人数"] = df["付款人数"].apply(func1)
df.head()
05 发货地址处理
def func2(x):
if x.find(" ") != -1:
return x.split(" ")[1]
else:
return x
df["发货地址"] = df["发货地址"].fillna({"发货地址":"无"})
df["发货地址"] = df["发货地址"].apply(func2)
df.head()
tar_cpu = ['联想','惠普','酷睿','苹果','三星','华硕','索尼','宏碁','戴尔','海尔','长城','海尔','神舟','清华同方','方正','明基']
tar_cpu = np.array(tar_cpu)
def rename(x):
index = [i in x for i in tar_cpu]
if sum(index) > 0:
return tar_cpu[index][0]
else:
return "牌子不详"
df["电脑品牌"] = df["描述信息"].apply(rename)
df.head()
# 不同电脑品牌的销量
x = df["电脑品牌"].value_counts().reset_index()
x = x.drop(df.index[1], axis=0) # 注意这种用法
x.index = np.arange(1,len(x)+1)
x
06 描述性息字段的处理
x = "【酷睿i5+指纹解锁】2020款全新15.6英寸i5笔记本电脑游戏本超薄手提电脑学生办公用商务轻薄便携粉色女生款"
# list(jieba.cut(x))
add_word = ['联想','惠普','酷睿','苹果','三星','华硕','索尼','宏碁','戴尔','海尔','长城','海尔','神舟','清华同方','方正','明基']
for i in add_word:
jieba.add_word(i)
df["切分后的描述信息"] = df["描述信息"].apply(lambda x:jieba.lcut(x))
df.head()
07都去停用词
with open("stoplist.txt", encoding="utf8") as f:
stop = f.read()
stop = stop.split()
stop = [" ","笔记本电脑"] + stop
stop[:10]
[' ', '笔记本电脑', '\ufeff', '说', '人', '元', 'hellip', '&', ',', '?']
df["切分后的描述信息"] = df["切分后的描述信息"].apply(lambda x: [i for i in x if i not in stop])
df.head()
all_words = []
for i in df["切分后的描述信息"]:
for j in i:
all_words.extend(i)
word_count = pd.Series(all_words).value_counts()
print(word_count[:20])
08 制作词云图
# 1、读取背景图片
back_picture = imread("aixin.jpg")
# 2、设置词云参数
wc = WordCloud(font_path="G:\\6Tipdm\\wordcloud\\simhei.ttf",
background_color="white",
max_words=2000,
mask=back_picture,
max_font_size=200,
random_state=42
)
wc2 = wc.fit_words(word_count)
# 3、绘制词云图
plt.figure(figsize=(16,8))
plt.imshow(wc2)
plt.axis("off")
plt.show()
wc.to_file("电脑.png")
09 将清洗好的数据,导出(价格最贵的电脑)
df.to_excel("清洗后的数据.xlsx",encoding="utf-8-sig",index=None)
df1 = df.sort_values(by="价格", axis=0, ascending=False)
df1 = df1.iloc[:10,:]
df1.to_excel("价格 排名前10的数据.xlsx",encoding="utf-8-sig",index=None)
df1