python数据分析与处理
给代码和数据集,根据数据集加三个新图表,使用jupyter运行,如何建立图表横轴年龄纵轴价格,两个分类
麻烦采纳一下哈,谢谢啦
为了给数据集添加三个新图表,让我们假设数据集包含以下列:
age: 顾客的年龄
gender: 顾客的性别(男/女)
category: 产品类别(A/B/C)
price: 产品价格
首先,我们需要导入所需的库和数据集:
python
Copy
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据集
df = pd.read_csv('data.csv')
接下来,我们可以创建三个新的图表。以下是其中一个示例:
群组条形图
这个图表将按年龄分组,并显示每个年龄组中每个性别的平均价格。代码如下:
python
Copy
# 按年龄和性别分组,计算平均价格
grouped = df.groupby(['age', 'gender'])['price'].mean().reset_index()
# 将数据转换成透视表
pivot = grouped.pivot(index='age', columns='gender', values='price')
# 创建群组条形图
pivot.plot(kind='bar')
plt.xlabel('Age')
plt.ylabel('Price')
plt.title('Average Price by Age and Gender')
plt.show()
这将生成一个群组条形图,其中横轴是年龄,纵轴是平均价格,每个年龄组有两个条形图,分别表示男性和女性的平均价格。
您可以根据需要修改图表的标题、标签和其他属性。
箱线图
这个图表将显示每个类别每个年龄组的价格分布。代码如下:
python
Copy
# 创建箱线图
df.boxplot(column='price', by=['category', 'age'])
plt.xlabel('Age')
plt.ylabel('Price')
plt.title('Price Distribution by Category and Age')
plt.show()
这将生成一个箱线图,其中横轴是年龄,纵轴是价格。每个年龄组有三个箱线图,分别表示类别A、B和C的价格分布。
散点图
这个图表将按年龄分组,并显示每个年龄组中男性和女性的价格分布。代码如下:
python
Copy
# 将数据分成男性和女性
male = df[df['gender'] == 'Male']
female = df[df['gender'] == 'Female']
# 创建散点图
plt.scatter(male['age'], male['price'], c='blue', label='Male')
plt.scatter(female['age'], female['price'], c='pink', label='Female')
plt.xlabel('Age')
plt.ylabel('Price')
plt.title('Price Distribution by Age and Gender')
plt.legend()
plt.show()
这将生成一个散点图,其中横轴是年龄,纵轴是价格。每个年龄组有两个散点图,分别表示男性和女性的价格分布。
希望这些代码可以帮助您创建所需的图表。您可以根据需要修改代码和图表属性。
1.统计量分析
即最简单的标准差,数量,平均值,范围,变异系数(标准差/平均值)等数值的计算
# 回稳率统计
from __future__ import print_function #用于代码兼容
import pandas as pd #pandas 导入pandas库
rates = '' #输入数据(excel表格)所在位置
data = pd.read_excel(rates) #读取数据
statistics = data.describe() #保存基本统计量
statistics.loc['range'] = statistics.loc['max']-statistics.loc['min'] #极差
statistics.loc['var'] = statistics.loc['std']/statistics.loc['mean'] #变异系数
statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%'] #四分位数间距
print(statistics)
输出结果如下:
2.异常值分析
异常值即数据中存在不合理数据需要进行剔除,即箱模型上下界的数据,
代码如下:
import pandas as pd
example2 = 'C:/Users/chinaunicom/Desktop/例子2.xls' #导入数据,文件在桌面
data = pd.read_excel(example2, index_col = u'日期') #读取数据,指定“日期”列为索引列
import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.figure() #建立图像
p = data.boxplot(return_type='dict') #画箱线图,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
y = p['fliers'][0].get_ydata()
y.sort() #从小到大排序,该方法直接改变原对象
#用annotate添加注释
#其中有些相近的点,注解会出现重叠,难以看清,需要一些技巧来控制。
#以下参数都是经过调试的,需要具体问题具体调试。
for i in range(len(x)):
if i>0:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
else:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))
plt.show() #展示箱线图
输入结果如下(箱模型):
上下界有7个数据需要进行剔除
3.贡献度分析
贡献度分析又称为帕累托分析,2/8定律。例如:对一个公司来讲,80%的利率来自于20%的最畅销产品,其他80%只产生20%的利润,如某个餐厅不同菜品的盈利贡献:
代码如下:
#-*- coding: utf-8 -*-
#菜品盈利数据 帕累托图
from __future__ import print_function
import pandas as pd
#初始化参数
dish_profit ='C:/Users/chinaunicom/Desktop/catering_dish_profit.xls' #餐饮菜品盈利数据
data = pd.read_excel(dish_profit, index_col = u'菜品名')
data = data[u'盈利'].copy()
data.sort_index(ascending = False)
import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.figure()
data.plot(kind='bar')
plt.ylabel(u'盈利(元)')
p = 1.0*data.cumsum()/data.sum()
p.plot(color = 'r', secondary_y = True, style = '-o',linewidth = 2)
plt.annotate(format(p[6], '.4%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #添加注释,即85%处的标记。这里包括了指定箭头样式。
plt.ylabel(u'盈利(比例)')
plt.show()
菜品名和盈利比例
4 相关性分析:
pearson:
相关性最主要的指标就是r
r<=0.3 不存在线性相关
0.3<r<0.5 低度线性相关
r>0.8为高度线性相关
spearman秩相关:
两个变量具有严格单调的函数关系,就完全spearman相关,用r*2表示,0<=r*2<=1.
举例:
分析菜品销量之间的相关性可以得到不同菜品的联系,如互补菜品或者没有关系,为原材料采购提供参考
代码:
#-*- coding: utf-8 -*-
#餐饮销量数据相关性分析
from __future__ import print_function
import pandas as pd
catering_sale = '../data/catering_sale_all.xls' #餐饮数据,含有其他属性
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
data.corr() #相关系数矩阵,即给出了任意两款菜式之间的相关系数
data.corr()[u'百合酱蒸凤爪'] #只显示“百合酱蒸凤爪”与其他菜式的相关系数
data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']) #计算“百合酱蒸凤爪”与“翡翠蒸香茜饺”的相关系数
结果如下:
百合酱蒸凤爪与其他菜品的相关性
针对这个问题,可以按照以下步骤进行操作:
首先,需要确认已经在本地或者远程服务器上安装了Python环境和Jupyter Notebook。可以使用以下命令来检查是否安装成功:
python --version
jupyter notebook --version
如果以上命令出现了Python和Jupyter Notebook的版本号,则说明安装成功。
接下来,可以使用以下命令来启动Jupyter Notebook:
jupyter notebook
此时会在浏览器中打开Jupyter Notebook的主界面,在其中进行操作。
假设已经有一个名为data.csv
的数据集,其中包含了每个人的年龄和购买价格。可以使用以下代码将其加载,并按照年龄和价格进行分类:
import pandas as pd
data = pd.read_csv('data.csv')
age_groups = data.groupby('age')
price_groups = data.groupby('price')
以上代码将数据集按照年龄和价格进行分组,分别保存在age_groups
和price_groups
中。
接下来,可以使用Matplotlib或者其他可视化库来生成新的图表。假设需要生成三个图表,分别是:
可以使用以下代码来生成这三个图表:
import matplotlib.pyplot as plt
# 平均购买价格
avg_prices = age_groups.mean()['price']
plt.bar(avg_prices.index, avg_prices.values)
plt.title('Average purchase price by age')
plt.xlabel('Age')
plt.ylabel('Price')
plt.show()
# 人数分布
price_counts = price_groups.size()
bins = range(int(price_counts.min()), int(price_counts.max()) + 2)
plt.hist(price_counts, bins=bins)
plt.title('Distribution of number of people by purchase price')
plt.xlabel('Number of people')
plt.ylabel('Purchase price')
plt.show()
# 散点图
colors = age_groups.ngroup()
plt.scatter(data['price'], data['age'], c=colors)
plt.title('Scatter plot of age and purchase price')
plt.xlabel('Purchase price')
plt.ylabel('Age')
plt.show()
以上代码将三个图表分别绘制出来,并在浏览器中显示。
如果需要调整图表的样式和布局,可以参考Matplotlib的相关文档或者使用其他可视化库来实现。
总结:以上步骤简单地介绍了如何在Python中使用数据分析和处理来生成新图表,并在Jupyter中进行操作。关键在于加载数据集并进行分类,以及使用适当的可视化库来生成图表。需要注意的是,生成图表时要注意图表的样式和布局,以便更好地展示数据。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 创建示例数据集
data = pd.DataFrame({
'age': np.random.randint(18, 65, size=100), # 随机生成18到65岁之间的年龄
'gender': np.random.choice(['男', '女'], size=100), # 随机生成男女性别
'category': np.random.choice(['A', 'B', 'C'], size=100), # 随机生成A、B、C三个类别
'price': np.random.randint(10, 100, size=100) # 随机生成10到100之间的价格
})
# 散点图(Scatter Plot)
plt.figure(figsize=(8, 6))
plt.scatter(data['age'], data['price'], c=data['gender'].map({'男': 'blue', '女': 'red'}))
plt.xlabel('Age')
plt.ylabel('Price')
plt.title('Scatter Plot - Age vs Price')
plt.legend(['男', '女'])
plt.show()
# 折线图(Line Plot)
plt.figure(figsize=(8, 6))
for category in data['category'].unique():
category_data = data[data['category'] == category]
plt.plot(category_data['age'], category_data['price'], label=category)
plt.xlabel('Age')
plt.ylabel('Price')
plt.title('Line Plot - Age vs Price')
plt.legend()
plt.show()
# 箱线图(Box Plot)
plt.figure(figsize=(8, 6))
data.boxplot(column='price', by='category')
plt.xlabel('Category')
plt.ylabel('Price')
plt.title('Box Plot - Price by Category')
plt.suptitle('') # 移除默认的标题
plt.show()
这段代码将生成一个包含100个随机生成的样本的示例数据集,并根据这个数据集创建三个图表:
散点图(Scatter Plot)显示了年龄与价格之间的关系,根据性别进行了颜色编码。
折线图(Line Plot)显示了不同产品类别的价格随年龄变化的趋势,每个类别用不同的线条表示。
箱线图(Box Plot)显示了不同产品类别下的价格分布情况,可以比较不同类别之间的价格差异。
您可以根据需要修改数据集的大小和分布,以及图表的标题和标签等。