表1-1healthcare-dataset-stroke.xlsx 部分中風(fēng)患者的基礎(chǔ)信息和體檢數(shù)據(jù)
編號 | 性別 | 高血壓 | 是否結(jié)婚 | 工作類型 | 居住類型 | 體重指數(shù) | 吸煙史 | 中風(fēng) |
9046 | 男 | 否 | 是 | 私人 | 城市 | 36.6 | 以前吸煙 | 是 |
51676 | 女 | 否 | 是 | 私營企業(yè) | 農(nóng)村 | N/A | 從不吸煙 | 是 |
31112 | 男 | 否 | 是 | 私人 | 農(nóng)村 | 32.5 | 從不吸煙 | 是 |
60182 | 女 | 否 | 是 | 私人 | 城市 | 34.4 | 抽煙 | 是 |
1665 | 女 | 是 | 是 | 私營企業(yè) | 農(nóng)村 | 24 | 從不吸煙 | 是 |
56669 | 男 | 否 | 是 | 私人 | 城市 | 29 | 以前吸煙 | 是 |
53882 | 男 | 是 | 是 | 私人 | 農(nóng)村 | 27.4 | 從不吸煙 | 是 |
表二?healthcare-dataset-age-abs.xlsx 部分中風(fēng)患者的年齡和平均血糖數(shù)據(jù)
編號 | 年齡 | 平均血糖 |
9046 | 67 | 228.69 |
51676 | 61 | 202.21 |
31112 | 80 | 105.92 |
60182 | 49 | 171.23 |
1665 | 79 | 174.12 |
56669 | 81 | 186.21 |
53882 | 74 | 70.09 |
10434 | 69 | 94.39 |
27419 | 59 | 76.15 |
60491 | 78 | 58.57 |
實(shí)訓(xùn)1 合并年齡、平均血糖和中風(fēng)患者信息數(shù)據(jù)
1、訓(xùn)練要點(diǎn)
(1) 掌握判斷主鍵的方法
(2) 掌握主鍵合并方法
2、需求分析
某醫(yī)院為了早期監(jiān)測預(yù)警患者的中風(fēng)風(fēng)險(xiǎn),對現(xiàn)有中風(fēng)患者的基礎(chǔ)信息和體檢數(shù)據(jù)(healthcare-dataset-stroke.xls)進(jìn)行分析,觀察發(fā)現(xiàn)患者基礎(chǔ)信息和體檢數(shù)據(jù)中缺少中風(fēng)患者的年齡和平均血糖的信息。另有年齡和平均血糖數(shù)據(jù)(healthcare-dataset-age_abs.xls)存放了分析所需的患者的年齡和平均血糖信息。
(1)讀取兩個數(shù)據(jù)文件,打印前5行結(jié)果進(jìn)行顯示。
# 合并年齡、平均血糖和中風(fēng)患者數(shù)據(jù)
import pandas as pd
df1 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')
df2 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
#(1)讀取兩個數(shù)據(jù)文件,打印前5行結(jié)果進(jìn)行顯示。
print("healthcare-dataset-stroke.xls前5行:")
print(df1.head(5))
print("----------------------------------------")
print("healthcare-dataset-age_abs.xls前5行:")
print(df2.head(5))
(2)利用concat函數(shù)進(jìn)行縱向堆疊,展示‘內(nèi)連接‘、‘外連接’的拼接結(jié)果(前5行即可)。
# 使用concat函數(shù)進(jìn)行縱向堆疊
import pandas as pd
df1 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')
df2 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
# 外連接
df_concat = pd.concat([df1, df2], axis=0, join='outer')
print("縱向堆疊結(jié)果前5行(外連接):")
print(df_concat.head(5))
# 內(nèi)連接
df_concat = pd.concat([df1, df2], axis=0, join='inner')
print("縱向堆疊結(jié)果前5行(內(nèi)連接):")
print(df_concat.head(5))
(3)對兩個數(shù)據(jù)利用‘編號’列作為主鍵進(jìn)行合并,展示合并結(jié)果(前5行即可)
# 使用'編號'列作為主鍵進(jìn)行合并
import pandas as pd
df1 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')
df2 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
df_merge = pd.merge(df1, df2, on='編號', how='inner')
print("合并結(jié)果前5行:")
print(df_merge.head(5))
實(shí)訓(xùn)2?對表格數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗。
需求說明:
基于1中的數(shù)據(jù)
(1)對于表格healthcare-dataset-stroke.xls的信息,使用duplicates函數(shù)對‘工作類型’、‘吸煙史’兩列數(shù)據(jù)進(jìn)行特征去重。
# 對于表格healthcare-dataset-stroke.xls的信息,使用duplicates函數(shù)對‘工作類型’、‘吸煙史’兩列數(shù)據(jù)進(jìn)行特征去重
import pandas as pd
# 讀取數(shù)據(jù)
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')
# 對'工作類型'和'吸煙史'列進(jìn)行去重
df = df.drop_duplicates(subset=['工作類型', '吸煙史'])
# 打印結(jié)果
print(df)
(2)對于表格healthcare-dataset-age_abs.xls的信息,對‘年齡’、‘平均血糖’兩列數(shù)據(jù),使用sum及isnull函數(shù)判斷及統(tǒng)計(jì)缺失值。
# 對于表格healthcare-dataset-age_abs.xls的信息,對‘年齡’、‘平均血糖’兩列數(shù)據(jù),使用sum及isnull函數(shù)判斷及統(tǒng)計(jì)缺失值。
import pandas as pd
# 讀取數(shù)據(jù)
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
# 判斷是否有缺失值
missing_values = df.isnull()
# 統(tǒng)計(jì)缺失值的個數(shù)
missing_count = missing_values.sum()
# 打印結(jié)果
print("缺失值統(tǒng)計(jì):")
print(missing_count)
(3)對‘年齡’列的數(shù)據(jù)使用均值替換其缺失值;對‘平均血糖’列數(shù)據(jù)使用3階多項(xiàng)式進(jìn)行插值。
# (3) 對‘年齡’列的數(shù)據(jù)使用均值替換其缺失值;對‘平均血糖’列數(shù)據(jù)使用3階多項(xiàng)式進(jìn)行插值。
import pandas as pd
import numpy as np
# 讀取數(shù)據(jù)
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
# 計(jì)算年齡的均值
mean_age = df['年齡'].mean()
# 使用均值替換年齡列的缺失值
df['年齡'] = df['年齡'].fillna(mean_age)
# 對平均血糖列進(jìn)行3階多項(xiàng)式插值
df['平均血糖'] = df['平均血糖'].interpolate(method='polynomial', order=3)
# 打印結(jié)果
print(df)
(4)使用3δ原則判斷‘年齡’、‘平均血糖’兩列數(shù)據(jù)中是否存在異常值及異常值的個數(shù)。
import pandas as pd
import numpy as np
# 讀取數(shù)據(jù)
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
# 計(jì)算年齡和平均血糖的均值和標(biāo)準(zhǔn)差
mean_age = df['年齡'].mean()
std_age = df['年齡'].std()
mean_glucose = df['平均血糖'].mean()
std_glucose = df['平均血糖'].std()
# 使用3δ原則判斷是否存在異常值
outliers_age = (np.abs(df['年齡'] - mean_age) > 3 * std_age)
outliers_glucose = (np.abs(df['平均血糖'] - mean_glucose) > 3 * std_glucose)
# 統(tǒng)計(jì)異常值的個數(shù)
num_outliers_age = outliers_age.sum()
num_outliers_glucose = outliers_glucose.sum()
# 打印結(jié)果
print("年齡異常值個數(shù):", num_outliers_age)
print("平均血糖異常值個數(shù):", num_outliers_glucose)
實(shí)訓(xùn) 3?基于healthcare-dataset-age_abs.xls中的‘平均血糖’列數(shù)據(jù),(1)使用離差標(biāo)準(zhǔn)化、標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化、小數(shù)定標(biāo)標(biāo)準(zhǔn)化進(jìn)行標(biāo)準(zhǔn)化處理。
需求分析:
(1)使用離差標(biāo)準(zhǔn)化 進(jìn)行標(biāo)準(zhǔn)化處理
import pandas as pd
# 讀取數(shù)據(jù)
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
# 離差標(biāo)準(zhǔn)化
df['平均血糖_離差標(biāo)準(zhǔn)化'] = (df['平均血糖'] - df['平均血糖'].min()) / (df['平均血糖'].max() - df['平均血糖'].min())
print(df)
(2)使用標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化進(jìn)行標(biāo)準(zhǔn)化處理
# 標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化
import pandas as pd
# 讀取數(shù)據(jù)
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
df['平均血糖_標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化'] = (df['平均血糖'] - df['平均血糖'].mean()) / df['平均血糖'].std()
print(df)
(3)使用小數(shù)定標(biāo)標(biāo)準(zhǔn)化進(jìn)行標(biāo)準(zhǔn)化處理。
import pandas as pd
# 讀取數(shù)據(jù)
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
# 使用0填充缺失值
df['平均血糖'] = df['平均血糖'].fillna(0)
# 小數(shù)定標(biāo)標(biāo)準(zhǔn)化
df['平均血糖_小數(shù)定標(biāo)標(biāo)準(zhǔn)化'] = df['平均血糖'] / (10 ** (df['平均血糖'].apply(lambda x: len(str(abs(int(x))))) - 1))
# 打印結(jié)果
print(df)
實(shí)訓(xùn)4?對表healthcare-dataset-stroke.xls中‘吸煙史’的類別型數(shù)據(jù)進(jìn)行啞變量處理,轉(zhuǎn)換為數(shù)值型數(shù)據(jù)。
需求說明:
????? (1)對表healthcare-dataset-stroke.xls中‘吸煙史’的類別型數(shù)據(jù)進(jìn)行啞變量處理,轉(zhuǎn)換為數(shù)值型數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-856267.html
import pandas as pd
# 讀取數(shù)據(jù)
df1 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')
# 啞變量處理
df1_dummies = pd.get_dummies(df1['吸煙史'], prefix='吸煙史')
print(df1_dummies)
(2)對表healthcare-dataset-age_abs.xls中‘年齡’數(shù)據(jù)使用等寬法、等頻法進(jìn)行離散化,劃分為5類區(qū)間。文章來源地址http://www.zghlxwxcb.cn/news/detail-856267.html
import pandas as pd
df2 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
# 等寬法離散化
df2['年齡_等寬法'] = pd.cut(df2['年齡'], bins=5, labels=False)
# 等頻法離散化
df2['年齡_等頻法'] = pd.qcut(df2['年齡'], q=5, labels=False)
print(df2[['年齡', '年齡_等寬法', '年齡_等頻法']])
到了這里,關(guān)于Python數(shù)據(jù)分析與應(yīng)用 |第4章 使用pandas進(jìn)行數(shù)據(jù)預(yù)處理 (實(shí)訓(xùn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!