日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据挖掘零基础入门

發布時間:2024/3/7 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据挖掘零基础入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據挖掘基礎day01

  • 1.jupyter notebook的使用
    • 兩種模式下的通用快捷鍵
      • 命令模式
      • 編輯模式
    • 2. Matplotlib
      • 2.1實現一個簡單的畫圖
      • 2.2Matplotlib三層結構
      • 2.3折線圖繪制
        • 2.3.1Matplotlib.pyplot模塊
        • 2.3.2設置畫布屬性與圖片保存
          • 2.3.2.1圖片保存
        • 2.3.3修改x,y刻度
          • Matplotlib不顯示中文解決辦法
          • Matplotlib不顯示負號解決辦法
        • 2.3.4添加網格顯示
        • 2.3.5添加描述信息
        • 2.3.6多個圖像繪制
        • 2.3.7多個坐標系顯示圖像
        • 2.3.8折線圖應用場景
      • 2.4散點圖
      • 2.5柱狀圖
        • 2.5.1如何實現首日數據和首周數據的顯示
      • 2.6直方圖
        • 注意點
      • 2.7餅圖
    • 3numpy
      • ndarray
        • 屬性
        • 形狀
        • 方法
          • 生成數組的方法
            • 生成0和1的數組
            • 從現有數組中生成
            • 生成固定范圍的數組
            • 生成隨機數組
        • ndarray運算
          • 邏輯運算
          • 統計運算
          • 數組間運算
          • 矩陣運算
        • 數組的合并
        • 數組的分割
        • IO操作與數據處理
      • Pandas
        • 核心數據結構
          • DataFrame
          • DataFrame屬性
          • 方法
          • DataFrame索引的設置
          • MultiIndex與Panel
          • series
            • 屬性
          • 基本數據操作
          • DataFrame運算
          • Pandas畫圖
          • 文件的讀取與存儲
            • CSV
            • HDF5
            • JSON
          • Pandas高級処理
            • 缺失值處理
            • 數據離散化
            • 合并
            • 交叉表和透視表
            • 分組與聚合

1.jupyter notebook的使用

兩種模式下的通用快捷鍵

Shift+Enter ,執行本單元代碼,并自動跳轉到下一個cell
Ctrl+Enter,執行本單元代碼,并留在本cell中

cell行號前面的*號,代表本cell正在運行

命令模式

按Esc進入命令模式
Y,切換到代碼模式
M,切換到Markdown模式
A,在本cell前添加一個單元格
B,在本cell后添加一個單元格
雙擊D,刪除本單元格
Z,回退

編輯模式

按Enter進入編輯模式
多光標操作:ctrl鍵點擊鼠標
回退:ctrl+z
補全代碼:Tab
注釋:ctrl+/
屏蔽輸出結果:在輸出結果前雙擊

2. Matplotlib

專門用于2D畫圖
能將數據進行可視化,幫助理解數據。

2.1實現一個簡單的畫圖

import matplotlib.pyplot as plt %matplotlib inlineplt.figure() plt.plot([1, 0, 9], [4, 5, 6]) plt.show()

2.2Matplotlib三層結構

1)容器層
畫板層Canvas
畫布層Figure
繪圖區/坐標系 x、y軸區域
2)輔助顯示層 輔助信息顯示,如網格線等
3)圖像層 畫不同類型的圖,如柱狀圖,折線圖等

2.3折線圖繪制

2.3.1Matplotlib.pyplot模塊

#畫圖三步走# 創建畫布 plt.figure() # 繪制圖像 plt.plot([1,2,3,4,5,6,7], [17,17,18,15,11,11,13]) # 顯示圖像 plt.show()

2.3.2設置畫布屬性與圖片保存

plt.figure(figsize=(),dpi=)
figsize:指定圖的長寬
dpi:圖像的清晰度
返回fig對象

2.3.2.1圖片保存

plt.savefig(路徑)注意:要在plt.show前使用,因為plt.show會釋放figure資源

2.3.3修改x,y刻度

Matplotlib不顯示中文解決辦法

只需要加入兩行代碼即可

import matplotlib matplotlib.rc('font', family='FangSong')
Matplotlib不顯示負號解決辦法
plt.rcParams['axes.unicode_minus'] = False # 需求:畫出某城市11點到12點的溫度變化 import random #準備數據 x = range(60) y_shanghai = [random.uniform(15,18) for i in x] #創建畫布 plt.figure(figsize=(20,8),dpi = 80) #繪制圖像 plt.plot(x,y_shanghai)#添加x、y刻度 # 準備x的刻度說明 x_lable = ["11點{}分".format(i) for i in x] plt.xticks(range(0,60,5),x_lable[::5]) plt.yticks(range(0,40,5)) #顯示圖像 plt.show()

2.3.4添加網格顯示

plt.grid(True,linestyle=’–’,alpha=0.5)
True:是否添加網格 默認為True
linestyle:網格風格
alpha:透明度

#添加網格顯示 plt.grid(True,linestyle='--',alpha=0.5)

2.3.5添加描述信息

#添加描述徐信息 plt.xlabel("時間變化") plt.ylabel("溫度變化") plt.title("某城市11點-12點溫度變化")

2.3.6多個圖像繪制

# 需求:畫出某城市11點到12點的溫度變化 import random #準備數據 x = range(60) y_shanghai = [random.uniform(15,18) for i in x] y_beijing=[random.uniform(1,3) for i in x] #創建畫布 plt.figure(figsize=(20,8),dpi = 80) #繪制圖像 plt.plot(x,y_shanghai,color='r',linestyle='-.',label='上海') plt.plot(x,y_beijing,color='b',label="北京")#顯示圖例 plt.legend() *也可以使用loc參數改變圖例的位置 #添加x、y刻度 # 準備x的刻度說明 #添加網格顯示 plt.grid(True,linestyle='--',alpha=0.5)#添加描述徐信息 plt.xlabel("時間變化") plt.ylabel("溫度變化") plt.title("上海、北京11點-12點溫度變化") plt.xticks(range(0,60,5)) plt.yticks(range(0,40,5)) #顯示圖像 plt.show()

2.3.7多個坐標系顯示圖像

fragure,axes = plt.subplots(nows=1,ncols=1,**frags)
nows:幾行
ncols:幾列
會返回畫布和畫圖區對象
axes[0]代表第一個圖像 使用axes.方法名 使用
axes[1]代表第二個圖像
以此類推

import random #準備數據 x = range(60) y_shanghai = [random.uniform(15,18) for i in x] y_beijing=[random.uniform(1,3) for i in x] #創建畫布 # plt.figure(figsize=(20,8),dpi = 80) figure,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi = 80) #繪制圖像 axes[0].plot(x,y_shanghai,color='r',linestyle='-.',label='上海') axes[1].plot(x,y_beijing,color='b',label="北京") #顯示圖例 axes[0].legend() axes[1].legend() #添加x、y刻度 # 準備x的刻度說明 #添加網格顯示 axes[0].grid(True,linestyle='--',alpha=0.5) axes[1].grid(True,linestyle='--',alpha=0.5)#添加描述徐信息 axes[0].set_xlabel("時間變化") axes[0].set_ylabel("溫度變化") axes[0].set_title("上海11點-12點溫度變化") axes[1].set_xlabel("時間變化") axes[1].set_ylabel("溫度變化") axes[1].set_title("北京11點-12點溫度變化") axes[0].set_xticks(range(0,60,5)) axes[0].set_yticks(range(0,40,5)) axes[1].set_xticks(range(0,60,5)) axes[1].set_yticks(range(0,40,5)) #顯示圖像 plt.show()

2.3.8折線圖應用場景

某事物或某指標隨時間的變化狀況

還可以畫各種數學函數圖像

# 繪制數學函數圖像 # 準備數據 import numpy as npx = np.linspace(-10,10,1000) y = 2 * x * xplt.figure(figsize=(20,8),dpi = 80) plt.grid(linestyle='-.',alpha=0.5) plt.plot(x,y) plt.show()

2.4散點圖

import matplotlib.pyplot as plt #散點圖 #準備數據 x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64,163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51,21.61, 483.21, 245.25, 399.25, 343.35]y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34,140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 ,30.74, 400.02, 205.35, 330.64, 283.45] #創建畫布 plt.figure(figsize=(20,8),dpi = 80) #繪制圖像 plt.scatter(x,y) #顯示圖像 plt.show()

2.5柱狀圖

#繪制票房分布直方圖 #準備數據 movie_names = ['雷神3:諸神黃昏','正義聯盟','東方快車謀殺案','尋夢環游記','全球風暴', '降魔傳','追捕','七十七天','密戰','狂獸','其它'] tickets = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]#窗間畫布 plt.figure(figsize=(20,8),dpi = 80) #繪制圖像 plt.bar(range(len(movie_names)),tickets,color=['b','r','g','y','c','m','y','k','c','g','b']) # 一定要先寫x,y坐標再寫color等其他信息 #修改x刻度 plt.xticks(range(len(movie_names)),movie_names) plt.title('票房數據') plt.grid(linestyle="-",alpha=0.5) #顯示圖像 plt.show()

2.5.1如何實現首日數據和首周數據的顯示

# 準備數據 movie_name = ['雷神3:諸神黃昏','正義聯盟','尋夢環游記']first_day = [10587.6,10062.5,1275.7] first_weekend=[36224.9,34479.6,11830]#創建畫布 plt.figure(figsize=(20,8),dpi = 80) #繪制圖像 plt.bar(range(3),first_day,width=0.2,label='首日票房') plt.bar([0.2,1.2,2.2],first_weekend,width=0.2,label="首周票房") #width 控制柱子的寬度 #修改x刻度 plt.xticks([0.1,1.1,2.1],movie_name) plt.legend() #要配合繪制圖像中的label使用#顯示圖像 plt.show()

2.6直方圖

# 需求:電影時長分布狀況 # 1、準備數據 time = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]#創建畫布 plt.figure(figsize=(20,8),dpi = 80) #繪制直方圖 plt.hist(time,(max(time)-min(time))//2) #組數等于極差/組距 plt.xticks(range(min(time),max(time)+2,2)) plt.grid(linestyle='-',alpha=0.5) #顯示圖像 plt.show()

注意點

畫圖的時候注意組距的設置

2.7餅圖

movie_name = ['雷神3:諸神黃昏','正義聯盟','東方快車謀殺案','尋夢環游記','全球風暴','降魔傳','追捕','七十七天','密戰','狂獸','其它']place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]plt.figure(figsize=(20,8),dpi = 80)plt.pie(place_count,labels=movie_name,colors=['b','r','g','y','c','m','y','k','c','g','y'], autopct="%.2f%%") #在pie的api中plt.pie(x,labels=,colors,autopct=) x:填入數字即可,pie會自動計算百分比plt.axis('equal') #設置圖形好像 圓圓的且居中 plt.legend()plt.show()

3numpy

高效的運算工具
Numpy提供了一個N維數組類型ndarray,他描述了相同類型的“items”的集合。

ndarray

屬性

shape
ndim
size
dtype
itemsize

形狀

方法

生成數組的方法
生成0和1的數組

np.zeros(shape)
np.ones(shape)

從現有數組中生成

np.array()
np.asarray()深拷貝
np.copy()淺拷貝

生成固定范圍的數組

np.linspace(0,10,1000) 生成[0,10]之間1000個元素,且等距離
np.arange(0,10,1) 生成[0,10)步長為1 的數組

生成隨機數組

均勻分布:每組的可能性相同
np.random.uniform(low=-1,high=1,size=1000000)

正態分布:
np.random.normal(loc=1.75,scale=0.1,size=10000) loc:均值,scale:方差,size:大小

數組的索引和切片

[0,:3] :3代表從0-3的數據

形狀修改
ndarray.reshape(shape) 返回新的ndarray, 原始數據沒有改變,且reshape并沒有把行列互換,只是把原有數據重新切割,分成shape形狀
ndarray.resize() 沒有返回值, 對原始的ndarray進行了修改,且reshape并沒有把行列互換,只是把原有數據重新切割,分成shape形狀
ndarray.T 轉置 行變成列,列變成行 返回一個ndarray,原數據未改變

類型修改
ndarray.astype(type)
ndarray序列化到本地
ndarray.tostring()

數組去重
ndarray.unique()

ndarray運算

邏輯運算

布爾索引

通用判斷函數
np.all(布爾值) 只要有一個FALSE就返回FALSE,只有全是True才返回True
np.any(布爾值)只要有一個True就為True,只有全是FALSE才返回FALSE

三元運算符
np.where(三元運算符)
np.where(布爾值,True的值,False的值)

涉及符合邏輯需要額外的函數logical_and/or
大于0.5且小于1
np.where(np.logical_and(temp > 0.5, temp < 1), 1, 0)
大于0.5或小于-0.5
np.where(np.logical_or(temp > 0.5, temp < -0.5), 11, 3)

統計運算

統計指標函數
min,max,mean,median,var,std
np.函數名()
ndarray.方法名()

返回最大值最小值位置
np.argmax(tem,axis=0)
np.argmin(tem,axis=0)

數組間運算

ndarray數組與數的運算
正常的運算即可 加減乘除等

數組與數組的運算
數組與數組行列不同時,直接運算會出錯

廣播機制
執行broadcast的前提在于,兩個nadarray執行的是element-wise的運算,Broadcast機制的功能是為了方便不同形狀的ndarray(numpy庫的核心數據結構)進行數學運算。

當操作兩個數組時,numpy會逐個比較它們的shape(構成的元組tuple),只有在下述情況下,兩個數組才能夠進行數組與數組的運算。

  • 維度相等
  • shape(其中相對應的一個地方為1)

    在根據廣播機制修改后,便可以運算了
矩陣運算

兩種方法存儲矩陣:

  • np.ndarray()
  • np.mat()

矩陣乘法:
如果矩陣使用ndarray存儲的話,可以用:

  • np.matmul()
  • np.dot()

如果矩陣用mat存儲,可以直接用運算符“*”來進行運算

如果ndarray想用“*”來進行運算,用@符號即可 eg:a @ b得到的結果便是a矩陣和b矩陣相乘的結果

數組的合并

np.hstack() 水平拼接
np.vstack() 豎直拼接
np.concatenate((a,b,c,…),axis=0/1) 若axis為0,豎直拼接,axis=1為水平拼接

數組的分割

np.split()

IO操作與數據處理


會遇到有缺失值的情況,有兩種處理情況:

  • 把含有缺失值得數據刪除掉
  • 若數據量少,可以使用插補法,求某一列平均值或中位數等

但是在numpy中處理很麻煩,所以使用pandas

Pandas

優勢:
便捷的數據處理能力
讀取文件方便
封裝了Matplotlib和numpy

核心數據結構

DataFrame

既有行索引,又有列索引的二維數組。
創建索引,并修改行索引index和列索引columns



DataFrame屬性

shape:形狀

index:行索引列表

columns:列索引列表

values:得到原始的ndarray數據

T:轉置

方法

head():默認顯示前五行,但也可以指定前幾行

tail():顯示數據的最后五行

DataFrame索引的設置
  • 修改行列索引值
    不可以單獨修改,必須整體修改

  • 重設索引

  • 設置新索引

MultiIndex與Panel

multiindex屬性:

Panel:存儲三維結構的容器
pandas.Panel(data=None,items=None,major_axis=None,minor_axis=None,copy=False,dtype=None)
items - axis 0,每個項目對應于內部包含的數據幀(DataFrame)。
major_axis - axis 1,它是每個數據幀(DataFrame)的索引(行)。
minor_axis - axis 2,它是每個數據幀(DataFrame)的列。
Pandas從版本0.20.0開始棄用,推薦的用于表示3D數據的方法是DataFrame上的MultiIndex方法

p = pd.Panel(np.arange(24).reshape(4,3,2),items=list('ABCD'),major_axis=pd.date_range('20130101', periods=3),minor_axis=['first', 'second']) p["A"] p.major_xs("2013-01-01") p.minor_xs("first") ###由于panel是三維數據,因此只能從某一個維度切入,可以理解為從立方體中抽出一個平面(dataframe)觀察,則上面三行代碼結果如下圖;而series則是相當于從平面(dataframe)中抽出一行或一列來觀察

series

帶索引的一維數組

屬性

index
values


總結:DataFrame 是series的容器,Panel是DataFrame的容器

基本數據操作

索引操作

  • 直接索引

  • 按名字索引

  • 按數字索引

  • 組合索引
    數字和名字混用

# 獲取行第1天到第4天,['open', 'close', 'high', 'low']這個四個指標的結果 data.ix[:4, ['open', 'close', 'high', 'low']] # 現在不推薦用了 ###但仍可利用loc和iloc data.loc[data.index[0:4], ['open', 'close', 'high', 'low']] data.iloc[0:4, data.columns.get_indexer(['open', 'close', 'high', 'low'])]

賦值操作

排序操作

  • 對內容進行排序

dataframe

series

  • 對索引進行排序

dataframe

series

DataFrame運算

算術運算

邏輯運算
邏輯運算符


邏輯運算函數
query()

isin()

統計運算
describe()
將返回關于列的最值,均值,方差等多種信息


累計統計函數
cumsum 計算前1/2/3/…/n個數的和
cummax 計算前1/2/3/…/n個數的最大值
cummin 計算前1/2/3/…/n個數的最小值
cumprod 計算前1/2/3/…/n個數的積

自定義運算
apply(func, axis=0)

? func: 自定義函數

? axis=0: 默認按列運算,axis=1按行運算

Pandas畫圖

pandas.DataFrame.plot
DataFrame.plot(x=None, y=None, kind=‘line’)

x: label or position, default None
y: label, position or list of label, positions, default None
Allows plotting of one column versus another
kind: str
‘line’: line plot(default)
''bar": vertical bar plot
“barh”: horizontal bar plot
“hist”: histogram
“pie”: pie plot
“scatter”: scatter plot

文件的讀取與存儲
CSV

讀取 CSV
pd.read_csv(path,usecols,names)

存儲CSV
DataFrame.to_csv()
path_or_buf :string or file handle , default None
sep : character, default ‘,’(分隔符)
columns :sequence,optional 一般填入列表
mode:'w‘:重寫,'a’追加
index:是否寫入 行索引
header:boolean or list of string,default True,是否寫進列索引值

HDF5

hdf5可以存儲三維數據
HDF5文件的讀取和存儲需要指定一個鍵,值為要存儲的DataFrame,也就是說hdf5存儲的是panel這種三維類型,一個key對應一個dataframe

pandas.read_hdf(path_or_buf, key=None, kwargs)

從h5文件當中讀取數據

path_or_buffer: 文件路徑
key: 讀取的鍵
mode: 打開文件的模式
reurn: The Selected object
DataFrame.to_hdf(path_or_buf, key, kwargs)

注:如果一個文件有兩個key,在讀取的時候要指定鍵,否則會報錯

JSON

pandas.read_json(path_or_buf=None,orient=None,typ=“frame”,lines=False)

將JSON格式轉換成默認的Pandas DataFrame格式

  • orient: string,Indication of expected JSON string format.

‘split’: dict like {index -> [index], columns -> [columns], data -> [values]}
‘records’: list like [{column -> value}, …, {column -> value}] 一般都用這個
‘index’: dict like {index -> {column -> value}}
‘columns’: dict like {column -> {index -> value}}, 默認該格式
‘values’: just the values array

  • lines: boolean, default False 作用:是否按行讀取文件

按照每行讀取json對象

  • typ: default ‘frame’,指定轉換成的對象類型series或者dataframe

dataframe.to_json("./test.json",orient=“records”,lines=True)

Pandas高級処理
缺失值處理

如何進行缺失值處理?

  • 刪除含有缺失值的樣本
  • 替換/插補數據

如何處理NaN?

第一步:判斷數據中是否存在NaN

pd.isnull(df)

pd.notnull(df)
第二步:刪除含有缺失值的樣本
df.dropna(inplace=True/False) 默認按行刪除

替換插補
df.fillna(value,inplace=True/False)

inplace如果想原位置修改的話就是True,如果想返回一個新的df就用False,默認為False

如何處理不是NaN缺失值的?
讀取數據
path = “wisconsin.data”->參數可以直接是一個網址
name = [“Sample code number”, “Normal Nucleoli”,“Mitoses”, “Class”]
data = pd.read_csv(path, names=name)

#這里的非nan標記值缺失值就是利用“?”表示的,因此利用參數to_replace,value=np.nan,將默認標記值替換為nan值,然后再利用前面方法處理nan缺失值
替換
data_new = data.replace(to_replace="?", value=np.nan)

數據離散化

one-hot編碼(啞變量)
分組
自動分組 pd.qcut(data,bins)
自定義分組 pd.cut(data,[])
分好組以后 返回series
轉換為one-hot編碼
pd.get_dunmmies(sr,prefix=)

合并

按方向拼接
pd.concat([data1,data2],axis = )

按索引進行拼接(與數據庫中的內外連接,左連接,右連接一起學習)
pd.merge(left,right,how=“inner”,on=[索引]) how可以選擇left,right,inner,outer

交叉表和透視表

交叉表
data = pd.crosstab(stock[“week”], stock[“pona”])
探索兩個變量之間的關系



透視表
stock.pivot_table([“pona”], index=[“week”])相對于交叉表操作簡單些

分組與聚合

分組與聚合(聚合一般是統計函數)通常是分析數據的一種方式,通常與一些統計函數一起使用,查看數據的分組情況

  • dataframe
  • series

總結

以上是生活随笔為你收集整理的数据挖掘零基础入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。