12306信息可视化

这里写目录标题

  • 12306信息可视化
    • 发现数据
    • 代码实现
      • 数据处理
      • 数据可视化

url=https://kyfw.12306.cn/otn/resources/js/framework/station_name.js
通过访问网站发现,目标网站校验IP地址,以及协议头是否完全
访问结果部分如下:


@bjb|北京北|VAP|beijingbei|bjb|0|0357|北京|||@bjd|北京东|BOP|beijingdong|bjd|1|0357|北京|||@bji|北京|BJP|beijing|bj|2|0357|北京|||@bjn|北京南|VNP|beijingnan|bjn|3|0357|北京|||@bjx|北京大兴|IPP|beijingdaxing|bjdx|4|0357|北京|||@bjx|北京西|BXP|beijingxi|bjx|5|0357|北京|||@bjy|北京朝阳|IFP|beijingchaoyang|bjcy|6|0357|北京|||@cqb|重庆北|CUW|chongqingbei|cqb|7|1717|重庆|

发现数据

根据比对发现,发现数据格式存储为:
@bjb|北京北|VAP|beijingbei|bjb|0|0357|北京|
总结格式为:
@+车站代码+车站名称+...+拼音+...+...+所属城市

代码实现

数据处理

  1. 通过requests包进行网页访问
import requestsurl = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js'
data = requests.get(url).text
if not data:print('获取数据失败')
print(data)
  1. 通过获取数据后,将数据分割为分类数据
station_data = data.split('=')[-1]
station_name = station_data.strip("='@")
station_name = station_name.rstrip("';")
station_arr = station_name.split('@')
if not station_arr:print('获取数据失败')
station_dict = {}
print(station_arr)
  1. 将数据分类完成后,取出需要数据进行归类,并且使用pd库存放到Excel中
import pandas as pdfor station in station_arr:info = station.split('|')station_code = info[0]station_name = info[1]station_city = info[7]station_dict[station_code] = {'Station Name': station_name,'station_City': station_city}df = pd.DataFrame.from_dict(station_dict, orient='index').reset_index()df.columns = ['Station Code', 'Station Name', 'station_City']print(df)

数据可视化

  1. 将数据进行可视化,使用bar图进行展示
import matplotlib.pyplot as pltcity_count = df['station_City'].value_counts().nlargest(10)
city_count.plot(kind='bar')
plt.xlabel('城市')
plt.ylabel('数量')
plt.title('车站数量Top10城市')
plt.show()


5. 发现plt打印不了中文,通过查看代码,认为是字体问题或者编码问题

city_count = df['station_City'].value_counts().nlargest(10)
city_count.plot(kind='bar')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.xlabel('城市')
plt.ylabel('数量')
plt.title('车站数量Top10城市')
plt.show()


6. 运行之后发现与原始数据不一致, 通过对于前面代码进行审查

可能原因:

  1. requests时候数据没有获取全

  2. 分割数据时候分割错误

  3. 存储数据时候格式有问题

  4. 逐步进行调试, 逐步检查变量值

在下面代码部分变量存储时候发现问题

for station in station_arr:info = station.split('|')station_code = info[0]station_name = info[1]station_city = info[7]station_dict[station_code] = {'Station Name': station_name,'station_City': station_city}

上述代码中, station_dict作为字典进行存储时候, 时候station作为键, 根据以往经验认为key_code应该是唯一的,但是在此网站中,存在重复的代码, 字典存入数据时候会造成值的覆盖, 导致失去部分值

  1. 修改代码,将字典键进行更改,使用车站名作为key_code
for station in station_arr:info = station.split('|')station_code = info[0]station_name = info[1]station_city_code=info[6]station_city = info[7]station_dict[station_name] = {'Station_code': station_code,'station_City': station_city,'station_city_code':station_city_code,}
  1. 再次运行全部代码, 得到正确结果
import requests
import pandas as pd
import matplotlib.pyplot as pltdef get_station_code():url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js'requests.packages.urllib3.disable_warnings()headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}data = requests.get(url).textif not data:print('获取数据失败')return None# @bjb|北京北|VAP|beijingbei|bjb|0|0357|北京|station_data = data.split('=')[-1]station_name = station_data.strip("='@")station_name = station_name.rstrip("';")station_arr = station_name.split('@')station_dict = {}for station in station_arr:info = station.split('|')station_code = info[0]station_name = info[1]station_city_code=info[6]station_city = info[7]station_dict[station_name] = {'Station_code': station_code,'station_City': station_city,'station_city_code':station_city_code,}df = pd.DataFrame.from_dict(station_dict, orient='index').reset_index()df.columns = ['Station Name','Station Code', 'Station City','Station City Code']city_count = df['Station City'].value_counts().nlargest(10)city_count.plot(kind='bar')plt.rcParams['font.sans-serif'] = ['SimHei']plt.xlabel('城市')plt.ylabel('数量')plt.title('Top 10')plt.show()df.to_excel("station_code.xlsx", index=False)get_station_code()

Python数据分析<12306信息可视化>相关推荐

  1. python逐笔输入数据_知到智慧树Python数据分析与数据可视化结课测验

    知到智慧树Python数据分析与数据可视化结课测验答案 更多相关问题 已知三角形三个顶点的坐标是A(-1,2,3),B(1,1,1),C(0,0,5),试证三角形ABC是直角三角形,并求角B-- Wh ...

  2. python集合中的元素不允许重复_Python语言中同一个集合中的元素不会重复,每个元素都是唯一的。-智慧树Python数据分析与数据可视化章节答案...

    Python数据分析与数据可视化:Python语言中同一个集合中的元素不会重复,每个元素都是唯一的.[?ж???] A:对 B:错 Python数据分析与数据可视化章节测试答案: 对 更多相关问题 智 ...

  3. 基于 Python 的招聘信息可视化分析系统

    温馨提示:文末有 CSDN 平台官方提供的博主 Wechat / QQ 名片 :) 1. 项目简介 本项目利用 Python 从某招聘网站抓取海量招聘数据,进行数据清洗和格式化后存储到关系型数据库中( ...

  4. Python数据分析——Matplotlib数据可视化基础(二)

    Python数据分析--Matplotlib数据可视化基础(二) 思维导图: 图形的绘制 认识要绘制的图形 基本绘图流程 pyplot基础图表函数 pyplot饼图的绘制 pie函数 matplotl ...

  5. python数据分析与可视化-Python数据分析与数据可视化

    数据分析.数据挖掘与数据可视化是一个古老的话题,并非什么新生事物.近些年来,借助于计算机软硬件的飞速发展,数据分析.挖掘.可视化相关理论和技术在各领域的应用更是有了质的飞跃.饭店选址.公交路线与站牌规 ...

  6. Python数据分析:数据可视化实战教程

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于碧茂大数据 ,作者碧茂大数据 明确三个步骤: 确定问题,选择图形 转 ...

  7. python画仿真图-Python数据分析:绘图可视化之matplotlib入门

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于码客趣分享,作者码客趣分享 matplotlib的通常引入约定 ...

  8. 智慧树python数据分析与数据可视化_智慧树知到Python数据分析与数据可视化答案免费查询...

    你校准备举行"节约用水,从现在做起"的英语征文比赛,你打算投稿.请根据以下表格内容写一篇英语短文.必要性没 下面的表格是Sunny School学生一日三餐的菜谱及Sally的爱好 ...

  9. python知道章节答案_智慧树知道Python数据分析与数据可视化答案,章节期末教程考试网课答案...

    人物雕塑有头像.胸像.半身像和()之分.[2012年真题]A.浮雕头像B.半身带手像C.圆雕头像D.全身 长期或频繁地()架空线路或其他带电体作业时,应采取隔离防护措施.A.靠近B.远离C.接触 权责 ...

最新文章

  1. android-2.3.5_r1
  2. [IOI2011]Race
  3. Serilog 自定义 Enricher 来增加记录的信息
  4. 伦巴时间步的动作要领_军训动作要领已到,请签收
  5. 案例 TreeView动态控制节点 c# 1614264758
  6. IOS CoreData 简单使用CURD
  7. 分享一个debian系统优秀的镜像源
  8. java 封装log4j_Java项目 切片实现log4j的终极封装
  9. python撩人的代码,老师教已毕业的学生,用Python代码每天不定时撩女友,附源码文件...
  10. 线性调频信号及仿真[python]
  11. C51单片机LCD1602驱动程序
  12. 怎样在Apple Silicon M1 Mac上引导到恢复模式
  13. Python编程从入门到实践中的 --snip--
  14. 利用Matlab实现单像空间后方交会
  15. 利用“3 of 9 barcode”字体实现一维条形码(只支持英文等ASCII字符)
  16. VMware 15 安装 macOS High Sierra 10.13 图文教程
  17. html倒计时动画,js+css3倒计时动画特效
  18. BZOJ2565 回文自动机
  19. word中插入图片,转pdf后,打印的图片出现阴影模糊的问题及处理办法
  20. distiller的另一个实例正忙于启动_PLC编程实例丨一步一步教你设计PLC控制电机转停反控制系统~...

热门文章

  1. i春秋CTF Hash
  2. vue中使用echarts做一个雷达图
  3. python 爬取自如网租房信息(解决照片价格问题)
  4. 圆明园兽首事件突然就开始高潮了
  5. 电脑插上耳机后有嗡嗡的声音
  6. R语言which函数详解以及Rcpp改写
  7. 企业微信获取用户信息响应40029(微信小程序与公众号出现类似问题应该是同样的原因)
  8. CRM项目记录(七)
  9. Android 显示在某个位置下的菜单(Popwindow实现)
  10. Jboss Seam 注解总结