美团网餐饮商家数据清洗

为了获得北京餐饮行业最受好评的菜系分布、人均价格和地理位置等信息,通过八爪鱼对美团网上北京餐饮行业的数据进行爬取,爬取的商家为全城最受好评的前1000家店铺,并把数据存入了MySQL数据库。

一共获得原始数据1047条,需要对原始数据进行清洗,以便下一步分析。

数据清洗

原始数据字段如下:



store字段中有的店铺名加了前缀“食品安全”,统一将该前缀去掉。

price字段中只想保留价格数据,去掉“人均¥”的前缀,新建字段average_price int(255),从price字段中提取数字信息。

address字段中包含行政区、街道信息,新建字段area varchar(255),street varchar(255),将区域和街道分开存储。

number字段中只想保留数字信息,去掉前缀,新建字段num int(255),从number字段中提取数字信息,没有数字信息的设为null。

serial字段中有包含“北京”这一地域前缀,统一将该前缀去掉。

score字段中不仅有评分信息还包含了人均价格,新建字段ss float(255),提取分数。

异常及空值处理:因为美团商家设置的格式问题,有些店铺没有提供营业时间或地址等数据,会出现空值,当字段为空时,填充null。此外,爬出的数据会有重复,去除重复商铺。

处理过程

1. distinct之后发现采集到的数据有重复,首先要把重复的数据删掉。具体操作为建立一个新表,将现有表中非重复的数据填充进新表中。

INSERT INTO first_table_name (column1, column2, ... columnN) 

SELECT column1, column2, ...columnN 

FROM second_table_name

[WHERE condition];

2.去掉store、serial、price、address等字段的前缀

UPDATE tablename SET store = REPLACE(store,'前缀','');

UPDATE tablename SET serial = '新内容'  WHERE serial = '旧内容';

3.新建字段average_price int(255),将price字段中数字字符串转换成数字。

ALTER TABLE tablename ADD average_price INT;

UPDATE tablename SET average_price = SUBSTRING_INDEX(price,'.',1)

4.提取行政区和街道信息

UPDATE tablename SET area = LEFT(address,3)

WHERE address LIKE '%平谷区%' or address LIKE '%海淀区%';

UPDATE tablename SET street = SUBSTRING_INDEX(address,area,-1);

UPDATE tablename SET street = address WHERE area IS NULL;

5.提取评分信息

UPDATE tablename SET ss = SUBSTRING_INDEX(score,'分',1);

6.提取点评数

UPDATE tablename SET num = SUBSTRING_INDEX(SUBSTRING_INDEX(number,'条',1),'序',-1) WHERE number LIKE '%条%';

7.删掉重复的商铺中评价为空的商家

#查询表中重复的商家

SELECT username,passwd FROM tablename WHERE username in ( SELECT username FROM tablename GROUP BY username HAVING count(username)>1);

建一个新表,将处理好的非重复字段填充进去

INSERT INTO abc(store,average_price,area,street,num,ss,food1,food2,food3,time)

SELECT store,average_price,area,street,num,ss,food1,food2,food3,time

FROM haoping

WHERE store IN (select store from haoping GROUP BY store having count(store)=1);

INSERT INTO abc(store,average_price,area,street,num,ss,food1,food2,food3,time)

SELECT store,average_price,area,street,num,ss,food1,food2,food3,time

FROM haoping

WHERE store IN (select store from haoping GROUP BY store having count(store)>1)

AND num is not null ;

至此,所有数据清洗完毕,获得979条有效记录。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容