A. 利用python進行《野蠻時代》游戲數據分析
數據包含近229萬條記錄,109個欄位,以下取較重要的欄位進行說明。
欄位說明:user_id:用戶編碼,用戶唯一標識
bd_stronghold_level:要塞等級,相當於游戲賬號等級
wood_rece_value:木頭消耗數量
stone_rece_value:石頭消耗數量
ivory_rece_value:象牙消耗數量
meat_rece_value:肉消耗數量
magic_rece_value:魔法消耗數量
general_acceleration_rece_value:通用加速消耗數量
building_acceleration_rece_value:建築加速消耗數量
reaserch_acceleration_rece_value:科研加速消耗數量
training_acceleration_rece_value:訓練加速消耗數量
treatment_acceleration_rece_value:治療加速消耗數量
pvp_battle_count:玩家對玩家次數
pve_battle_count:玩家對機器次數
avg_online_minutes:日均在線時間
pay_price: 消費金額
pay_count:消費次數
分析思路:用戶注冊時間分布情況?
用戶的付費情況(付費率,ARPU,ARPPU)?
各等級用戶的付費情況?
用戶的消費習慣?
可視化數據
分析過程:
①導入數據
import numpy as np
import pandas as pd
from pandas import read_csv
from sklearn.cluster import KMeans
import matplotlib.pyplotas plt
import pylab as pl
from matplotlib.font_managerimport FontManager, FontProperties
pd.set_option('display.max_columns',None)
#為了數據安全,一份數據
df=df0
#檢查是否有空值
print(df.isnull().any().any())
#觀察數據構成
print(df.head())
②清洗數據
#以user_id為維度,刪除重復數據,並查看用戶總數
df=df.drop_plicates(subset='user_id')
print('用戶總數:',len(df['user_id']))
→用戶總數:2288007
③計算用戶注冊時間分布
#首先將注冊時間精確到天
register_date=[]
for i in df['register_time']:
date=i[5:10]
register_date.append(date)
df['register_time']=register_date
#計算每天的注冊人數
df_register=df.groupby('register_time').size()
df_register.columns=['日期','注冊人數']
print(df_register)
(可視化)
plt.plot(df_register)
plt.grid(True)
pl.xticks(rotation=90)
font=FontProperties(fname='/System/Library/Fonts/PingFang.ttc')
plt.title('用戶注冊分布圖',fontproperties=font)
plt.show()
△可以看出,用戶注冊數在2月19日有一次的大的高峰,其他時間也分別有幾次小高峰,且高峰的持續時間很短,可以推測是因為游戲推出一些獎勵活動或公司對游戲的推廣取得了效果進而使注冊用戶激增。
④用戶的付費情況(付費率,ARPU,ARPPU)
#付費率(付費人數/活躍人數)
df_pay_user=df[(df['pay_price']>0)]
pay_rate=df_pay_user['user_id'].count()/df_active_user['user_id'].count()
print('付費率:%.2f'%(pay_rate))
#ARPU(總付費金額/活躍人數)
arpu=df_pay_user['pay_price'].sum()/df_active_user['user_id'].count()
print('ARPU:%.2f'%(arpu))
#ARPPU(總付費金額/付費人數)
arppu=df_pay_user['pay_price'].sum()/df_pay_user['user_id'].count()
print('ARPPU:%.2f'%(arppu))
△目前盈利較好的手游的ARPU超過5元,一般手游在3~5元之間,盈利較差的低於3元,該游戲的ARPU為8.55元,說明盈利水平較高。
⑤不同等級用戶的付費情況
df_user=df[['user_id','bd_stronghold_level','pay_price','pay_count']]
df_table=pd.pivot_table(df_user,index=['bd_stronghold_level'],
values=['user_id','pay_price','pay_count'],
aggfunc={'user_id':'count','pay_price':'sum','pay_count':'sum'})
df_stronghold_pay=pd.DataFrame(df_table.to_records())
#各等級付費人數
df_stronghold_pay['pay_num']=df_user[(df_user['pay_price']>0)].groupby('bd_stronghold_level').user_id.count()
#各等級付費轉化率
df_stronghold_pay['pay_rate']=df_stronghold_pay['pay_num']/df_stronghold_pay['user_id']
#各等級平均付費金額
df_stronghold_pay['avg_pay_price']=df_stronghold_pay['pay_price']/df_stronghold_pay['user_id']
#各等級平均付費次數
df_stronghold_pay['avg_pay_count']=df_stronghold_pay['pay_count']/df_stronghold_pay['user_id']
#重命名列名
df_stronghold_pay.columns=['要塞等級','總付費次數','總付費金額','總人數',
'付費人數','付費轉化率','人均付費金額','人均付費次數']
df_stronghold_pay=df_stronghold_pay[['要塞等級','總人數','付費人數','付費轉化率',
'總付費金額','人均付費金額','總付費次數','人均付費次數']]
df_stronghold_pay=df_stronghold_pay.round(2)
print(df_stronghold_pay)
(可視化)
#要塞等級—付費轉化率
x=df_stronghold_pay['要塞等級']
y=df_stronghold_pay['付費轉化率']
plt.xticks(x,range(0,len(x),1))
plt.plot(x,y)
plt.grid(True)
plt.title('不同等級用戶付費轉化率',fontproperties=font)
plt.show()
#要塞等級-人均付費金額
x=df_stronghold_pay['要塞等級']
y=df_stronghold_pay['人均付費金額']
plt.xticks(x,range(0,len(x),1))
plt.plot(x,y)
plt.grid(True)
plt.title('不同等級用戶人均付費jine',fontproperties=font)
plt.show()
x=df_stronghold_pay['要塞等級']
y=df_stronghold_pay['人均付費金額']
plt.xticks(x,range(0,len(x),1))
plt.plot(x,y)
plt.grid(True)
plt.title('不同等級用戶人均付費jine',fontproperties=font)
plt.show()
#要塞等級-人均付費次數
x=df_stronghold_pay['要塞等級']
y=df_stronghold_pay['人均付費次數']
plt.xticks(x,range(0,len(x),1))
plt.plot(x,y)
plt.grid(True)
plt.title('不同等級用戶人均付費次數',fontproperties=font)
plt.show()
△用戶等級到達10級時,付費率接近60%,等級到達13級時,付費率接近100%,且人均付費金額和次數兩項指標也在用戶達到10級後增長迅速,因此可以認定10級以上用戶為游戲的核心用戶。
△但是觀察用戶等級分布,發現絕大部分用戶還是處在10級以下的水平,因此如何使用戶達到10級是游戲運營接下來需要考慮的事。
⑥不同玩家的消費習慣
該游戲充值主要可以獲得道具類(木頭、石頭、象牙、肉、魔法)和加速券類(通用、建築、科研、訓練、醫療)。根據用戶的充值金額大小,分別分析兩類消費品的消耗情況。
#將等級>=10級的玩家劃分為:消費>=500為高消費玩家,<500為普通玩家
df_eli_user=df[(df['pay_price']>=500)&(df['bd_stronghold_level']>=10)]
df_nor_user=df[(df['pay_price']<500)&(df['bd_stronghold_level']>10)]
#不同玩家的道具消耗情況
wood_avg=[df_eli_user['wood_rece_value'].mean(),df_nor_user['wood_rece_value'].mean()]
stone_avg=[df_eli_user['stone_rece_value'].mean(),df_nor_user['stone_rece_value'].mean()]
ivory_avg=[df_eli_user['ivory_rece_value'].mean(),df_nor_user['ivory_rece_value'].mean()]
meat_avg=[df_eli_user['meat_rece_value'].mean(),df_nor_user['meat_rece_value'].mean()]
magic_avg=[df_eli_user['magic_rece_value'].mean(),df_nor_user['magic_rece_value'].mean()]
props_data={'high_value_player':[wood_avg[0],stone_avg[0],ivory_avg[0],meat_avg[0],magic_avg[0]],
'normal_player':[wood_avg[1],stone_avg[1],ivory_avg[1],meat_avg[1],magic_avg[1]]}
df_props=pd.DataFrame(props_data,index=['wood','stone','ivory','meat','magic'])
df_props=df_props.round(2)
print(df_props)
#可視化
ax=df_props.plot(kind='bar',title='Props Rece',
grid=True,legend=True)
plt.show()
△普通玩家和高消費玩家對木頭、石頭、肉的消耗都較大,魔法的消耗都較小,而在象牙的消耗上,高消費玩家和普通玩家的消耗差距較大。
#不同玩家的加速券消耗情況
general_avg=[df_eli_user['general_acceleration_rece_value'].mean(),
df_nor_user['general_acceleration_rece_value'].mean()]
building_avg=[df_eli_user['building_acceleration_rece_value'].mean(),
df_nor_user['building_acceleration_rece_value'].mean()]
research_avg=[df_eli_user['reaserch_acceleration_rece_value'].mean(),
df_nor_user['reaserch_acceleration_rece_value'].mean()]
training_avg=[df_eli_user['training_acceleration_rece_value'].mean(),
df_nor_user['training_acceleration_rece_value'].mean()]
treatment_avg=[df_eli_user['treatment_acceleration_rece_value'].mean(),
df_nor_user['treatment_acceleration_rece_value'].mean()]
acceleration_data={'high_value_player':[general_avg[0],building_avg[0],research_avg[0],
training_avg[0],treatment_avg[0]],
'normal_player':[general_avg[1],building_avg[1],research_avg[1],
training_avg[1],treatment_avg[1]]}
df_acceleration=pd.DataFrame(acceleration_data,index=['general','building','researching','training','treatment'])
print(df_acceleration.round(2))
#可視化
ax=df_acceleration.plot(kind='bar',title='Acceleration Rece',
grid=True,legend=True)
plt.show()
△兩類玩家對對治療加速券消耗都很小,對通用加速券的消耗差異較大,其他三種加速券消耗差別不大。
結論:1.該游戲具有較大的用戶基數,且新用戶注冊受游戲活動、新版本等因素影響較大。
2.該游戲的ARPU為8.55,說明該游戲的盈利能力較高。
3.用戶等級達到10級後,付費意願明顯上升,且達到13級時付費率將近100%。但是絕大多數用戶仍然停留在10級以下,如何使用戶平滑升至10級尤為重要。
4.消費習慣上,高消費玩家對象牙和通用加速券的需求遠多於一般玩家。
B. python做的游戲有哪些
比較大型的,使用Python的游戲有兩個,一個是《EVE》,還有一個是《文明》。另外GitHub上有很多開源的小游戲,下面給大家介紹一下:
1. Github上面有個項目Free Python Games,裡面集合了不少的Python開發的小游戲,能玩,也適合新手用來練練手,另外 PyGame 這個網站裡面裡面集合了很多Python開發的小游戲。
2. Python版本的 Flapy Bird 簡化版,但是感覺更加難玩了。當然你也可以嘗試用Python開發原版的 Flapy Bird,涵蓋了顏色圖像等:Flappy Block - 1.0。
相關推薦:《Python教程》
3. 小時候經常在手機上玩的一個游戲,也是一款經典的街機游戲,這款游戲進化之後其實就是一個打乒乓的小游戲,這里同樣有一個進化版本,圖形設計的更加好看:Ping Pong。
4. 以前初高中在學校很無聊的時候跟同桌或者前後桌玩的游戲,你還記得么?
5. 同樣一款小時候在小霸王上玩的游戲:Junk Jungle。
6. 除此之外,一款比較有名基於Pyhton的戰爭的游戲:Home - TaleWorlds Entertainment。
7. 一款看起來非常有趣的3D游戲:Galcon。
C. Python下Pywin32的使用教程
你可以直接到lib的site-packages下面的win32目錄下,有一個demos。另外幾個win32開頭的目錄里也有demos子目錄。進去看他們寫好的例子。
D. 自動玩游戲,手游腳本究竟是怎麼做的
手游現在已經成為大家打發碎片化時間的一種很普遍的方式了,而有的人會由於種種願意不能自己去玩,就希望有什麼辦法或者工具能幫助我們解決這個問題,不用人收著也能完成任務。
實現原理:
比如一個 游戲 的任務,你需要在不同的手機屏幕上進行一系列點擊,滑動,甚至輸入文本,發送語音等動作後才能完成,而這一切操作其實就是手機中會記錄這些動作的文件,文件存儲的是一個又一個的信號量,這些信號然後根據不同廠商的設定反饋給上層,而上層會根據反饋的信息轉換成統一識別的事件,事件最後響應給應用,並對信息進行相應的處理,最後呈現給用戶並實現它,這一些列的動作都是可以通過一些現有的工具或者說解決方案來幫我們實現自動 游戲 的功能。
一般實現的方式 :
1.通過USB連接電腦,然後通過ADB(一種android的調試工具,當然iOS也有類似的工具一個原理)對手機進行遠程的控制;
2.通過在手機中安裝一個控制其它app的app來控制,說簡單點就是生成一個手機應用,在手機中運行後,直接通過這個應用對其它應用進行操作;
實現方式我們明白了,那麼要藉助哪些工具或者說哪些解決方案來幫我們進行實現呢。
易語言解決方案:
首先我們來說一說這個被大多數人所知道的,但是又被"正統"程序員所抵觸的編程語言。
這是一款運用中文進行編程的語言,可以說它讓大多數人擺脫了"英文魔咒",很多人認為學習編程其實就是學英語,或者英語不好沒辦法學習編程,這其實是錯誤的理解,這個後話了,等我有空了再為大家分享下如何擺脫這個魔咒。
優勢:
1. 中文化編程,中文畢竟是我們的母語,在更加讓人容易理解;
2. 在 游戲 相關領域有非常成熟的框架,或者中支持庫;
3. 使用這種解決方案的人群非常多,當你遇到問題時很容易找到解決辦法;
劣勢:
1. 代碼的編譯速度相對其他語言來說很慢;(對於現在的電腦硬體來說其實已經沒啥大礙)
2. 會被其他編程語言鄙視,太local化了,沒有那種國際感;
3. 收費;(雖然作者初衷是推廣中文編程,但是推廣也是要錢的嘛,能理解)
4. 易語言需要進行一定的學習,相對其他幾個解決方案來說難度略高;
易語言解決方案總的來說,由於是中文的並且有大量現成知識庫做支撐,很容易就能實現功能,所以一直被用來作為中控型的腳本來編寫,不大會被用來進行生成app的方式來進行(有app化的解決辦法,但是不穩定不討論)
按鍵精靈解決方案:
案件精靈可以說是這個領域里, 歷史 悠久且非常出色的一位前輩。非常簡單就能上手,甚至有通過錄像然後轉成腳本的錄制功能,當然要製作出優秀的腳本也需要進行一定的學習;
優勢:
1. 非常簡單,容易上手,有非常豐富的快捷方式;
2. 有錄制功能,更進一步降低了製作門檻;
3. 歷史 悠久人群穩定,所以社區也很穩定,遇到問題很容易找到解決辦法(注意我說的是群體,不是按鍵精靈的論壇。)
4. 按鍵精靈非常良好的提供了解決方案,即可生成app直接手機中運行,也可以通過安裝按鍵的android版然後傳送腳本進行運行。
劣勢:
1. 付費,且不便宜;
2. 代碼框架實現是基於英文實現;
3. 無法進行分文件管理,就是說所有業務要寫進一個文本里,這其實非常不方便管理和維護;
按鍵精靈解決方案,比較適合對編程沒有什麼基礎的朋友上手。網路上也有非常多的免費教程可以進行學習。
觸動精靈解決方案:
觸動精靈是近幾年新啟一個新的平台,是基於lua語言來進行編寫開發的,與按鍵精靈類似,不過相對按鍵的名聲赫赫,就有點顯得小很多。
優勢:
1. 支持文件化管理開發;(這點其實非常棒,對於後期的代碼開發或者維護來說都很棒)
2. 基於lua開發,所以可以完美利用lua的原表特性來進行一些框架搭建,更加適用於負責的點擊事件;
3. 擁有一套完善的支持自動化的庫,可以直接拿來使用;
4. 支持遠程調試,腳本傳到手機中運行,也可以生成app進行控制;
劣勢:
1. 需要學習lua語言,對小白來說有點不友好;
2. 需要付費,相對按鍵來說比較便宜;
3. 偏小眾,出問題想找解決辦法非常難找;
4. 對於android和iOS系統收取不同的費用來打包生成apk;
5. 代碼框架也是基於英文進行實現的;
觸動精靈的解決方案,好於能利用lua的原表特性來進行自定義框架開發,方便自己的後續的多次開發。網路上也有很多的教程來進行學習,就是遇到問題需要解決的時候,總會找不到辦法,這里有點難受。
Auto.js解決方案:
這套方案是藉助於android手機的無障礙服務進行實現的,根據控制項的id進行一系列的事件響應,精準度更高。
優勢:
1. 無需root就可以實現控制手機;
2. 可在手機中運行,也可以打包成apk運行;
3. 通過控制項id進行控制,准確度非常高,並且自適應解析度;
劣勢:
1. 對 游戲 不大友好,因為 游戲 很多時候控制項都不規則,都是一個個畫布;
2. 需要學習js;
3. 基於英文實現的代碼框架;
Auto.js這個解決方案,對於 游戲 來說並不大友好,雖然也有找圖找色等功能,但是使用起來並沒有按鍵或者觸動那麼方便,並且由於是基於空間id進行控制,並不大適合 游戲 。
其他解決方案:
其實還有其他非常多的類似的解決方案,但是大多數都沒上面列舉的這些被人熟知。
舉個例子像python也擁有非常豐富的類庫,但是只能適應使用usb連接手機的通過adb進行控制這樣的操作,無法生成一個apk來安裝到手機中進行操作,我也曾嘗試過在手機中模擬一個python環境,但是依賴的類庫無法非常方便的移植到手機中,就算靜態編譯過去也非常的耗時,所以python也能實現但是他很不友好,也很不方便,學習成本也非常高。