如何标准化数据并创建堆积的条形图?

时间:2019-08-03 11:13:41

标签: python pandas matplotlib bar-chart normalize

我有一个数据框,其中包含3个区域中每种游戏类型的总销售额。我会创建一个堆叠的条形图,以便可以比较每个地区各个流派的销售额。

我知道我应该首先对数据进行规范化,但不知道该如何做。

我对编程非常陌生,因此如果有人可以提供有关如何进行此操作的简单说明,我将不胜感激!

这是我的数据框

regional_genre = video_sales_df.groupby(['Genre'],as_index=False)["NA_Sales","EU_Sales","JP_Sales"].sum()[:5]

数据框:

Genre       NA_Sales   EU_Sales   JP_Sales
Action      877,83     525        159,95
Adventure   105,8      64,13      52,07
Fighting    223,59     101,32     87,35
Misc        410,24     215,98     107,76
Platform    447,05     201,63     130,77

我使用[:5]是因为我只想绘制每个区域中的前5种类型。

2 个答案:

答案 0 :(得分:1)

这可能是您正在尝试实现的目标。您可以使用sklearn进行归一化,然后在下面查看如何创建堆叠的条形图。使用所需的标准化比例。

import pandas as pd
from sklearn import preprocessing
import matplotlib.pyplot as plt


# Read data
video_sales_df = pd.read_excel("data.xlsx")

regional_genre = video_sales_df.groupby(['Genre'],as_index=False)["NA_Sales","EU_Sales","JP_Sales"].sum()[:5]
columns = ["NA_Sales","EU_Sales","JP_Sales"]

# Normalization parameters
normalize_min = 0.1
normalize_max = 1

# Normalize
regional_genre[columns]= preprocessing.minmax_scale(regional_genre[columns], feature_range=(normalize_min, normalize_max))

# Plot stacked bars
plt.bar(regional_genre["Genre"], regional_genre["NA_Sales"], label="NA_Sales")
plt.bar(regional_genre["Genre"], regional_genre["EU_Sales"], bottom=regional_genre["NA_Sales"], label="EU_Sales")
plt.bar(regional_genre["Genre"], regional_genre["JP_Sales"], bottom=regional_genre["EU_Sales"]+regional_genre["NA_Sales"], label="JP_Sales")
plt.legend()
plt.ylabel("Normalized sales")
plt.show()

# Another solution for plot:

plt.bar(columns, regional_genre.ix[0,1:], label="Action")
bot = regional_genre.ix[0,1:]
plt.bar(columns, regional_genre.ix[1,1:], bottom=bot, label="Adventure")
bot += regional_genre.ix[1,1:]
plt.bar(columns, regional_genre.ix[2,1:], bottom=bot, label="Fighting")
bot += regional_genre.ix[2,1:]
plt.bar(columns, regional_genre.ix[3,1:], bottom=bot, label="Misc")
bot += regional_genre.ix[3,1:]
plt.bar(columns, regional_genre.ix[4,1:], bottom=bot, label="Platform")



result2 另一个解决方案: result2

答案 1 :(得分:0)

您可以从sklearn使用预处理功能MinMaxScaler

通过将每个要素缩放到给定范围来变换要素。