可视化分析某年河北省旅游景点数据
代码:
# 4.1 数据的爬取
import pandas as pd
import numpy as np
file_path=open(r'风景名胜区.csv')
local_data=pd.read_csv(file_path)
local_data
运行结果:
首先使用pandas的read_csv()方法进行数据的读取,然后就能够看到相应的表格信息。
代码:
# 4.2河北省景点面积和旅客量位居前三的条形图显示
area=float("{:.1f}".format(local_data['总面积(平方公里)'].mean()))
# 计算游客数量的平均值
tour=float("{:.1f}".format(local_data['游客量(万人次)'].mean()))
#使用字典映射的方式进行填充数据
dic={'总面积(平方公里)':area,"游客量(万人次)":tour}
addata=local_data.fillna(value=dic)
addata.head()
运行结果:
使用mean()方法计算游客数量的平均值,然后再使用字典映射的方式进行填充数据,使用head()方法查看前面五行的数据;
字典映射:
dic={'总面积(平方公里)':area,"游客量(万人次)":tour}
addata=local_data.fillna(value=dic)
我们可以清晰明了的看到五行相应的旅游信息。
代码:
data=addata.groupby("省份")
# 显示河北地区的·数据
hebei=dict([x for x in data])['河北']
hebei
运行结果:
首先对根据dataframe省份这一列进行分组,然后解析dict,单独将河北省的数据解析。
代码:
# 需要我们绘制直方图
import matplotlib.pyplot as plt
%matplotlib inline
#为正常显示中文字体,添加的代码
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 显示的数据选取
area=hebei["总面积(平方公里)"].values
tour=hebei["游客量(万人次)"].values
# 设置图像的大小
plt.figure(figsize=(12,6))
x_num=range(0,len(area))
x_dis=[i + 0.3 for i in x_num]
plt.bar(x_num,area,color='g',width=.3,label='总面积')
plt.bar(x_dis,tour,color='r',width=.3,label='游客量')
#增加x、y轴文字说明
plt.ylabel("单位:平方千米、万人次")
plt.title("河北旅游景点面积以及游客数量")
# 设置图例
plt.legend(loc="upper right")
plt.xticks(range(0,10),['苍岩山','嶂石岩','西柏坡-天桂山','秦皇岛北戴河','响堂山','娲皇宫','太行大峡谷','崆山白云洞','野三坡','承德避暑山庄外八庙'])
plt.show()
在这里我们使用matplotlib来绘制图形
绘制图形的步骤:初始化(导库、数据的选取)——pyplot.figure申请画布——绘制图形pyplot.bar——设置相关的标签、坐标轴、图例以及标题——展示或者导出保存
核心代码:
plt.bar(x_dis,tour,color='r',width=.3,label='游客量')
绘制柱状图。
代码:
# 4.3河北省旅客量的占比量的饼状图显示。
# 需要我们绘制直方图
import matplotlib.pyplot as plt
%matplotlib inline
#为正常显示中文字体,添加的代码
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
tournum=hebei["游客量(万人次)"].values
all_tournum=hebei["游客量(万人次)"].sum()
# 计算每个景点旅游游客占比,保留两位小数
perc=(tournum/all_tournum)*100
np.set_printoptions(precision=2)
lables=['苍岩山','嶂石岩','西柏坡-天桂山','秦皇岛北戴河','响堂山','娲皇宫','太行大峡谷','崆山白云洞','野三坡','承德避暑山庄外八庙']
plt.axes(aspect=1)
plt.pie(x=perc,
labels=lables, # 设置饼图标签
colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
shadow=True,
labeldistance=1.2,
# explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远
autopct='%.2f%%', # 格式化输出百分比
startangle=90,
pctdistance=0.7
)
# plt.legend(loc="left")
# 图例放在图标位置
plt.legend(bbox_to_anchor=(1.05, 1), loc=3, borderaxespad=0.)
plt.show()
运行结果:
回顾一遍,绘制图形的步骤:初始化(导库、数据的选取)——pyplot.figure申请画布——绘制图形pyplot.bar——设置相关的标签、坐标轴、图例以及标题——展示或者导出保存。
但是绘制饼图和柱状图有些不一样的部分我认为就是:
plt.pie(x=perc,
labels=lables, # 设置饼图标签
colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
shadow=True,
labeldistance=1.2,
# explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远
autopct='%.2f%%', # 格式化输出百分比
startangle=90,
pctdistance=0.7
)
这个方法不一样使用的是pyplot.pie()
因为是使用的占比来显示饼图的面积展示,所以需要提供百分比,在初始化的时候需要对数据进行相应的处理。
# 计算每个景点旅游游客占比,保留两位小数
perc=(tournum/all_tournum)*100
可以看到旅游景点秦皇岛北戴河是去的人数最多的。占比32.33%,过来就是西柏坡——天桂山。
有的时候,因为图像大小的原因,这个饼图特别容易和图例重合所以我们需要对图例进行设置:
plt.legend(bbox_to_anchor=(1.05, 1), loc=3, borderaxespad=0.)
这样布局就会好看很多。