一. 数据格式的转换(Csv<=>Txt)
import csv
import pandas as pd
def txtToCsv(): # 将txt数据集格式转换为Csv格式
'''
txt转换Csv
:return:
'''
csvFile = open("../Data/Iris.csv", 'w', newline='', encoding='utf-8')
writer = csv.writer(csvFile)
csvRow = [] # 用来存储csv文件中一行的数据
header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
writer.writerow(header)
f = open("../Data/Iris.txt", 'r', encoding='GB2312')
for line in f:
csvRow = line.split()
writer.writerow(csvRow) # 将csvRow中数据写入csv文件中
f.close()
csvFile.close()
def csvToTxt(): # CSV转换Txt格式
'''
CSV转换TXT
:return:
'''
data = pd.read_csv('../Data/1.csv')
# header = ['UserId', 'Sports', ' Religious', 'Nature', 'Theatre', 'Shopping', 'Picnic']
with open('../Data/1.txt', 'a+') as f:
# f.writelines(header)
# f.write('\n')
for line in data.values:
f.write((str(line[0]) + ' ' + str(line[1]) + ' ' + str(line[2])
+ ' ' + str(line[3]) + ' ' + str(line[4]) + '\n'))
f.close()
while (True):
print("数据集格式转换菜单\n" + "1.CSV转换成TXT\n" + "2.TXT转换成CSV\n" + "0.退出\n")
num = int(input("输入菜单号:"))
if num == 1:
csvToTxt()
print("数据集格式转换完成;请继续进行操作")
elif num == 2:
txtToCsv()
print("数据集格式转换完成;请继续进行操作")
else:
print("退出系统")
break
运行图示:
图1.1 运行程序前数据集图(左:buddymove_holidayiq.csv,右边:Iris.txt)
图1.2 运行程序前数据集图(左:buddymove_holidayiq.txt,右边:Iris.csv)
二. 读取数据
1.读取数据矩阵
def operData(fileName):
"""
操作数据:
:param fileName:数据集名称(带相对路径)
:return:
"""
# 读取csv格式数据,将数据转换为数据集数组
data_arr = csv2Arr(fileName)
# 输出全部点
# header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
# dp = pd.DataFrame(data_arr, columns=header,dtype=float)
print("数据矩阵:\n" + str(data_arr))
2.读取特定数据点
def readCsv(fileName):
'''
输出精确数据点
:param fileName:
:return:
''''''
:param fileName:
:return:
'''
data_arr = csv2Arr(fileName)
p = int(input("输入要查询的数据点行数:"))
q = int(input("你需要查询的数据点的列数:"))
print("第" + str(p) + "行,第" + str(q) + "列的数据点为\n" + str(data_arr[p - 1][q - 1]))
3.读取数据集的基本信息及特殊读取
def CSvinfo(fileName):
'''
数据集的基本信息
:param fileName: 数据集名称(带相对路径)
:return:
'''
df = pd.read_csv(fileName)
print(df.info()) # 输出数据表的基本信息
print(df) # 将df替换成df.to_string(),将展示全部数据
def csvheader(filename):
'''
特殊查询
:param fileName: 数据集名称(带相对路径)
:return:
'''
df = pd.read_csv(filename)
q = int(input("请输入需要读取的数据集的前多少行的数据"))
print(df.head(q))
4. 分类读取
def readCsv(filename):
'''
分类查询
:param fileName: 数据集名称(带相对路径)
:return:
'''
df = pd.read_csv(filename) # 读文件返回DataFrame对象
df = pd.DataFrame(df)
data_arr = np.array(df)
header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
print("类:" + str(header))
q = input("请属于类标签:")
for i in range(len(header)):
if q == header[i]:
m = int(i)
idex = []
for i in range(len(data_arr)):
idex.append(data_arr[i][m])
idex = pd.unique(idex).tolist()
print("数据该类分类数目:" + str(idex))
list = []
for i in range(len(idex)):
temp_list = []
list.append(temp_list)
for i in range(len(data_arr)):
if data_arr[i][m] in idex:
a = data_arr[i][m]
list[idex.index(a)].append(data_arr[i])
i = float(input("输入你要查询的类表"))
for j in range(len(idex)):
if i == idex[j]:
print("类标签为的数据集:" + str(i))
print(np.array(list[j]))
break;
6.读取代码总合
import numpy as np
import pandas as pd
def csv2Arr(fileName):
"""
准备数据: 从csv文件中解析数据
:param fileName:数据集名称(带相对路径)
:return:data_arr:数据集数组(含标签,2维数组,类型:ndarray)
"""
df = pd.read_csv(fileName) # 读文件返回DataFrame对象
df = pd.DataFrame(df)
data_arr = np.array(df) # 将DataFrame转换为ndarray
return data_arr
def operData(fileName):
"""
操作数据:
:param fileName:数据集名称(带相对路径)
:return:
"""
# 读取csv格式数据,将数据转换为数据集数组
data_arr = csv2Arr(fileName)
# 输出全部点
# header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
# dp = pd.DataFrame(data_arr, columns=header,dtype=float)
print("数据矩阵:\n" + str(data_arr))
def readCsv(fileName):
'''
输出精确数据点
:param fileName:
:return:
''''''
:param fileName:
:return:
'''
data_arr = csv2Arr(fileName)
p = int(input("输入要查询的数据点行数:"))
q = int(input("你需要查询的数据点的列数:"))
print("第" + str(p) + "行,第" + str(q) + "列的数据点为\n" + str(data_arr[p - 1][q - 1]))
def CSvinfo(fileName):
'''
数据集的基本信息
:param fileName: 数据集名称(带相对路径)
:return:
'''
df = pd.read_csv(fileName)
print(df.info()) # 输出数据表的基本信息
print(df) # 将df替换成df.to_string(),将展示全部数据
def csvheader(filename):
'''
特殊查询
:param fileName: 数据集名称(带相对路径)
:return:
'''
df = pd.read_csv(filename)
q = int(input("请输入需要读取的数据集的前多少行的数据"))
print(df.head(q))
def readCsv(filename):
'''
分类查询
:param fileName: 数据集名称(带相对路径)
:return:
'''
df = pd.read_csv(filename) # 读文件返回DataFrame对象
df = pd.DataFrame(df)
data_arr = np.array(df)
header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
print("类:" + str(header))
q = input("请属于类标签:")
for i in range(len(header)):
if q == header[i]:
m = int(i)
idex = []
for i in range(len(data_arr)):
idex.append(data_arr[i][m])
idex = pd.unique(idex).tolist()
print("数据该类分类数目:" + str(idex))
list = []
for i in range(len(idex)):
temp_list = []
list.append(temp_list)
for i in range(len(data_arr)):
if data_arr[i][m] in idex:
a = data_arr[i][m]
list[idex.index(a)].append(data_arr[i])
i = float(input("输入你要查询的类表"))
for j in range(len(idex)):
if i == idex[j]:
print("类标签为的数据集:" + str(i))
print(np.array(list[j]))
break;
filename = "../Data/Iris.csv"
while (True):
'''
主菜单
'''
print(
"数据集输出菜单\n" + "1.数据集基本信息及数据集数据输出\n" + "2.查询数据点\n" + "3.数据矩阵\n" + "4.输出数据集前面的数据\n" + "5.按相同属性查询数据\n" + "0.退出\n")
num = int(input("输入菜单号:"))
if num == 1:
CSvinfo(filename)
print("操作完成;请继续进行其他操作")
elif num == 2:
readCsv(filename)
print("操作完成;请继续进行其他操作")
elif num == 3:
operData(filename)
print("操作完成;请继续进行其他操作")
elif num == 4:
csvheader(filename)
print("操作完成;请继续进行其他操作")
elif num == 5:
readCsv(filename)
else:
print("退出系统")
break
三.数据的基本分析
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import stats
def npData(filename):
'''
数据的基本分析
:param fileName: 数据集名称(带相对路径)
:return:
'''
df = pd.read_csv(filename) # 读文件返回DataFrame对象
df = pd.DataFrame(df).drop(labels=['User Id'],axis=1)
data_arr = np.array(df)
for i in range (len(data_arr.T)):
num=data_arr[:,i]
print(f'第{i+1}列')
print("最大值{:.2f}".format(num.max()))
print("最小值{:.2f}".format(num.min()))
print("平均值{:.2f}".format(np.mean(num)))
print("中位值{:.2f}".format(np.median(num)))
print("标准差{:.2f}".format(np.std(num)))
print("方差{:.2f}".format(np.var(num)))
print("众数{:.2f},出现了{}次".format(stats.mode(num,keepdims=True)[0][0],stats.mode(num,keepdims=True)[1][0]))
npData('../Data/1.csv')