1. python matplotlib數據作圖
一、使用numpy生成長度為100的等差序列作為自變數,命名為x,並使用三角函數SiNx和cosx**2生成兩個因變數,命名為y和Z。
2. python這個怎麼繪圖
importmatplotlib.pyplotasplt
#plt.rcParams['font.sas-serig']=['SimHei']#用來正常顯示中文標簽
x=['第一產業','第二產業','第三產業',]
plt.ylabel('項目')
plt.xlabel(x,fontproperties="SimHei")#或者這樣來顯示中文
x_=['1','2','3']
y=[24171.0,23170,29636]
y1=[22790,23099,31364]
y2=[21919,22693,32839]
y3=[21496,22350,33757]
y4=[20944,21824,34872]
plt.xticks([])#隱藏坐標
plt.plot(x_,y,x_,y1,x_,y2,x_,y3,x_,y4)
plt.show()
底下的那個坐標我不知道具體多少,所以做了個大概的以供參考哦
3. python matplot 的xticks怎麼用
y軸默認會有數值,你是需要自定義嗎可以使用yticks函數,第一個參數是y軸的位置,第二個參數是具體標簽importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,6)y=x*xplt.plot(x,y,marker='o')plt.yticks(y,['a','b','c','d','e','f'])
4. 利用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.消費習慣上,高消費玩家對象牙和通用加速券的需求遠多於一般玩家。
5. python中plot怎麼設置橫縱坐標名稱
用plot畫二維圖像時,默認情況下的橫坐標和縱坐標顯示的值有時達不到自己的需求,需要藉助xticks()和yticks()分別對橫坐標x-axis和縱坐標y-axis進行設置。
import numpy as np
import matplotlib.pyplot as plt
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.show()
此時的x軸和y軸都是只顯示偶數,其它的奇數未顯示,這樣在展示實驗效果或放入文章中都會影響其可讀性。
為了設置坐標軸的值,增加其可讀性,有多種方法。這里介紹的是matplotlib的函數xticks()和yticks()。
(5)pythonxticks函數擴展閱讀
基本用法:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 生成x軸上的數據:從-3到3,總共有50個點
x = np.linspace(-1, 1, 50)
# 定義一個線性方程
y1 = 2 * x + 1
# 定義一個二次方程
y2 = x ** 2
# 設置x軸的取值范圍為:-1到2
plt.xlim(-1, 2)
# 設置y軸的取值范圍為:-1到3
plt.ylim(-1, 3)
# 設置x軸的文本,用於描述x軸代表的是什麼
plt.xlabel("I am x")
# 設置y軸的文本,用於描述y軸代表的是什麼
plt.ylabel("I am y")
plt.plot(x, y2)
# 繪制紅色的線寬為1虛線的線條
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
# 顯示圖表
plt.show()
6. 如何用python取圖片輪廓
1、查找輪廓(find_contours)
measure模塊中的find_contours()函數,可用來檢測二值圖像的邊緣輪廓。
函數原型為:
skimage.measure.find_contours(array,level)
array: 一個二值數組圖像
level: 在圖像中查找輪廓的級別值
返回輪廓列表集合,可用for循環取出每一條輪廓。
例1:
importnumpyasnp
importmatplotlib.pyplotasplt
fromskimageimportmeasure,draw
#生成二值測試圖像
img=np.zeros([100,100])
img[20:40,60:80]=1#矩形
rr,cc=draw.circle(60,60,10)#小圓
rr1,cc1=draw.circle(20,30,15)#大圓
img[rr,cc]=1
img[rr1,cc1]=1
#檢測所有圖形的輪廓
contours=measure.find_contours(img,0.5)
#繪制輪廓
fig,(ax0,ax1)=plt.subplots(1,2,figsize=(8,8))
ax0.imshow(img,plt.cm.gray)
ax1.imshow(img,plt.cm.gray)
forn,contourinenumerate(contours):
ax1.plot(contour[:,1],contour[:,0],linewidth=2)
ax1.axis('image')
ax1.set_xticks([])
ax1.set_yticks([])
plt.show()
結果如下:不同的輪廓用不同的顏色顯示
7. python 離x軸距離
python離x軸距離為0。bottom決定了柱子距離x軸的高度默認為None,即表示與x軸距離為0,我們在調用xlim的時候只是限制了x軸的結果並沒有限制y軸,所以畫出來y軸的范圍還是之前數據的范圍。
python離x軸的畫圖方法
xlim能夠設置的基本上只有坐標軸的范圍,而xticks和yticks既可以設置范圍也可以設置每個刻度之間的間距,我們x軸的范圍是負10到10,在默認的圖像當中系統幫我們選擇的間距是2點5,即每隔2點5畫一個坐標點一共畫8個,我們直接在xticks當中放入了一個list。
最後我們畫出來的圖像的x軸就是根據這個list進行劃分的,也就是說我們不僅可以定義坐標軸的范圍還可以定義它的間隔。有的時候自動繪制出來的圖像的范圍以及間隔可能沒有那麼好,需要我們進行調整,這時候就需要用到xticks和yticks函數了。
8. python讀取txt文件轉化為折線圖後怎麼實現濾波器
需要安裝matplotlib庫,可以用如下命令安裝:
pip install matplotlib
1
txt文本數據如下所示(示例中的每一行內部用空格分開):
100 0.6692215
200 0.57682794
300 0.45037615
400 0.42214713
500 0.45073098
600 0.4728373
700 0.48083866
800 0.3751492
900 0.4249844
1000 0.36427215
1100 0.36209464
1200 0.40490758
1300 0.3774191
1400 0.34719718
1500 0.3648946
1600 0.261855
1700 0.4321903
1800 0.35071397
1900 0.279996
2000 0.30030474
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
適用於Python3的代碼如下所示:
import matplotlib.pyplot as plt
input_txt = 'demo.txt'
x = []
y = []
f = open(input_txt)
for line in f:
line = line.strip('\n')
line = line.split(' ')
x.append(float(line[0]))
y.append(float(line[1]))
f.close
plt.plot(x, y, marker='o', label='lost plot')
plt.xticks(x[0:len(x):2], x[0:len(x):2], rotation=45)
plt.margins(0)
plt.xlabel("train step")
plt.ylabel("lost")
plt.title("matplotlip plot")
plt.tick_params(axis="both")
plt.show()
9. python matplot 的xticks怎麼用
主要使用的是bar函數 效果還不錯吧~ import matplotlib.pyplot as pltimport numpy as npplt.rc('font', family='SimHei', size=13)num = np.array([13325, 9403, 9227, 8651])ratio = np.array([0.75, 0.76, 0.72, 0.75])men = num * ratiowome...
10. python畫正餘弦函數圖像
用python怎樣畫出如題所示的正餘弦函數圖像? 如此編寫代碼,使其中兩個軸、圖例、刻度,大小,LaTex公式等要素與原圖一致,需要用到的代碼如下,沒有縮進:
#-*-codeing:utf-8;-*-
from matplotlib import pyplot as plt
import numpy as np
a=np.linspace(0,360,980)
b=np.sin(a/180*np.pi)
c=np.cos(a/180*np.pi)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim([0, 360])
ax.plot(a,b,label=r"$y=sin( heta)$")
ax.plot(a,c,label=r"$y=cos( heta)$")
ax.grid(True)
ax.set_ylabel(r"$y$")
ax.set_xlabel(r"$ heta$")
plt.xticks(np.arange(0,360+1,45))
plt.title("Sine & Cosine Waves")
plt.legend()
plt.savefig("SinCosWaveDegFont.jpg")
plt.show()
代碼輸出的文件的圖