pythondiff
① python基礎命令都有什麼
(1)打開csv文件
import pandas as pd
df=pd.read_csv(r』data/data.csv』)
(2)dataframe index 重新排序
data=df.sort_index(axis=0,ascending=False)
(3)dataframe 按照某一列進行升序或者降序排列
data=df.sort([『date』],ascending=True升序,False降序)
(4)dataframe 的index重新從0開始
data=data.reset_index(drop=True)
(5)畫橫坐標是日期的圖
import matplotlib.pyplot as plt
x=data[『date』]#日期是字元串形式
y=data[『close price』]
plt.plot_date(x,y)
(6)求標准差
import numpy as np
np.std
(7)下取整
import math
math.floor
上取整:math.ceil
(8)希爾伯特變換
from scipy import fftpack
hx= fftpack.hilbert(price)
(9)值排序
data.order()
(10)差分
data.diff(1)#一階差分
dataframe 刪除元素
data.drop(元素位置)
(11)嵌套的array處理方法
import itertools
a = [[1,2,3],[4,5,6], [7], [8,9]]
out = list(itertools.chain.from_iterable(a))
(12)dataframe修改列名
data.columns=[『num』,』price』]
(13)excel表導入以後有空行解決辦法
import numpy as np
data= data.drop(data.loc[np.isnan(data.name.values)].index)
(15)diff用法
一.是dataframe或者series格式,直接就用data.diff()
二.是list格式,先轉換成轉換成list格式data=data.tolist() 然後dif=np.diff(data)
(16)dataframe中的日期type不是date格式,不能直接相加減,所以先轉換成list格式
t=data.time.tolist()
date_time = datetime.datetime.strptime(str(t),』%Y-%m-%d %H:%M:%S』)
date_time=datetime.date(date_time.year,date_time.month,date_time.day)
past= date_time - datetime.timedelta(days=n*365)
(17)符號化
np.sign
(18)字典的使用
label={『11』:』TP』,』1-1』:』FN』,』-11』:』FP』,』-1-1』:』TN』}
for i in range(len(data1)):
state=str(int(data1[i]))+str(int(data2[i]))
result.append(label[state])
(19)用plt畫圖的時候中文不顯示的解決辦法
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r」c:windowsontssimsun.ttc」, size=15)
plt.title(u』中文』, fontproperties=font_set)
(20)獲取當前程序運行的時間
from time import time
time1=time()
time2=time()
print(time2-time1)
以上是我找到的資料,對於我這個學習Python到半吊子的人來說也是要收藏起來的。
② Python 進行 Oracle 與 Mysql 不同資料庫類型之間的數據 diff
項目工作中,可能會有 A 類型資料庫數據需要遷移到 B 類型的資料庫中的需求。 例如:假設現有一個資料庫的遷移需求,是將 Oracle 資料庫里的數據遷移至 Mysql 資料庫中。 常規的測試方法是人工去抽樣檢測數據進行 diff,因為數據量太大,人工不可能實現全量數據的肉眼 diff。
因此,為提高數據 diff 的正確性以及測試效率,編寫測試腳本進行全量遷移數據的 diff 是十分必要的。以下內容將會著重講解如何使信銀用 Python 編寫腳本來實現 Oracle 與 Mysql 這種不同類型資料庫之間數據的 diff。
1、連接oracle資料庫並獲取要提取的數據,並輸出列表裡面嵌入的字典類型的數據
2、連接mysql資料庫並獲滑閉宴取要提取的數據態態,並輸出列表裡面嵌入的字典類型的數據
3、Oracle 與 Mysql 資料庫進行 diff,直接調用上面兩個方法即可
4、執行後的輸出結果
③ 用python語言 表示 更相減損法
先從網上摘錄一段演算法的描述如下:
更相減損法:也叫 更相減損術,是出自《 九章算術》的一種求最大公約數的演算法,它原本是為 約分而設計的,但它適用於任何需要求最大公約數的場合。
《九章算術》是中國古代的數學專著,其中的「更相減損術」可以用來求兩個數的最大公約數,即「可半者半之,不可半者,副置分母、子之數,以少減多,更相減損,求其等也。以等數約之。」
翻譯成現代語言如下:
第一步:任意給定兩個正整數;判斷它們是否都是偶數。若是,則用2約簡;若不是則執行第二步。
第二步:以較大的數減較小的數,接著把所得的差與較小的數比較,並以大數減小數。繼續這個操作,直到所得的減數和差相等為止。
看完上面的描述,我的第一反應是這個描述是不是有問題?從普適性來說的話,應該是有問題的。舉例來說,如果我求解4和4的最大公約數,可半者半之之後,結果肯定錯了!後面的演算法也不能夠進行!
不管怎麼說,先實現一下上面的演算法描述:
defMaxCommDivisor(m,n):
# even process
while m % 2 == 0 and n % 2 == 0:
m = m / 2
n = n / 2
# exchange order when needed
if m < n:
m,n = n,m
# calculate the max comm divisor
while m - n != n:
diff = m - n
if diff > n:
m = diff
else:
m = n
n = diff
return n
print(MaxCommDivisor(55,120))
print(MaxCommDivisor(55,77))
print(MaxCommDivisor(32,64))
print(MaxCommDivisor(16,128))
不用說,上面程序執行錯誤百出。那麼該如何更正呢?
首先,除的2最終都應該再算回去!這樣,程序修改如下:
defMaxCommDivisor(m,n):
com_factor = 1
if m == n:
return n
else:
# process for even number
while m % 2 == 0 and n % 2 == 0:
m = int(m / 2)
n = int(n / 2)
com_factor *= 2
if m < n:
m,n = n,m
diff = m - n
while n != diff:
m = diff
if m < n:
m,n = n,m
diff = m - n
return n * com_factor
print(MaxCommDivisor(55,120))
print(MaxCommDivisor(55,77))
print(MaxCommDivisor(32,64))
print(MaxCommDivisor(16,128))
通過修改,上面程序執行結果如下;
grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/11_演算法/01_TAOCP$ python max_com_divisor_gxjs.py
5
11
32
16
雖說這段程序寫出來看著有點怪怪的,但是總體的演算法還是實現了。與輾轉相除等演算法相比,這個在循環的層級上有一定的概率會減小。特別是最後的兩組測試數字對兒,這種情況下的效果要好一些。但是,總體上的演算法的效率,現在我還不能夠給個准確的衡量。