
前言
暑假是學生老師們擁有的最長假期,這么長的假期,光待在家里太浪費了,何不選擇一個好去處,欣賞欣賞夏季的美景?當然,并不是所有地方都適合這個時節去的,那么,暑假適合去國內那些地方旅游呢?現在我們學習了python,當然要用不一樣的方式來選擇旅游景點,利用大資料的神奇之處,我們一起來分析全國的旅游景點資料,選出最佳旅游景點,
旅游出行資料分析
一、讀入資料
1、匯入包
import numpy as np
import pandas as pd
import os
from pyecharts.charts import Bar, Pie, Map, Page, BMap, Scatter
from pyecharts import options as opts
2、獲取檔案路徑
data_files = os.listdir('E:/py練習/資料分析/旅游網站資料/data/')
3、回圈讀取
df_all = pd.DataFrame()
for file in data_files:
df_one = pd.read_excel('E:/py練習/資料分析/旅游網站資料/data/{}'.format(file))
df_all = df_all.append(df_one, ignore_index=True)
df_all.head()

二、資料清洗和資料預處理
1、復制一份并洗掉重復值
df_qa = df_all.copy()
df_qa.drop_duplicates(inplace=True)
df_qa.shape
2、提取省份
df_qa['province'] = df_qa.districts.str.split('·').apply(lambda x:x[0])
3、計算銷售額
df_qa['sales_volume'] = df_qa['saleCount'] * df_qa['qunarPrice']
df_qa.head()

三、資料可視化
1、各星級景點數量
# 1. 景點星級分布
star_num = df_qa['star'].value_counts()
# 資料對
data_pair = [list(z) for z in zip(star_num.index, star_num.values.tolist())]
# 餅圖
pie1 = Pie(init_opts=opts.InitOpts(width='900px', height='750px'))
pie1.add(
series_name="num",
radius=["35%", "60%"],
data_pair=data_pair,
label_opts=opts.LabelOpts(
position="outside",
formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ",
background_color="#eee",
border_color="#aaa",
border_width=1,
border_radius=4,
rich={
"a": {"color": "#999", "lineHeight": 22, "align": "center"},
"abg": {
"backgroundColor": "#e3e3e3",
"width": "100%",
"align": "right",
"height": 22,
"borderRadius": [4, 4, 0, 0],
},
"hr": {
"borderColor": "#aaa",
"width": "100%",
"borderWidth": 0.5,
"height": 0,
},
"b": {"fontSize": 16, "lineHeight": 33},
"per": {
"color": "#eee",
"backgroundColor": "#334455",
"padding": [2, 4],
"borderRadius": 2,
},
},
),
)
pie1.set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", pos_top='30%', orient="vertical"),
title_opts=opts.TitleOpts(title='全國景點星級分布'))
pie1.set_series_opts(
tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)")
)
pie1.render_notebook()

2、全國各省份景點數量Top15
# 國內城市top10
city_top10 = df_qa.province.value_counts()[:15]
# 條形圖
bar1 = Bar(init_opts=opts.InitOpts(width='900px', height='750px'))
bar1.add_xaxis(city_top10.index.tolist())
bar1.add_yaxis("省份", city_top10.values.tolist())
bar1.set_global_opts(title_opts=opts.TitleOpts(title="全國景點數量Top10"),
visualmap_opts=opts.VisualMapOpts(max_=1200))
bar1.render_notebook()

3、各省份銷量熱力圖
saleCount_num = df_qa.groupby('province')['saleCount'].sum().sort_values(ascending=False)
# 地圖
map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))
map1.add("", [list(z) for z in zip(saleCount_num.index.tolist(), saleCount_num.values.tolist())],
maptype='china')
map1.set_global_opts(title_opts=opts.TitleOpts(title='各省份銷量熱力圖'),
visualmap_opts=opts.VisualMapOpts(max_=80000))
map1.render_notebook()

4、景點門票銷量排行分析Top20
sales_rank = df_qa.pivot_table(index='sightName', values='saleCount', aggfunc='mean')
sales_rank = sales_rank.reset_index()
sales_rank['saleCount'] = sales_rank['saleCount'].astype('int')
sales_rank = sales_rank.sort_values('saleCount', ascending=False)[:20]
sales_rank = sales_rank.sort_values('saleCount', ascending=True)
bar2 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar2.add_xaxis(sales_rank.sightName.tolist())
bar2.add_yaxis("景點", sales_rank.saleCount.tolist())
bar2.set_global_opts(title_opts=opts.TitleOpts(title="景點門票銷量排行分析Top20"))
bar2.set_series_opts(label_opts=opts.LabelOpts(position='right'))
bar2.set_colors(['#D02C2A'])
bar2.reversal_axis()
bar2.render_notebook()

5、景點門票銷售額排行分析Top20
sales_rank_2 = df_qa.pivot_table(index='sightName', values='sales_volume', aggfunc='mean')
sales_rank_2 = sales_rank_2.reset_index()
sales_rank_2['sales_volume'] = sales_rank_2['sales_volume'].astype('int')
sales_rank_2 = sales_rank_2.sort_values('sales_volume', ascending=False)[:20]
sales_rank_2 = sales_rank_2.sort_values('sales_volume', ascending=True)
bar3 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar3.add_xaxis(sales_rank_2.sightName.tolist())
bar3.add_yaxis("景點", sales_rank_2.sales_volume.tolist())
bar3.set_global_opts(title_opts=opts.TitleOpts(title="景點門票銷售額排行分析Top20"))
bar3.set_series_opts(label_opts=opts.LabelOpts(position='right'))
bar2.set_colors(['#D02C2A'])
bar3.reversal_axis()
bar3.render_notebook()

結語

這里就沒有帶小伙伴一起從爬旅游網站的資料開始做了,本次爬取的旅游網站資料是去哪兒網的資料,如果還有不會爬蟲的小伙伴可以去看我以前的博客python0基礎爬蟲實戰,如果有小伙伴想偷懶,也可以直接私信林哥,林哥可以直接把資料給到大家,大家可以嘗試著做一做這個專案,可以嘗試不同的風格,不同的色彩,做出來還是挺有成就感的,
喜歡林哥的文章可以給林哥點點關注,一鍵三連,以后林哥會經常出一些干貨來幫助大家學習編程
愿大家都能在編程這條路,越走越遠,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/290887.html
標籤:python
上一篇:python小游戲
