大資料測試技術——課堂測試

喝着农药吐泡泡o發表於2024-03-17

資料分析練習

以下原始碼均以自己情況為主,如需參考,請謹慎再謹慎

1、原始表為access資料庫,轉為csv格式

直接另存為就可以了

2、將三省的科技成果資料彙總到同一個表中

由於表結構不一致,所以合併前要進行相似和表達意思相同的欄位的合併(獨有欄位置為空)

整理一下

1.1

型別

長度

小數點

不是null

ID

Varchar

255

0

成果名稱

Varchar

255

0

專案年度編號

Varchar

255

0

省市

Varchar

255

0

中國分類號

Varchar

255

0

成果類別

Varchar

255

0

成果分佈年份

Varchar

255

0

關鍵詞

Varchar

255

0

成果簡介

Text

0

鑑定部門

Varchar

255

0

登記號

Varchar

255

0

完成單位

Varchar

255

0

完成人

Varchar

255

0

應用行業名稱

Varchar

255

0

應用行業程式碼

Varchar

255

0

聯絡單位地址

Varchar

255

0

傳真

Varchar

255

0

電子郵件

Varchar

255

0

1.2

型別

長度

小數點

不是null

序號

Varchar

255

0

成果名稱

Varchar

255

0

行業

Varchar

255

0

年度

Varchar

255

0

批准登記號

Varchar

255

0

單位名稱

Varchar

255

0

課題來源

Varchar

255

0

單位名稱

Varchar

255

0

主要人員

Varchar

255

0

評價單位名稱

Varchar

255

0

成果簡介

Text

0

0

1.3

型別

長度

小數點

不是null

序號

Varchar

255

0

單位

Varchar

255

0

成果名稱

Varchar

255

0

技術水平

Varchar

255

0

負責人

Varchar

255

0

所屬技術領域

Varchar

255

0

合作單位

Varchar

255

0

專案總規模或評估價值(萬元)

Varchar

255

0

目前所處階段

Varchar

255

0

智慧財產權情況

Varchar

255

0

專案簡介

Varchar

255

0

#基於成果名稱合併
import pandas as pd

# 讀取三個CSV檔案
df1 = pd.read_csv('cg_天津科技成果.csv')
df2 = pd.read_csv('cg_2015年第1_2_3期.csv')
df3 = pd.read_csv('科技成果.csv')

# 合併三個表格
merged_df = pd.merge(df1, df2, on='成果名稱', how='outer')
merged_df = pd.merge(merged_df, df3, on='成果名稱', how='outer')

# 將缺失值填充為空值
merged_df = merged_df.fillna('')

# 將合併後的資料儲存為CSV檔案
merged_df.to_csv('all.csv', index=False)

擬合併欄位

cg_天津科技成果.csv

cg_2015年第1_2_3.csv

科技成果.csv

單位 成果名稱 負責人 所屬技術領域 年度 專案簡介

| | | | | |

單位名稱 成果名稱 主要成員 行業 年度 成果簡介

| | | | | |

完成單位 成果名稱 完成人 應用行業名稱 成果分佈年份 成果簡介

import pandas as pd

# 讀取合併後的CSV檔案
df = pd.read_csv('all.csv')

# 合併列組
df['單位'] = df['單位'].fillna(df['單位名稱']).fillna(df['完成單位']).fillna('')
df['負責人'] = df['負責人'].fillna(df['主要人員']).fillna(df['完成人']).fillna('')
df['所屬技術領域'] = df['所屬技術領域'].fillna(df['行業']).fillna(df['應用行業名稱']).fillna('')
df['年度'] = df['年度'].fillna(df['成果分佈年份']).fillna('')
df['專案簡介'] = df['專案簡介'].fillna(df['成果簡介_x']).fillna(df['成果簡介_y']).fillna('')

# 刪除原有的列
df.drop(columns=['單位名稱', '完成單位', '主要人員', '完成人', '行業', '應用行業名稱', '年度', '成果分佈年份', '成果簡介_y', '成果簡介_x'], inplace=True)

# 將處理後的資料儲存為CSV檔案
df.to_csv('all.csv', index=False)

需新增欄位

1.3天津科技成果表中不存在年度欄位,則直接新增年度維度欄位確定為2015

#1.3天津科技成果表新增年度欄位全部置為2015
import pandas as pd

# 讀取CSV檔案
df = pd.read_csv('cg_天津科技成果.csv')

# 新增名為“年度”的列,並將所有值置為2015
df['年度'] = 2015

# 將處理後的資料儲存為CSV檔案
df.to_csv('2015_天津科技成果.csv', index=False)

新增地域

3、資料同步

4、資料清洗

檢查是否存在重複的資料

5、利用高德介面新增省份和行政區劃編碼

import pandas as pd
import requests

# 讀取CSV檔案
df = pd.read_csv('new_all.csv', encoding='utf-8')

# 提取第六列的所有資訊
sixth_column_data = df.iloc[:, 1]  # 假設第六列的索引為5,如果不是,請替換為正確的索引值

# 列印提取的資料
print("提取的第二列資料:")
print(sixth_column_data)

amap_api_key = ''

# Amap API請求函式
# Amap API請求函式
def get_amap_code(api_key, address):
    base_url = 'https://restapi.amap.com/v3/geocode/geo'

    params = {
        'key': api_key,
        'address': address,
    }

    try:
        response = requests.get(base_url, params=params)
        result = response.json()

        if result['status'] == '1' and int(result['count']) > 0:
            geocodes = result['geocodes'][0]
            adcode = geocodes.get('adcode', '')  # 使用.get()方法獲取adcode,如果不存在則返回空字串
            province = geocodes.get('province', '')  # 使用.get()方法獲取province,如果不存在則返回空字串
            city = geocodes.get('city', '')  # 使用.get()方法獲取city,如果不存在則返回空字串
            district = geocodes.get('district', '')  # 使用.get()方法獲取district,如果不存在則返回空字串

            formatted_address_parts = [part for part in [province, city, district] if part]  # 過濾掉空字串
            formatted_address = ''.join(formatted_address_parts)  # 拼接地址字串
            return adcode, formatted_address
        else:
            return None, None
    except requests.exceptions.RequestException as e:
        print(f"請求出錯: {e}")
        return None, None


adcodes = []
formatted_addresses = []  # 用於儲存地址

total_queries = len(sixth_column_data)  # 處理全部資料

for i, address in enumerate(sixth_column_data):
    print(f"正在查詢第 {i+1}/{total_queries} 條資料...")
    adcode, formatted_address = get_amap_code(amap_api_key, address)
    adcodes.append(adcode)
    formatted_addresses.append(formatted_address)  # 儲存地址

    print(f"查詢結果: 行政編碼 - {adcode}, 地址 - {formatted_address}")

    temp_df = pd.DataFrame({
        'Original Address': [address],
        'Formatted Address': [formatted_address],
        'Adcode': [adcode]
    })
    temp_df.to_csv('new_results_file02.csv', mode='a', header=False, index=False)

6、使用機器學習演算法提取關鍵字

1.1表中有較為完整的關鍵字、應用行業欄位、行業程式碼

1.2表中有行業欄位,缺少關鍵字和行業程式碼

1.3表中所屬技術領域與行業相似,但並不是國家規範標準

第一步從專案簡介中提取關鍵字

import pandas as pd
import jieba.analyse
import csv

try:
    # 嘗試讀取 CSV 檔案
    df = pd.read_csv('new_all_with_keywords.csv', quoting=csv.QUOTE_NONE)
except Exception as e:
    print("Error:", e)
    print("Skipping error lines...")

    # 使用更通用的方式重新讀取 CSV 檔案,跳過錯誤行
    lines = []
    with open('new_all.csv', 'r', encoding='utf-8') as file:
        csv_reader = csv.reader(file)
        for line in csv_reader:
            if len(line) > 0:
                lines.append(line)

    # 透過讀取的有效行建立 DataFrame
    df = pd.DataFrame(lines[1:], columns=lines[0])

# 對'專案簡介'列應用關鍵詞提取函式
def extract_keywords(text):
    # 使用 jieba 進行關鍵詞提取,設定關鍵詞數量最多為5個,允許多個字組成的關鍵字
    keywords = jieba.analyse.textrank(text, topK=5, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
    return " ".join(keywords)  # 使用空格連線關鍵詞

# 對'專案簡介'列應用關鍵詞提取函式
df['關鍵詞'] = df['成果名稱'].apply(extract_keywords)

# 輸出結果
print(df['關鍵詞'])

# 儲存為新檔案
df.to_csv('new_all_with_keywords.csv', index=False)

這裡我使用百度api的關鍵字提取介面

然後以此類推就整理好了

第二步對省市縣進行分割然後資料下卷展示

如圖

相關文章