Advertisement

Python 数据分析实战:人工智能医疗影像行业发展研究

阅读量:

目录

一、案例背景

二、代码实现

2.1 数据收集

2.2 数据探索性分析

2.3 数据清洗

2.4 数据分析

2.4.1 AI 医疗影像技术准确率分析

2.4.2 AI 医疗影像产品功能与市场份额关系分析

2.4.3 AI 医疗影像行业未来发展预测

三、主要的代码难点解析

3.1 数据收集

3.2 数据清洗 - 医疗病例数据处理

3.3 数据分析 - AI 医疗影像技术准确率分析

3.4 数据分析 - AI 医疗影像产品功能与市场份额关系分析

3.5 数据可视化

四、可能改进的代码

4.1 数据收集改进

4.2 数据清洗改进

4.3 数据分析改进


一、案例背景

人工智能(AI)技术的飞速发展为医疗行业带来了深刻变革,尤其是在医疗影像领域。AI 医疗影像技术能够快速、准确地对医学影像进行分析,辅助医生诊断疾病,提高诊断效率和准确性。然而,该行业面临着技术壁垒高、数据质量参差不齐、法规监管不完善等挑战。通过 Python 对 AI 医疗影像行业相关数据进行分析,有助于企业把握市场趋势、优化技术研发、推动行业合规发展。

二、代码实现

复制代码
 import pandas as pd

    
 import numpy as np
    
 import matplotlib.pyplot as plt
    
 import seaborn as sns
    
 import requests
    
 from bs4 import BeautifulSoup
    
    
    
    

2.1 数据收集

数据来源包括行业报告网站(如艾瑞咨询、艾媒咨询)、医疗机构的临床数据、AI 医疗影像企业的产品信息以及学术文献数据库。

  • 从艾瑞咨询网站抓取 AI 医疗影像市场规模数据:
复制代码
 url = 'https://www.iresearch.com.cn/report/ai_medical_imaging.html'

    
 headers = {
    
     'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    
 }
    
 response = requests.get(url, headers = headers)
    
 soup = BeautifulSoup(response.text, 'html.parser')
    
 market_size_data = []
    
 div = soup.find('div', class_='market - size - box')
    
 items = div.find_all('li')
    
 for item in items:
    
     year = item.find('span', class_='year - value').text.strip()
    
     market_size = float(item.find('span', class_='size - num').text.strip().replace('亿元', ''))
    
     market_size_data.append({'Year': year, 'Market_Size': market_size})
    
 market_size_df = pd.DataFrame(market_size_data)
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/7rByVOPgECnRkDo3vu8Ym1SX4ejt.png)
  • 从医疗机构获取 AI 辅助诊断的病例数据(假设通过数据共享协议合法获取,并整理成 CSV 文件后读取):
复制代码
    medical_data = pd.read_csv('ai_medical_diagnosis_data.csv')
    
    

2.2 数据探索性分析

复制代码
 # 查看市场规模数据基本信息

    
 print(market_size_df.info())
    
 # 查看医疗病例数据基本信息
    
 print(medical_data.info())
    
  
    
 # 分析AI医疗影像市场规模随时间变化趋势
    
 market_size_df['Year'] = pd.to_numeric(market_size_df['Year'])
    
 plt.figure(figsize=(12, 6))
    
 sns.lineplot(x='Year', y='Market_Size', data=market_size_df)
    
 plt.title('Trend of AI Medical Imaging Market Size')
    
 plt.xlabel('Year')
    
 plt.ylabel('Market Size (billion yuan)')
    
 plt.show()
    
  
    
 # 查看AI辅助诊断的疾病类型分布
    
 disease_count = medical_data['Disease_Type'].value_counts()
    
 plt.figure(figsize=(10, 6))
    
 sns.barplot(x=disease_count.index, y=disease_count.values)
    
 plt.title('Distribution of Diseases Assisted by AI in Diagnosis')
    
 plt.xlabel('Disease Type')
    
 plt.ylabel('Number of Cases')
    
 plt.xticks(rotation=45)
    
 plt.show()
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/SEGqjtDOAV2MHIzhyFsf8X576l1d.png)

2.3 数据清洗

复制代码
 # 市场规模数据清洗

    
 # 检查并处理缺失值
    
 market_size_df.dropna(inplace = True)
    
 # 去除重复记录
    
 market_size_df = market_size_df.drop_duplicates()
    
  
    
 # 医疗病例数据清洗
    
 # 处理异常诊断数据,如诊断结果为空等情况
    
 medical_data = medical_data[medical_data['Diagnosis_Result'].notnull()]
    
    
    
    

2.4 数据分析

2.4.1 AI 医疗影像技术准确率分析
复制代码
 # 假设医疗病例数据中有AI诊断结果和实际诊断结果

    
 correct_count = (medical_data['AI_Diagnosis_Result'] == medical_data['Actual_Diagnosis_Result']).sum()
    
 total_count = len(medical_data)
    
 accuracy = correct_count / total_count
    
 print(f'AI medical imaging technology accuracy: {accuracy * 100:.2f}%')
    
    
    
    
2.4.2 AI 医疗影像产品功能与市场份额关系分析
复制代码
 # 假设从企业产品资料中整理出产品功能及市场份额数据

    
 product_data = {
    
     'Product_Function': ['Image Segmentation', 'Abnormality Detection', 'Disease Prediction'],
    
     'Market_Share': [0.3, 0.4, 0.3]
    
 }
    
 product_df = pd.DataFrame(product_data)
    
  
    
 plt.figure(figsize=(10, 6))
    
 sns.barplot(x='Product_Function', y='Market_Share', data=product_df)
    
 plt.title('Relationship between AI Medical Imaging Product Functions and Market Share')
    
 plt.xlabel('Product Function')
    
 plt.ylabel('Market Share')
    
 plt.show()
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/hLyZHJu1jqYwftFCVMgk0lATGsIb.png)
2.4.3 AI 医疗影像行业未来发展预测
复制代码
 # 使用时间序列分析方法预测AI医疗影像市场规模(以ARIMA模型为例)

    
 import statsmodels.api as sm
    
  
    
 # 假设market_size_df中Year为时间,Market_Size为市场规模
    
 market_size_df.set_index('Year', inplace = True)
    
 market_size_df.index = pd.DatetimeIndex(market_size_df.index)
    
  
    
 # 确定ARIMA模型参数
    
 p, d, q = 1, 1, 1
    
 model = sm.tsa.ARIMA(market_size_df['Market_Size'], order=(p, d, q))
    
 model_fit = model.fit(disp = 0)
    
  
    
 # 预测未来3年市场规模
    
 n_steps = 3
    
 forecast = model_fit.get_forecast(steps = n_steps)
    
 forecast_mean = forecast.predicted_mean
    
 conf_int = forecast.conf_int()
    
  
    
 plt.figure(figsize=(12, 6))
    
 plt.plot(market_size_df.index, market_size_df['Market_Size'], label='Actual')
    
 plt.plot(pd.date_range(start = market_size_df.index[-1], periods = n_steps + 1, freq = 'Y')[1:], forecast_mean, label='Predicted', linestyle='--')
    
 plt.fill_between(conf_int.index, conf_int.iloc[:, 0], conf_int.iloc[:, 1], color='k', alpha = 0.1)
    
 plt.title('Prediction of AI Medical Imaging Market Size with ARIMA')
    
 plt.xlabel('Year')
    
 plt.ylabel('Market Size (billion yuan)')
    
 plt.legend()
    
 plt.show()
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/Rz7VeW9KADoUHJ5IiBOgsNCQ8Edw.png)

三、主要的代码难点解析

3.1 数据收集

复制代码
 response = requests.get(url, headers = headers)

    
 soup = BeautifulSoup(response.text, 'html.parser')
    
    
    
    
  • 难点 :行业报告网站可能设置反爬虫机制,如验证码、IP 限制等。医疗机构数据涉及患者隐私,获取难度大,且数据格式可能不统一。学术文献数据库访问通常需要权限,数据提取复杂。
    • 解决思路 :设置合理请求间隔,使用代理 IP 池,若遇验证码,考虑 OCR 技术或第三方识别服务。与医疗机构签订严格的数据共享协议,规范数据格式。仔细研究学术文献数据库 API,按要求申请权限并编写数据提取程序。

3.2 数据清洗 - 医疗病例数据处理

复制代码
    medical_data = medical_data[medical_data['Diagnosis_Result'].notnull()]
    
    
  • 难点 :医疗病例数据存在大量缺失值,可能因数据录入失误、设备故障等原因导致。数据还可能存在错误标注,如疾病类型错误、诊断结果错误等。
    • 解决思路 :对于缺失值,若关键信息缺失,可考虑删除记录;若非关键信息缺失,根据数据特点采用均值、中位数填充或基于机器学习算法预测填充。对于错误标注,结合医学知识和其他相关数据进行人工审核和修正。

3.3 数据分析 - AI 医疗影像技术准确率分析

复制代码
 correct_count = (medical_data['AI_Diagnosis_Result'] == medical_data['Actual_Diagnosis_Result']).sum()

    
 total_count = len(medical_data)
    
 accuracy = correct_count / total_count
    
    
    
    
  • 难点 :医疗数据的准确性验证本身难度大,实际诊断结果也可能存在误诊情况。不同疾病类型、病例复杂程度对 AI 诊断准确率影响不同,单一准确率指标难以全面反映技术性能。
    • 解决思路 :建立多专家审核机制,对实际诊断结果进行复查。按疾病类型、病例难度分组计算准确率,综合评估 AI 技术在不同场景下的性能。

3.4 数据分析 - AI 医疗影像产品功能与市场份额关系分析

复制代码
    sns.barplot(x='Product_Function', y='Market_Share', data=product_df)
    
    
  • 难点 :产品功能的界定可能存在模糊性,不同企业对相似功能的描述可能不同。市场份额受多种因素影响,如品牌知名度、营销策略等,单纯分析功能与份额关系可能不够全面。
    • 解决思路 :建立统一的产品功能分类标准,对企业产品功能描述进行规范化处理。引入其他相关变量,如品牌影响力、研发投入等,构建多元回归模型,综合分析各因素对市场份额的影响。

3.5 数据可视化

复制代码
 plt.plot(market_size_df.index, market_size_df['Market_Size'], label='Actual')

    
 plt.plot(pd.date_range(start = market_size_df.index[-1], periods = n_steps + 1, freq = 'Y')[1:], forecast_mean, label='Predicted', linestyle='--')
    
 plt.fill_between(conf_int.index, conf_int.iloc[:, 0], conf_int.iloc[:, 1], color='k', alpha = 0.1)
    
    
    
    
  • 难点 :展示市场规模预测结果时,要清晰呈现实际值、预测值和预测区间,且保证图表可读性和美观性。时间序列图时间刻度和标签设置需根据数据特点优化。
    • 解决思路 :选择鲜明颜色区分实际值和预测值,半透明填充表示预测区间,添加清晰图例。根据数据时间跨度和变化趋势,合理设置时间刻度,如调整刻度间隔、旋转刻度标签,确保图表布局合理,信息传达准确。

四、可能改进的代码

4.1 数据收集改进

复制代码
 # 从多个行业报告网站收集AI医疗影像市场规模数据

    
 report_urls = [
    
     'https://www.iresearch.com.cn/report/ai_medical_imaging.html',
    
     'https://www.iimedia.cn/report/ai_medical.htm'
    
 ]
    
 all_market_size_data = []
    
 for url in report_urls:
    
     headers = {
    
     'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    
     }
    
     response = requests.get(url, headers = headers)
    
     soup = BeautifulSoup(response.text, 'html.parser')
    
     div = soup.find('div', class_='market - size - box')
    
     items = div.find_all('li')
    
     for item in items:
    
     year = item.find('span', class_='year - value').text.strip()
    
     market_size = float(item.find('span', class_='size - num').text.strip().replace('亿元', ''))
    
     all_market_size_data.append({'Year': year, 'Market_Size': market_size})
    
 all_market_size_df = pd.DataFrame(all_market_size_data)
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/2EIcRSeYTVpGFHlhvCjDaXd5guwo.png)

4.2 数据清洗改进

复制代码
 # 使用随机森林算法填充医疗病例数据中的缺失值

    
 from sklearn.ensemble import RandomForestRegressor
    
 from sklearn.impute import SimpleImputer
    
  
    
 # 分离特征和目标变量
    
 X = medical_data.drop('Diagnosis_Result', axis = 1)
    
 y = medical_data['Diagnosis_Result']
    
  
    
 # 处理特征中的缺失值
    
 imputer = SimpleImputer(strategy='mean')
    
 X_imputed = imputer.fit_transform(X)
    
  
    
 # 训练随机森林模型
    
 model = RandomForestRegressor()
    
 model.fit(X_imputed, y)
    
  
    
 # 预测缺失值
    
 missing_indices = medical_data['Diagnosis_Result'].isnull()
    
 X_missing = X_imputed[missing_indices]
    
 y_pred = model.predict(X_missing)
    
  
    
 # 填充缺失值
    
 medical_data.loc[missing_indices, 'Diagnosis_Result'] = y_pred
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/ZDARlBntsJk92rcTOwqdhVLaIgvY.png)

4.3 数据分析改进

复制代码
 # 使用LSTM模型预测AI医疗影像市场规模,提高预测精度

    
 from keras.models import Sequential
    
 from keras.layers import LSTM, Dense
    
 import numpy as np
    
  
    
 # 数据预处理
    
 market_size = market_size_df['Market_Size'].values
    
 scaled_market_size = (market_size - np.min(market_size)) / (np.max(market_size) - np.min(market_size))
    
  
    
 X = []
    
 y = []
    
 for i in range(len(scaled_market_size) - 3):
    
     X.append(scaled_market_size[i:i + 3])
    
     y.append(scaled_market_size[i + 3])
    
  
    
 X = np.array(X)
    
 y = np.array(y)
    
 X = np.reshape(X, (X.shape[0], X.shape[1], 1))
    
  
    
 # 构建LSTM模型
    
 model = Sequential()
    
 model.add(LSTM(50, return_sequences = True, input_shape=(3, 1)))
    
 model.add(LSTM(50))
    
 model.add(Dense(1))
    
 model.compile(optimizer='adam', loss='mean_squared_error')
    
 model.fit(X, y, epochs = 50, batch_size = 32)
    
  
    
 # 预测未来3年市场规模
    
 future_data = []
    
 last_three = scaled_market_size[-3:]
    
 for _ in range(3):
    
     input_data = np.array(last_three).reshape(1, 3, 1)
    
     prediction = model.predict(input_data)[0][0]
    
     future_data.append(prediction)
    
     last_three = np.roll(last_three, -1)
    
     last_three[-1] = prediction
    
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/8DM1YAf7mBRdikpusnOZQcx2lTjG.png)

全部评论 (0)

还没有任何评论哟~