数据集介绍
数据为四川省的各旅游景点信息,特征有景点名称、星级、城市、票价、销量、热度6个维度,部分数据如下:
加载数据
首先要导入本次项目用到的第三方包和数据
import pandas as pd from pyecharts.charts import Pie,Bar,Map,Funnel from pyecharts import options as opts from pyecharts.globals import ThemeType import seaborn as sns import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签 plt.rcParams['axes.unicode_minus']=False import warnings warnings.filterwarnings('ignore') data = pd.read_csv('sichuan.csv') data.head()
数据清洗
缺失值处理
# 查看缺失值 data.isnull().sum()
我们发现数据没有缺失值,不需要进行缺失值处理
如有缺失值,调用下面代码进行删除处理即可
# 删除缺失值 data.dropna(inplace=True)
重复值处理
查看数据是否有重复值
# 查看数据是否有重复值 结果为True则说明存在重复值,反正则没有 any(data.duplicated())
结果为True说明存在重复值,需要进行处理
# 删除重复值 data.drop_duplicates(inplace=True)
异常值处理
看看票价是否存在异常值
# 查看票价是否存在异常值 plt.boxplot(data['票价']) plt.show()
我们发现票价存在明显的异常值,这里我们需要剔除出票价大于300的
# 对票价中的异常值进行处理,筛选出票价大于300的异常数据 data = data[data['票价']<300] plt.boxplot(data['票价']) plt.show()
数据预处理
# 根据各景区的票价和销量得出新的总销售额一列数据 data['总销售额'] = data['票价'] * data['销量'] data.head()
数据可视化
# 四川各星级景区的数量 df1 = data['星级'].value_counts() plt.figure(figsize=(10,6)) plt.bar(x=df1.index,height=df1.values) plt.xlabel('星级',fontsize=12) plt.ylabel('数量',fontsize=12) plt.title('四川各星级景区的数量',fontsize=12) plt.show()
# 四川各星级景点数占比 result_list = [(i,j) for i,j in zip(df1.index.to_list(),df1.values.tolist())] a = Pie(init_opts=opts.InitOpts(theme = ThemeType.DARK)) a.add(series_name='星级', data_pair=result_list, radius='70%', ) a.set_global_opts(title_opts=opts.TitleOpts(title="四川各星级景点数占比", pos_top=50)) a.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger='item',formatter='{a} <br/>{b}:{c} ({d}%)')) a.render(path='饼图.html') a.render_notebook()
# 分析票价、热度和销量之间的关系 plt.figure(figsize=(10,6)) plt.subplot(1,2,1) plt.scatter(x=data['票价'],y=data['销量']) plt.title('票价与销量的关系',fontsize=14) plt.subplot(1,2,2) plt.scatter(x=data['热度'],y=data['销量']) plt.title('热度与销量的关系',fontsize=14) plt.show()
# 个地区旅游景点的热力地图 df2 = data['城市'].value_counts() city_data = [[x+'市',y] if x[-3:] != '自治州' else [x,y] for x,y in zip(df2.index.to_list(),df2.values.tolist())] map = Map() map.add('地区',city_data, maptype='四川', is_map_symbol_show=False,) map.set_global_opts( title_opts=opts.TitleOpts('四川省'), visualmap_opts=opts.VisualMapOpts() ) map.render(path='热力地图.html') map.render_notebook()
# 漏斗图 funnel = Funnel() funnel.add('',[(i,j) for i,j in zip(df2.index.to_list(),df2.values.tolist())], label_opts=opts.LabelOpts(position='inside')) funnel.set_global_opts(title_opts=opts.TitleOpts(title='漏斗图',pos_top=50)) funnel.render(path='漏斗图.html') funnel.render_notebook()
# 分析各个特征之间的相关系数 fig = plt.figure(figsize=(10,10)) sns.heatmap(data.corr(),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':25}) plt.xticks(fontsize=20) plt.yticks(fontsize=20) plt.title('各个特征之间的相关系数',fontsize=20) plt.show()
# 景区名称词云图 from pyecharts.charts import WordCloud import collections result_list = [] for i in data['景点名称'].values: word_list = str(i).split('/') for j in word_list: result_list.append(j) result_list word_counts = collections.Counter(result_list) word_counts_top = word_counts.most_common(100) wc = WordCloud() wc.add('',word_counts_top) wc.render(path='词云图.html') wc.render_notebook()
# 总销售额最高的前五名景区 df3 = data.sort_values('总销售额',ascending=False)[['景点名称','总销售额']].head() plt.figure(figsize=(10,8)) plt.barh(y=df3['景点名称'].values,width=df3['总销售额']) plt.title('总销售额最高的前五名景区',fontsize=14) plt.show()
# 热度最高的前十名景区 df3 = data.sort_values(by='热度',ascending=False)[['景点名称','热度']].head(10) plt.figure(figsize=(20,10)) sns.barplot(x='景点名称',y='热度',data=df3) plt.xticks(fontsize=14) plt.xlabel('景点名称',fontsize=14) plt.ylabel('热度',fontsize=14) plt.title('热度最高的前十名景区',fontsize=14) plt.show()
# 销量前十的景点 df4 = data.sort_values(by='销量',ascending=False)[['景点名称','销量']].head(10) a1 = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) a1.add_xaxis(df4['景点名称'].values.tolist()) a1.add_yaxis('销量',df4['销量'].values.tolist()) a1.reversal_axis() a1.set_series_opts(label_opts=opts.LabelOpts(position="right")) a1.set_global_opts(title_opts=opts.TitleOpts(title="销量前十的景点")) a1.render(path='销量前十的景点.html') a1.render_notebook()
data.groupby('城市').mean()[['票价','销量']].plot(kind='bar',figsize=(15,8),title='各个地区的平均票价和平均销量',fontsize=14)
以上就是四川省旅游景点数据分析,希望对学习数据分析的你有所帮助