1.导入模块
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
%matplotlib inline
2.获取数据
# 读取名为 "directory.csv" 的数据并将其存储在名为 "starbucks" 的 DataFrame 中
starbucks = pd.read_csv("directory.csv")
# 显示 DataFrame 中的前几行数据
display(starbucks.head())
3.数据分析及可视化
(1).查看星巴克旗下有哪些品牌。如果我们只关心星巴克咖啡门店,则只需获取星巴克中Brand的数据集,并查看全世界一共有多少家星巴克门店。
# 输出星巴克旗下各品牌的计数信息
print("星巴克旗下品牌有:\n", starbucks.Brand.value_counts())
# 从 starbucks DataFrame 中筛选出品牌为 'Starbucks' 的数据
coffee = starbucks[starbucks.Brand=='Starbucks']
# 输出筛选后数据的形状信息
print("\n", coffee.shape)
(2).查看全世界一共有多少国家和地区开设了星巴克门店,显示门店数量排名前10和后10的国家和地区。
# 按照 "Country" 列进行分组,并统计每个分组中的行数
df = starbucks.groupby(["Country"]).size()
# 输出一共有多少个不同的国家和地区开设了星巴克门店
print("全世界一共有多少个国家和地区开设了星巴克门店:", df.size)
# 对分组后的结果按照门店数量进行降序排序
df1 = df.sort_values(ascending=False)
# 输出门店数量排名前10的国家和地区
print("排名前10的国家和地区:\n", df1.head(10))
# 输出门店数量排名后10的国家和地区
print("排名后10的国家:\n",df1.tail(10))
(3).用柱状图绘制排名前10的分布情况。
# 设置字体大小和字体样式
plt.rcParams['font.size'] = 15
plt.rcParams['font.family'] = 'SimHei'
# 使用柱状图绘制排名前10的国家和地区的门店数量分布情况
df1.head(10).plot(kind="bar", rot=0)
# 设置标题、y轴标签和x轴标签
plt.title('星巴克门店数排名前10的国家和地区')
plt.ylabel('门店数量')
plt.xlabel('国家和地区')
# 显示图形
plt.show()
(4).显示拥有星巴克门店数量排名前10的城市。
# 从 coffee DataFrame 中删除包含空值的行,并根据 "City" 列进行统计
star = coffee.dropna(how='any', subset=['City'])
count_starbucks_city = star.City.value_counts()
# 输出全世界星巴克门店数量排名前10的城市
print("全世界星巴克门店数量排名前10的城市:\n", count_starbucks_city.head(10))
(5).绘制星巴克门店数前10的城市分布柱状图。
# 创建一个图形,并设置图形大小
plt.figure(1, figsize=(8, 6))
# 统计星巴克门店城市数量
count_starbucks_city = star.City.value_counts()
# 获取门店数量排名前10的城市数据
city_top10 = count_starbucks_city.head(10)
# 使用柱状图展示拥有星巴克门店最多的10个城市
city_top10.plot(kind='bar', rot=30)
# 设置标题、y轴标签和x轴标签
plt.title('拥有星巴克门店最多的10个城市')
plt.ylabel('门店数量')
plt.xlabel('城市')
# 显示图形
plt.show()
可以看到数据不是很规范,城市名称既有中文又有英文,而且上海被存储为ShangHai和Shanghai。 对于上海的问题,我们将拼音全部改为小写即可; 对于中文和拼音混用的问题,可以使用相应的python库(如库pinyin)将中文转换为拼音后作统计。
(6).按照星巴克门店在中国的分布情况,统计排名前10的城市。
# 注意:请确保在运行以下代码之前已经执行过 "pip install pinyin" 安装了 pinyin 模块
import pinyin
# 选择中国的数据
df = star[star["Country"] == "CN"]
df1 = df.copy()
# 将城市名改为小写
df1["City"] = df1["City"].apply(lambda x: x.lower())
# 将汉字城市名改为小写拼音
df1["City"] = df1["City"].apply(lambda x: pinyin.get(x, format="strip", delimiter="")[0:-3]) # 去掉“市”的拼音
# 统计每个城市的星巴克数量并按数量降序排序
df1 = df1.groupby(["City"]).size().sort_values(ascending=False)
# 输出中国各城市星巴克数量排名前10的数据
print(df1.head(10))
(7).绘制柱状图。
# 使用柱状图展示中国拥有星巴克门店最多的10个城市
df1.head(10).plot(kind='bar', rot=30)
# 设置标题、y轴标签和x轴标签
plt.title('中国拥有星巴克门店最多的10个城市')
plt.ylabel('门店数量')
plt.xlabel('城市')
# 显示图形
plt.show()
(8).用饼状图显示星巴克门店的经营方式有哪几种。
# 创建一个图形,并设置图形大小
plt.figure(1, figsize=(8, 6))
# 统计各种星巴克门店所有权类型的数量
ownership = star['Ownership Type'].value_counts()
# 设置标题
plt.title('星巴克门店所有权类型')
# 使用饼图展示门店所有权类型分布
ownership.plot(kind='pie')
# 显示图形
plt.show()
说明:
(1)Company Owned:公司独资直营,这也是星巴克门店最多的经营方式。
(2)Licensed:许可经营。
(3)Joint Venture:合资经营,比如:国内江浙沪地区的星巴克。最早就是由星巴克与统一集团联手经营。
(4)Franchise:授权经营,类似麦当劳的经营模式。