標籤:

用Python進行基礎的數據分析

簡單的一個數據分析過程。主要包括以下內容:

1、數組(一維、二維)的創建、查詢、刪除重複項、重命名、計算、處理缺失值、分列、類型轉換、排序

2、理解數據及計算相關指標。以藥店銷售數據為例,計算月均消費次數、月均消費金額及客單價

一、一維數組

numpy:array【類似於List,與List差別為:array可以對數組進行運算(向量之間的加減乘除以及一些統計功能),而列表不能】

#1.1.1建立:

a = np.array([1,2,3,4,5])b = np.array([1,2,3,4])

#1.1.2數組計算:

#僅可以對數據長度一致的數組進行運算,若計算a+b,則會報錯!

print (a+a)print (a.mean())等

#1.1.3數據切片訪問

#查找a中某個位置的元素:(比如第一個元素)

a[0]

Q:根據值查找該值在數組中的位置??

#1.1.4數據類型

a.dtype

pandas:series(建立在numpy之上,相對numpy多了索引功能)

#1.2.1建立:

a = pd.Series([1,2,3,4,5],["A","B","C","D","E"])b = pd.Series([1,2,3,4,5],["A","F","C","G","E"])

#1.2.2切片訪問數據

print (a.iloc[2])#根據位置查找print (a.loc[D])#根據索引查找

#1.2.3數組之間的運算

c = a+b#無共同索引的將缺失值

#1.2.4缺失值的處理

#A.去除缺失值c.dropna()#B.將無共同索引的缺失值進行填充c = a.add(b,fill_value = 0)

二、二維數組

numpy

#2.1.1建立

a = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,0]])

#2.1.2返回特定位置的數值

print (第三行第一列的數值為:,a[2,0])print (第三行的數值為:,a[2,:])print (第三列的數值為:,a[:,2])

#2.1.3計算

print (均值:,a.mean())print (每一行的均值:,a.mean(axis = 1))#每一列則axis=0print (第一行的均值為:,a[0,:].mean())

pandas(相比較array優點有:1.每一列可以為不同的數據類型;2.可以有索引)

#2.2.1建立

#由於懶,直接導入Excel的數據(如果導入表格名正好有、
等記得在前面加多一個)import xlrdfilename = F:朝陽醫院銷售.xlsxxls = pd.ExcelFile(filename)salesDF = xls.parse(Sheet1)

#2.2.2定義一個有序的數據框

from collections import OrderedDictdataOD = OrderedDict(salesDF)salesDF = pd.DataFrame(dataOD)print (salesDF.head())

#2.2.3計算

print(salesDF.mean())

#2.2.4切片工具返回數值

print(salesDF.loc[5,社保卡號])print(salesDF.loc[0,:])print(salesDF.loc[:,購葯時間:商品編碼].head())

#2.2.5重命名列名

renameDic = {購葯時間:銷售時間}salesDF.rename(columns = renameDic, inplace = True)#inplace = TRUE則會在原數據框中進行修改print(salesDF.head())

#2.2.6刪除缺失值

salesDF = salesDF.dropna(subset = [銷售時間,社保卡號],how = any)#對指定列中出現的缺失值進行刪除print (salesDF.shape)

#2.2.7修改數據類型

#由於一開始將導入的數據默認為字元型類型,而實際操作中購買數量及金額應該為數值型,所以要對相對應的列進行數據類型的轉換salesDF[銷售數量] = salesDF[銷售數量].astype(float)salesDF[應收金額] = salesDF[應收金額].astype(float)salesDF[實收金額] = salesDF[實收金額].astype(float)print (salesDF.dtypes)

#2.2.8數據分列

#將日期列進行分列得出所需的日期

def timeSplit(time): a = [] for value in time: timedata = value.split( )[0] a.append(timedata) b = pd.Series(a) return bsalesDF[銷售時間] = timeSplit(salesDF[銷售時間])print(salesDF.head())print(salesDF.dtypes)salesDF.loc[:,銷售時間] = pd.to_datetime(salesDF.loc[:,銷售時間], format = %Y-%a-%d, errors = coerce)print(salesDF.dtypes)

#2.2.9排序

#根據某一個欄位進行排序,True表示降序,False表示升序

salesDF = salesDF.sort_values(by = 銷售時間, ascending = True)print (salesDF)

#2.2.10重新排序索引

salesDF = salesDF.reset_index(drop = True)

#2.2.11獲取整個數據框的描述統計信息

salesDF.describe()

#2.2.12條件查詢

#通過條件查找數據,找出銷量為負的數據

querySer = salesDF.loc[:,銷售數量]<0#輸出的querySer為布爾類型的值a = salesDF.loc[querySer,:]print (a)

#2.2.13刪除重複項

#刪除銷售時間以及社保卡號重複的數據

Tsalestime = salesDF.drop_duplicates(subset = [社保卡號,銷售時間])T = Tsalestime.shape[0]#得出刪除後的數據量Tsalestime = Tsalestime.sort_values(by = 銷售時間, ascending = True)#排序

三、數據分析計算

#首先對需要的數據進行理解,知道計算的方式邏輯:

Tsalestime = Tsalestime.reset_index(drop = True)#重新排首列的順序starttime = Tsalestime.loc[0,銷售時間]#起始時間endtime = Tsalestime.loc[T-1,銷售時間]#結束時間salesmonth = ((endtime - starttime).days)//30#總共經過幾個月

#月均消費次數

avgsalesT = T//salesmonth()

#月均消費金額

avgsales = (salesDF.loc[:,實收金額].sum())/salesmonthprint(avgsales)

#計算產品的客單價(每個顧客門店消費的平均金額)

avgprice = salesDF.loc[:,實收金額].sum()/T

推薦閱讀:

機器學習的學習筆記(0)
基於新浪微博的男女性擇偶觀數據分析
利用Pandas進行醫院銷售數據分析
mysql查詢初級 50道練習題(語句親測無錯)

TAG:數據分析 |