数据分析,从入门到放弃呆鸟的Python数据分析

数据分析 | 零基础入门数据分析(五):从入门到脱发?

2018-06-28  本文已影响27人  娜某人

大家好,我是不知所措挠头娜。o(〃'▽'〃)o
今天开篇没有废话。如果你学了前面提到的python的几个包,看了作业题目觉得很想自己动手试试,可以私下找我把作业需要用到的数据资料分享给你~


接着分享娜娜酱的第四个python学习小作业:某公司产品销量分析

作业要求:
1、批量读取数据,并输出以下信息:数据量、数据字段名、每个文件分别有多少缺失值
① 创建独立函数,从读取数据到以上输出要求
② 运行代码调用创建函数,对数据进行批量处理
2、创建函数,批量读取数据,用均值填充缺失值数据,并完成以下计算及图表
(1)读取数据并用均值填充缺失值;对“日期”字段进行时间序列处理,输出三个Dataframe文件data1,data2,data3
(2)分别计算data1,data2,data3中A,B产品的月总销量,并绘制多系列柱状图,存储在对应的图片文件夹路径
(3)分别计算A、B产品在每个月中哪一天超过了月度80%的销量,输出日期
3、创建函数,读取数据并合并,对两种产品销量作线性回归拟合,预测
(1)读取数据删除缺失值;对“日期”字段进行时间序列处理,合并三个月数据,输出data;
(2)针对A产品销量和B产品销量数据做回归分析,制作散点图并存储,并预测当A销量为1200时,B产品销量值


AB产品销量数据大概长这样

娜娜酱的代码(在jupyter notebook做的):
第1题:加载模块,创建函数读取产品销量数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus']=False
from sklearn.linear_model import LinearRegression
import datetime
import os
% matplotlib inline

#1、批量读取数据,并输出以下信息
#(1)数据量
#(2)数据字段columns
#(3)输出每个文件分别有多少缺失值
#创建函数 :f()
def f():
    add = input('请指定工作目录路径:\n')
    while os.path.exists(add) == False:
        add = input('输入有误,路径不存在,请重新指定工作目录:\n')
    else:
        os.chdir(add)
    for i in os.walk(add):
        filename_lst = i[2]
    print('数据已加载')
# 这里用了os.walk(path) ,可以返回路径中的信息及文件,结果为一个生成器

    for j in range(len(filename_lst)):
        data = pd.read_excel(filename_lst[j],header = 0,index_col=0)
        datasize = len(data) #数据量
        colname = data.columns.values.tolist() # 数据字段
        nan_num = len(data[data.isnull().values == True]) # 缺失值数量
        print('第%i个数据数据量为:%i' %(j+1,datasize))
        print('第%i个数据字段为:%s' %(j+1,colname))
        print('第%i个数据缺失值数量为:%i' %(j+1,nan_num))
        print('----------')

#调用函数
f()
print('-----The end of Q1-----')

上段运行后,可以得到:


第2题:(1)批量读取数据,用均值填充缺失值数据对“日期”字段进行时间序列处理,转换成period
#创建函数:Q2_read_and_fillna()
def Q2_read_and_fillna():
    add = r'C:\Users\my\Desktop\python_project5'
    os.chdir(add)
    for i in os.walk(add):
        filename_lst = i[2]
    
    dataset = []
    for j in range(len(filename_lst)):
        data = pd.read_excel(filename_lst[j],header = 0,index_col=0)
        
        #用均值填充缺失值
        colname = data.columns.values.tolist()
        for col in colname:
            u = data[col].mean()
            data[col].fillna(u,inplace = True)
        
        #日期转换成时间序列   
        dataindex = data.index
        dataindex.to_period()
        
        #将data加入dataset  
        dataset.append(data)
    return(dataset)

#调用函数
data1 = Q2_read_and_fillna()[0]
data2 = Q2_read_and_fillna()[1]
data3 = Q2_read_and_fillna()[2]
print('数据已加载已处理!')
print('-----The end of Q2(1)-----')

此时data1~data3就已经处理好了:


第2题:(2)分别计算data1~data3中A、B产品的月总销量,绘制多系列柱状图并存储
#创建函数: Q2_monthly_sales(*dfs)
def Q2_monthly_sales(*dfs):
    sales_A = []
    sales_B = []
    for df in dfs:
        sales = df.sum()
        print(sales)
        sales_A.append(sales[0])
        sales_B.append(sales[1])
    
    #创建销量dataframe
    saledf = pd.DataFrame({'产品A月销量':sales_A,'产品B月销量':sales_B},
                         index = pd.period_range('201801','201803',freq = 'M'))
    #return(saledf)
    
    #绘图
    saledf.plot(kind = 'bar',grid = True,alpha = 0.5,rot = 0)
    plt.title('1-3月产品A、B总销量柱状图')
    plt.savefig(r'C:\Users\my\Desktop\python_project5_图片保存\销量图.png')

#调用函数
Q2_monthly_sales(data1,data2,data3)
print('销量柱状图已绘制已保存!')
print('-----The end of Q2(2)-----')

运行上段代码可得到每月产品总销量:

一季度产品A、B总销量柱状图
第2题:(3)分别计算A、B产品在每个月中哪一天超过了月度80%的销量,输出日期
#创建函数:Q2_date_when_sales_over80(*dfs)
def  Q2_date_when_sales_over80(*dfs):
    date_A = []
    date_B = []
    for df in dfs:
        df['A_cum'] = df['productA'].cumsum()
        df['B_cum'] = df['productB'].cumsum()
        df_Aover80 = df[df['A_cum']>(0.8*df['productA'].sum())]
        df_Bover80 = df[df['B_cum']>(0.8*df['productB'].sum())]
        date_A.append(str(df_Aover80.iloc[0].name))
        date_B.append(str(df_Bover80.iloc[0].name))
    return(date_A,date_B)

#调用函数
print('A、B产品各月超过80%的销量日期分别为:\n')
print(Q2_date_when_sales_over80(data1,data2,data3))
print('-----The end of Q2(3)-----')

可知A产品各月销量超过80%总销量的日期为:
2018年01月26日、2018年02月23日、2018年03月25日
B产品各月销量超过80%总销量的日期为:
2018年01月26日、2018年02月24日、2018年03月26日
上面两个日期非常相近,可以猜测A、B产品可能存在某种关联,下面第3题可以证实我们的猜测。

第3题:(1)读取一季度三个月的数据并合并,做散点图观察A,B产品销量情况,并做回归

#创建函数:Q3_read_and_combine()
def Q3_read_and_combine():
    add = r'C:/Users/my/Desktop/python_project5'
    os.chdir(add)
    for i in os.walk(add):
        filename_lst = i[2]
        #print(filename_list)
    
    dataset = []
    for j in range(len(filename_lst)):
        data = pd.read_excel(filename_lst[j],header = 0,index_col=0)
        
        #日期转换成时间序列   
        dataindex = data.index
        dataindex.to_period()
        #删除缺失值
        data.dropna(inplace = True)
        #将data加入dataset  
        dataset.append(data)
                
    #连接data
    data_re = pd.concat([dataset[0],dataset[1],dataset[2]])
    return(data_re)

#调用函数
data_combine = Q3_read_and_combine()
print(data_combine)
print('数据已加载已处理已合并!')
print('-----The end of Q3(1)-----')

这样一季度的销量就已经处理好了:


第3题:(2)针对A产品销量和B产品销量数据做回归分析,制作散点图并存储,预测当A销量为1200时,B产品销量值
#创建函数:Q3_regression_analysis(df)
def Q3_regression_analysis(df):
    
    #样本数据
    xtrain = data_combine['productA']
    ytrain = data_combine['productB']

    #线性回归分析
    model = LinearRegression()
    model.fit(xtrain[:,np.newaxis],ytrain)
    xtest = np.linspace(0,1000,1000)
    ytest = model.predict(xtest[:,np.newaxis])
    
    #绘制散点图、线性回归拟合直线
    plt.scatter(xtrain,ytrain,marker = '.',color = 'k')
    plt.plot(xtest,ytest,color = 'r')
    plt.grid()
    plt.title('A-B产品销量回归拟合')
    plt.savefig(r'C:\Users\my\Desktop\python_project5_图片保存\线性回归拟合.png')

    return(model.predict(1200))
    
#调用函数    
Q3_regression_analysis(data_combine) 
print('当A销量为1200时,B的销量预测值为:%i'%Q3_regression_analysis(data_combine))
print('A-B产品销量回归拟合图已绘制已保存!')
print('-----The end of Q3(2)-----')
果然A、B产品销量存在某种关系~ 线性回归拟合

可能有人会觉得,这些操作有什么难的,Excel也能做出来,还比敲代码快。确实Excel是一个非常强大的工具,可以做很多比较复杂的分析。不过,正因为它太“高大上”了,点几下鼠标就可以分析,也就意味着它太不自由了。而且如果我们每个月都需要分析很多个产品的销量,又或者数据量很大的时候,python的优势就突显出来了:这套代码只需要写好一次,以后每次使用前修改几个参数,调整几行代码即可,极大地减少了重复动作。大量的机械的重复交给代码就好了,多余出的时间可以用来做更有意思的事情哪!


我是娜娜酱,请继续期待后续数据分析打怪升级小作业(作业题目来自数据分析师(python)微专业)~前面这几个作业比较初级,从下个作业起画风要变得炫酷起来了,嘿嘿嘿!

这是零基础入门数据分析系列的第五篇,其他内容在这里:
第一篇:零基础小白自学数据分析:从入门到摔门?
第二篇:零基础小白自学数据分析:从入门到绊倒?
第三篇:零基础小白自学数据分析:从入门到住院?
第四篇:零基础小白自学数据分析:从入门到出家?

(-'๏_๏'-)谢谢您阅读,请勿转载。

上一篇 下一篇

猜你喜欢

热点阅读