# %%
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.charts import Map
from pyecharts.charts import *
# %%
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
%matplotlib inline
# %% [markdown]
# ## 导入数据
# %%
# 1.导入餐饮数据,表命名为“df”
df = pd.read_csv('./餐饮数据.csv', encoding='utf-8')
# %%
# 2.预览前10行
df.head(10)
# %%
# 3.查看df的基本信息(列名、非空行数、数据类型、内存大小等)
df.info()
# %% [markdown]
# ## 数据处理
# %% [markdown]
# ### 删除空值
# %%
# 4.删除“人均消费”为空的行
df.dropna(subset=['人均消费'], how='any', inplace=True)
# %%
# 5.删除“点评数”、“口味”、“环境”、“服务”均为空的行
df.dropna(subset=['点评数', '口味', '环境', '服务'], how='all', inplace=True)
# %%
# 6.查看各列是否存在空值
df.isnull().any()
# %%
# %% [markdown]
# ### 填充空值
# %%
# 7.填补“类别”为空的数据,填补方式:频数最高的“类别”
df['类别'].fillna(value=df['类别'].value_counts().idxmax(), inplace=True)
# %%
# 8.填补“行政区”为空的数据,填补方式:向前填充
df['行政区'].fillna(method='ffill', inplace=True)
# %%
# 9.填补“点评数”为空的数据,填补方式:向后填充
df['点评数'].fillna(method='bfill', inplace=True)
# %%
# 10.填补“口味”为空的数据,填补方式:众数
df['口味'].fillna(value=df['口味'].mode()[0], inplace=True)
# %%
# 11.填补“环境”为空的数据,填补方式:均值
df['环境'].fillna(value=df['环境'].mean(), inplace=True)
# %%
# 12.填补“服务”为空的数据,填补方式:中位数
df['服务'].fillna(value=df['服务'].median(), inplace=True)
# %% [markdown]
# ### 新增字段
# %%
# 13.新增字段“性价比”,性价比 = (口味 + 环境 + 服务) / 人均消费
df['性价比'] = (df['口味']+df['环境']+df['服务']) / df['人均消费']
df.head()
# %%
# 14.新增字段“综合评分”,综合评分 = (口味 + 环境 + 服务) / 3
df['综合评分'] = (df['口味']+df['环境']+df['服务']) / 3
df.head()
# %%
# 15.新增字段“评价类型”,cut函数
# “综合评分”:(0, 6]为差评,(6, 8]为一般,(8, 10]为好评
df['评价类型'] = pd.cut(x=df['综合评分'], right=True, bins=[0, 6, 8, 10], labels=['差评', '一般', '好评