上篇我们爬到了粽子的商品信息,存储到了csv文件:粽子.csv
这一篇我们就分析这个文件,利用jupter notbook来分析清洗数据,
然后在用pyechats可视化我们分析的结果,信息量可能有点大,看注释慢慢消化吧。
安装jupyter的步骤就省略了,自行查资料安装。
1.整理数据
导入需要的包:
pandas
numpy
re 正则表达式
读取上篇爬取到的数据
pd.read.csv("粽子.csv") 也可以,先不加其他参数的,有问题在加
读取进来再加上列名,显示10 行先看看到底是什么玩意儿。
整体查看下情况:
df.shape, 4357行,5列
df.describe() ,行数、价格的最大最小 平均值 中值等
数据 一般有重复行,去除重复数据在看看:
df.drop_duplicates( )去除重复项,参数inplace = True 是直接替换原数据,默认是不替换
去掉重复项在看看只要1939行了,看来淘宝重复展示的商品也不少呀,一半多都是重复的,都是套路啊!买买买 原来都是你家的!
我们需要从付款人数中提取到商品的销售数量,所以付款人数这里不能有空的行,
对查找是空的行要进行填充成:0人付款
从付款人数中提取数字 单独生成一列作为销售数量num,
发现有的付款人数是用万单位计数的,我们还需要*10000来计算
先把数字取出来,利用正则取数字,发现取出来的是个列表不是个数字,并且像1.0万这样的取出来还是[1,0]这样两个元素的列表,怎么办?我们只需要取列表第一个元素
我们发现像1.0万这样的,取数量是1,是不对的,应该是10000的,怎么办?
我们再加一列unit 把付款人数中带‘万’字的取出来放进去
发现取万字还是个列表,同样的方法在取第一元素行不行呢?试一试?发现报错的
为什么出错了?因为不是每个都带万字,有的列表是空的,取不出来第一个元素的。怎么办?
我们就是想要一个字符串的列,这里有个小技巧,我们用一个空字符''与万字列表join合并,合并的结果就是个字符串类型了。
我们的目的是想把unit是万的行 对应的 num上的数字*10000
只有重新赋值num = num * unit 来实现但是unit是字符,想办法变成数字?
重新改造unit列变成数字列
这样我们就可以用num * unit 来重新赋值生成一个新的列:销量
这样两列相乘,发现不对,因为num从付款人数中取出来后是字符类型的,需要转换成浮点型
df['num']=df['num'].astype('float')
在相乘,销量就没问题了
有了销量这列,我们目的就达到了,num 和 unit 就没有用了,直接干掉吧
axis 是轴的意思,就是列,axis=1 就是按列,默认是axis=0 是按行,inplace 是否改变原表
发货地址里面是:省份+市 组成的,如果我们要分析来自哪个省份的订单,还要把这列分割出来省份。
既然要分割发货地址,那么分货地址这里就不是有空值,怎么办?把发货地址是空的行删除掉。
先来验证一下发货地址是不是有空值的行呢?
df [ df ['发货地址'].isna( )]
看下有没有地址是空的记录:
还真有?怎么办 干掉
去掉后还有1908行了,说明有31行地址是空的
好了,地址干净了,就开始分割吧
用字符串分割函数split() ,按空格分割,省份与市之间有个空格
顺便在加一列:市 以防有用
x[-1] 是从后面开始取
分割后,发货地址与付款人数这两列都没有用了,直接干掉吧
至此清洗数据告一段落,然后重置一下索引,把成功保存一份到csv里面
df.to_csv(文件名) 生成文件在jupyter的安装目录