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

大家好,我是不知所措挠头娜。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的优势就突显出来了:这套代码只需要写好一次,以后每次使用前修改几个参数,调整几行代码即可,极大地减少了重复动作。大量的机械的重复交给代码就好了,多余出的时间可以用来做更有意思的事情哪!


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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,869评论 6 13
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,898评论 2 89
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,918评论 17 410
  • 《人生准则》 自尊赢得人尊重, 真诚打动众人心。 顶天立地无愧色, 光明磊落无悔人。 穷富精善有底线, 不舍情义与...
    一叶知秋99阅读 292评论 0 3
  • 现在通过内部测试、外部测试、市场数据的反馈来决定做什么的方式很省力,以至于很少去思考其背后的原因,这样也许能赢得几...
    呆牛阅读 96评论 0 0