一:從各種不同的格式文件中導入數據,總結目前最常用的文件格式導入數據的一些方法:
# -*- coding:utf-8 -*-
from numpy import *
def loadDataSet(fileName):
'''導入數據'''
numFeat = len(open(fileName).readline().split('\t')) - 1
dataMat = []
labelMat = []
fr = open(fileName)
for line in fr.readlines():
lineArr = []
curLine = line.strip().split('\t')
for i in range(numFeat):
lineArr.append(float(curLine[i]))
dataMat.append(lineArr)
labelMat.append(float(curLine[-1]))
return dataMat, labelMat
# def loadDataSet(fileName):
# numFeat = len(open(fileName).readline().split('\t')) # 計算有多少列
# dataMat = []
# labelMat = []
# fr = open(fileName)
# for line in fr.readlines(): # 遍歷原始數據集每一行
# lineArr =[]
# curLine = line.strip().split('\t') # 是一列表類型
# for i in range(numFeat-1): # numFeat - 1的原因:因為原始數據的最后一列是類別,不是屬性數據
# lineArr.append(float(curLine[i])) # 一個一個傳進lineArr列表向量
# dataMat.append(lineArr) # 再傳進dataMat列表向量
# labelMat.append(float(curLine[-1])) # 寫進標簽列表
# return dataMat, labelMat
if __name__ == "__main__":
'''線性回歸'''
datafile = u'E:\\learningnotes\\programing\\big data\\MLaction_master\\Ch08_LinearRegression\\ex0.txt'
#datafile = 'ex0.txt'
xArr, yArr = loadDataSet(datafile)
#xArr, yArr = loadDataSet('ex0.txt')
print('xArr= \n', yArr)
print('yArr= \n', yArr)
注意事項:
(1)該函數塊主要用于從原始數據文件(.txt,.data等)讀取數據,用于機器學習算法的訓練和測試應用
(2)labelMat是一列表,表示標簽/類別
(3)dataMat也是列表類型
(4)當原始數據文件間的數據是空格隔開,則使用.split('\t')
?????????????????????? 若是逗號隔開,則使用.split(',')
二:其他總結
# 從CSV文件導入數據
'''
步驟:
1. 打開文件
2.讀取文件頭
3.讀取剩余行
4當發生錯誤時拋出異常
'''
import csv
import sys
filename = 'ex5.csv'
data = []
try:
with open(filename) as f:
reader = csv.reader(f)
header = reader.next()
data = [row for row in reader]
except csv.Error as e:
print "Error reading CSV file at line %s : %s" % (reader.line_num, e)
sys.exit(-1)
if header:
print header
print "=========="
for datarow in data:
print datarow
# 從Excel文件中導入數據
'''
步驟:
1. 打開文件的工作簿。
2. 根據名稱找到工作表。根據行數(nrows)和列數(ncols)讀取單元格的內容。
3. 打印出數據集合。
'''
import xlrd
file = 'output.xls'
wb = xlrd.open_workbook(file)
ws = wb.sheet_by_name("sheet1")
dataset = []
for r in xrange(ws.nrows):
col = []
for c in range(ws.ncols):
col.append(ws.cell(r, c).value)
dataset.append(col)
# 美化打印
from pprint import pprint
pprint(dataset)
# 從定寬數據文件導入數據
'''
步驟:
1.指定要讀取的數據文件。
2.定義數據讀取的方式。
3.逐行讀取文件并根據格式把每一行解析成單獨的數據字段。
4.按單獨數據字段的形式打印每一行。
'''
import struct
datafile = 'fix-width.data'
# 掩碼定義為5s10s5s,表示為9個字符的字符串,跟一個10個字符的字符串,再跟一個5個字符的字符串(包括空格)。
mask = '5s10s5s'
results = []
with open(datafile, 'r') as f:
for line in f:
# 用格式解析的unpack_from方法。
fields = struct.Struct(mask).unpack_from(line)
results.append([field.strip() for field in fields])
from pprint import pprint
pprint(results)
# 從制表符分隔的文件中讀取數據
'''
制表符分隔的文件大部分是可以用CSV文件導入的方法,除了一些不正常的文件。這時就需要在切分前對特殊行的數據進行單獨清理。
'''
from pandas import DataFrame
lines = []
datafile = 'data_dirty.tab'
with open(datafile, "r") as f:
for line in f:
line = line.strip().split("\t")
lines.append(line)
results = DataFrame(lines[1:], columns=[lines[0]])
print results
# 從JSON數據源導入數據
'''
步驟:
1.指定URL讀取JSON格式數據
2.使用requests模塊訪問指定的URL,并獲取內容
3.讀取內容并將轉化為JSON格式的對象
4.迭代訪問JSON對象,讀取每一個代碼庫的URL值
'''
import requests
url = 'https://github.com/timeline.json'
r = requests.get(url)
json_obj = r.json()
repos = set()
for entry in json_obj:
print entry
try:
repos.add(entry['repository']['url'])
except KeyError as e:
print "No key %s Skipping..." % (e)
from pprint import pprint
pprint(repos)
# 從HTML中導入數據
from lxml.html import parse
from urllib2 import urlopen
parsed = parse(urlopen("https://finance.yahoo.com/q/op?s=AAPL+Options"))
# 找到文檔中的表格,并將其導入。
doc = parsed.getroot()
table = doc.findall(".//table")
# 然后選擇一個表格做測試。
put = table[1]
# 對于一個表格來說,有一個標題和數據。在HTML中th單元格就表示標題行,td則表示數據行。
def _unpack(row, kind="td"):
elts = row.findall(".//%s" % kind)
return [val.text_content() for val in elts]
# 同時,在導入數據表格時,應該考慮到文本類型。我們使用pandas中的TextParser類自動類型轉換。
from pandas.io.parsers import TextParser
def parse_options_data(table):
rows = table.findall(".//tr")
header = _unpack(rows[0], kind="th")
data = [_unpack(r) for r in rows[1:]]
return TextParser(data, names=header).get_chunk()
# 最后對這個表格調用該解析函數
put_data = parse_options_data(put)
print put_data[:10]
# 同時,我們也可以獲取文檔的全部URL
# 鏈接的標簽是a。
links = doc.findall(".//a")
# print links[15:20]
# 得到一個鏈接的URL和文本內容分別使用,get()和text_content()方法
urls = [lnk.get("href") for lnk in links]
text = [lnk.text_content() for lnk in links]
from pprint import pprint
pprint(urls[:10])
print “============”
pprint(text[:10])
三:實際案例導入代碼
# -*- coding:utf-8 -*-
sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import DataFrame,Series
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
#讀取文件
datafile = u'E:\\learningnotes\\PycharmProjects\\untitled\\data_mining\\input\\datadata.xls'#文件所在位置,u為防止路徑中有中文名稱,此處沒有,可以省略
data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件則用read_csv
examDf = DataFrame(data)
print('examDf=\n',examDf.head())
print('data=\n',data)
四:實際案例代碼
# -*- coding:utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#1獲取數據
#1.1 數據來源二:導入文件數據
path = "../input/"
train = pd.read_csv(path+"train.csv")
train.columns=['q','w','e','r','label']
test = pd.read_csv(path+"data_iris_test.csv", header=-1) #header=-1為增加列名序號
test.columns=['q','w','e','r'] #列名修改
print("數據來源二:train集顯示前十個--->\n",train.head(10))#顯示前十個
print("test集顯示前十個--->\n",test.head(10))
print("train集常用計算值描述--->\n",train.describe()) #描述
#1.2 數據來源一:導入sklearn里面的例子數據集
def load_data_iris():
from sklearn import datasets
iris=datasets.load_iris()#導入分類算法花數據集(load_boston()波士頓房價回歸集;load_digits()手寫數字分類集)
x=iris.data #獲取特征向量
y=iris.target #獲取樣本label
'''
#查看數據集長什么樣:
print("數據來源一:iris--->\n",iris)
print("x--->\n",x)
print("y--->\n",y)
print("iris.target_names--->\n",iris.target_names)
print("DESCR--->\n",iris.DESCR)
input()
'''
#1.3 數據來源三:sklearn.datasets創建數據
def load_data_datasets():
from sklearn.datasets.samples_generator import make_classification
X,Y=make_classification(n_samples=6,n_features=5,n_informative=2,n_redundant=2,n_classes=2,n_clusters_per_class=2,scale=1.0,random_state=20)
'''
#n_samples:制定樣本數
#n_features:指定特征數
#n_classes:指定幾分類
#random_state:隨機種子,使得隨機狀可重
for x_,y_ in zip(X,Y):
print("數據來源三:y_:\n",y_)
print("數據來源三:x_:\n",x_)
input()
'''
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
