1. 程式人生 > 實用技巧 >淘寶資料爬取(二 資料清洗)

淘寶資料爬取(二 資料清洗)

淘寶資料清洗

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