❶ python 排列組合
以上四種情況均為最常見的排列組合,從有無順序和是否重復兩個維度進行思考,建議理解並背誦。
在使用python計算排列組合之前,需要計算階乘,可以有兩種方式,一是使用math庫中的factorial函數,二是使用如下的遞歸函數。
按照排列的公式:
按照組合的公式:
3.1 生日問題
假設一個班級中共有n個人,一年有365天,其中每天作為生日的概率是相等的,那麼其中至少有兩個人的生日在同一天的概率是多少?
此題屬於全排列問題,需要反向思考,寫出公式之後直接輸入到python中計算
3.2 大樂透問題
大樂透的玩法是這樣的,從35個紅球中選擇5個,從12個紅球中選擇2個,如果全中,那就中一等獎。那麼請問,中一等獎的概率是多少?
此題屬於組合問題,中獎的可能性為一種,因此分子為1,分母為所有的組合情況。
❷ 如何用python編寫排列組合
importmath
importrandom
oTemp=[]
oList=[]
i=0
whileTrue:
a=random.randint(1,4)
ifainoTemp:
continue
else:
oTemp.append(a)
i+=1
ifi%4==0:
Num=oTemp[0]*1000+oTemp[1]*100+oTemp[2]*10+oTemp[3]
ifNuminoList:
i=0
oTemp=[]
continue
else:
oList.append(Num)
i=0
oTemp=[]
iflen(oList)==24:
break
forminoList:
forninrange(2,int(math.sqrt(m))+1):
ifm%n==0:
oList.remove(m)
break
printoList
這段代碼是用1-4生成4位數,4個位上的數字不相同的素數。可以做下參考
❸ Python數據分析案例-葯店銷售數據分析
最近學習了Python數據分析的一些基礎知識,就找了一個葯品數據分析的小項目來練一下手。
數據分析的目的:
本篇文章中,假設以朝陽醫院2018年銷售數據為例,目的是了解朝陽醫院在2018年裡的銷售情況,通過對朝陽區醫院的葯品銷售數據的分析,了解朝陽醫院的患者的月均消費次數,月均消費金額、客單價以及消費趨勢、需求量前幾位的葯品等。
數據分析基本過程包括:獲取數據、數據清洗、構建模型、數據可視化以及消費趨勢分析。
數據准備
數據是存在Excel中的,可以使用pandas的Excel文件讀取函數將數據讀取到內存中,這里需要注意的是文件名和Excel中的sheet頁的名字。讀取完數據後可以對數據進行預覽和查看一些基本信息。
獲取數據:朝陽醫院2018年銷售數據.xlsx(非真實數據) 提取碼: 6xm2
導入原始數據
數據准備
數據是存在Excel中的,可以使用pandas的Excel文件讀取函數將數據讀取到內存中,這里需要注意的是文件名和Excel中的sheet頁的名字。讀取完數據後可以對數據進行預覽和查看一些基本信息。
獲取數據:朝陽醫院2018年銷售數據.xlsx(非真實數據) 提取碼: 6xm2
導入原始數據
數據清洗
數據清洗過程包括:選擇子集、列名重命名、缺失數據處理、數據類型轉換、數據排序及異常值處理
(1)選擇子集
在我們獲取到的數據中,可能數據量非常龐大,並不是每一列都有價值都需要分析,這時候就需要從整個數據中選取合適的子集進行分析,這樣能從數據中獲取最大價值。在本次案例中不需要選取子集,暫時可以忽略這一步。
(2)列重命名
在數據分析過程中,有些列名和數據容易混淆或產生歧義,不利於數據分析,這時候需要把列名換成容易理解的名稱,可以採用rename函數實現:
(3)缺失值處理
獲取的數據中很有可能存在缺失值,通過查看基本信息可以推測「購葯時間」和「社保卡號」這兩列存在缺失值,如果不處理這些缺失值會干擾後面的數據分析結果。
缺失數據常用的處理方式為刪除含有缺失數據的記錄或者利用演算法去補全缺失數據。
在本次案例中為求方便,直接使用dropna函數刪除缺失數據,具體如下:
(4)數據類型轉換
在導入數據時為了防止導入不進來,會強制所有數據都是object類型,但實際數據分析過程中「銷售數量」,「應收金額」,「實收金額」,這些列需要浮點型(float)數據,「銷售時間」需要改成時間格式,因此需要對數據類型進行轉換。
可以使用astype()函數轉為浮點型數據:
在「銷售時間」這一列數據中存在星期這樣的數據,但在數據分析過程中不需要用到,因此要把銷售時間列中日期和星期使用split函數進行分割,分割後的時間,返回的是Series數據類型:
此時時間是沒有按順序排列的,所以還是需要排序一下,排序之後索引會被打亂,所以也需要重置一下索引。
其中by:表示按哪一列進行排序,ascending=True表示升序排列,ascending=False表示降序排列
先查看數據的描述統計信息
通過描述統計信息可以看到,「銷售數量」、「應收金額」、「實收金額」這三列數據的最小值出現了負數,這明顯不符合常理,數據中存在異常值的干擾,因此要對數據進一步處理,以排除異常值的影響:
數據清洗完成後,需要利用數據構建模型(就是計算相應的業務指標),並用可視化的方式呈現結果。
月均消費次數 = 總消費次數 / 月份數(同一天內,同一個人所有消費算作一次消費)
月均消費金額 = 總消費金額 / 月份數
客單價 = 總消費金額 / 總消費次數
從結果可以看出,每天消費總額差異較大,除了個別天出現比較大筆的消費,大部分人消費情況維持在1000-2000元以內。
接下來,我銷售時間先聚合再按月分組進行分析:
結果顯示,7月消費金額最少,這是因為7月份的數據不完整,所以不具參考價值。
1月、4月、5月和6月的月消費金額差異不大.
2月和3月的消費金額迅速降低,這可能是2月和3月處於春節期間,大部分人都回家過年的原因。
d. 分析葯品銷售情況
對「商品名稱」和「銷售數量」這兩列數據進行聚合為Series形式,方便後面統計,並按降序排序:
截取銷售數量最多的前十種葯品,並用條形圖展示結果:
結論:對於銷售量排在前幾位的葯品,醫院應該時刻關注,保證葯品不會短缺而影響患者。得到銷售數量最多的前十種葯品的信息,這些信息也會有助於加強醫院對葯房的管理。
每天的消費金額分布情況:一橫軸為時間,縱軸為實收金額畫散點圖。
結論: 從散點圖可以看出,每天消費金額在500以下的占絕大多數,個別天存在消費金額很大的情況。
</article>
❹ Python實現的排列組合計算操作示例
Python實現的排列組合計算操作示例
本文實例講述了Python實現的排列組合計算操作。分享給大家供大家參考,具體如下:
1. 調用 scipy 計算排列組合的具體數值
>> from scipy.special import comb, perm
>> perm(3, 2)
6.0
>> comb(3, 2)
3.0
2. 調用 itertools 獲取排列組合的全部情況數
>> from itertools import combinations, permutations
>> permutations([1, 2, 3], 2)
<itertools.permutations at 0x7febfd880fc0>
# 可迭代對象
>> list(permutations([1, 2, 3], 2))
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
>> list(combinations([1, 2, 3], 2))
[(1, 2), (1, 3), (2, 3)]