一.这段代码首先读取了CSV文件,然后按照国家和省份对店铺进行了分组,并统计了每个分组的店铺数量。最后,它打印了分组后的索引,即每个分组的键
# coding=utf-8
import pandas as pd
import numpy as np
file_path = './starbucks_store_worldwide.csv'
df = pd.read_csv(file_path)
# 按照国家分组,并统计每个国家店铺的数量
grouped = df.groupby(by='Country')
country_count = grouped['Brand'].count()
print(country_count['US'])
print(country_count['CN'])
# 统计中国每个省店铺的数量
china_data = df[df['Country'] == 'CN']
grouped = china_data.groupby(by='State/Province').count()['Brand']
print(grouped)
# 数据按照多个条件进行分组,返回Series
grouped = df['Brand'].groupby(by=[df['Country'], df['State/Province']]).count()
print(grouped)
print(type(grouped))
# 数据按照多个条件进行分组,返回DataFrame
grouped1 = df[['Brand']].groupby(by=[df['Country'], df['State/Province']]).count()
print(grouped1, type(grouped1))
# 索引的方法和属性
print(grouped1.index) # 打印分组后的索引,即每个分组的键
二.使用pandas读取CSV文件,准备了店铺数量排名前十的国家数据,并使用matplotlib绘制了柱状图
# coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
# 指定CSV文件路径
file_path = './starbucks_store_worldwide.csv'
# 使用pandas读取CSV文件
df = pd.read_csv(file_path)
# 使用pandas的groupby方法按照'Country'列进行分组,并计算每个国家下的店铺数量
# count()函数用于计算分组后的数量,这里计算的是'Brand'列的数量
# sort_values函数用于对分组后的数据进行排序,按照店铺数量降序排列
# [:10]用于取排序后的前10个国家
data1 = df.groupby('Country').count()['Brand'].sort_values(ascending=False)[:10]
# 获取排序后的国家名称和店铺数量
_x = data1.index # 国家名称
_y = data1.values # 店铺数量
# 创建一个大小为20x8,分辨率为100的图形
plt.figure(figsize=(20, 8), dpi=100)
# 绘制柱状图,x轴是国家名称的索引,y轴是店铺数量
# 颜色设置为橙色
plt.bar(range(len(_x)), _y, color='orange')
# 设置x轴的刻度,使其对应国家名称
plt.xticks(range(len(_x)), _x)
# 显示图形
plt.show()
这段代码的功能如下:
-
读取包含星巴克店铺数据的CSV文件。
-
按照国家对数据进行分组,并计算每个国家下的店铺数量。
-
将国家按店铺数量降序排列,并选择前10个国家。
-
准备数据用于绘图,国家名称作为x轴标签,店铺数量作为y轴的值。
-
使用matplotlib绘制柱状图,x轴表示前10个国家,y轴显示每个国家星巴克店铺的数量。
运行效果如下:
三.使用pandas读取CSV文件,过滤出中国的数据,然后绘制了中国店铺数量排名前25的城市的水平柱状图
# coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import font_manager
# 设置matplotlib中文字体
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc')
# 设置pandas显示的最大行数、列数和宽度
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 1000)
# 指定CSV文件路径
file_path = './starbucks_store_worldwide.csv'
# 使用pandas读取CSV文件
df = pd.read_csv(file_path)
# 过滤出中国的数据
df = df[df['Country'] == 'CN']
# 打印前1行数据,用于检查
print(df.head(1))
# 使用pandas的groupby方法按照'City'列进行分组,并计算每个城市下的店铺数量
# count()函数用于计算分组后的数量,这里计算的是'Brand'列的数量
# sort_values函数用于对分组后的数据进行排序,按照店铺数量降序排列
# [:25]用于取排序后的前25个城市
data1 = df.groupby('City').count()['Brand'].sort_values(ascending=False)[:25]
# 获取排序后的城市名称和店铺数量
_x = data1.index # 城市名称
_y = data1.values # 店铺数量
# 创建一个大小为20x12,分辨率为100的图形
plt.figure(figsize=(20, 12), dpi=100)
# 绘制水平柱状图,y轴是城市名称的索引,x轴是店铺数量
# 高度设置为0.3,颜色设置为橙色
# 使用[::-1]将_x和_y反转,使得数量从大到小绘制
plt.barh(range(len(_x)), _y[::-1], height=0.3, color='orange')
# 设置y轴的刻度,使其对应城市名称,并使用中文字体
plt.yticks(range(len(_x)), _x[::-1], font_properties=my_font)
# 显示图形
plt.show()
这段代码的功能如下:
-
设置了matplotlib的中文字体。
-
设置了pandas显示的最大行数、列数和宽度。
-
读取了包含星巴克店铺数据的CSV文件,并过滤出了中国的数据。
-
使用pandas的groupby方法按照'City'列进行分组,并计算每个城市下的店铺数量。
-
将城市按店铺数量降序排列,并选择前25个城市。
-
准备数据用于绘图,城市名称作为y轴标签,店铺数量作为x轴的值。
-
使用matplotlib绘制水平柱状图,y轴表示前25个城市,x轴显示每个城市星巴克店铺的数量。
运行效果如下:
以上文章涉及的starbucks_store_worldwide数据资源链接如下:
starbucks_store_worldwide.zip文件大小:1.1 M|https://wwt.lanzoum.com/iTUap1oapq9g