马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
数据科学
- AI
- ML
- DL (deep learning)
- Maths& statistics
- visualization
- EDA
1.datascience
- import numpy as np
- """
- numpy :数学计算库,主要用于数组计算
- """
- print(np.__version__)
- #ndarry数组的创建与基本操作#
- #将列表转换为数组
- arr= np.array([1,2,3,4,5])
- print(arr)
- print(arr.itemsize)
- #创建等差数列数组
- arr=np.arange(0,10,2) #从0开始,到10结束(不包含10),步长为2
- print(arr)
- print("############################################")
- #数组基本属性:shape (形状),dtype (数据类型)
- arr=np.array([[1,2,3],[4,5,6]]) #输出(2,3),表示二维数组,第一维有2个元素,第二维有3个元素
- print(arr.shape)
- print(arr.dtype)
- #最小维度
- a = np.array([1,2,3,4,5],ndmin=2)
- print(a)
复制代码- import os
- import pandas as pd
- import matplotlib.pyplot as plt
- """
- pandas库主要用于数据分析(清洗,转换,分析,可视化)
-
- 功能:
- 1.数据清洗:处理缺失数据、重复数据
- 2.数据转换:改变数据的形状,结构或格式
- 3.数据分析:进行统计分析、聚合、分组
- 4.数据可视化:通过整合matplotlib等库进行数据可视化
-
- 数据结构:
- 1.Series:一维数据,由 index,Name,values组成
- 2.DataFrame:表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值,字符串、布尔值)组;
- DataFrame即有行索引也有列索引,可以被看做由Series组成的字典(共同用一个索引);
- DataFrame由Index、Key、Value 组成;
- """
- #1. series (类似一维数组)#
- a = [12, 3, 4]
- res = pd.Series(a,name='年龄')
- print(res)
- print(f"索引2对应的值:{res[2]}")
- #查看基本信息
- print("索引:",res.index)
- print("数据:",res.values)
- print("数据类型:",res.dtype)
- print("前两行数据:",res.head(2))
- #使用map函数将每个元素加倍
- res_double=res.map(lambda x:x*2)
- print("元素加倍后:",res_double)
- #查找缺失值(没有缺失值,全部返回false)
- print("缺失值判断:",res.isnull())
- #计算累计求和
- sum_res=res.cumsum()
- print("累计求和:",sum_res)
- #排序
- sorted_res=res.sort_values()
- print("排序后结果为:",sorted_res)
- print(res.sum()) # 输出 Series 的总和
- print(res.mean()) # 输出 Series 的平均值
- print(res.max()) # 输出 Series 的最大值
- print(res.min()) # 输出 Series 的最小值
- print(res.std()) # 输出 Series 的标准差
- print("=====================series (类似一维数组) end===========================")
- #2.DataFrame表格 (存在数据)#
- plt.rcParams['font.family'] = 'SimHei' # 替换为你选择的字体
- mydataset={
- "sites": ["google","Runoob","wiki"],
- "number": [1,2,3]
- }
- df = pd.DataFrame(mydataset) #绘图:填充数据
- df.plot(kind='bar',x='sites',y='number',figsize=(8, 5))
- plt.title("i'm title标题")
- plt.xlabel("x sites")
- plt.ylabel("y number")
- plt.show()
- print("=====================DataFrame表格 end ===========================")
- #3.合并2个 Series对象成一个DataFrame#
- series_apple=pd.Series([1,2,7,4])
- series_banana=pd.Series([2,6,3,5])
- df=pd.DataFrame({'Apples':series_apple,'Bananas':series_banana})
- #显示dataFrame
- print(df)
- print("=====================合并2个 Series对象成一个DataFrame end ===========================")
-
- #4.dataframe#
- data = {
- 'Name': ['alice','bob','charlies','david'],
- 'Age': [25,30,35,40],
- 'City': ['New York','Los Angeles','Chicago','Huston']
- }
- df=pd.DataFrame(data)
- print(df.head(2)) #查看前两行数据
- print(df.info()) #查看dataframe基本信息
- print(df.describe()) #获取描述统计信息
- print("================================================")
- #按年龄排序
- df_sorted= df.sort_values(by='Age',ascending=False)
- print(df_sorted)
- print("================================================")
- #选择指定列
- print(df[['Name',"Age"]])
- print("================================================")
- #按照索引选择行
- print(df.iloc[1:3]) #选择第二到第三行
- print("================================================")
- #分组统计,按城市分组,计算平均年龄
- print(df.groupby('City')['Age'].mean())
- print("================================================")
- #处理缺失值(填充缺失值)
- df['Age']=df['Age'].fillna(70)
- print("路径:",os.getcwd())
- #导出为cvs文件
- df.to_csv('./data/output.csv',index=False) # 导出时不导出index列
- print("=====================导出csv成功===========================")
- #读取cvs文件数据,加载为DataFrame
- df=pd.read_csv("./data/vgsales.csv")
- #print(df.to_string()) #显示dataframe读取到的所有数据
- print(df.head(10)) #读取前10行数据
- print(df.tail(10)) #读取尾10行数据
- print("=====================dataframe end===========================")
- #5. pandas excel
- df=pd.read_excel('./data/transactions.xlsx') #读取excel表单数据
- print(df)
- df=pd.read_excel('./data/transactions.xlsx',sheet_name='Sheet2',skiprows=0) #读取指定sheet名字的数据
- print(df)
- print("=====================pandas excel end===========================")
- #6.pandas JSON
- df = pd.read_json('./data/sites.json')
- print(df.to_string())
- data=[
- {
- "id": "A001",
- "name": "菜鸟教程",
- "url": "www.runoob.com",
- "likes": 61
- },
- {
- "id": "A002",
- "name": "Google",
- "url": "www.google.com",
- "likes": 124
- },
- {
- "id": "A003",
- "name": "淘宝",
- "url": "www.taobao.com",
- "likes": 490
- }
- ]
- df=pd.DataFrame(data)
- print(df)
- print("=====================pandas JSON end===========================")
- #7.数据清洗#
- person = {
- "name": ['Google', 'Runoob', 'Runoob', 'Taobao'],
- "age": [50, 40, 40, 23]
- }
- df = pd.DataFrame(person)
- print(df.duplicated()) #查找是否有重复值:有 true,否则 false
- print(df.drop_duplicates()) #删除重复值
- print("=====================数据清洗 end===========================")
- # dfs=pd.read_html('https://www.runoob.com')
- # df=dfs[0]
- # print("result:",df.columns)
复制代码- import matplotlib.pyplot as plt
- import numpy as np
- """
- matplotlib 是python的绘图库,主要用于绘制各种静态、动态、交互式的图表,
- 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
- """
- # print(mat.__version__)
- # xpoints = np.array([0,6])
- # ypoints = np.array([0,100])
- #plt.plot(xpoints,ypoints)
- #plt.scatter(xpoints,ypoints)
- #plt.bar(xpoints,ypoints)
- # plt.hist(xpoints,ypoints)
- # plt.show()
- # plt.rcParams['font.family'] = 'SimHei' # 替换为你选择的字体
- #
- # ypoints=np.array([1,3,4,5,8,9,6,1,3,4,5,2,4])
- # plt.plot(ypoints,'+:r')
- # #plt.plot(ypoints,marker='*')
- # plt.title("i'm title标题")
- # plt.xlabel("x girl")
- # plt.ylabel("y boy")
- # plt.show()
- #绘制正余弦
- # x= np.arange(0,4*np.pi,0.1) # start ,stop,step
- # y=np.sin(x)
- # z=np.cos(x)
- # plt.plot(x,y,x,z)
- # plt.show()
- #网格线
- # x=np.array([1,2,3,4])
- # y=np.array([1,4,9,16])
- #
- # plt.title("grid Test")
- # plt.xlabel("x-label")
- # plt.ylabel("y-label")
- # plt.plot(x,y)
- # plt.grid()
- # plt.show()
- #绘制多图
- #plot1
- # xpoints=np.array([0,6])
- # ypoints=np.array([0,100])
- # plt.subplot(1,2,1)
- # plt.plot(xpoints,ypoints)
- # plt.title("plot1")
- #
- # #plot2
- # x=np.array([1,2,3,4])
- # y=np.array([1,4,9,16])
- # plt.subplot(1,2,2)
- # plt.plot(x,y)
- # plt.title("plot2")
- #
- # plt.suptitle("subplot test")
- # plt.show()
- #散点图
- # x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
- # y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
- # colors=np.array(["red","green","black","orange","purple","beige","cyan","magenta"])
- # plt.scatter(x,y,c=colors)
- # plt.show()
- #绘制柱形图
- # x=np.array(["test1","test2","test3","test4"])
- # y=np.array([12,22,6,18])
- # plt.bar(x,y,color = "#4CAF50")
- # plt.show()
- #绘制饼状图
- y=np.array([35,25,15,15])
- plt.pie(y,
- labels=['A','B','C','D'],
- colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"]
- )
- plt.title("title heha")
- plt.show()
- #保存图像数据#
- # img=np.random.rand(10,10,3)
- # #绘制图像
- # plt.imshow(img)
- # #显示图像
- # plt.show()
- # #保存图像数据
- # plt.imsave("./data/test.png",img)
- #读取图像文件数据#
- img=plt.imread('./data/img.png')
- plt.imshow(img)
- plt.show()
复制代码 2.呆板学习
- import sklearn
- from sklearn.datasets import load_iris
- from sklearn.model_selection import train_test_split
- from sklearn.pipeline import Pipeline
- from sklearn.preprocessing import StandardScaler
- from sklearn.svm import SVC
- """
- Sklearn,全称为 Sklearn,是一个基于 Python的开源机器学习库
- Sklearn 适用于各类机器学习任务,如分类、回归、聚类、降维等
- """
- #验证scikit-learn(机器学习库)是否安装成功
- print(sklearn.__version__)
- #PipeLine 使用#
- #1.加载数据
- data= load_iris()
- x,y= data.data,data.target
- #2.将数据集划分为训练集和测试集
- X_train,X_test,y_train,y_test= train_test_split(x,y,test_size=0.2,random_state=42)
- #3.创建PipeLine
- pipeline= Pipeline([
- ('scaler',StandardScaler()), #数据标准化
- ('svc',SVC()) #支持向量机分类
- ])
- #4.训练模型
- pipeline.fit(X_train,y_train)
- #5.预测结果
- y_pred=pipeline.predict(X_test)
- #6.打印模型精度
- print(f"Model accuracy:{pipeline.score(X_test,y_test)}")
复制代码- import pandas as pd
- from sklearn.tree import DecisionTreeClassifier
- from sklearn.model_selection import train_test_split
- from sklearn.metrics import accuracy_score
- """
- 机器学习利用模型预测结果步骤
- """
- #1.导入数据
- music_data=pd.read_csv('./data/music.csv')
- #music_data
- #2.清洗数据
- x=music_data.drop(columns=['genre']) #删除列
- y = music_data['genre'] #获取一列数据
- #3.分隔数据成训练的数据集
- x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)
- #4.创建模型
- model= DecisionTreeClassifier()
- model.fit(x,y)
- #5.利用模型预测结果
- predictions=model.predict(x_test)
- #predictions
- # 6.计算准确的结果
- score=accuracy_score(y_test,predictions)
- score
复制代码- import pandas as pd
- from sklearn.tree import DecisionTreeClassifier
- import joblib
- """
- 持久化模型
- """
- #1.导入数据
- music_data=pd.read_csv('./data/music.csv')
- #2.清洗数据
- x=music_data.drop(columns=['genre']) #删除列
- y = music_data['genre'] #获取一列数据
- #4.创建模型
- model= DecisionTreeClassifier()
- model.fit(x,y)
- #5.存储训练的模型
- joblib.dump(model,'./data/music-recommender.joblib')
- #6.利用模型预测结果
- #predictions=model.predict([[21,1]])
复制代码- import pandas as pd
- from sklearn.tree import DecisionTreeClassifier
- import joblib
- """
- 加载训练模型
- """
- #加载训练的music模型#
- model=joblib.load('./data/music-recommender.joblib')
- #利用训练的模型预测结果
- predictions=model.predict([[21,1]])
- print("加载训练模型,预测结果为:")
- for obj in predictions:
- print(obj)
复制代码- import pandas as pd
- from sklearn.tree import DecisionTreeClassifier
- from sklearn import tree
- """
- 绘图显示模型
- """
- #导入数据
- music_data=pd.read_csv('./data/music.csv')
- #.清洗数据
- x=music_data.drop(columns=['genre']) #删除列
- y = music_data['genre'] #获取一列数据
- #创建模型
- model= DecisionTreeClassifier()
- model.fit(x,y)
- #绘图显示模型
- tree.export_graphviz(model,
- out_file='./data/music-recommer.dot',#out_file:以何种图像语言描述
- feature_names=['age','gender'],
- class_names=sorted(y.unique()),
- label='all',
- rounded=True, #四舍五入
- filled=True
- )
- print("绘图显示模型成功!")
复制代码 查察xx.dot文件如下:
vscode设置Graphviz和dot语言环境:
1.安装Graphviz (https://www.graphviz.org/)
2.查察dot文件必须给vscode安装vscode-graphviz插件和Graphviz Interactive Preview 插件
3.实行下令:graphviz: open preveiw to the side
3.pytorch
- from torch.utils.data.dataset import Dataset
- from PIL import Image
- import os
- """
- 创建一个Dataset步骤
- 定义一个MyData类继承Dataset,实现getitem和len方法来读取数据和返回数据数量
- 注意:
- 1. __init__方法中,需要传入root_dir和label_dir参数,分别表示数据集根路径和所需label路径
- 2. __getitem__方法中,需要返回img和label,img为PIL Image格式的图片,label为图片所对应的label
- 3. __len__方法中,返回数据集的图片数量
- """
- class MyData(Dataset):
- def __init__(self,root_dir,label_dir):
- self.root_dir = root_dir
- self.label_dir = label_dir
- self.path=os.path.join(self.root_dir,self.label_dir)
- self.img_path=os.listdir(self.path)
- def __getitem__(self, idx):
- img_name= self.img_path[idx]
- img_item_path=os.path.join(self.root_dir,self.label_dir,img_name)
- img=Image.open(img_item_path)
- label= self.label_dir
- return img,label
- def __len__(self):
- return len(self.img_path)
- root_dir= "./dataset/train"
- ants_label_dir="ants_image"
- bees_label_dir="bees_image"
- ants_dataset= MyData(root_dir,ants_label_dir)
- bees_dataset= MyData(root_dir,bees_label_dir)
- #拼接两个数据集
- train_dataset= ants_dataset + bees_dataset
- print(len(train_dataset))
- #显示制定的图片
- img,label = train_dataset[243]
- img.show()
复制代码- import os
- """
- 重命名数据集标签
- """
- root_dir="./dataset/train"
- target_dir="ants_image"
- img_path=os.listdir(os.path.join(root_dir,target_dir))
- label=target_dir.split('_')[0]
- out_dir="ants_label"
- for i in img_path:
- filename=i.split('.jpg')[0]
- with open(os.path.join(root_dir,out_dir,"{}.txt".format(filename)),'w') as f:
- f.write(label)
复制代码- from torch.utils.tensorboard import SummaryWriter
- #使用SummaryWriter写日志
 - writer = SummaryWriter("logs")
- for i in range(100):
- writer.add_scalar("y=2x",3*i,i)
- writer.close()
- """
- tensorboard使用
- 1.查看logs文件方法:
- terminal中 执行 tensorboard --logdir=pytorchDemo/logs 命令;
- 点击访问地址:默认本地http://localhost:6006
- """
复制代码 运行下令:tensorboard --logdir=logs ,tensonboard表现如下:
|