查看原文
其他

Python 爬下的必胜客数据背后,藏着什么样的信息?

极客猴 CSDN 2019-02-15

笔者从大学开始就接触 Python,起初是好奇为什么 Python 不需要浏览器就能抓取网站数据。深感奇妙之余,也想亲身体验这种抓取数据的乐趣,所以写了很多爬虫程序。

后随着知识面的拓展,开始了解到数据分析这一领域,方知道爬取到的数据背后原来还隐藏着一些信息。自己也是在学习这方面的相关知识。本文算是数据分析的处女稿,主要内容是从数据中提取出必胜客餐厅的一些信息。


环境搭建


百度前端技术部开源一个基于 Javascript 的数据可视化图表库。其名字为 ECharts。它算是前端数据可视化的利器,能提供直观、生动、可交互、可个性化定制的数据可视化图表。

国内有个大神突发奇想,这么好用的库如果能和 Python 结合起来就好了。于是乎,pyecharts 库应运而生。因此,pyecharts 的作用是用于生成 Echarts 图表的类库。本文中的所有图标,都是利用 pyecharts 生成的。

安装该库也很简单,使用 pip 方式安装。

pip install pyecharts


数据清洗


数据清洗工作是数据分析必不可少的步骤。这一步是为了清洗一些脏数据。因为可能网站本身就有空数据,或者匹配抓取网站信息时,有些混乱的数据。这些都需要清除掉。

我之前是将数据写到一个 json 文件中,我先将数据读取出来。然后把 json 文本数据转化为字典类型。

def get_datas():
    """ 从文件中获取数据 """
    file_name = 'results.json'
    with open(file_name, 'r', encoding='UTF-8'as file:
        content = file.read()
        data = json.loads(content, encoding='UTF-8')
        # print(data)
    return data

接着对字典进行遍历, 统计每个城市的餐厅总数。

def count_restaurants_sum(data):
    """ 对字典进行遍历, 统计每个城市的餐厅总数 """
    results = {}
    for key, value in data.items():
        results[key] = len(value)
        # print(key, len(value))
    return results

再将字典中的每个 key-value 转化为元组,然后根据 value 进行倒序排序。

restaurants_sum = sorted(restaurants_sum.items(), key=lambda item: item[1], reverse=True)

最后根据显示结果,手动删除一些脏数据。

def clean_datas(data):
    """
    清除脏数据。
    经过分析发现 ('新区', 189), ('南区', 189), ('朝阳', 56) 是脏数据, 必胜客官网的地区选项中就有这三个名字
    [('新区', 189), ('上海市', 189), ('南区', 189), ('北京市', 184), ('深圳', 95),
     ('广州', 86), ('杭州', 78), ('天津市', 69), ('朝阳', 56), ('苏州', 54)]
    """

    data.remove(('新区'189))
    data.remove(('南区'189))
    data.remove(('朝阳'56))
    return data

到此,数据工作已经完成。


数据分析


我们已经拿到了经过清洗的数据,我们简单对数据进行打印,然后绘制直方图。

def render_top10():
    """
    绘制直方图显示 全国必胜客餐厅总数 Top 10 的城市
    根据清洗过后数据的结果, Top 城市如下
    ('上海市', 189), ('北京市', 184), ('深圳', 95), ('广州', 86), ('杭州', 78),
    ('天津市', 69), ('苏州', 54), ('西安', 52), ('武汉', 51), ('成都', 48)
    """

    attr = ["上海""北京""深圳""广州""杭州""天津""苏州""西安""武汉""成都"]
    values = [1891849586786954525148]
    bar = Bar("全国各大城市必胜客餐厅数量排行榜")
    bar.add("总数", attr, values, is_stack=True, is_more_utils=True)
    bar.render("render_bar.html")

绘制出来的结果如下:

难看出,一线城市拥有必胜客的餐厅数比较多,省会城市拥有餐厅数要比非省会城市要多

我们继续绘制饼状图,看看北上广深的餐厅数在全国的占比。

def render_top10_percent():
    """
    绘制饼状图 显示北上广深餐厅数在全国中的比例
    """

    configure(global_theme='macarons')
    attr = ["上海""北京""深圳""广州""其他城市"]
    value = [18918495861893]  # 根据 count_other_sum() 计算出来的
    pie = Pie("北上广深餐厅数的占比")
    pie.add("", attr, value, is_label_show=True, is_more_utils=True)
    pie.render("render_pie.html")

绘制出来的结果如下:

从数据上看,北上广深的餐厅数占据全国餐厅数的 22.64%。其他二三线城市共占据 77.36%。说明必胜客餐厅不仅主打大城市路线,还往二三四线城市发展,扩展领域。

作者:极客猴,热衷于 Python,目前擅长于利用 Python 制作网路爬虫以及 Django 框架。

声明:本文为作者投稿,版权归其个人所有。

 热 文 推 荐 

☞ 36 岁捧走图灵碗!80 岁算法大师高德纳要在 105 岁完结《计算机程序设计艺术》

☞ 算到怀疑人生!如何用并查集解决朋友圈个数问题?

☞ 深度学习的发展可能已达极限!

☞ 特别策划 | 盘点区块链的2018:技术与工具演进篇

☞ 企业云存储建设之路

☞ 开除“野狗”式程序员,团队的效率提高了

☞ AI in 美团:吃喝玩乐背后的黑科技

☞ 老程序员肺腑忠告:千万别一辈子靠技术生存!

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

点击“阅读原文”,打开 CSDN App 阅读更贴心!
喜欢就点击“好看”吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存