導航:首頁 > 編程語言 > python餅形圖編程

python餅形圖編程

發布時間:2023-09-25 11:53:41

❶ 如何用python繪制各種圖形

1.環境

系統:windows10

python版本:python3.6.1

使用的庫:matplotlib,numpy

2.numpy庫產生隨機數幾種方法

import numpy as np
numpy.random

rand(d0,d1,...,dn)

In [2]: x=np.random.rand(2,5)

In [3]: x
Out[3]:
array([[ 0.84286554, 0.50007593, 0.66500549, 0.97387807, 0.03993009],
[ 0.46391661, 0.50717355, 0.21527461, 0.92692517, 0.2567891 ]])

randn(d0,d1,...,dn)查詢結果為標准正態分布

In [4]: x=np.random.randn(2,5)

In [5]: x
Out[5]:
array([[-0.77195196, 0.26651203, -0.35045793, -0.0210377 , 0.89749635],
[-0.20229338, 1.44852833, -0.10858996, -1.65034606, -0.39793635]])

randint(low,high,size)

生成low到high之間(半開區間 [low, high)),size個數據

In [6]: x=np.random.randint(1,8,4)

In [7]: x
Out[7]: array([4, 4, 2, 7])

random_integers(low,high,size)

生成low到high之間(閉區間 [low, high)),size個數據

In [10]: x=np.random.random_integers(2,10,5)

In [11]: x
Out[11]: array([7, 4, 5, 4, 2])

3.散點圖

x x軸
y y軸
s 圓點面積
c 顏色
marker 圓點形狀
alpha 圓點透明度#其他圖也類似這種配置
N=50# height=np.random.randint(150,180,20)# weight=np.random.randint(80,150,20)
x=np.random.randn(N)
y=np.random.randn(N)
plt.scatter(x,y,s=50,c='r',marker='o',alpha=0.5)
plt.show()

8.箱型圖

import matplotlib.pyplot as pltimport numpy as npdata=np.random.normal(loc=0,scale=1,size=1000)#sym 點的形狀,whis虛線的長度plt.boxplot(data,sym="o",whis=1.5)plt.show()
#sym 點的形狀,whis虛線的長度

❷ python怎麼畫餅形圖

matplotlib包的pie函數可以繪制餅形圖

importmatplotlib.pyplotasplt

x=[0.2,0.3,0.5]
labels=['China','Japan','America']
plt.pie(x,labels=labels,labeldistance=0.5)

❸ Python的matplotlib怎麼在一張畫布上,畫兩個餅狀圖啊

%matplotlibinline
importmatplotlib.pyplotasplt

#121>1行2列第1個
fig1=plt.subplot(121)
plt.pie([1,2,3])
#122>1行2列第2個
fig2=plt.subplot(122)
plt.pie([10,5,5])

#亦可以plt.subplot(221)2行2列第1個

❹ Python 數據可視化:繪制箱線圖、餅圖和直方圖

上一課介紹了柱形圖和條形圖,本課將介紹另外幾種統計圖表。

Box Plot 有多種翻譯,盒須圖、盒式圖、盒狀圖或箱線圖、箱形圖等,不管什麼名稱,它的基本結構是這樣的:

這種圖是由美國著名統計學家約翰·圖基(John Tukey)於 1977 年發明的,它能顯示出一組數據的上限、下限、中位數及上下四分位數。

為了更深入理解箱線圖的含義,假設有這樣一組數據:[1, 3, 5, 8, 10,11, 16, 98 ],共有 8 個數字。

首先要計算箱線圖中的「四分位數」,注意不是 4 個數:

對於已經排序的數據 [1, 3, 5, 8, 10,11, 16, 98 ],下四分位數(Q1)的位置是數列中從小到大第 2.25 個數,當然是不存在這個數字的——如果是第 2 個或者第 3 個,則存在。但是,可以用下面的原則,計算出此位置的數值。

四分位數等於與該位置兩側的兩個整數的加權平均數,此權重取決於相對兩側整數的距離遠近,距離越近,權重越大,距離越遠,權重越小,權數之和等於 1。

根據這個原則,可以分別計算本例中數列的 3 個四分位數。

在此計算基礎上,還可以進一步計算四分位間距和上限、下限的數值。

先看一個簡單示例,了解基本的流程。

輸出結果:

這里繪制了兩張箱線圖,一張沒有顯示平均值,另外一張顯示了平均值,所使用的方法就是 boxplot,其完整參數列表為:

參數很多,不要擔心記憶問題,更別擔心理解問題。首先很多參數都是可以「望文生義」的,再有,與以前所使用的其他方法(函數)的參數含義也大同小異。

輸出結果:

所謂的「凹槽」,不是簡單形狀的改變,左右折線的上限區間表示了數據分布的置信區間,橫線依然是上限和下限。

❺ 數據蛙-Python進階

這是漫長的一周,本周完成了Python的進階模塊,主要是pandas、numpy、matplotlib、seaborn、pyecharts這些模塊的學習以及一個實際的案例:商品銷售情況分析,之前一直覺得課程難度不夠,但到這一周難度就大大提高了。尤其是案例練習中的RFM模型和用戶生命周期建立,看懂不難但是自差首己寫一直出錯,在不斷出錯不斷嘗試中知識得到了積累,另外可視化部分沒有什麼練習題,希望後面可以加上一些這方面的練習,接下來分模塊來總結一下學習的內容。

重新設置索引:df.set_index()

Series格式轉換為DataFrame:df.to_frame()

文件讀取:pd.read_csv(filepath, header = 0,skiprows=[1,2]) 

使用位禪慶源置做索引:df.loc[0]        使用列表做索引:df.loc[[0,1,2]]

使用切片做索引:df.loc[0:4]        使用bool類型索引:df[df['年齡']>30]

loc 是基於索引值的,切片是左閉右閉的

iloc 是基於位置的,切片是左閉右開的

修改列索引:df.rename(columns={'姓名':'name', '年齡':'age'},inplace=True)

替換一個值:df.replace({'name':{'小明':'xiaoming'}},inplace=True)

對數據進行排序:df.sort_values('age')

累加求和:df.cumsum(0)

刪除列:del df['player']         刪除行:df.drop(labels=0) labels 是行列的名字

數據拼接:pd.concat([left,right],axis=1)

# 指定列進行關聯,默認是 inner join     result = pd.merge(left,right,on='key')

#多個關聯條件:result = pd.merge(left, right, on=['key1', 'key2'])

#左連接:result = pd.merge(left, right, how='left', on=['key1', 'key2'])

# 列名不一樣的關聯:pd.merge(left,right,left_on = ['key1','key2'],right_on = ['key3','key4'])

#單個分組:groups = df.groupby('district')

# 作用多個聚合函數:groups.agg([np.mean,np.sum,np.std])

# 針對具體列聚合 groups.age.agg([np.mean,np.sum,np.std])

# 不同列不同聚合函數 groups.agg({"age":np.mean,"novip_buy_times":np.sum})

分組後該列值求和顯示:groups['vip_buy_times'].transform('sum')

通常用於求佔比:transform(lambda x: x /sum(x))

# 填充指定值:np.full([3,4],1)

# 起始為10,5為步長,30為結賀態尾取不到:np.arange(10, 30, 5)

#隨機矩陣:np.random.random((2,3))

# 平均劃分:np.linspace( 0, 2*pi, 100 )

# 類型及轉換:vector.astype('float')

# 多維變一維:matrix.ravel()

# 矩陣的擴展:a = np.arange(0, 40, 10)    b = np.tile(a, (3, 5))    # 行變成3倍,列變成5倍

# 水平拼接:np.hstack((a,b))  豎直拼接:np.vstack((a,b))

# 豎直分割:np.hsplit(a,3)    #水平分割:np.vsplit(a,3)

8. Select the data in rows [3, 4, 8] and in columns ['animal', 'age'].

A:df.loc[df.index[[3,4,8]],['animal','age']]

行採用位置,列採用普通索引,這里利用index函數將位置變化為具體的普通索引,再利用loc函數

19. The 'priority' column contains the values 'yes' and 'no'. Replace this column with a column of boolean values: 'yes' should be True and 'no' should be False

A1:df['priority'].replace(['yes','no'],[True,False],inplace=True) 用replace函數替換

A2:df['priority'] = df['priority'].map({'yes': True, 'no': False}) 用map函數替換

最大最小值的索引:df.idxmax、df.idxmin

找出最大最小的前N個數:nlargest()和nsmallest() 

將原表分組 並設置分段區間 pd.cut(df['A'], np.arange(0, 101, 10))

resample函數 日期重采樣:s.resample('M').mean()

TimeGrouper 重組:s.groupby(pd.TimeGrouper('4M')).idxmax()

split 分割函數:temp = df['From_To'].str.split('_', expand=True) True為DataFrame

兩個DataFrame拼接用join:df = df.join(temp)

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽

plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號

%matplotlib inline 直接顯示

折線圖:plt.plot(x,y,color = 'r')

柱狀圖:plt.bar(x,y)  plt.barh(x,y) 多個bar x設置不同 堆積圖 bottom設置不同

散點圖:plt.scatter(x, y, c=colors, alpha=0.5, s = area)

直方圖:plt.hist(a,bins= 20) bin代表分隔的最小單位

plt.legend() 顯示圖例

for a,b in zip(X+W[i],data[i]):

    plt.text(a,b,"%.0f"% b,ha="center",va= "bottom") 添加數據標簽

plt.annotate('注釋文本',xy=(1, np.sin(1)),xytext=(2, 0.5), fontsize=16,arrowprops=dict(arrowstyle="->")) 添加註釋文本

plt.xlabel("Group") x軸標題

plt.ylabel("Num") y軸標題

fig, axes = plt.subplots(nrows=2, ncols=2,facecolor='darkslategray')  繪制多個圖形

axes[0,0] axes[0,1] axes[1,0] axes[1,1]

pylab.rcParams['figure.figsize'] = (10, 6) # 調整圖片大小

動態展示圖表

from pyecharts.charts import Bar

from pyecharts import options as opts

** pyecharts 繪圖的五個步驟:**

創建圖形對象:bar = Bar()

添加繪圖數據:bar.add_xaxis(["襯衫", "毛衣", "領帶", "褲子", "風衣", "高跟鞋", "襪子"])

                         bar.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])

                         bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])

配置系列參數:對標簽、線型等的一些設置

配置全局參數:bar.set_global_opts(title_opts=opts.TitleOpts(title="銷售情況"))

渲染圖片:生成本地 HTML 文件 bar.render("mycharts.html")  bar.render()

notebook 渲染:bar.render_notebook()

bar = (Bar()

    .add_xaxis(["襯衫", "毛衣", "領帶", "褲子", "風衣", "高跟鞋", "襪子"])

    .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])

    .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])

    .set_global_opts(title_opts=opts.TitleOpts(title="某商場銷售情況"))

)

bar.render_notebook()

柱狀圖:Bar()

條形圖:bar.reversal_axis() #翻轉XY軸,將柱狀圖轉換為條形圖

折線圖:from pyecharts.charts import Line  line=Line()

餅圖:from pyecharts.charts import Page, Pie    Pie() 

轉換日期類型:df['order_dt']=pd. to_datetime (df.order_dt,format="%Y%m%d")

將日期轉換為月為單位:df['month']=df.order_dt.values. astype('datetime64[M]') 所有日期顯示為當月第一天

去除日期單元值:order_diff/ np.timedelta64(1,'D')

過濾部分極值:grouped_user.sum() .query('order_procts<100') .order_amount

數據透視表:rfm=df.pivot_table( index ='user_id', values =['order_procts','order_amount'], aggfunc ={'order_amount':'sum','order_procts':'sum'})

map() 方法是pandas.series.map()方法, 對DF中的元素級別的操作, 可以對df的某列或某多列

applymap(func) 也是DF的屬性, 對整個DF所有元素應用func操作

purchase_r=pivoted_counts.applymap(lambda x: 1 if x>1 else np.NaN if x==0 else 0)

apply(func) 是DF的屬性, 對DF中的行數據或列數據應用func操作,也可用於Series

apply(lambda x:x.cumsum()/x.sum())    累計佔比

apply(lambda x:x/x.sum(),axis=0)     每一列中每行數據佔比

下周開始進入數據分析思維的課程,很期待後面的課程以及項目,加油!

閱讀全文

與python餅形圖編程相關的資料

熱點內容
dedecmsphp文件修改 瀏覽:533
貸款解壓省內都可以辦理嗎 瀏覽:469
思科伺服器如何發布www任務 瀏覽:682
怎麼在蘋果裡面下王者安卓版的 瀏覽:686
c語言改編程序沒保存 瀏覽:437
msdos編譯教程 瀏覽:978
怎麼去文件夾後綴 瀏覽:445
粉筆app筆試真題在哪裡 瀏覽:108
晉江小說閱讀app怎麼注冊填寫驗證 瀏覽:157
安卓手機如何將手機app安裝到u盤 瀏覽:520
指針編譯在哪運行 瀏覽:810
dnf大槍壓縮補丁 瀏覽:355
linux命令env 瀏覽:914
浙江app遙控鎖哪裡有 瀏覽:708
qq別人加密了怎樣才能給他解開 瀏覽:253
程序員離職開店 瀏覽:770
excel不能對多重區域使用此命令 瀏覽:969
手機影像演算法盤點 瀏覽:729
反編譯為什麼不能得到源代碼 瀏覽:926
php最流行的框架 瀏覽:191