数据可视化:python调⽤pyecharts库绘制航线专题图
写在前⾯
这学期上了数据通讯这门课,其中有⼀个作业是要求爬取某⼀天各重要城市到上海虹桥以及上海浦东两机场的航班信息,然后进⾏可视化、数据分析。在这⼀份作业⽤到的可视化⼯具是python的pyecharts库,其中⼀幅图的效果如下:
事实上这航线图是可以动的,只是截了个屏,下⾯具体说⼀下怎么操作。⽤到的库除了pyecharts,还有numpy、panda.
第⼀步获取数据
要做数据的可视化,⾸先肯定要获取数据。我是采⽤C#+selenium动态爬取携程⽹上的10⽉30号的数据,selenium通过调⽤命令模拟⼈与浏览器的交互,效果不错。爬取下来的数据放在了⼀个⽂件夹⾥,每个城市到上海的存⼊⼀个⽂本⽂档中。
第⼆步数据处理
在这⾥我是⽤numpy+pandas处理数据的,没安装这两个包的先安装再进⾏操作。
1.读取原始数据
import numpy as np
import pandas as pd
import os
df =pd.read_fwf(r"C:\Users\58381\Desktop\data\北京—上海.txt",encoding ="utf-8",header=None, names=["航班号","飞机机型","出发时间","出发机场","到达时间","到达机场","出发城市"])
for filename in os.listdir(r'C:\Users\58381\Desktop\data'):
df1 =pd.read_fwf('C:\\Users\\58381\\Desktop\\data\\'+filename,encoding ="utf-8",header=None, names=["航班号","飞机机型","出发时间","出发机场","到达时间","到达机场","出发城市"])
df = pd.merge(df1,df,how='outer',on=["航班号","飞机机型","出发时间","出发机场","到达时间","到达机场","出发城市"])
2.剔除共享航班的数据
df = df[~ df['航班号'].ains('共享')]
#把⽂件中含有共享的删掉,即获得真正准确的数据
df.tail()#展⽰后五条数据
第三步简单数据可视化
把各城市到虹桥机场的航班数分别统计
dh = df[~ df['到达机场'].ains('浦东')]
#把⽂件中含有浦东的删掉,即获取含有虹桥的数据
dp = df[~ df['到达机场'].ains('虹桥')]
#把⽂件中含有虹桥的删掉,获取浦东机场的数据
dh1 = pd.value_counts(dh["出发城市"])#各城市到达虹桥机场的航班数
dp1 = pd.value_counts(dp["出发城市"])#各城市到达浦东机场的航班数
1.条形图制作
然后将航班数量排名前⼗的城市拿出来制作条形图,这⾥就开始⽤到pyecharts库,关于怎么安装在我上⼀篇博客已经说了。
hq_top = dh1.head(10)#取到虹桥航班数量前⼗的城市
pd_top = dp1.head(10)#取浦东
from pyecharts.charts import Bar
from pyecharts import options as opts
bar =(
Bar()
.add_xaxis(hq_top.index)
.add_yaxis("航班数",hq_top.values)
.set_global_opts(title_opts=opts.TitleOpts(title="到达虹桥航班数top10城市")) .reversal_axis()
.set_series_opts(
label_opts=opts.LabelOpts(position="right"),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_="min", name="最⼩值"),
opts.MarkLineItem(type_="max", name="最⼤值"),
]
)
)
)
同样可以制作浦东机场的,偷懒就没做成Gif图了。
bar1 =(
Bar()
.add_xaxis(pd_top.index)
.add_yaxis("航班数",pd_top.value)
.set_global_opts(title_opts=opts.TitleOpts(title="到达浦东航班数top10城市")) .reversal_axis()
.set_series_opts(
label_opts=opts.LabelOpts(position="right"),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_="min", name="最⼩值"),
opts.MarkLineItem(type_="max", name="最⼤值"),
]
)
)
)
2.航线图制作
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType
def geo_lines_background()-> Geo:
c =(
Geo()
.add_schema(
maptype="china",
),
)
.add(
"航班数",
[("深圳",55),("北京",56),("⼴州",46),("昆明",35),("成都",35),("重庆",33),("西安",29),("哈尔滨",20),("沈阳",20),("长沙",17), ("郑州",17),("长春",17),("郑州",14),("乌鲁⽊齐",13)],
type_=ChartType.EFFECT_SCATTER,
color="black",
)
.add(
"浦东航线",
[("上海","⼴州"),("上海","沈阳"),("上海","深圳"),("上海","重庆"),("上海","西安"),("上海","成都"),
("上海","长春"),("上海","昆明"),("上海","郑州"),("上海","哈尔滨")],
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(
symbol=SymbolType.ARROW, symbol_size=6, color="blue"
),
linestyle_opts=opts.LineStyleOpts(curve=0.2),
)
.add(
"虹桥航线",
[("上海","⼴州"),("上海","北京"),("上海","深圳"),("上海","重庆"),("上海","西安"),("上海","成都"),
("上海","长沙"),("上海","昆明"),("上海","天津"),("上海","乌鲁⽊齐")],
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(python怎么读取py文件
symbol=SymbolType.ARROW, symbol_size=6, color="yellow"
),
linestyle_opts=opts.LineStyleOpts(curve=0.2),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="上海虹桥、浦东联通城市TOP10航线图"))
)
der_notebook()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。