何春燕 王超宇 成都理工大學(xué)
Python是一種面向?qū)ο蟮哪_本語言,自20世紀(jì)90年代初誕生到現(xiàn)在,已經(jīng)被廣泛應(yīng)人工智能,機(jī)器學(xué)習(xí),大數(shù)據(jù)等方面。python語法簡單,容易理解和上手。無論安裝還是使用python都不需要付費(fèi)。python是一種面向?qū)ο蟮恼Z言,同時也支持面向過程?;谒拈_源的本質(zhì),python可在許多平臺上使用,包括Windows,Linux等。python有強(qiáng)大的標(biāo)準(zhǔn)庫和豐富的第三方庫。.
Pandas被廣泛運(yùn)用于金融、統(tǒng)計以及社會科學(xué)領(lǐng)域的數(shù)據(jù)處理。
程序段1:
從mangoDB讀取用戶表
import pandas as pd
from pymongo import MongoClient
host = ‘0.0.0.0’# 配置 MongoDB 連接信息
port = 27019
client = MongoClient(host=host, port=port)
collenction =‘user’
cursor = db[collection].find({})
User = pd.DataFrame(list(cursor))
部分?jǐn)?shù)據(jù)展示:
user_id channel
first_visit_time
2018-01-04 10:43:33 33737760 anzhishichang
2018-01-04 13:54:50 33217154 anzhishichang
2018-01-08 17:46:22 33130645 anzhishichang
2.2.1. 獲取新增用戶
新增用戶:首次使用應(yīng)用程序的用戶,以first_visit_time為依據(jù),判斷用戶是否為新增用戶。
時間序列分析在金融數(shù)據(jù)分析中占據(jù)重要位置,可傳入字符串進(jìn)行索引。
例如可傳入”20180109”來獲取1月9號首次訪問應(yīng)用程序的用戶數(shù)據(jù),
User[‘20180109]
user_id channel
first_visit_time
2018-01-09 15:50:44 33217151 anzhishichang
可傳入時間段獲取數(shù)據(jù):
User[“201808”:”20180111”]
user_id channel
first_visit_time
2018-01-08 17:43:11 4897182 anzhishichang
2018-01-11 09:18:59 33217153 anzhishichang
時間索引的切片操作包含尾部的數(shù)據(jù)。
2.2.2.獲取最近7天新增用戶數(shù)
程序段2:
import pandas as pd
from datetime import datetime, date, timedelta
end_date = date.today()
new_user = pd.Series(name=`新增用戶數(shù)`)
#通過for循環(huán)獲取7天的新增用戶數(shù)
for i in range(7):
dt = date.today() - timedelta(days=i)
sum_new = User[dt[-4:]]
new_user[dt] = len(sum_new)
返回結(jié)果:
0522 65
0521 36
0520 8
0519 6
0518 3
0517 41
0516 58
可清晰的看到,每天的新增用戶數(shù)。
2.2.3.獲取最近7天不同渠道的新增用戶數(shù)
程序段3:
import pandas as pd
from datetime import datetime, timedelta, date
new7channel = pd.DataFrame()
#外層for循環(huán)獲取最近7天的新增用戶數(shù)據(jù)
for i in range(7):
Dt = date.today() - timedelta(days=i)
dt1 = datetime.strftime(dt, "%Y%m%d")
data = User[dt1]
Channel = data[`channel`].drop_duplicates()
new_channel=pd.Series(name=dt1[-4:])
#內(nèi)層for循環(huán),獲取各渠道新增用戶數(shù)
for cn in channel:
dt_cn = data[data[`channel`] == cn]
num_channel[cn] = len(dt_cn)
#concat函數(shù)將數(shù)據(jù)連接起來。通過fillna函數(shù)將值為NaN數(shù)據(jù)用0填充。
new7channel=pd.concat([new7channel,new_channel],axis=1).fillna(0)
部分結(jié)果:
0523 0522 0521 0520 0519 0518 0517
AppStore 8.0 20.0 13.0 13.0 12.0 11.0 20.0
c360 0.0 2.0 2.0 0.0 0.0 0.0 1.0
橫向數(shù)據(jù)表示不同渠道最近7天的新增用戶數(shù),縱向則表明不同渠道的新增用戶數(shù)。
在大數(shù)據(jù)時代,數(shù)據(jù)分析的影響及重要性在不斷拓寬和加深。本文介紹了基于Python,pandas簡單的數(shù)據(jù)分析過程。