多場景下的算法構(gòu)建
數(shù)據(jù): 某公司A,B產(chǎn)品在2018年1,2,3月的銷量數(shù)據(jù),數(shù)據(jù)格式為xlsx
1、批量讀取數(shù)據(jù),并輸出以下信息 (1)數(shù)據(jù)量 (2)數(shù)據(jù)字段columns (3)輸出每個(gè)文件分別有多少缺失值
要求: ① 創(chuàng)建獨(dú)立函數(shù),從讀取數(shù)據(jù)到以上輸出要求 ② 運(yùn)行代碼多次調(diào)用創(chuàng)建函數(shù),對(duì)數(shù)據(jù)進(jìn)行批量處理 提示: ① 將課程excel數(shù)據(jù)放入單獨(dú)文件夾(建議英文路徑),函數(shù)中通過input來輸入excel數(shù)據(jù)所在文件夾路徑,再通過遍歷來讀取文件 ② pd.read_excel()中用“index_col”參數(shù),將第一列變?yōu)閕ndex ③ os.walk(path) → 返回路徑中的信息及文件,結(jié)果為一個(gè)生成器 ④ 定位缺失值位置:data[data.isnull().values == True]
2、批量讀取數(shù)據(jù),用均值填充缺失值數(shù)據(jù),并完成以下計(jì)算及圖表制作 (1)讀取數(shù)據(jù)并用均值填充缺失值;對(duì)“日期”字段進(jìn)行時(shí)間序列處理,轉(zhuǎn)換成日period ,最后輸出三個(gè)Dataframe文件data1,data2,data3 (2)分別計(jì)算data1,data2,data3中A,B產(chǎn)品的月總銷量,并繪制多系列柱狀圖,存儲(chǔ)在對(duì)應(yīng)的圖片文件夾路徑 (3)分別計(jì)算A產(chǎn)品在每個(gè)月中哪一天超過了月度80%的銷量,輸出日期
要求: ① 分別創(chuàng)建四個(gè)函數(shù),對(duì)應(yīng)完成上述需求 ② 數(shù)據(jù)文件夾路徑和圖片存儲(chǔ)路徑不要相同 提示: ① 時(shí)間序列轉(zhuǎn)換方法提示:pd.to_period ② 時(shí)間戳Timestampe轉(zhuǎn)化成字符串用str()方法
3、讀取數(shù)據(jù)并合并,做散點(diǎn)圖觀察A,B產(chǎn)品銷量,并做回歸,預(yù)測當(dāng)A銷量為1200時(shí),B產(chǎn)品銷量值 (1)讀取數(shù)據(jù)刪除缺失值;對(duì)“日期”字段進(jìn)行時(shí)間序列處理,轉(zhuǎn)換成日period ,合并三個(gè)月數(shù)據(jù),輸出data; (2)針對(duì)A產(chǎn)品銷量和B產(chǎn)品銷量數(shù)據(jù)做回歸分析,制作散點(diǎn)圖并存儲(chǔ),并預(yù)測當(dāng)A銷量為1200時(shí),B產(chǎn)品銷量值
要求: ① 分別創(chuàng)建兩個(gè)函數(shù),對(duì)應(yīng)完成上述需求 ② 數(shù)據(jù)文件夾路徑和圖片存儲(chǔ)路徑不要相同 提示: ① 用pd.dripna方法去掉缺失值,注意inplace參數(shù)
一 導(dǎo)入python包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
import os
% matplotlib inline
二 數(shù)據(jù)讀取
1、批量讀取數(shù)據(jù),并輸出以下信息 (1)數(shù)據(jù)量 (2)數(shù)據(jù)字段columns (3)輸出每個(gè)文件分別有多少缺失值
要求: ① 創(chuàng)建獨(dú)立函數(shù),從讀取數(shù)據(jù)到以上輸出要求 ② 運(yùn)行代碼多次調(diào)用創(chuàng)建函數(shù),對(duì)數(shù)據(jù)進(jìn)行批量處理 提示: ① 將課程excel數(shù)據(jù)放入單獨(dú)文件夾(建議英文路徑) ② pd.read_excel()中用“index_col”參數(shù),將第一列變?yōu)閕ndex ③ os.walk(path) → 返回路徑中的信息及文件,結(jié)果為一個(gè)生成器 ④ 定位缺失值位置:data[data.isnull().values == True]
def f1_1():path = 'C:/Users/Hjx/Desktop/項(xiàng)目05多場景下的算法構(gòu)建/'folder = os.walk(path) # 遍歷文件夾files = list(folder)[0][2]n = 1for i in files:file = path + idata = pd.read_excel(file,index_col = 0)data_counts = len(data) # 計(jì)算數(shù)據(jù)量columns = data.columns.tolist() # 輸出數(shù)據(jù)columnsnan_counts = len(data[data.isnull().values == True]) # 計(jì)算缺失值數(shù)量print('第%i個(gè)數(shù)據(jù)數(shù)據(jù)量為:%i' % (n, data_counts))print('第%i個(gè)數(shù)據(jù)數(shù)據(jù)字段為:' % n,columns)print('第%i個(gè)數(shù)據(jù)缺失值數(shù)量為:%i' % (n, nan_counts))print('------')n += 1
f1_1() # 運(yùn)行函數(shù)
print('finished!')
2、批量讀取數(shù)據(jù),用均值填充缺失值數(shù)據(jù),并完成以下計(jì)算及圖表制作 (1)讀取數(shù)據(jù)并用均值填充缺失值;對(duì)“日期”字段進(jìn)行時(shí)間序列處理,轉(zhuǎn)換成日period ,最后輸出三個(gè)Dataframe文件data1,data2,data3 (2)分別計(jì)算data1,data2,data3中A,B產(chǎn)品的月總銷量,并繪制多系列柱狀圖,存儲(chǔ)在對(duì)應(yīng)的圖片文件夾路徑 (3)分別計(jì)算A產(chǎn)品在每個(gè)月中哪一天超過了月度80%的銷量,輸出日期
要求: ① 分別創(chuàng)建四個(gè)函數(shù),對(duì)應(yīng)完成上述需求 ② 數(shù)據(jù)文件夾路徑和圖片存儲(chǔ)路徑不要相同 提示: ① 時(shí)間序列轉(zhuǎn)換方法提示:pd.to_period ② 時(shí)間戳Timestampe轉(zhuǎn)化成字符串用str()方法 創(chuàng)建函數(shù)f2_1() → 完成問題2-1
def f2_1():path = 'C:/Users/Hjx/Desktop/項(xiàng)目05多場景下的算法構(gòu)建/'folder = os.walk(path) # 遍歷文件夾files = list(folder)[0][2]data_files = []for i in files:file = path + idata = pd.read_excel(file,index_col = 0)columns = data.columns.tolist() # 提取列名data.to_period() # 轉(zhuǎn)換成時(shí)間序列data[columns[0]].fillna(data[columns[0]].mean(),inplace = True) data[columns[1]].fillna(data[columns[1]].mean(),inplace = True)# 均值填充缺失值data_files.append(data)return(data_files)
創(chuàng)建函數(shù)f2_2() → 完成問題2-2
def f2_2(*data_files):path = 'C:/Users/Hjx/Desktop/項(xiàng)目05圖片保存位置/'A_sale = []B_sale = []for data in data_files:columns = data.columns # 提取列名A_sale.append(data[columns[0]].sum()) # 更新A產(chǎn)品總銷售量B_sale.append(data[columns[1]].sum()) # 更新B產(chǎn)品總銷售量df = pd.DataFrame({'A_sale_sum': A_sale,'B_sale_sum':B_sale},index = pd.period_range('201801','201803',freq = 'M'))#print(df)
# 查看數(shù)據(jù)
plt.figure()
df.plot(kind = 'bar',style = '--o',color = ['r','g'],alpha = 0.8, rot = 0,figsize = (8,4))
plt.title('1-3月A,B產(chǎn)品總銷量柱狀圖')
plt.ylim([0,25000])
plt.legend(loc = 'upper left')
plt.grid()
plt.savefig(path + '1-3月A,B產(chǎn)品總銷量柱狀圖.png',dpi=400)
def f2_3(*data_files):keydates = []for data in data_files:columns = data.columns # 提取列名data['A_sale_sum%'] = data[columns[0]].cumsum() / data[columns[0]].sum() # 計(jì)算A產(chǎn)品累計(jì)銷量占比keydate = data[data['A_sale_sum%']>0.8].index[0] keydates.append(str(keydate))# 記錄銷量超過80%的日期print('A產(chǎn)品月度超過80%的銷量日期分別為\n', keydates)return(keydates)
f2_1()
data1, data2, data3 = f2_1()[0], f2_1()[1], f2_1()[2]
#print(data1.head(),'\n-----')
#print(data1.head(),'\n-----')
#print(data1.head(),'\n-----')
print('運(yùn)行函數(shù)f2_1(), 分別得到 data1,data2,data3\n-------')f2_2(data1,data2,data3)
print('運(yùn)行函數(shù)f2_2(), 求出不同月份A,B產(chǎn)品總銷量,并制作圖表\n-------')f2_3(data1,data2,data3)
print('運(yùn)行函數(shù)f2_3(), 求出A產(chǎn)品每個(gè)月中超過了月度80%的銷量的日期\n-------')
3、讀取數(shù)據(jù)并合并,做散點(diǎn)圖觀察A,B產(chǎn)品銷量,并做回歸,預(yù)測當(dāng)A銷量為1200時(shí),B產(chǎn)品銷量值 (1)讀取數(shù)據(jù)刪除缺失值;對(duì)“日期”字段進(jìn)行時(shí)間序列處理,轉(zhuǎn)換成日period ,合并三個(gè)月數(shù)據(jù),輸出data; (2)針對(duì)A產(chǎn)品銷量和B產(chǎn)品銷量數(shù)據(jù)做回歸分析,制作散點(diǎn)圖并存儲(chǔ),并預(yù)測當(dāng)A銷量為1200時(shí),B產(chǎn)品銷量值
要求: ① 分別創(chuàng)建兩個(gè)函數(shù),對(duì)應(yīng)完成上述需求 ② 數(shù)據(jù)文件夾路徑和圖片存儲(chǔ)路徑不要相同 提示: ① 用pd.dripna方法去掉缺失值,注意inplace參數(shù) 創(chuàng)建函數(shù)f3_1() → 完成問題3-1
def f3_1():path = 'C:/Users/Hjx/Desktop/項(xiàng)目05多場景下的算法構(gòu)建/'folder = os.walk(path) # 遍歷文件夾files = list(folder)[0][2]data_files = []for i in files:file = path + idata = pd.read_excel(file,index_col = 0)columns = data.columns.tolist() # 提取列名data.to_period() # 轉(zhuǎn)換成時(shí)間序列data.dropna(inplace=True) # 刪除缺失值data_files.append(data)data = pd.concat([data_files[0],data_files[1],data_files[2]]) # 合并數(shù)據(jù)return(data)
創(chuàng)建函數(shù)f3_2() → 完成問題3-2
def f3_2(data):path = 'C:/Users/Hjx/Desktop/項(xiàng)目05圖片保存位置/'model = LinearRegression()model.fit(data['productA'][:,np.newaxis],data['productB']) # 構(gòu)建回歸模型xtest = np.linspace(0,1000,1000)ytest = model.predict(xtest[:,np.newaxis])plt.scatter(data['productA'],data['productB'],marker = '.',color = 'k')plt.plot(xtest,ytest,color = 'r')plt.grid(True)plt.title('A-B產(chǎn)品銷量回歸擬合')plt.savefig(path + 'A-B產(chǎn)品銷量回歸擬合.png',dpi=400) # 存儲(chǔ)圖表return(model.predict(1200))
f3_1()
data = f3_1()
print('運(yùn)行函數(shù)f3_1(), 查看AB產(chǎn)品銷量關(guān)系,并制作圖表\n-------')f3_2(data)
print('預(yù)測當(dāng)A銷量為1200時(shí),B產(chǎn)品銷量值為%.1f' % f3_2(data))
print('運(yùn)行函數(shù)f3_2(), 對(duì)AB產(chǎn)品銷量數(shù)據(jù)做回歸分析并制圖,并預(yù)測當(dāng)A銷量為1200時(shí),B產(chǎn)品銷量值\n-------')
總結(jié)
以上是生活随笔 為你收集整理的【数据分析】多场景下的算法构建 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。