从这周开始,我将在此记录我对《python数据分析与挖掘实战》(第二版)的跟读情况,将我认为的值得学习的点记录在这里,有时候也会对相关知识进行拓展,保持每周更新3-4次的频率,争取在下次开学前把这本书学习完。同时,因为python中库的更新,书中原来使用的一些函数已经发生变化,我也会相应进行修改。

python ggplot数据分析 python数据分析图谱_Python

 一、数据特征分析

1. 定量数据的分布分析——直方图

import pandas as pd
import numpy as np
catering_sale = './Python数据分析与挖掘实战(第2版)/chapter3/demo/data/catering_fish_congee.xls'  # 餐饮数据
data = pd.read_excel(catering_sale,names=['date','sale'])  # 读取数据

bins = [0,500,1000,1500,2000,2500,3000,3500,4000]
labels = ['[0,500)','[500,1000)','[1000,1500)','[1500,2000)',
       '[2000,2500)','[2500,3000)','[3000,3500)','[3500,4000)'] 

data['sale分层'] = pd.cut(data.sale, bins, labels=labels)
aggResult = data.groupby('sale分层')['sale'].count()

pAggResult = round(aggResult/aggResult.sum(), 2, ) * 100

import matplotlib.pyplot as plt
plt.figure(figsize=(10,6))  # 设置图框大小尺寸
pAggResult.plot(kind='bar',width=0.8,fontsize=10)  # 绘制频率直方图
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.title('季度销售额频率分布直方图',fontsize=20)
plt.show()

结果如图:

python ggplot数据分析 python数据分析图谱_数据挖掘_02

 上面其实是用条形图来实现条形图的绘制,同时,bins也都是自己设置的范围,实际我们用hist函数可以更便捷实现多种直方图的画法。

plt.figure(figsize=(10,6))
bins = range(0,4500,500)
nums,bins,patches = plt.hist(data['sale'],bins,edgecolor='k')
plt.xticks(bins,bins)
for num,bin in zip(nums,bins):
    plt.annotate(num,xy=(bin,num),xytext=(bin+1.5,num+0.5))
plt.title(u'季度销售额分布直方图')
plt.show()

结果如图:

python ggplot数据分析 python数据分析图谱_python ggplot数据分析_03

 

关于数据分箱用法pd.cut可以参考:数据分箱之pd.cut() - 知乎


直方图的多种画法可以参考:

matplotlib.pyplot.hist — Matplotlib 3.5.0 documentation

2. 定性数据分布分析——条形图,饼图

import pandas as pd
import matplotlib.pyplot as plt
catering_dish_profit = './Python数据分析与挖掘实战(第2版)/chapter3/demo/data/catering_dish_profit.xls'  # 餐饮数据
data = pd.read_excel(catering_dish_profit)  # 读取数据

# 绘制饼图
x = data['盈利']
labels = data['菜品名']
plt.figure(figsize = (8, 6))  # 设置画布大小
plt.pie(x,labels=labels)  # 绘制饼图
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.title('菜品销售量分布(饼图)')  # 设置标题
plt.axis('equal')
plt.show()

# 绘制条形图
x = data['菜品名']
y = data['盈利']
plt.figure(figsize = (8, 4))  # 设置画布大小
plt.bar(x,y)
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.xlabel('菜品')  # 设置x轴标题
plt.ylabel('销量')  # 设置y轴标题
plt.title('菜品销售量分布(条形图)')  # 设置标题
plt.show()  # 展示图片

输出结果如图:


3. 对比分析——折线图

# 部门之间销售金额比较
import pandas as pd
import matplotlib.pyplot as plt
data=pd.read_excel("./Python数据分析与挖掘实战(第2版)/chapter3/demo/data/dish_sale.xls")
plt.figure(figsize=(8, 4))
plt.plot(data['月份'], data['A部门'], color='green', label='A部门',marker='o')
plt.plot(data['月份'], data['B部门'], color='red', label='B部门',marker='s')
plt.plot(data['月份'], data['C部门'],  color='skyblue', label='C部门',marker='x')
plt.legend() # 显示图例
plt.ylabel('销售额(万元)')
plt.show()

结果如下:

python ggplot数据分析 python数据分析图谱_python ggplot数据分析_04

4. 统计量分析

import pandas as pd

catering_sale = './Python数据分析与挖掘实战(第2版)/chapter3/demo/data/catering_sale.xls'  # 餐饮数据
data = pd.read_excel(catering_sale, index_col = u'日期')  # 读取数据,指定“日期”列为索引列
data = data[(data[u'销量'] > 400)&(data[u'销量'] < 5000)]  # 过滤异常数据
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)

得到结果如下:

python ggplot数据分析 python数据分析图谱_Python_05

 关于如何指定索引,可以参考这两篇文章:

5. 周期性分析

import pandas as pd
import matplotlib.pyplot as plt

df_normal = pd.read_csv("./Python数据分析与挖掘实战(第2版)/chapter3/demo//data/user.csv")
plt.figure(figsize=(8,4))
plt.plot(df_normal["Date"],df_normal["Eletricity"])
plt.xlabel("日期")
plt.ylabel("每日电量")
# 设置x轴刻度间隔
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.title("正常用户电量趋势")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.show()  # 展示图片

输出结果如下:

python ggplot数据分析 python数据分析图谱_python ggplot数据分析_06

 关于坐标轴的设置问题可以参考以下两篇文章:

Matplotlib入门-2-坐标轴axis/axes设置 - 知乎

6. 贡献度分析

即找到贡献度最高的前80%的产品

import pandas as pd

# 初始化参数
dish_profit = './Python数据分析与挖掘实战(第2版)/chapter3/demo/data/catering_dish_profit.xls'  # 餐饮菜品盈利数据
data = pd.read_excel(dish_profit, index_col = u'菜品名')
data = data[u'盈利'].copy()
data.sort_values(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()

结果如下:

python ggplot数据分析 python数据分析图谱_python_07

7.相关性分析

        可以用散点图和散点图矩阵来进行相关性分析

      

        数据相关性分析:

from __future__ import print_function
import pandas as pd

catering_sale = './Python数据分析与挖掘实战(第2版)/chapter3/demo/data/catering_sale_all.xls'  # 餐饮数据,含有其他属性
data = pd.read_excel(catering_sale, index_col = u'日期')  # 读取数据,指定“日期”列为索引列
print(data.corr(),'\n')  # 相关系数矩阵,即给出了任意两款菜式之间的相关系数

结果如下:

python ggplot数据分析 python数据分析图谱_python ggplot数据分析_08

print(data.corr()[u'百合酱蒸凤爪'],'\n')  # 只显示“百合酱蒸凤爪”与其他菜式的相关系数

结果如下:

python ggplot数据分析 python数据分析图谱_python ggplot数据分析_09

print(data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']))

结果如下:

python ggplot数据分析 python数据分析图谱_Python_10

 这篇文章基本只展示了书中的内容,以及汇总了一些我认为写的比较好的文章(侵删),之后的文章还会有更多各种图的画法~