SQLで文字列を置換する方法
C#、VB.NETでエクセル操作
#エクセルを操作
C#でエクセル操作をする.
開発環境は、Visual studio2017です。
エクセル操作のためのdllがあるんですが、
それはつかいませんでした。
今回は、NPOIというモジュール(?)を使います。
以下参考サイトです。
【C#】NPOIを使ってExcelファイルを作成・編集する - Qiita
Excelファイルを C# と VB.NET で読み込む "正しい" 方法 - Qiita
NPOIのインストール方法から掲載しています。
拡張子がxlsとxlsm両方に対応できているのがgood、
古いエクセル(EXCEL2013)しか対応していないPC用にPGを作成しようと思ったんですが、
Visual sturio2017からは対応のdll(Microsoft.Office.Interop.Excel)がインストールできなさそう。
調べてみたら、NPIOというものがあるぞということで使うことにしました
Sourcetree,Bitbucketの環境構築
ソースコードのver管理をどうする?
以下、Sourcetree、Bitbucketの環境構築および使い方についてのメモです。
参考サイトは以下です。
【連載Git入門 第2回】SourceTreeでGitを始めよう!まずは試しに使ってみよう! | naichilab - Android iOSアプリ開発メモ
ローカルリポジトリの作成
ソースコードの編集自体は、適当なIDEを使ってます。
pythonの編集の場合、僕はpycharmを使用しています。
pycharmでもgitの機能は使えるみたいですが、
Sourcetreeが使いやすいそうなので、そちらを使用することにしました。
以下、sourcetree使用の流れです。
まずは、pycharmで適当なプロジェクトを作成します。
プロジェクトは特定のフォルダ下に置かれます。
次にSourcetreeを立ち上げて、
「新規/ローカルリポジトリを作成」を選択します。
プロジェクトのパスを聞かれるので、
入力してあげるとローカルリポジトリが作成されます。
コミット、チェックアウト
ソースコードをpycharm上で編集します。
コミットしてあげると、それがブランチとして繋がります。
コミット履歴が羅列していますが、前のコミットを選択すると、
pycharm上のソースコードも、前のものに変わります(チェックアウト)。
詳細は参考サイトに書いてあります。
注意点として、前のコミットに戻した状態(チェックアウト)で新たにコミットすると、
以下のようになります。
最新版であるコミットの新1から、コミット古にチェックアウトします。
その状態で、新たにコミットすると、コミット新1は消えて、新2しか残りません。
これを防ぐには、チェックアウトしたときに、新2用のブランチを作成してからコミットすることです。
古→新1
↓
→→新2
新2しか残らない。
ブランチを切る、mergeする、
ブランチを切ることで、サブの枝を作ることができます。
メインの枝が安定verのPGだとすると、サブの枝は開発verの枝というイメージです。
詳細は参考サイトに書いてあります。
リモートリポジトリを作成する。リモートリポジトリからクローンを作成する。
まずはBitbucketにアカウントを作成します。
アカウトを作成したら、sourcetreeからリモートリポジトリを作成します。
まずは、メニューバーの「Sorcetree/環境設定/アカウント/追加」で先ほど作成したBitbucketのアカウントを追加します。
通信方法がsshとhttpsと設定できますが、とりあえずhttpsにしました。
アカウントを追加したら、
「新規/リモートリポジトリを作成」でリモートリポジトリを作成できます。
このとき、下記のエラーがでました。
「Too many invalid password attempts.〜〜〜〜〜(以下省略)」
Bitbucketのサイトに、ログインしなおしたら解決できました。
また、リモートタブを選択すると(上図参照)、リモートリポジトリの一覧が表示されます。 ここから、ローカルリポジトリにクローンすることができます。
一人で開発する分にはこれくらい使いこなせれば良いかと思います。
また、以下別の参考サイトも書いておきます。
Gitのインストール【チュートリアル1 Gitの基本】 | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ
絶対できる!Source Treeの使い方を初心者向けに説明してみた! | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト
複数のグラフを一度に書く
seabornのグラフを一度に複数書く、
あるパラメータで層別して、複数のグラフを一度に描きたいです。 seabornのfacetgridを使います。 参考サイトは以下です。
Python でデータ可視化 - "Facet"で属性別グラフを一気に描く方法が便利すぎる - Qiita Python - seaborn.facetgridでの文字追加|teratail seaborn.FacetGrid — seaborn 0.9.0 documentation
以下コード
import numpy as np import seaborn as sns import matplotlib.pyplot as plt bins = np.arange(0, 65, 5) tips = sns.load_dataset("tips") #層別のパラメータが2種類ある場合は、col、rowで指定します。 #1種類の場合は、colのみで良いと思います。 g = sns.FacetGrid(tips, col="time", row="smoker") g = g.map(sns.distplot, "total_bill", bins=bins, color="r") #各gridに対する、axisを読んで、テキストを埋め込みます。平均値とかを記載したときに良いかと、 for i in range(2): for j in range(2): ax = g.facet_axis(i, j) ax.text(40,0.04,"hoge") plt.show()
sns.displot,sns.kdeplot でエラー(slice indices must be integers or None or have an __index__ method)
よくわからないエラーがでました。
statsmodelsを再インストールしたら治りました。
以下、参考サイト
https://qiita.com/currypurin/items/44ce22102af4eda45622
■
deming regression
回帰直線を引くときに、横軸にも誤差がある場合はdeming regressionという方法で 回帰直線をひく必要があります。 deming regressionとタイトルにありますが、 別名で直行回帰(Orthogonal distance regression)ともいうらしいです。
scipyにOrthogonal distance regressionが実装されていたのでそいつを活用、
以下参考サイト、 ・scipyの公式サイト https://docs.scipy.org/doc/scipy/reference/odr.html ・deming regressionの説明 産総研の方による説明です。 https://staff.aist.go.jp/t.ihara/deming0.html ・deming regression
import numpy as np from pandas import DataFrame from sklearn.datasets import load_boston from scipy.odr import Model, RealData, ODR import matplotlib.pyplot as plt from scipy.stats import linregress #%matplotlib inline #例によってボストンのデータを使います boston = load_boston() # 説明変数をDataFrameへ変換 df = DataFrame(boston.data, columns = boston.feature_names) #目的変数をデータフレームに追加 df['MEDV'] = np.array(boston.target) x = df["RM"].tolist() y = df["MEDV"].tolist() #deming regressionで使用する、関数を定義 def f(B, x): '''Linear function y = m*x + b''' # B is a vector of the parameters. # x is an array of the current x values. # x is in the same format as the x passed to Data or RealData. # # Return an array in the same format as y passed to Data or RealData. return B[0]*x + B[1] linear = Model(f) #scipyのlinregressで線形回帰、 ##odrする際の、初期値を決めるためです、 linreg = linregress(x, y) mod = Model(f) #生データの代入、sx,syは,目的変数、説明変数のばらつきの標準偏差です。 #odrメソッドの引数に、目的変数、説明変数のばらつき、初期値を入力します。 dat = RealData(x, y,sx=1,sy=1) od = ODR(dat, mod, beta0=linreg[0:2]) out = od.run() fig = plt.figure() subplot = fig.add_subplot(1,1,1) subplot.scatter(x,y) #linex = np.linspace(6.5,8,100) #liney = out.beta[0]*linex + out.beta[1] #subplot.plot(linex,liney) subplot.plot(out.xplus,out.y,color='red') #普通に線形回帰した場合の直線もひいてみます。 x_max = max(x)[f:id:satopoooon:20180326230958p:plain] x_min = min(x) linex = np.linspace(x_min,x_max,100) liney = linreg[0]*linex + linreg[1] subplot.plot(linex,liney,color='yellow') plt.show()
実行すると、こんな感じになります。
ファイルを読み込む際に空行を飛ばす
ファイルを読み込む
空行があるファイルを読み込むときに、
ちょっとつまずいたのでメモります。
まずファイルの読み方ですが、以下を参考に、、、
Python: テキストファイルの読み込み - read()、readlines()、readline()メソッド | Yukun's Blog
テキストファイルには、改行コードやら空白やら、タブ文字やらいろいろ混ざっているんですよね。
ファイルを読み込んで、リストに入れるときにその辺を削除したいです。
コードを書くと
f = open("読み込むファイルのパス","r") for i in f.readlines(): i=i.strip()#末尾の改行を除去、 i=i.split("\t")#tab区切りでリストを作成、ちなみに改行コードは\n if i == [''"]: pass else: text.append(i)
末尾の改行コードの除去や、タブ区切りをしたせいで、
リストの中身が、「\n」だったり「[""]」で判断しようと思いましたが、
今回はi==[""]が空行としました。
というよりも空行を前のコードで空リストとしてしまったらですが、
iがリストなのか、リストの中身なのか、で微妙に空行の表現を考える必要がありそう。
splitするときも、["a,b,c,d"]のリストにはsplitはできないけど、"a,b,c,d"文字列にはできるので・・・
リストなのか、リストの中身の文字列なのか、は意識しなきゃいけなさそう。
すごい駄文になった・・・