數(shù)據(jù)分析 | 零基礎(chǔ)入門數(shù)據(jù)分析(五):從入門到脫發(fā)?

大家好,我是不知所措撓頭娜。o(〃'▽'〃)o
今天開篇沒有廢話。如果你學(xué)了前面提到的python的幾個(gè)包,看了作業(yè)題目覺得很想自己動(dòng)手試試,可以私下找我把作業(yè)需要用到的數(shù)據(jù)資料分享給你~


接著分享娜娜醬的第四個(gè)python學(xué)習(xí)小作業(yè):某公司產(chǎn)品銷量分析

作業(yè)要求:
1、批量讀取數(shù)據(jù),并輸出以下信息:數(shù)據(jù)量、數(shù)據(jù)字段名、每個(gè)文件分別有多少缺失值
① 創(chuàng)建獨(dú)立函數(shù),從讀取數(shù)據(jù)到以上輸出要求
② 運(yùn)行代碼調(diào)用創(chuàng)建函數(shù),對數(shù)據(jù)進(jìn)行批量處理
2、創(chuàng)建函數(shù),批量讀取數(shù)據(jù),用均值填充缺失值數(shù)據(jù),并完成以下計(jì)算及圖表
(1)讀取數(shù)據(jù)并用均值填充缺失值;對“日期”字段進(jìn)行時(shí)間序列處理,輸出三個(gè)Dataframe文件data1,data2,data3
(2)分別計(jì)算data1,data2,data3中A,B產(chǎn)品的月總銷量,并繪制多系列柱狀圖,存儲在對應(yīng)的圖片文件夾路徑
(3)分別計(jì)算A、B產(chǎn)品在每個(gè)月中哪一天超過了月度80%的銷量,輸出日期
3、創(chuàng)建函數(shù),讀取數(shù)據(jù)并合并,對兩種產(chǎn)品銷量作線性回歸擬合,預(yù)測
(1)讀取數(shù)據(jù)刪除缺失值;對“日期”字段進(jìn)行時(shí)間序列處理,合并三個(gè)月數(shù)據(jù),輸出data;
(2)針對A產(chǎn)品銷量和B產(chǎn)品銷量數(shù)據(jù)做回歸分析,制作散點(diǎn)圖并存儲,并預(yù)測當(dāng)A銷量為1200時(shí),B產(chǎn)品銷量值


AB產(chǎn)品銷量數(shù)據(jù)大概長這樣

娜娜醬的代碼(在jupyter notebook做的):
第1題:加載模塊,創(chuàng)建函數(shù)讀取產(chǎn)品銷量數(shù)據(jù)

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、批量讀取數(shù)據(jù),并輸出以下信息
#(1)數(shù)據(jù)量
#(2)數(shù)據(jù)字段columns
#(3)輸出每個(gè)文件分別有多少缺失值
#創(chuàng)建函數(shù) :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('數(shù)據(jù)已加載')
# 這里用了os.walk(path) ,可以返回路徑中的信息及文件,結(jié)果為一個(gè)生成器

    for j in range(len(filename_lst)):
        data = pd.read_excel(filename_lst[j],header = 0,index_col=0)
        datasize = len(data) #數(shù)據(jù)量
        colname = data.columns.values.tolist() # 數(shù)據(jù)字段
        nan_num = len(data[data.isnull().values == True]) # 缺失值數(shù)量
        print('第%i個(gè)數(shù)據(jù)數(shù)據(jù)量為:%i' %(j+1,datasize))
        print('第%i個(gè)數(shù)據(jù)字段為:%s' %(j+1,colname))
        print('第%i個(gè)數(shù)據(jù)缺失值數(shù)量為:%i' %(j+1,nan_num))
        print('----------')

#調(diào)用函數(shù)
f()
print('-----The end of Q1-----')

上段運(yùn)行后,可以得到:


第2題:(1)批量讀取數(shù)據(jù),用均值填充缺失值數(shù)據(jù)對“日期”字段進(jìn)行時(shí)間序列處理,轉(zhuǎn)換成period

#創(chuàng)建函數(shù):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)
        
        #日期轉(zhuǎn)換成時(shí)間序列   
        dataindex = data.index
        dataindex.to_period()
        
        #將data加入dataset  
        dataset.append(data)
    return(dataset)

#調(diào)用函數(shù)
data1 = Q2_read_and_fillna()[0]
data2 = Q2_read_and_fillna()[1]
data3 = Q2_read_and_fillna()[2]
print('數(shù)據(jù)已加載已處理!')
print('-----The end of Q2(1)-----')

此時(shí)data1~data3就已經(jīng)處理好了:


第2題:(2)分別計(jì)算data1~data3中A、B產(chǎn)品的月總銷量,繪制多系列柱狀圖并存儲

#創(chuàng)建函數(shù): 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])
    
    #創(chuàng)建銷量dataframe
    saledf = pd.DataFrame({'產(chǎn)品A月銷量':sales_A,'產(chǎn)品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月產(chǎn)品A、B總銷量柱狀圖')
    plt.savefig(r'C:\Users\my\Desktop\python_project5_圖片保存\銷量圖.png')

#調(diào)用函數(shù)
Q2_monthly_sales(data1,data2,data3)
print('銷量柱狀圖已繪制已保存!')
print('-----The end of Q2(2)-----')

運(yùn)行上段代碼可得到每月產(chǎn)品總銷量:

一季度產(chǎn)品A、B總銷量柱狀圖

第2題:(3)分別計(jì)算A、B產(chǎn)品在每個(gè)月中哪一天超過了月度80%的銷量,輸出日期

#創(chuàng)建函數(shù):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)

#調(diào)用函數(shù)
print('A、B產(chǎn)品各月超過80%的銷量日期分別為:\n')
print(Q2_date_when_sales_over80(data1,data2,data3))
print('-----The end of Q2(3)-----')

可知A產(chǎn)品各月銷量超過80%總銷量的日期為:
2018年01月26日、2018年02月23日、2018年03月25日
B產(chǎn)品各月銷量超過80%總銷量的日期為:
2018年01月26日、2018年02月24日、2018年03月26日
上面兩個(gè)日期非常相近,可以猜測A、B產(chǎn)品可能存在某種關(guān)聯(lián),下面第3題可以證實(shí)我們的猜測。

第3題:(1)讀取一季度三個(gè)月的數(shù)據(jù)并合并,做散點(diǎn)圖觀察A,B產(chǎn)品銷量情況,并做回歸

#創(chuàng)建函數(shù):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)
        
        #日期轉(zhuǎn)換成時(shí)間序列   
        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)

#調(diào)用函數(shù)
data_combine = Q3_read_and_combine()
print(data_combine)
print('數(shù)據(jù)已加載已處理已合并!')
print('-----The end of Q3(1)-----')

這樣一季度的銷量就已經(jīng)處理好了:


第3題:(2)針對A產(chǎn)品銷量和B產(chǎn)品銷量數(shù)據(jù)做回歸分析,制作散點(diǎn)圖并存儲,預(yù)測當(dāng)A銷量為1200時(shí),B產(chǎn)品銷量值

#創(chuàng)建函數(shù):Q3_regression_analysis(df)
def Q3_regression_analysis(df):
    
    #樣本數(shù)據(jù)
    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])
    
    #繪制散點(diǎn)圖、線性回歸擬合直線
    plt.scatter(xtrain,ytrain,marker = '.',color = 'k')
    plt.plot(xtest,ytest,color = 'r')
    plt.grid()
    plt.title('A-B產(chǎn)品銷量回歸擬合')
    plt.savefig(r'C:\Users\my\Desktop\python_project5_圖片保存\線性回歸擬合.png')

    return(model.predict(1200))
    
#調(diào)用函數(shù)    
Q3_regression_analysis(data_combine) 
print('當(dāng)A銷量為1200時(shí),B的銷量預(yù)測值為:%i'%Q3_regression_analysis(data_combine))
print('A-B產(chǎn)品銷量回歸擬合圖已繪制已保存!')
print('-----The end of Q3(2)-----')

果然A、B產(chǎn)品銷量存在某種關(guān)系~
線性回歸擬合

可能有人會覺得,這些操作有什么難的,Excel也能做出來,還比敲代碼快。確實(shí)Excel是一個(gè)非常強(qiáng)大的工具,可以做很多比較復(fù)雜的分析。不過,正因?yàn)樗案叽笊稀绷?,點(diǎn)幾下鼠標(biāo)就可以分析,也就意味著它太不自由了。而且如果我們每個(gè)月都需要分析很多個(gè)產(chǎn)品的銷量,又或者數(shù)據(jù)量很大的時(shí)候,python的優(yōu)勢就突顯出來了:這套代碼只需要寫好一次,以后每次使用前修改幾個(gè)參數(shù),調(diào)整幾行代碼即可,極大地減少了重復(fù)動(dòng)作。大量的機(jī)械的重復(fù)交給代碼就好了,多余出的時(shí)間可以用來做更有意思的事情哪!


我是娜娜醬,請繼續(xù)期待后續(xù)數(shù)據(jù)分析打怪升級小作業(yè)~前面這幾個(gè)作業(yè)比較初級,從下個(gè)作業(yè)起畫風(fēng)要變得炫酷起來了!

這是零基礎(chǔ)入門數(shù)據(jù)分析系列的第五篇,其他內(nèi)容在這里:
第一篇:零基礎(chǔ)小白自學(xué)數(shù)據(jù)分析:從入門到摔門?
第二篇:零基礎(chǔ)小白自學(xué)數(shù)據(jù)分析:從入門到絆倒?
第三篇:零基礎(chǔ)小白自學(xué)數(shù)據(jù)分析:從入門到住院?
第四篇:零基礎(chǔ)小白自學(xué)數(shù)據(jù)分析:從入門到出家?
也許你還想看看:數(shù)據(jù)分析,從入門到放棄

(-'?_?'-)謝謝您閱讀,請勿轉(zhuǎn)載。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,332評論 6 13
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,284評論 2 89
  • 〇、前言 本文共108張圖,流量黨請慎重! 歷時(shí)1個(gè)半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 19,565評論 17 410
  • 《人生準(zhǔn)則》 自尊贏得人尊重, 真誠打動(dòng)眾人心。 頂天立地?zé)o愧色, 光明磊落無悔人。 窮富精善有底線, 不舍情義與...
    一葉知秋99閱讀 347評論 0 3
  • 現(xiàn)在通過內(nèi)部測試、外部測試、市場數(shù)據(jù)的反饋來決定做什么的方式很省力,以至于很少去思考其背后的原因,這樣也許能贏得幾...
    呆牛閱讀 130評論 0 0

友情鏈接更多精彩內(nèi)容