1. 程式人生 > >python分析患者資料:pandas 和matplotlib

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()

箱線圖描述一列資料中,資料分佈情況。

以上就是這部分的內容,後續再學習中繼續補充。