python分析患者資料:pandas 和matplotlib
使用python進行資料清洗及視覺化
今天第一次使用pandas和matplotlib處理資料,以下紀錄一些使用心得:
1、首先第一步就是要匯入一些使用包:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
要把csv或者excel檔案讀取出來:
pa = pd.read_csv('E:/練習資料/patient.csv')
這裡需要注意,我們直接複製出來的檔案路徑格式一般都是 \ ,這裡我們要轉換成 / ;
2 、由於我的檔案列數過多,所以在notebook中顯示不完全,如果要顯示所有列,那就需要在開頭進行一些設定:
pd.set_option('display.max_columns',None)
主要用到的就是set_option方法,具體用法可以參考其他文章;
3、之後就進入到了資料清理階段:
首先刪除不需要的列:
pa.drop(['病人卡號','病人姓名','省份','城市','諮詢醫生','型別','type_message'], axis=1, inplace=True)
這裡使用drop方法,引數方面axis預設為0,是刪除行,置為1是刪除列,inplace引數表示是否需要把處理之後的資料替換掉原來的資料;
另外一種刪除方法是刪除連續的多列:
pa.drop(pa.columns[8:30],axis=1,inplace=True)
這裡使用了索引,表示刪除第8到30列;
把幾列拿出來求和,得到新的列在加入的表中,這種使用場景比如說計算每個學生各科的總分:
sum_columns = pa.iloc[:,8:30]
def f(x):
return x.sum()
feiyong = sum_columns.apply(f,axis=1)
pa['總費用'] = feiyong
這部分牽涉到的知識點:iloc的使用、apply函式的使用、還有如何增加一列新的數值到表中,算是稍微複雜點的應用了;
數值的替換都可以用replace:
pa = pa.replace(['初診','複診'],[1,0]) pa = pa.replace(['自然門診'],['企劃'])
更改列明要用到rename:
pa.rename(columns={'諮詢人員':'醫生'},inplace=True)
裡面要傳入columns和inplace作為引數;
還有一個重要的知識點就是把一列分成兩列,再新增到表中:
bingzhong = pa.病種.str.split('-',expand=True)
bingzhong.columns = ['大病種','小病種']
#資料清洗 新增兩列到原來的表中
pa = pa.join(bingzhong)
這裡用到的是str.split,裡面兩個引數,第一個是使用什麼符號來分裂,這個符號必須是每一個數據都包含的,之後要給兩個新的列新增列名,之後使用join把新的Dataframe新增到原來的表中。
分組統計:
zhuzhuang = pa.groupby(by=['醫院'])['總費用'].sum().sort_values(ascending=False)
cz1 = pa.groupby(by=['醫院'])['初複診','總費用'].sum() #統計兩列
使用groupyby裡面要傳入by引數,後面可以做統計,然後排序,這個引數後來會成為Series中的index,如果要把得到的Series轉化成Dataframe可以使用下面這個函式
cz1 = cz1.reset_index() #把groupy之後生成的series變成dataframe
對某一列的值進行加減乘除運算:
cz1['總費用']=cz1['總費用']/10000
使用round設定儲存幾位小數:
cz1 = cz1.round({'總費用':0}) #對某一列保留幾位小數
資料篩選:
cz2 = cz1[(cz1.初複診>100)&(cz1.總費用>1)]
3、資料視覺化
- 折線圖
zhexian.plot(figsize=(12,6))
plt.xticks(fontsize=10)
plt.xlabel('Datatime')
plt.ylabel('Money')
plt.title('money of datatime')
plt.show()
直接使用.plot,預設就是折線圖,figsize引數可以指定畫出的圖片大小,xticks主要設定座標軸的顯示,比如說字號,xlabel,ylabel,title分別設定標題;
- 柱狀圖
zhuzhuang.plot(kind='bar',figsize=(15,8))
plt.xticks(rotation=45,fontsize=15)
plt.yticks(fontsize=14)
plt.show()
除了figsize引數之外還傳進去一個kind表示影象的型別‘bar’表示柱狀圖,
- 散點圖
fig, ax = plt.subplots()
ax.scatter(cz2['初複診'],cz2['總費用'])
ax.set_xlabel('nums')
ax.set_ylabel('money')
ax.set_title('Hahahha Wocao')
plt.show()
這裡使用一個新的畫圖方法ax,散點圖要傳進去兩列數值,來描述兩列的關係,設定圖名稱的方式也和之前有所不同
- 箱線圖
fig, ax = plt.subplots()
ax.boxplot(cz2['總費用'])
plt.show()
箱線圖描述一列資料中,資料分佈情況。
以上就是這部分的內容,後續再學習中繼續補充。