Python实战之淘宝手机销售分析(数据清洗、可视化、数据建模、文本分析...
Python实战之淘宝⼿机销售分析(数据清洗、可视化、数据建模、⽂本分析)⽂章⽬录
⼀、数据介绍
本⽂数据爬取了淘宝全⽹⼿机销售数据,其中包括:
cellphone.csv
该数据集包括淘宝⽹在售的⼿机商品信息,包括爬取信息、商品信息、评分收藏信息等;
Index Column Non-Null Count Dtype 0爬取时间(__time)1691 non-null object 1爬取链接(__url)1691 non-null object 2商品ID(product_id)1691 non-null int64 3商品名称(name)1691 non-null object 4商品描述(description)1587 non-null object 5商品参数(params)1691 non-null object 6商品现价(current_price)1691 non-null object 7商品原价(original_price)1691 non-null object 8⽉销量(month_sales_count)1684 non-null float64 9库存(stock)1675 non-null float64 10发货地址(shipping_address)1691 non-null object 11商品发布时间(product_publish_time)1691 non-null int64 12店铺ID(shop_id)1691 non-null int64 13店铺名称(shop_name)1691 non-null object 14商品链接URL(url)1691 non-null object 15评分(总分5.0分)(score)1680 non-null float64 16收藏数(stores_count)1691 non-null int64 17累计评价数(comments_count)1679 non-null float64 18商品评价印象标签(impresses)1691 non-null object 19Unnamed: 190 non-null float64
count_add_comments.csv
该数据集包含上述⼿机商品的评价信息,包含图⽚的评价条数、追评条数等;
Index Column Non-Null Count Dtype 0图⽚(picNum)1232 non-null float64
1追评(used)1176 non-null float64
Index Column Non-Null Count Dtype 2ID(id)1691 non-null int64
3Unnamed: 30 non-null float64
comments.csv
该数据集包含上数据⼿机商品的具体评价,包括评价时间、评价内容等;
Index Column Non-Null Count Dtype 0商品ID(id)376760 non-null int64 1评价时间(time)376760 non-null object 2评价内容(content)376759 non-null object 3爬取链接(spurl)376760 non-null object 4爬取时间(sptime)376760 non-null object 5Unnamed: 50 non-null float64⼆、数据清洗
导⼊数据
发现商品描述、⽉销量、库存、评分、累计评价数存在缺失
import pandas as pd
import numpy as np
ad_csv('cellphone.csv')
add_ad_csv('count_add_comments.csv')
缺失值处理+合并
先对phone 进⾏处理
#删除空⽩列
phone=phone.drop(columns=['Unnamed: 19'])
#先获取列名,在此基础上进⾏更改
'商品描述','商品参数','商品现价',
'商品原价','⽉销量','库存',
'发货地址','商品发布时间',
'店铺ID','店铺名称','商品链接URL','评分',
'收藏数','累计评价数','商品评价印象标签']
#商品描述、⽉销量、库存、评分、累计评价数存在缺失
#查看⽉销量为0的商品信息
phone[phone['⽉销量'].isnull()].info()
#对销量为零的数据进⾏ 0 填充
phone['⽉销量']=phone['⽉销量'].fillna(0)
#处理库存(0 填充)、评分(删除空⽩数据)、累计评价数(0填充)
phone['库存']=phone['库存'].fillna(0)
phone['累计评价数']=phone['累计评价数'].fillna(0)
phone=phone.dropna(subset=['评分'])
#重新梳理 index
phone.index=np.arange(len(phone))
再对add_comments和 phone 进⾏数据合并
(phone,add_comments,left_on='商品ID',right_on='ID(id)')
最后对合并后的df进⾏列名梳理,删去重复的商品 ID
'商品描述','商品参数','商品现价',
'商品原价','⽉销量','库存',
'发货地址','商品发布时间',
'店铺ID','店铺名称','商品链接URL','评分',
'收藏数','累计评价数','商品评价印象标签','图⽚','追评','ID(id)','Unnamed: 3']
df=df.drop(columns=['Unnamed: 3'])
df=df.drop(columns=['ID(id)'])
清洗时间参数
time.localtime():能将 int 格式的时间数据转化
如:time.localtime(1548475512)
输出结果:time.struct_time(tm_year=2019, tm_mon=1, tm_mday=26, tm_hour=12, tm_min=5, tm_sec=12, tm_wday=5, tm_yday=26, tm_isdst=0)
time.strftime(’%Y-%m-%d’,time.localtime(1548475512)):输出既定格式的时间信息;
淘宝手机店铺
输出结果:‘2019-01-26’
关于时间有关格式化信息
%y 两位数的年份表⽰(00-99)
%Y 四位数的年份表⽰(000-9999)
%m ⽉份(01-12)
%d ⽉内中的⼀天(0-31)
%H 24⼩时制⼩时数(0-23)
%I 12⼩时制⼩时数(01-12)
%M 分钟数(00-59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的⽉份名称
%B 本地完整的⽉份名称
%c 本地相应的⽇期表⽰和时间表⽰
%j 年内的⼀天(001-366)
%p 本地A.M.或P.M.的等价符
%U ⼀年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W ⼀年中的星期数(00-53)星期⼀为星期的开始
%x 本地相应的⽇期表⽰
%X 本地相应的时间表⽰
%Z 当前时区的名称
%% %号本⾝
import time
df['商品发布时间']=df['商品发布时间'].apply(lambda op:time.strftime('%Y-%m-%d',time.localtime(op)))
清洗价格数据
⽬前得到的‘商品现价’、‘商品原价’两列均为价格区间的表⽰格式,我们⽆法获取完整的价格,在此取其均值;
def get_price(s):
price=s.split('-')
l=[float(i)for i in price]
an(l)
df['商品现价']=df['商品现价'].apply(get_price)
df['商品原价']=df['商品原价'].apply(get_price)
清洗发货城市数据
⽬前发货城市数据为省+城市名的表⽰⽅式,我们要将省份+城市数据提取出来;
#获得中国全部的省级单位名称,到全部的省级单位#将每⼀个地址的省份提取出来,剩下的就是城市pro_list=['北京',
'天津',
'上海',
'重庆',
'河北',
'⼭西',
'辽宁',
'吉林',
'⿊龙江',
'江苏',
'浙江',
'安徽',
'福建',
'江西',
'⼭东',
'河南',
'湖北',
'湖南',
'⼴东',
'海南',
'四川',
'贵州',
'云南',
'陕西',
'⽢肃',
'青海',
'台湾',
'内蒙古',
'⼴西',
'西藏',
'宁夏',
'新疆',
'⾹港',
'澳门']
def get_city(address):
for i in pro_list:
if i in address:
place(i,'')
if len(city)==0:
city=i
return city
def get_province(address):
for i in pro_list:
if i in address:
province=i
return province
df['发货城市']=df['发货地址'].apply(get_city)
df['发货省份']=df['发货地址'].apply(get_province)
价格分箱
import matplotlib.pyplot as plt
price_=df['商品现价'].value_counts().sort_index() plt.plot(price_.index,price_)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。