亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

如何進(jìn)行python編程:一個(gè)簡單的收入波動(dòng)分析模型

antyiwei / 1844人閱讀

摘要:收入的波動(dòng)來自于不同部門或類目的收入漲跌。我們的目標(biāo)是利用實(shí)現(xiàn)收入波動(dòng)的分析模型。有了這個(gè)函數(shù),我們只要給到數(shù)據(jù)源和細(xì)分項(xiàng),就能得到影響最大的細(xì)分項(xiàng)。我們來認(rèn)識(shí)下如何處理日期。

環(huán)境準(zhǔn)備:sublime+ipython

打開代碼編輯器sublime——本質(zhì)上,txt文本編輯器也可以寫代碼,并保存為以.py為后綴的python文件,但專業(yè)的代碼編輯器可以實(shí)現(xiàn)語法高亮、自動(dòng)補(bǔ)全等功能,并支持項(xiàng)目管理,大大提高編寫代碼的效率和代碼的管理。因此,選擇一款合適的代碼編輯器便不可少

打開終端并進(jìn)入ipython模式——ipython可以幫助我進(jìn)行探索和試誤,利用魔術(shù)命令%paste(執(zhí)行剪貼板中的python代碼)更是可以幫助我快速查看某段代碼的執(zhí)行效果

如果說普通的代碼編輯器支持的是“編輯-編譯-運(yùn)行”的工作模式,那么ipython鼓勵(lì)的則是“執(zhí)行-探索”的工作模式。

開始寫代碼

分析任務(wù):一家電商公司的收入來自不同的部門,每個(gè)部門下又有不同的商品類目。收入的波動(dòng)來自于不同部門或類目的收入漲跌。為了快速定位每天的收入波動(dòng)來自哪個(gè)部門以及哪個(gè)類目,需要搭建模型進(jìn)行自動(dòng)化分析。

我們的目標(biāo)是利用python實(shí)現(xiàn)收入波動(dòng)的分析模型(Analysis Model for Income Fluctuation)。
首先,我們需要清晰定義實(shí)現(xiàn)最終目標(biāo)的每個(gè)步驟。

計(jì)算各個(gè)部門的收入變化值(觀察日收入-對(duì)比日收入)以及整體的收入變化值;

計(jì)算各個(gè)部門收入變化值占比整體收入變化值的比例,取絕對(duì)值;其中,占比最大的就是對(duì)整體收入變化影響最大的部門,可以取經(jīng)驗(yàn)值10%,即占比大于10%的部門就是對(duì)整體收入變化影響最大的部門;

計(jì)算上述步驟得到的影響最大的部門下每個(gè)類目收入變化值和每個(gè)部門的收入變化值;

計(jì)算每個(gè)類目收入變化值占比部門整體收入變化值的比例,取絕對(duì)值,找出影響最大的類目。

現(xiàn)在我們用python來實(shí)現(xiàn)上述步驟:

導(dǎo)入所需模塊和數(shù)據(jù):

import pandas as pd

df=pd.read_excel("/Users/xiangzhendong/Downloads/income_data.xls")

利用數(shù)據(jù)框(dataframe)的透視表(pivot_table)方法按部門聚合昨日和前日的收入數(shù)據(jù):

df_pivot=df.pivot_table("income",index="department",columns="date",aggfunc="sum")

計(jì)算每個(gè)部門的收入變化值以及每個(gè)部門的變化值占比整體變化值的比例:

df_pivot["change_amt"]=df_pivot["2016-11-16"]-df_pivot["2016-11-15"]

df_pivot["change_pct"]=abs(df_pivot["change_amt"]/df_pivot["change_amt"].sum())

此時(shí),我們的df_pivot數(shù)據(jù)框多了change_amt和change_pct兩列。如果我們要選出change_pct大于10%的部門,可以這樣寫:

result=df_pivot[df_pivot["change_pct"]>=0.1]

對(duì)整體變化影響最大部門已經(jīng)找出來了,接下來尋找每個(gè)部門下對(duì)部門整體變化影響最大的類目。不難發(fā)現(xiàn),尋找的邏輯其實(shí)是一模一樣的。在編寫代碼的過程中,我們要注意識(shí)別做事的模式,創(chuàng)造工具簡化同類操作。

此時(shí),我們可以創(chuàng)建一個(gè)尋找對(duì)整體變化影響最大的成分的函數(shù):

def max_change(df, rows):

    df_pivot=df.pivot_table("income",index=rows,columns="date",aggfunc="sum")

    df_pivot["change_amt"]=df_pivot["2016-11-16"]-df_pivot["2016-11-15"]

    df_pivot["change_pct"]=abs(df_pivot["change_amt"]/df_pivot["change_amt"].sum())

    return df_pivot[df_pivot["change_pct"]>=0.1]    

這里,我們創(chuàng)建了max_change函數(shù),它有兩個(gè)參數(shù),一個(gè)是待分析的數(shù)據(jù)源(df),一個(gè)是細(xì)分項(xiàng)(rows),例如部門或類目。函數(shù)內(nèi)部的操作與之前的代碼完全一致。有了這個(gè)函數(shù),我們只要給到數(shù)據(jù)源和細(xì)分項(xiàng),就能得到影響最大的細(xì)分項(xiàng)。

細(xì)心的讀者一定發(fā)現(xiàn)這里還有一個(gè)問題沒有解決,那就是日期:這里日期是寫死的,并不能根據(jù)每天的日期來自動(dòng)更新,顯然不符合自動(dòng)化的原則。

datetime模塊可以解決這個(gè)問題。我們來認(rèn)識(shí)下datetime如何處理日期。

In [1]: today=datetime.date.today()

In [2]: print today
2016-11-23

In [3]: today.ctime()
Out[3]: "Wed Nov 23 00:00:00 2016"

In [4]: today.timetuple()
Out[4]: time.struct_time(tm_year=2016, tm_mon=11, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=328, tm_isdst=-1)

In [5]: today.toordinal()
Out[5]: 736291

In [6]: today.year
Out[6]: 2016

In [7]: today.month
Out[7]: 11

In [8]: today.day
Out[8]: 23

因此,今天、昨天和前天的寫法如下:

today="%s"%(datetime.date.today())

yesterday="%s"%(datetime.date.today()-datetime.timedelta(days=1))

qiantian="%s"%(datetime.date.today()-datetime.timedelta(days=2))

max_change函數(shù)也相應(yīng)地寫成:

def max_change(df, rows):
    
        df_pivot=df.pivot_table("income",index=rows,columns="date",aggfunc="sum")
    
        df_pivot["change_amt"]=df_pivot[qiantian]-df_pivot[yesterday]
    
        df_pivot["change_pct"]=abs(df_pivot["change_amt"]/df_pivot["change_amt"].sum())
    
        return df_pivot[df_pivot["change_pct"]>=0.1]  

如果我們想要知道對(duì)整體影響最大的部門是什么,可以這樣來調(diào)用函數(shù):

result=max_change(df, "department")

如果我們要知道影響最大的部門下哪個(gè)類目影響最大,可以這樣來調(diào)用函數(shù):

result_lm=max_change(df[df["department"]==result.index[0]],"item_cats")

result.index會(huì)返回影響最大的部門的名稱的列表,通過列表索引來引用它們。由于有多個(gè)部門,這里我們需要用for循環(huán)來遍歷列表,最后將每次遍歷返回的數(shù)據(jù)框合并:

def max_lm(result,df):
    frames=[]

    for i in range(len(result)):
        result_lm=max_change(df[df["department"]==result.index[i]],"item_cats")
        result_lm["department"]=result.index[i]    #將部門名稱添加到數(shù)據(jù)框中
        frames.append(result_lm)
    
    return pd.concat(frames)

調(diào)用上述函數(shù)得到每個(gè)部門下影響最大的類目:

final=max_lm(result,df)

如果我們想把結(jié)果導(dǎo)出到excel表中,可以這樣寫:

writer=pd.ExcelWriter("output_today.xlsx")

result.to_excel(writer, sheet_name="max_departments")
final.to_excel(writer, sheet_name="max_itemcats")

writer.save()
總結(jié)

準(zhǔn)備好python開發(fā)環(huán)境,即 “代碼編輯器+ipython”;

寫代碼前清晰定義實(shí)現(xiàn)最終目標(biāo)的每個(gè)步驟;

寫代碼的過程中識(shí)別做事的模式,創(chuàng)造工具簡化復(fù)用性操作;

利用for循環(huán)遍歷列表。

最終代碼
import pandas as pd 
import datetime

today="%s"%(datetime.date.today())
yesterday="%s"%(datetime.date.today()-datetime.timedelta(days=1))
qiantian="%s"%(datetime.date.today()-datetime.timedelta(days=2))
print("昨天和前天的日期分別是:")
print(yesterday,qiantian)

df=pd.read_excel("/Users/xiangzhendong/Downloads/income_data.xls")

def max_change(df, rows):
    df_pivot=df.pivot_table("income",index=rows,columns="date",aggfunc="sum")
    df_pivot["change_amt"]=df_pivot[yesterday]-df_pivot[qiantian]
    df_pivot["change_pct"]=abs(df_pivot["change_amt"]/df_pivot["change_amt"].sum())
    return df_pivot[df_pivot["change_pct"]>=0.1]

result=max_change(df,"department")
print(result)

def max_lm(result,df):
    frames=[]

    for i in range(len(result)):
        result_lm=max_change(df[df["department"]==result.index[i]],"itemcats")
        result_lm["department"]=result.index[i]
        frames.append(result_lm)
    
    return pd.concat(frames)

final=max_lm(result, df)
print(final)

writer=pd.ExcelWriter("output_today.xlsx")

result.to_excel(writer, sheet_name="max_departments")
final.to_excel(writer, sheet_name="max_itemcats")

writer.save()

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/44291.html

相關(guān)文章

  • 成為數(shù)據(jù)科學(xué)家入門項(xiàng)目

    摘要:基于大量的數(shù)據(jù)統(tǒng)計(jì),網(wǎng)球是一種很好的預(yù)測(cè)類體育項(xiàng)目。數(shù)據(jù)科學(xué)家根據(jù)歷史數(shù)據(jù)和玩家信息來構(gòu)建預(yù)測(cè)模型,并將結(jié)果與博彩公司的評(píng)估進(jìn)行比較。目標(biāo)是找出機(jī)器學(xué)習(xí)模型與博彩公司評(píng)估之間的差距,從而有機(jī)會(huì)獲勝。這是一個(gè)很好的實(shí)際數(shù)據(jù)科學(xué)項(xiàng)目。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡書地址:https://www.jianshu.com/p/56c......

    Julylovin 評(píng)論0 收藏0
  • 動(dòng)態(tài)再平衡投資策略歷史數(shù)據(jù)回測(cè)

    摘要:再平衡策略基本就是以固定收益為標(biāo)準(zhǔn),圍繞其做波動(dòng),而波動(dòng)的影響就是股市的漲跌。 賺錢是個(gè)俗氣的話題,但又是人人都繞不開的事情。我今天來 科學(xué) 地觸碰下這個(gè)話題。 談賺錢,就會(huì)談到理財(cái)、投資,談到炒股。有這樣一個(gè)笑話: 問:如何成為百萬富翁? 答:帶一千萬進(jìn)入股市。 那么你有沒有炒過股?有沒有虧過錢? 股市雖然是個(gè)充滿造富神話的地方,但對(duì)于大部分參與者來說,風(fēng)險(xiǎn)都是極高的,所謂 七...

    Vultr 評(píng)論0 收藏0
  • 關(guān)于大數(shù)據(jù)你應(yīng)該了解五件事兒

    摘要:對(duì)于大數(shù)據(jù)而言,數(shù)據(jù)量沒有一定的要求,只要足夠得出可靠的結(jié)論即可。與大數(shù)據(jù)相關(guān)的職業(yè)隨著市場(chǎng)對(duì)大數(shù)據(jù)相關(guān)需求的增加,與之相關(guān)的職業(yè)需求數(shù)量也在上升。 摘要: 本文從基本概念、行業(yè)趨勢(shì)、學(xué)習(xí)途徑等幾個(gè)方面介紹了大數(shù)據(jù)的相關(guān)內(nèi)容,適合對(duì)大數(shù)據(jù)感興趣的讀者作為入門材料閱讀。 隨著科技的發(fā)展,目前已經(jīng)步入了大數(shù)據(jù)的時(shí)代,很多社交媒體和互聯(lián)網(wǎng)公司也非常關(guān)注大數(shù)據(jù)這一行業(yè)。那么對(duì)于大數(shù)據(jù)而言,這里...

    yzd 評(píng)論0 收藏0
  • Keras之父:大多數(shù)深度學(xué)習(xí)論文都是垃圾,炒作AI危害很大

    摘要:問深度學(xué)習(xí)社區(qū)現(xiàn)在面臨的主要挑戰(zhàn)是什么答打擊炒作發(fā)展倫理意識(shí)獲得科學(xué)嚴(yán)謹(jǐn)性。深度學(xué)習(xí)簡直是科學(xué)的重災(zāi)區(qū)。 Keras之父、谷歌大腦人工智能和深度學(xué)習(xí)研究員Fran?ois Chollet撰寫了一本深度學(xué)習(xí)Python教程實(shí)戰(zhàn)書籍《Python深度學(xué)習(xí)》,書中介紹了深度學(xué)習(xí)使用Python語言和強(qiáng)大Keras庫,詳實(shí)新穎。近日,F(xiàn)ran?ois Chollet接受了采訪,就深度學(xué)習(xí)到底是什么、...

    RyanHoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

antyiwei

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<