zoukankan      html  css  js  c++  java
  • 淘宝数据爬取(二 数据清洗)

    淘宝数据清洗

    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()
    

    image-20201009203109848

    03 数据去重:我们认为“描述信息”和“价格”相同的记录,都是相同的记录。

    # 去重之前的记录数
    print("去重之前的记录数",df.shape)
    # 记录去重
    df.drop_duplicates(subset=["描述信息","价格"],inplace=True)
    # 去重之后的记录数
    print("去重之后的记录数",df.shape)
    

    image-20201009203227593

    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()
    

    image-20201009203315754

    05 发货地址处理

    def func2(x):
        if x.find(" ") != -1:
            return x.split(" ")[1]
        else:
            return x
    df["发货地址"] = df["发货地址"].fillna({"发货地址":"无"})
    df["发货地址"] = df["发货地址"].apply(func2)
    df.head()
    

    image-20201010123430178

    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()
    

    image-20201010123508155

    # 不同电脑品牌的销量
    x = df["电脑品牌"].value_counts().reset_index()
    x = x.drop(df.index[1], axis=0)   # 注意这种用法
    x.index = np.arange(1,len(x)+1)
    x
    

    image-20201010123546338

    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()
    

    image-20201010123646036

    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()
    

    image-20201010123827574

    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])
    

    image-20201010123907418

    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")
    

    image-20201010124038020

    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
    

    image-20201010124231454

  • 相关阅读:
    New Day
    apache mod_xsendfile 让php提供更快的文件下载
    XSS跨站测试代码大全
    HTML5 使用application cache 接口实现离线数据缓存
    HTTP 204 与 205 应用
    php HTTP请求类,支持GET,POST,Multipart/form-data
    php 过滤html标记属性类
    php 利用fsockopen GET/POST 提交表单及上传文件
    php 实现BigPipe分块输出
    同一域名对应不同IP,访问指定主机文件内容的方法
  • 原文地址:https://www.cnblogs.com/James-221/p/13791960.html
Copyright © 2011-2022 走看看