【python数据分析】用python进行数据探索1(含各种数据基础分析方法以及直方图、条形图、折线图等基本画法)

从这周开始,我将在此记录我对《python数据分析与挖掘实战》(第二版)的跟读情况,将我认为的值得学习的点记录在这里,有时候也会对相关知识进行拓展,保持每周更新3-4次的频率,争取在下次开学前把这本书学习完。同时,因为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()

结果如图:

 上面其实是用条形图来实现条形图的绘制,同时,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()

结果如图:

 

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

python中groupby的用法可以参考:Python中的groupby分组_Emily-CSDN博客_groupby python

python中分组函数groupby和分组运算函数agg小结_数据小白的进阶之路-CSDN博客_python分组函数

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

matplotlib.pyplot.hist — Matplotlib 3.5.0 documentation

python 中直方图绘制 - LiErRui - 博客园

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()  # 展示图片

输出结果如图:

 条形图可以参考这篇文章:python 画条形图(柱状图)_天天向上的专栏-CSDN博客_python柱状图

饼图可以参考这篇文章:

Python数据可视化的例子——饼图(pie)_Fo*(Bi)的博客-CSDN博客_python数据可视化饼图

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数据可视化的例子——折线图(line)_Fo*(Bi)的博客-CSDN博客_python数据可视化折线图

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 pandas,index索引,修改索引,复合索引,将某列设为索引_houyanhua1的专栏-CSDN博客_pandas设置列索引

index_col的用法 index_col = None / 0 / False_wencky的博客-CSDN博客_index_col=false

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()  # 展示图片

输出结果如下:

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

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

Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围_宁宁Fingerstyle的博客-CSDN博客_matplotlib设置坐标轴刻度

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()

结果如下:

 关于sort_values用法,可以参考这篇文章:dataframe排序中sort_values方法的使用---(超级详细)_爱代码的小哥的博客-CSDN博客_dataframe sort_values

7.相关性分析

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

        散点图画法:python Matplotlib 系列教程(四)——散点图_xjl271314的博客-CSDN博客_plt散点图

        散点图矩阵画法:Python 用 pandas 绘制散点图矩阵 - 赏尔 - 博客园

        数据相关性分析:

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')  # 相关系数矩阵,即给出了任意两款菜式之间的相关系数

结果如下:

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

结果如下:

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

结果如下:

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

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值