您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

时间:2021-12-08 10:14:57  来源:  作者:Python资料库

利用Python/ target=_blank class=infotextkey>Python实现中国地铁数据可视化。废话不多说。

让我们愉快地开始吧~

开发工具

Python版本:3.6.4

相关模块:

requests模块;

wordcloud模块;

pandas模块;

numpy模块;

jieba模块;

pyecharts模块;

matplotlib模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

本次通过对地铁线路数据的获取,对城市分布情况数据进行可视化分析。

分析获取

地铁信息获取从高德地图上获取。

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

上面主要获取城市的「id」,「cityname」及「名称」。

用于拼接请求网址,进而获取地铁线路的具体信息。

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

找到请求信息,获取各个城市的地铁线路以及线路中站点详情。

获取数据

具体代码

import json
import requests
from bs4 import BeautifulSoup

headers = {
 'user-agent': 'Mozilla/5.0 (windows NT 6.1; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

def get_message(ID, cityname, name):
    """
    地铁线路信息获取
    """
    url = 'http://map.amap.com/service/subway?_1555502190153&srhdata=' + ID + '_drw_' + cityname + '.json'
    response = requests.get(url=url, headers=headers)
    html = response.text
    result = json.loads(html)
    for i in result['l']:
        for j in i['st']:
            # 判断是否含有地铁分线
            if len(i['la']) > 0:
                print(name, i['ln'] + '(' + i['la'] + ')', j['n'])
                with open('subway.csv', 'a+', encoding='gbk') as f:
                    f.write(name + ',' + i['ln'] + '(' + i['la'] + ')' + ',' + j['n'] + 'n')
            else:
                print(name, i['ln'], j['n'])
                with open('subway.csv', 'a+', encoding='gbk') as f:
                    f.write(name + ',' + i['ln'] + ',' + j['n'] + 'n')


def get_city():
    """
    城市信息获取
    """
    url = 'http://map.amap.com/subway/index.html?&1100'
    response = requests.get(url=url, headers=headers)
    html = response.text
    # 编码
    html = html.encode('ISO-8859-1')
    html = html.decode('utf-8')
    soup = BeautifulSoup(html, 'lxml')
    # 城市列表
    res1 = soup.find_all(class_="city-list fl")[0]
    res2 = soup.find_all(class_="more-city-list")[0]
    for i in res1.find_all('a'):
        # 城市ID值
        ID = i['id']
        # 城市拼音名
        cityname = i['cityname']
        # 城市名
        name = i.get_text()
        get_message(ID, cityname, name)
    for i in res2.find_all('a'):
        # 城市ID值
        ID = i['id']
        # 城市拼音名
        cityname = i['cityname']
        # 城市名
        name = i.get_text()
        get_message(ID, cityname, name)

if __name__ == '__main__':
    get_city()

获取数据结果展示

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

3541个地铁站点

数据可视化

先对数据进行清洗,去除重复的换乘站信息。

from wordcloud import WordCloud, ImageColorGenerator
from pyecharts import Line, Bar
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import jieba

# 设置列名与数据对齐
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
# 显示10行
pd.set_option('display.max_rows', 10)
# 读取数据
df = pd.read_csv('subway.csv', header=None, names=['city', 'line', 'station'], encoding='gbk')
# 各个城市地铁线路情况
df_line = df.groupby(['city', 'line']).count().reset_index()
print(df_line)

通过城市及地铁线路进行分组,得到全国地铁线路总数。

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

183条地铁线路

def create_map(df):
    # 绘制地图
    value = [i for i in df['line']]
    attr = [i for i in df['city']]
    geo = Geo("已开通地铁城市分布情况", title_pos='center', title_top='0', width=800, height=400, title_color="#fff", background_color="#404a59", )
    geo.add("", attr, value, is_visualmap=True, visual_range=[0, 25], visual_text_color="#fff", symbol_size=15)
    geo.render("已开通地铁城市分布情况.html")


def create_line(df):
    """
    生成城市地铁线路数量分布情况
    """
    title_len = df['line']
    bins = [0, 5, 10, 15, 20, 25]
    level = ['0-5', '5-10', '10-15', '15-20', '20以上']
    len_stage = pd.cut(title_len, bins=bins, labels=level).value_counts().sort_index()
    # 生成柱状图
    attr = len_stage.index
    v1 = len_stage.values
    bar = Bar("各城市地铁线路数量分布", title_pos='center', title_top='18', width=800, height=400)
    bar.add("", attr, v1, is_stack=True, is_label_show=True)
    bar.render("各城市地铁线路数量分布.html")


# 各个城市地铁线路数
df_city = df_line.groupby(['city']).count().reset_index().sort_values(by='line', ascending=False)
print(df_city)
create_map(df_city)
create_line(df_city)

已经开通地铁的城市数据,还有各个城市的地铁线路数。

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

32个城市开通地铁

城市分布情况

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

大部分都是省会城市,还有个别经济实力强的城市。

线路数量分布情况

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

可以看到大部分还是在「0-5」这个阶段的,当然最少为1条线。

# 哪个城市哪条线路地铁站最多
print(df_line.sort_values(by='station', ascending=False))

哪个城市哪条线路地铁站最多

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

北京10号线第一,重庆3号线第二

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 


Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

去除重复换乘站的数据

# 去除重复换乘站的地铁数据
df_station = df.groupby(['city', 'station']).count().reset_index()
print(df_station)

包含3034个地铁站

减少了近400个地铁站

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

接下来看一下哪个城市地铁站最多

# 统计每个城市包含地铁站数(已去除重复换乘站)
print(df_station.groupby(['city']).count().reset_index().sort_values(by='station', ascending=False))

武汉居然有那么多地铁站

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

实现一下新周刊中的操作,生成地铁名词云

def create_wordcloud(df):
    """
    生成地铁名词云
    """
    # 分词
    text = ''
    for line in df['station']:
        text += ' '.join(jieba.cut(line, cut_all=False))
        text += ' '
    backgroud_Image = plt.imread('rocket.jpg')
    wc = WordCloud(
        background_color='white',
        mask=backgroud_Image,
        font_path='C:WindowsFonts华康俪金黑W8.TTF',
        max_words=1000,
        max_font_size=150,
        min_font_size=15,
        prefer_horizontal=1,
        random_state=50,
    )
    wc.generate_from_text(text)
    img_colors = ImageColorGenerator(backgroud_Image)
    wc.recolor(color_func=img_colors)
    # 看看词频高的有哪些
    process_word = WordCloud.process_text(wc, text)
    sort = sorted(process_word.items(), key=lambda e: e[1], reverse=True)
    print(sort[:50])
    plt.imshow(wc)
    plt.axis('off')
    wc.to_file("地铁名词云.jpg")
    print('生成词云成功!')


create_wordcloud(df_station)

展示词云图

Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化

 

想要的可以后台私信我666

Python零基础精选干货学习文档

Python实操项目案例

Python电子书300本

精选零基础到大神学习路线

以上就是我的分享,如果有好的建议可以与我交流,感谢观看



Tags:Python爬虫   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
#coding=utf-8import requestsimport osimport jsonfrom jsonpath import jsonpathimport timeurl='https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/...【详细内容】
2022-06-29  Tags: Python爬虫  点击:(47)  评论:(0)  加入收藏
利用Python实现中国地铁数据可视化。废话不多说。让我们愉快地开始吧~开发工具Python版本:3.6.4相关模块:requests模块;wordcloud模块;pandas模块;numpy模块;jieba模块;pyecharts模...【详细内容】
2021-12-08  Tags: Python爬虫  点击:(239)  评论:(0)  加入收藏
这个开源项目程序可以持续爬取一个或多个新浪微博用户(如李文di、无疫烦)的数据,并将结果信息写入文件或数据库。写入信息几乎包括用户微博的所有数据,包括用户信息和微博信息两大类。...【详细内容】
2021-10-27  Tags: Python爬虫  点击:(116)  评论:(0)  加入收藏
回顾python学习历程,感慨良多,这门语言实在是太强了,当然,分支也很多,有的在做安全,有的在做数据,有的在做爬虫,本文就笔者本身的爬虫入门的小经验分享给读者,期待各位在学习python的...【详细内容】
2021-08-11  Tags: Python爬虫  点击:(150)  评论:(0)  加入收藏
来源:Python数据之道作者:Peter整理:阳哥大家好,我是阳哥。今天来跟大家分享用 BeautifulSoup 获取信息的一些知识点,文章内容由公众号读者 Peter 创作。欢迎各位童鞋向公众号投...【详细内容】
2021-06-23  Tags: Python爬虫  点击:(191)  评论:(0)  加入收藏
前言国内大学最新排名,北大反超,浙大仅第四,中科大跌至第八时隔五年,“双一流”大学即将迎来首次大考,这也是继改变高校评断标准之后,第一次即将以官方对外发布,自然是引来了许多人...【详细内容】
2021-04-08  Tags: Python爬虫  点击:(510)  评论:(0)  加入收藏
实施步骤(1) 数据爬取:使用requests请求为基础获取数据源。(2) UA伪装:模拟浏览器访问网址。(3) 数据解析:使用xpath语法处理数据。(4) 数据存储:获取需求数据后使用Excrl进行存...【详细内容】
2021-03-16  Tags: Python爬虫  点击:(291)  评论:(0)  加入收藏
在使用Python本爬虫采集数据时,一个很重要的操作就是如何从请求到的网页中提取数据,而正确定位想要的数据又是第一步操作。...【详细内容】
2021-03-04  Tags: Python爬虫  点击:(291)  评论:(0)  加入收藏
专注Python、AI、大数据,请关注公众号七步编程!在不同公司的许多人可能出于各种原因需要从Internet收集外部数据:分析竞争,汇总新闻摘要、跟踪特定市场的趋势,或者收集每日股票价...【详细内容】
2020-12-10  Tags: Python爬虫  点击:(127)  评论:(0)  加入收藏
我们在写爬虫代码时,常常需要各种分析调试,而且每次直接用代码调试都很麻烦所以今天给大家分享一个工具,不仅能方便模拟发送各种http请求,还能轻松调试,最重要的是,可以将调试最终...【详细内容】
2020-12-07  Tags: Python爬虫  点击:(283)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条