01 データキャプチャ 1. 背景調査 1) robots.txt をチェックして、サイトのクロールにどのような制限があるのかを確認します。 2) pip installbuiltwith; pip python-whois をインストールします 2. データキャプチャ: 1) 動的に読み込まれるコンテンツ: セレンの使用 - #!/usr/bin/env python
- # -*- コーディング: utf-8 -*-
- セレンからWebDriverをインポート
- selenium.webdriver.common.keysからKeys をインポートします
- インポート時間
- インポートシステム
- リロード(sys)
- sys.setdefaultencoding( 'utf8' )
- ドライバー = webdriver.Chrome( "/Users/didi/Downloads/chromedriver" ) driver.get( 'http://xxx' )
- elem_account = driver.find_element_by_name( "ユーザー名" )
- elem_password = driver.find_element_by_name( "パスワード" )
- elem_code = driver.find_element_by_name( "検証コード" ) elem_account.clear()
- elem_password.clear()
- 要素コード.クリア()
- elem_account.send_keys( "ユーザー名" )
- elem_password.send_keys( "pass" )
- elem_code.send_keys( "abcd" )
- 時間.睡眠(10)
- driver.find_element_by_id( "btnSubmit" ).submit()
- time .sleep(5) driver.find_element_by_class_name( "txtKeyword" ).send_keys(u "x" ) #検索をシミュレート driver.find_element_by_class_name( "btnSerch" ).click()
- # ...処理を省略
- dw = driver.find_elements_by_xpath( '//li[@class="min"]/dl/dt/a' )
- dw内のアイテムの場合:
- url = item.get_attribute( 'href' )
- URLの場合:
- ulist.append(URL) を追加します。
- print(url + "---" + str(pnum))
- print( "####################" )
2) 静的に読み込まれたコンテンツ (1)規則性 (2)lxml; (3)bs4 - #!/usr/bin/env python
- # -*- コーディング: utf-8 -*-
- string = r 'src="(http://imgsrc\.baidu\.com.+?\.jpg)" pic_ext="jpeg"' # 正規表現 string urls = re.findall(string, html)
- 輸入リクエスト
- lxmlからetreeをインポート
- urllibをインポートする
- レスポンス = リクエスト.get(url)
- html = etree.HTML(requests.get(url).content)
- res = html.xpath( '//div[@class="d_post_content j_d_post_content "]/img[@class="BDE_Image"]/@src' ) # lxml
- 輸入リクエスト
- bs4からBeautifulSoupをインポート
- soup = BeautifulSoup(response.text, 'lxml' ) # レスポンスを解析し、BeautifulSoup オブジェクトを作成します urls = soup.find_all( 'img' , 'BDE_Image' )
3): アンチクライムとアンチアンチクライム (1)リクエスト頻度 (2)リクエストヘッダー (3)IPプロキシ 4): クローラーフレームワーク: (1):スクレイピー (2)ポーシャ 02 データ分析 1. よく使われるデータ分析ライブラリ: NumPy: ベクトル化された演算に基づいています。 http://www.numpy.org/ 1) リスト => マトリックス 2) ndim: 次元;形状: 行と列の数。サイズ: 要素の数 Scipy: NumPy の拡張版で、高度な数学、信号処理、統計などをカバーしています。https://www.scipy.org/ Pandas: Series や DataFrame などの高度なデータ構造を迅速に構築するための NumPy ベースのパッケージ。パンダス 1): NumPy は List に似ており、Pandas は Dict に似ています。 Matplotlib: プロットライブラリ。 1): 強力な描画ツールです。 2): 散布図、折れ線グラフ、棒グラフなどをサポートします。 簡単な例: - pip2 Numpy をインストール
- >>> numpyをnpとしてインポートします
- >>> a = np.arange(10)
- >>> は
- 配列([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- >>> ** 2
- 配列([0, 1, 4, 9, 16, 25, 36, 49, 64, 81])
- pip2 scipy をインストール
- >>> numpyをnpとしてインポートします
- >>> scipyからlinalgをインポート
- >>> a = np.array([[1, 2], [3, 4]])
- >>> linalg.det(a)
- -2.0
- pip2 パンダをインストールする
- >>> df = pd.DataFrame({ 'A' : pd.date_range( "20170802" , periods=5), 'B' : pd.Series([11, 22, 33, 44,
- 55])、 'C' : pd.Categorical([ "t" , "a" , "b" , "c" , "g" ])})
- >>> df
- ABC 0 2017-08-02 11 t 1 2017-08-03 22 a 2 2017-08-04 33 b 3 2017-08-05 44 c 4 2017-08-06 55 g
- pip2 Matplotlib をインストールする
- >>> matplotlib.pyplot をpltとしてインポートします
- >>> plt.plot([1, 2, 3])
- [<0x113f88f50のmatplotlib.lines.Line2D オブジェクト>]
- >>> plt.ylabel( "ディディ" )
- <0x110b21c10のmatplotlib.text.Text オブジェクト>
- >>> plt.show()
2. 高度なデータ分析ライブラリ: scikit-learn: 機械学習フレームワーク。 グラフは、データが 50 未満であることを示しています。いいえ: さらにデータが必要です。はい: 分類器を使用して続行します。 図から、分類、回帰、クラスタリング、次元削減の 4 種類のアルゴリズムがあることがわかります。 KNN: - #!/usr/ローカル/bin/python
- # -*- コーディング: utf-8 -*-
- '' '
- アイリスの予測 https://en.wikipedia.org/wiki/Iris_flower_data_set '' '
- # モジュールをインポートする
- __future__からprint_function をインポートする
- sklearnからデータセットをインポートする
- sklearn.model_selectionからtrain_test_split をインポートします
- sklearn.neighborsからKNeighborsClassifier をインポートします
- # データを作成する
- アイリス = datasets.load_iris()
- iris_X = iris.data # 萼片の長さと幅、花弁の長さと幅
- iris_y = iris.target # 花の種類 0, 1, 2
- 印刷(iris_X)
- 印刷(iris_y)
- iris.target_names を印刷します
- #モデルトレーニングとモデル予測を定義する
- X_train, X_test, y_train, y_test = train_test_split(iris_X, iris_y, test_size = 0.1) # トレーニングデータ 10% knn = KNeighborsClassifier() # KNN最近傍分類器を作成
- knn.fit(X_train, y_train) # トレーニングデータ
- predicts = knn.predict(X_test) # 予測結果を取得する
- # 結果を比較する
- print( "##########################" )
- 印刷(X_test)
- 印刷(予測)
- 印刷(y_test)
- # 予測精度を計算する
- print(knn.score(X_test, y_test))
- [[ 5. 3.3 1.4 0.2]
- [ 5. 3.5 1.3 0.3 ]
- [ 6.7 3.1 5.6 2.4 ]
- [ 5.8 2.7 3.9 1.2 ]
- [6.2.2 5.1.5]
- [6.3.4.81.8]
- [6.3 2.5 5. 1.9]
- [ 5. 3.6 1.4 0.2 ]
- [ 5.6 2.9 3.6 1.3 ]
- [ 6.9 3.2 5.7 2.3 ]
- [ 4.9 3. 1.4 0.2 ]
- [ 5.9 3. 4.2 1.5]
- [ 4.8 3. 1.4 0.1 ]
- [ 5.1 3.4 1.5 0.2 ]
- [ 4.7 3.2 1.6 0.2 ]]
- [0 0 2 1 1 2 2 0 1 2 0 1 0 0 0]
- [0 0 2 1 2 2 2 0 1 2 0 1 0 0 0]
- 0.933333333333
線形回帰 - #!/usr/ local /bin/python # -*- コーディング: utf-8 -*- '' '
- ボストンの住宅価格動向
- '' '
- # モジュールをインポートする
- __future__からprint_function をインポートする
- sklearnからデータセットをインポートする
- sklearn.linear_modelからLinearRegression をインポートします
- matplotlib.pyplot をpltとしてインポートします。
- # データを作成する
- loaded_data = datasets.load_boston() #ボストンの住宅価格
- data_X = ロードされたデータ.データ
- data_y = ロードされたデータ.ターゲット
- 印刷(データ_X)
- 印刷(データy)
- #モデルトレーニングとモデル予測を定義する
- model = LinearRegression() # 線形回帰
- model.fit(data_X, data_y) # トレーニングデータ
- print(model.predict(data_X[:4, :])) # 予測結果を取得する
- 印刷(データy[:4])
- # 結果
- print( "##########################" )
- X, y = datasets.make_regression(n_samples=100, n_features=1, noise=10) # 回帰モデルデータのサンプルを100個生成、サンプルごとに1つの特徴、ガウスノイズ
- plt.scatter(X, y) # 散布図
- plt.show()
03 データマイニング 1. キーワードのマイニング: 関連するアルゴリズム: TF-IDF 参考: http://www.ruanyifeng.com/blog/2013/03/tf-idf.html ニュース.txt: 滴滴出行とヨーロッパとアフリカの大手モビリティ企業であるTaxifyは、地域間の交通技術革新を支援するための戦略的提携を締結した。 2017-08-01 滴滴出行 [2017年8月1日、中国・北京/エストニア・タリン] 滴滴出行は本日、欧州とアフリカの大手モバイル旅行会社であるTaxifyと戦略的提携を結んだことを発表しました。 Didiは、インテリジェント輸送技術の研究開発への投資と協力を通じて、Taxifyが複数の市場でより深い市場拡大と技術革新を行うことを支援します。 Didi Chuxing は世界をリードするモバイル旅行プラットフォームです。 Didiは人工知能技術を活用し、タクシー、自家用車、高速車、高級車、ライドシェアサービスなど多様な旅行サービスを400以上の都市の4億人を超えるユーザーに提供しています。 Didi は、1,700 万人以上のドライバーに柔軟な雇用と収入の機会を提供すると同時に、人工知能技術を使用して、都市管理者が統合された持続可能なスマート輸送ソリューションを構築できるようにサポートしています。 2013 年にエストニアで設立された Taxify は、ヨーロッパとアフリカで最も急速に成長しているモバイル旅行会社です。現在、同社のタクシーおよびプライベートカーシェアリング旅行サービスネットワークは、ヨーロッパ、アフリカ、西アジアの中心都市をカバーしています。ハンガリー、ルーマニア、ポーランド、バルト三国、南アフリカ、ナイジェリア、ケニアを含む18か国に広がり、250万人以上のユーザーが利用しています。 Didi Chuxingの創設者兼CEOであるチェン・ウェイ氏は次のように語った。「Taxifyは、さまざまな市場で高品質で革新的な旅行サービスを提供しています。私たちは、モバイルインターネット技術の力を活用して、急速に進化する消費者のニーズに応え、従来の輸送業界の変革とアップグレードを支援することに尽力しています。この提携は、アジア、ヨーロッパ、アフリカの市場間の地域間スマート輸送リンクの構築に貢献すると信じています。」 Taxifyの創設者兼CEOであるマーカス・ビリグ氏は次のように述べた。「Taxifyはこの戦略的提携を活用して、欧州とアフリカの主要市場における主導的地位を強化していきます。Didiは、当社が欧州とアフリカで最高かつ最も効率的な旅行オプションとなるための理想的なパートナーだと信じています。」 - #!/usr/ local /bin/python # -*- コーディング: utf-8 -*- '' '
- 記事のキーワードを分析する
- '' '
- インポートOS
- コーデックをインポートする
- パンダをインポートする
- 輸入業者
- jieba.analyse をインポートする
- # データフォーマットのフォーマット
- tagDF = pandas.DataFrame(columns=[ 'filePath' , 'content' , 'tag1' , 'tag2' , 'tag3' , 'tag4' , 'tag5' ]) 試してください:
- と open ( './houhuiyang/news.txt' , 'r' ) as f: #コーパスを読み込む content = f.read ( ).strip()
- タグ = jieba.analyse.extract_tags(コンテンツ、topK=5) #TF_IDF
- tagDF.loc[len(tagDF)] = [ "./news.txt" , コンテンツ, タグ[0], タグ[1], タグ[2], タグ[3], タグ[4]]
- 印刷(タグDF)
- except例外、例:
- 印刷(例)
記事の上位5つのキーワードを計算します:旅行、Didi、Taxify、ヨーロッパとアフリカ、交通 2. 感情分析 感情的な言語情報: http://www.keenage.com/html/c_bulletin_2007.htm 1) 最も簡単な方法は感情辞書に基づいています。 2) より複雑なものは機械学習手法に基づいています。 - pip2 インストール nltk
-
- >>> nltk をインポートする
-
- >>> from nltk.corpus import stopwords #ストップワード >>> nltk.download() # コーパスをインストール
-
- >>> t = 「Didiは旅行会社です」
-
- >>> word_list = nltk.word_tokenize(t)
-
- >>> フィルタリングされた単語 = [ word_list内の単語を単語ごとに、 stopwords.words ( 'english' )] [ 'Didi' 、 'travel' 、 'company' ]
-
- >>> nltk.download( 'stopwords' ) #ストップワードをダウンロード
中国語と英語のNLP単語分割の違い 1): ヒューリスティック 2): 機械学習/統計手法: HMM、CRF 処理フロー: raw_text -> tokenize[pos tag] -> lemma / stemming[pos tag] -> stopwords -> word_list 04 Python分散コンピューティング - pip2 mrjjob をインストール
-
- pip2 pyspark をインストールする
1) Python マルチスレッド 2) Python マルチプロセッシング 3) グローバルインタープリタロックGIL 4) プロセス間通信キュー 5) プロセスプールプール; 6) Python の高階関数 - マップ/リデュース/フィルター
7) Linux パイプラインに基づく MapReducer [cat word.log | Python マッパー.py | Python リデューサー.py |ソート -k 2r] 単語.log 北京 成都 上海 北京 山西省 天津 広州 - #!/usr/ローカル/bin/python
-
- # -*- コーディング: utf-8 -*-
-
- '' '
-
- マッパー
-
- '' '
-
- インポートシステム
-
- 試す:
-
- sys.stdin内の行の場合:
-
- 行 = 行.分割()
-
- 行内の単語:
-
- len(word.strip()) == 0の場合:
-
- 続く
-
- count = "%s,%d" % (単語、1)
-
- print(カウント)
-
- IOErrorを除く、例:
-
- 印刷(例)
-
- #!/usr/ローカル/bin/python
-
- # -*- コーディング: utf-8 -*-
-
- '' '
-
- 減速機
-
- '' '
-
- インポートシステム
-
- 試す:
-
- 単語辞書 = {}
-
- sys.stdin内の行の場合:
-
- 行 = 行.分割( ", " )
-
- len(行) != 2の場合:
-
- 続く
-
- word_dict.setdefault(行[0], 0)
-
- word_dict[行[0]] += int (行[1])
-
- のために word_dict.items()のキー、値:
-
- stat = "%s %d" % (キー, 値 )
-
- 印刷(統計)
-
- IOErrorを除く、例:
-
- 印刷(例)
05 ニューラルネットワーク CPU/GPUバージョンがある 1) テンソルフローで構築されたニューラルネットワークは静的である 2) Pytorch http://pytorch.org/#pip-install-pytorch 構築されたニューラル ネットワークは動的です [Troch は Lua で書かれていますが、これは Python バージョンです] 簡単に言えば、データは次のようになります。 スカラーは、1、2、3 など、大きさのみを持ち方向を持たない量です。 ベクトルは大きさと方向を持つ量であり、実際には(1,2)のような数字の列である。 行列は、[1,2;3,4]のように、複数のベクトルを一列に結合して形成される一連の数値です。 テンソルは、任意の次元に配置された一連の数値の一般化です。図に示すように、行列は 3 次元テンソルの単なる 2 次元スライスです。 3 次元テンソルの下のスカラーを見つけるには、その位置を特定するための 3 次元座標が必要です。 TensorFlow pytorch は、テンソル データ構造を使用してすべてのデータを表します。 - #-*- コーディング: UTF-8 -*-
- #著者 houhuiyang
- 輸入トーチ
- numpyをnpとしてインポートする
- torch.autogradから変数をインポート
- torch.nn.function をFとしてインポートします。
- matplotlib.pyplot をpltとしてインポートします。
- np_data = np.arange(6).reshape((2, 3))
- torch_data = torch.from_numpy(np_data)
- テンソル2np = torch_data.numpy()
- 印刷(
- "\nnp_data" 、np_data、#matrix
- "\ntorch_data" 、torch_data、#テンソル
- "\nテンソルからnumpyへ" 、tensor2np
- )
- # データ = [-1, -2, 1, 2, 3]
- データ = [[1, 2], [3, 4]]
- テンソル = torch.FloatTensor(データ)
- # abs sin cos 平均 平均値 matmul/mm print(
- "\nnumpy" , np.matmul(データ, データ),
- "\ntorch" 、 torch.mm(テンソル、テンソル)
- )
- # テンソル変数
- tensor_v = torch.FloatTensor([[1,2], [3,4]]) variable = Variable(tensor_v, requires_grad= True ) # 中央値を計算
- t_out = torch.mean(tensor_v * tensor_v) # x ^ 2 v_out = torch.mean(variable * variable) # バックプロパゲーション print(
- テンソルv、
- 変数、
- t_out、
- v_out
- )
- v_out.backward() # 逆パス
- print(variable.grad) # 勾配
- '' '
- y = Wx 線形
- y =AF(Wx) 非線形 [活性化関数 relu/シグモイド/tanh]
- '' '
- x = torch.linspace(-5,5,200) # -5から5までの200ポイントを取る
- x = 変数(x)
- x_np = x.data.numpy()
- y_relu = F.relu(x).data.numpy()
- y_sigmoid = F.sigmoid(x).data.numpy()
- y_tanh = F.tanh(x).data.numpy()
- # y_softplus = F.softplus(x).data.numpy() # 確率プロット plt.figure(1, figsize=(8, 6))
- # plt.subplot(221) # サブプロットを描画する
- plt.plot(x_np, y_relu, c = "red" , label = "relu" ) plt.ylim(-1, 5)
- plt.legend(loc = "ベスト" )
- plt.show()
- # plt.サブプロット(222)
- plt.plot(x_np, y_sigmoid, c = "red" , label = "igmoid" )
- 線形回帰(-0.2, 1.2)
- plt.legend(loc = "ベスト" )
- plt.show()
- # plt.サブプロット(223)
- plt.plot(x_np, y_tanh, c = "red" , label = "subplot" )
- plt.ylim(-1.2, 1.2)
- plt.legend(loc = "ベスト" )
- plt.show()
シンプルなニューラルネットワークの構築 - #-*- コーディング: UTF-8 -*- #author オーバーウォッチ
- '' '
- 戻る
- 分類
- '' '
- 輸入トーチ
- torch.autogradから変数をインポート
- import torch.nn. functional as F # 活性化関数
- matplotlib.pyplot をpltとしてインポートします。
- x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim = 1) # 1次元を2次元に圧縮解除 y = x.pow(2) + 0.2 * torch.rand( x.size ())
- x, y = 変数(x), 変数(y)
- # 印刷(x)
- # 印刷(y)
- # plt.scatter(x.data.numpy(), y.data.numpy())
- # plt.show()
- class Net(torch.nn.Module): # torchのモジュールを継承します
- def __init__(self, n_features, n_hidden, n_output):
- super(Net, self).__init__() # torch __init__ を継承します
- self.hidden = torch.nn.Linear(n_features, n_hidden) # 隠れ層の線形出力 self.predict = torch.nn.Linear(n_hidden, n_output) # 出力線形層
- def forward (self, x):
- x = F.relu(self.hidden(x)) # 活性化関数 x = self.predict(x) # 出力値
- xを返す
- net = Net(1, 10, 1) # 入力値、隠れ層 10、ニューロン 10、出力値 1 print(net) # 構築されたニューラル ネットワーク構造を出力
- plt.ion()
- plt.show()
- # トレーニングツール
- optimizer = torch.optim.SGD(net.parameters(), lr = 0.5) # ネットのすべての値を渡す、lrは学習率 loss_func = torch.nn.MSELoss() # 平均二乗誤差
- 印刷(net.parameters())
- tが範囲(100)の場合:
- prediction = net(x) #トレーニングデータxをネットに入力し、予測値を出力する loss = loss_func(prediction, y) #2つの間の誤差を計算する
- # 逆伝播
- オプティマイザ.zero_grad()
- 損失.後方()
- オプティマイザ.ステップ()
- t % 5 == 0の場合:
- plt.cla()
- plt.scatter(x.data.numpy(), y.data.numpy())
- plt.plot(x.data.numpy(), prediction.data.numpy(), "r-" , lw = 5)
- plt.text(0.5, 0, '損失=%.4f' % loss.data[0], fontdict={ 'サイズ' : 20, '色' : '赤' })
- plt.一時停止(0.1)
- plt.ioff()
- plt.show()
06 数学 微積分 1. 制限: 無限と無限小の秩序。 2. 微分積分: 派生語: 1) 導関数は曲線の傾きであり、曲線がどれだけ速く変化するかを反映します。 2) 2次導関数は傾きの変化速度を反映し、曲線の凸凹を示します。 テイラー級数近似 ニュートン法と勾配降下法。 3. ジェンセンの不等式: 凸関数;ジェンセンの不等式 確率論: 1. 積分学: ニュートン・ライプニッツの公式 2. 確率空間 ランダム変数と確率:確率密度関数の積分。条件付き確率;共役分布; 確率分布: 1) 2点分布/ベルヌーイ分布 2) 二項分布 3) ポアソン分布 4) 均一分布 5) 指数分布 6) 正規分布/ガウス分布 3. 大数の法則と中心極限 線形代数: 1) マトリックス 2) 線形回帰 |